·

Análise de Sistemas ·

Linguagens de Programação

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Desafio Desafio Desafio de Laboratório II Nesta atividade estaremos focados em tarefas práticas de desenvolvimento onde teremos quatro objetivos bem definidos para a conclusão da atividade Esses objetivos estão classificados da seguinte forma A primeira etapa envolve a criação de um programa recursivo para simular um labirinto O labirinto é representado por uma estrutura de caracteres onde X indica obstrução e espaços indicam passagens possíveis A posição de destino é marcada como D Na segunda etapa exploraremos métodos de Pesquisa e Ordenação aplicandoos a uma classe personalizada para ordenação A compreensão da estabilidade em algoritmos de ordenação é fundamental A terceira etapa requer a implementação de métodos utilizando Estruturas de Dados Estáticas Por fim na última etapa é necessário criar uma pilha e uma fila dinâmica utilizando as estruturas abordadas nas aulas Atenção Para este desenvolvimento 4 etapas deverão ser concluídas conforme avançarmos no conteúdo A primeira etapa será liberada no terceiro módulo semanas 5 e 6 A partir daí a cada 2 semanas uma etapa do desafio será liberada Você deve implementar o sistema solicitado DE ACORDO COM O QUE FOR SOLICITADO NAS ETAPAS não sendo permitida a utilização de estruturas diferentes do que as solicitadas Assim sendo a entrega deve ser realizada apenas após a última etapa do Desafio O Desafio vale 60pts do Grau A A nota das etapas será conforme segue nota pelo desenvolvimento realizado conforme solicitado e de maneira correta Etapa 1 10pts Etapa 2 10pts Etapa 3 10pt Etapa 4 20pt Vídeo 10pt é obrigatório a entrega de cada etapa individualmente para sua avaliação Quando você acabar de implementar o que é proposto no desafio você deve postar a pasta compactada zip do projeto para avaliação do professor Boa sorte Check List de Envio Antes de enviar siga o seguinte check list O envio está conforme o enunciado As classes construídas para a tarefa estão em um único diretório Removi todos os arquivos class do diretório O diretório está seguindo este padrão de nomenclatura GR9600400000Nomecompletoaluno Preparação do vídeo Preparar o roteiro do vídeo Gravar o vídeo na plataforma escolhidaNão ultrapassar de 4 minutos Preparação para o envio da tarefa Conferir o nome do arquivo zipado Adicionar o arquivo zip no desafio Disponibilizar o link do vídeo no campo de texto da tarefa Verifique todos os arquivos que serao entregues Nao serao aceitos arquivos complementares apos o prazo final da entrega O desafio e composto pela apresentacao e codigo Desta forma nao serao avaliadas tarefas enviadas sem o video Observe o tempo do vídeo Não ultrapasse de 4 min NomeAlunoGRXXXXXXX Por favor renomeie a pasta com o seu nome e insira corretamente o número da sua turma Certifiquese de colocar cada etapa na pasta correspondente Após concluir compacte os arquivos em formato ZIP para envio Vídeo Arquivo mp3 mp4 ou Link de acesso Etapa 1 Labirinto Etapa 2 Pesquisa e Ordenação Etapa 3 Listas Estáticas Etapa 4 Lista Dinâmica É responsabilidade do aluno conceder acesso ao professor na plataforma para que ele possa visualizar o vídeo Orientações para o vídeo Apresentação do vídeo deverá ser sobre a Etapa 2 as demais não precisam ser apresentadas no vídeo A gravação do vídeo deve ser feita no formato screencast httpsptwikipediaorgwikiScreencast Para gravar você pode utilizar qualquer tipo de ferramenta Alguns exemplos Teams Crie uma reunião com você apenas compartilhe sua tela e faça a gravação assim como fazemos nas aulas Mais em Gravar uma reunião no Teams ScreencastOMatic Possui a ferramenta de screen recorder gratuita httpsscreencastomaticcom Kazam Screencaster Ferramenta open source para screencast httpslaunchpadnetkazam Loom Ferramenta web e desktop com uma versão free para screencast httpswwwloomcom Disponibilize o vídeo no seu OneDrive conta da Unisinos e crie um link compartilhável Certifiquese de que este link seja acessível por qualquer pessoa Para testar após gerar o link abrao em uma aba anônima do navegador Ele deve funcionar Mais em Criar um link compartilhável Antes de iniciar a gravação crie um roteiro para seguir e não esquecer de falar sobre algum ponto Comece se apresentando Prefira explicar com mais detalhes os métodos que possuem regras de negócios relevantes Você deve no vídeo apresentar brevemente o código que foi feito e executandoo Certifiquese que a imagem e sua voz estejam nítidas O desafio é composto pela apresentação e código Desta forma não serão avaliadas tarefas enviadas sem o vídeo Etapa 1 Etapa 1 Labirinto Arrays bidimensionais arquivos e recursão Na primeira etapa do Desafio do Laboratório II você deve criar um programa que simule um labirinto No nosso sistema o labirinto será uma determinada estrutura composta por caracteres No labirinto posições com X indicam que não é possível passar enquanto posições com espaço indicam que é possível a passagem O local de destino está marcado no labirinto com a letra D Um exemplo de labirinto pode ser visto abaixo O labirinto será um array bidimensional de caracteres Para a criação do labirinto seu programa deve ler um arquivo com extensão txt que contém os caracteres correspondentes ao labirinto Após ler o arquivo você deve passar seu conteúdo para um array bidimensional de caracteres Desta forma o local de entrada no labirinto sempre será a posição 00 do array Um exemplo de array bidimensional de caracteres que representaria um labirinto pode ser visto no código abaixo Neste sentido nesta etapa você deve criar uma classe Labirinto que possui como atributo a estrutura necessária para o armazenamento do labirinto na classe Labirinto crie um método chamado criaLabirinto que recebe uma String filename que corresponde a um arquivo que contém a estrutura do labirinto conforme supracitado Este método abre o arquivo filename para leitura e preenche o labirinto ainda na classe Labirinto você deve criar um método para andar no labirinto Este método deve retornar verdadeiro caso haja pelo menos uma saída para este labirinto ou falso caso contrário Entretanto este método deve ser recursivo com os métodos público e privado Seu método público não recebe parâmetros e deve ser nomeado percorreLabirinto Etapa 2 Etapa 2 Pesquisa e Ordenação Na segunda etapa exercitaremos os métodos de Pesquisa e Ordenação utilizando os métodos estudados para realizar uma ordenação de uma classe criada por você Para este desafio é imprescindível o entendimento da função da estabilidade de algoritmos de ordenação Crie uma classe Candidato que possui um atributo nome que armazena apenas o primeiro nome um partido String e um inteiro chamado intencoesVotos que representa a quantidade de intenções de voto obtidas na pesquisa Crie os métodos de acesso dos atributos e um construtor que recebe informações para inicializar todos os atributos Crie também o método toString Crie uma classe chamada PrincipalCandidatos Nesta classe crie o método main No main crie um array de Candidato com tamanho aleatório entre 1 e 100 Preencha este array com objetos do tipo Candidato com informações aleatórias utilize sorteios para as informações Obs é importante que exista a possibilidade de ter candidatos com o mesmo nome e também diferentes candidatos do mesmo partido Depois disso imprima as informações dos candidatos criados Entretanto quando você imprimir as informações a impressão deve sair ordenada pelo nome dos candidatos Caso haja candidatos com o mesmo nome estes candidatos de nome repetido devem aparecer ordenados também pela quantidade de intenções de voto Caso estes candidatos de mesmo nome possuam a mesma quantidade de intenção de voto eles devem estar ordenados por partido Para isso você deve adaptar os métodos de ordenação estudados de maneira que recebam um array de Candidato e ordenem este array de acordo com um determinado atributo da classe Candidato Desta forma você deve criar 3 métodos de ordenação um que ordena o array pelo nome dos candidatos um que ordena por intenção de votos do maior número de votos para o menor e outro que ordena o array pelo partido dos candidatos A ordenação final será dada pela chamada dos métodos de ordenação na ordem correta Utilize EXCLUSIVAMENTE os métodos de ordenação Inserção Direta e Seleção Direta com as alterações necessárias para realizar a ordenação do array de Candidato Assim sendo os métodos devem receber um array de Candidato e ordenar este array por algum dos critérios Os métodos de ordenação devem ser estáticos para poderem ser chamados no main e devem estar na classe PrincipalCandidatos O nome dos métodos deve seguir o seguinte ordenaCandidatosPorNome ordenaCandidatosPorVotos ordenaCandidatosPorPartido Na classe PrincipalCandidatos crie um método estático chamado pesquisaBinariaCandidatos Este método é uma versão do método de Pesquisa Binária visto em aula que deve ser capaz de pesquisar um determinado Candidato pelo seu primeiro nome O método deve receber um array unidimensional de Candidato e um nome de candidato a ser procurado O método deve retornar a posição na qual aquele Candidato se encontra ou 1 caso não exista candidato com aquele nome no array caso haja mais de um candidato com o mesmo nome o método deve retornar o primeiro que for encontrado Depois disso teste seu método com o array ordenado pelo seu método de ordenação do Exercício 2 e imprima as informações do Candidato que possui o nome que o usuário informar pelo teclado utilizando o seu método pesquisaBinariaCandidatos Etapa 3 Etapa 3 Listas Estáticas Na terceira etapa o desafio do módulo solicita que você implemente alguns métodos utilizando Estruturas de Dados Estáticas Na classe que representa uma lista estática classe criada em aula implemente um método RECURSIVO que recebe um elemento por parâmetro e retorna a quantidade de vezes que este elemento aparece na lista Você deve fazer os métodos público e privado Você deve utilizar a seguinte assinatura para o método público utilizando exceções na declaração caso seja necessário public int contaElementosE el Implemente em uma classe chamada Etapa3 o seguinte método public boolean checkBracketsStackCharacter s1 Esse método verifica se uma expressão matemática tem os parênteses agrupados de forma correta isto é 1 se o número de parênteses à esquerda e à direita é igual e 2 se todo parêntese aberto é seguido posteriormente por um fechamento de parêntese Por exemplo as expressões AB e AB violam a regra 1 e as expressões ABC e ABCD violam a regra 2 Um exemplo de expressão correta seria ABCD O método recebe como parâmetro uma pilha que contém os caracteres de uma expressão matemática O método retorna verdadeiro se os parênteses da expressão estão agrupados de forma correta ou falso caso contrário Uma pilha armazena apenas uma única expressão As expressões são armazenadas na pilha da direta para a esquerda ou seja os caracteres da direita ou seja do final da expressão são empilhados primeiro A imagem abaixo ilustra duas possíveis pilhas de entrada A pilha da esquerda armazena a expressão AB enquanto a pilha da direita armazena a expressão AB Etapa 4 Etapa 4 Lista Dinâmica De acordo com o que estudamos você deve implementar uma pilha e uma fila dinâmica Para isto você deve criar um projeto no Eclipse ou IDE de sua preferência e colocar suas implementações neste projeto Utilizando as interfaces Stack e Queue e a classe Node ambas vistas em aula faça o que se pede A partir da classe Node e da interface Stack crie uma classe chamada LinkedStack que implementa Stack ou seja é uma pilha porém encadeada A partir da classe Node e da interface Queue crie uma classe chamada LinkedQueue que implementa Queue ou seja é uma fila porém encadeada Atente para o fato de que você deve criar as classes solicitadas utilizando a classe Node que vimos em aula não a classe DNode Além disto a classe Node não pode ser alterada para ser utilizada neste desafio