Baixe o app para aproveitar ainda mais
Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER ESCOLA SUPERIOR POLITÉCNICA BACHARELADO EM ENGENHARIA DA COMPUTAÇÃO DISCIPLINA DE ESTRUTURA DE DADOS ATIVIDADE PRÁTICA ESTRUTURA DE DADOS PROFESSOR: VINICIUS POZZOBON BORIN ESTRELA – RS 2020 1 PLAYLIST Faça um algoritmo em linguagem C que emule as características de um player de músicas sendo executado em modo texto, via prompt de comando. 1. Deve-se criar uma playlist das músicas utilizando uma lista encadeada. A lista encadeada poderá ser simples ou dupla, circular ou não circular. Fica a critério do aluno decidir. 2. Deve-se armazenar o nome de cada música, do artista/banda e a duração da faixa. Para o armazenamento utilize uma estrutura heterogênea de dados. 3. Para inserção dos dados, você pode criar uma leitura dos dados através de um menu na tela ou já deixá-los armazenados em um arquivo texto no seu computador e só carregar este arquivo ao executar o programa. Ou ambas soluções. Decida também como você irá implementar a inserção (no início, no fim ou no meio da lista encadeada); 4. Deve existir um menu na tela. Este menu deve permitir a inserção de novas músicas (caso optado pela inserção manual de dados), deve ter a opção de listar todas as músicas da playlist (listagem de uma lista encadeada) na tela e encerrar o programa; Abaixo, o meu algoritmo para a resolução do exercício 1. #include<stdio.h> #include<stdlib.h> #include<string.h> int menu(); void Listar(); void InserirInicio(char musica[], char banda[], float tempo); void InserirFim(char musica[], char banda[], float tempo); struct NovaMusica { //Declaração da Struct para o armazenamento dos dados char musica[51]; char banda[21]; float tempo; struct NovaMusica* prox; } *Head; int main() { int op, c, loc; float tempo; char musica[51], banda[21]; Head = NULL; while (1) { op = menu(); switch (op) { case 1: printf("Nome da Musica\n"); gets_s(musica); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. 1 printf("Banda/Artista\n"); gets_s(banda); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. printf("Tempo de duracao\n"); scanf_s("%f", &tempo); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. printf("\nEscolha onde deseja inserir\n\n"); printf("1.Inserir no INICIO da Playlist\n"); printf("2.Inserir no FINAL da Playlist\n"); printf("\nDigite a opcao desejada: "); scanf_s("%d", &loc); while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. if (loc == 1) { InserirInicio(musica, banda, tempo); // Chamada da função para inserir no Inicio printf("\nInserido com sucesso no INICIO da Playlist\n"); } else { if (loc == 2) { InserirFim(musica, banda, tempo);; //Chamada para a função inserir no Fim printf("\nInserido com sucesso no FINAL da Playlist\n"); } else { printf("\nDigitou uma Opcao INVALIVA\n"); } } printf("\n"); system("pause"); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. break; case 2: Listar(); //Chamada para a função mostrar Playlist break; case 3: return 0; default: printf("Invalido\n"); } } return 0; } int menu() { //Funcao menu int op, c; system("Cls"); printf("\n\n======== MENU da Playlist ==========\n"); printf("\n= 1.Inserir Musica na Playlist =\n"); printf("= 2.Mostrar Playlist =\n"); printf("= 3.Sair =\n\n"); printf("Digite sua escolha: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. system("Cls"); return op; } void Listar() //Função para mostrar playlist { char nome[7] = "MUSICA";//criei variaveis para conseguir enquadrar a saida char artista[8] = "BANDA"; char duracao[9] = "DURACAO"; NovaMusica* ElementoVarredura; ElementoVarredura = (struct NovaMusica*)malloc(sizeof(struct NovaMusica)); ElementoVarredura = Head; if (ElementoVarredura == NULL) { printf("Nao ha musicas para na playlist\n"); system("pause"); return; } printf("%-50s",nome); //forma que encontrei para formatar a saida printf("%-20s",artista); printf("%-10s",duracao); printf("\n"); while (ElementoVarredura != NULL) { //varrendo toda a estrutura e imprimindo na tela printf("%-50s", ElementoVarredura->musica); printf("%-20s", ElementoVarredura->banda); printf("%.2f ", ElementoVarredura->tempo); ElementoVarredura = ElementoVarredura->prox; printf("\n"); } printf("\n"); system("pause"); return; } void InserirInicio(char musica[], char banda[], float tempo) //Função para inserir no inicio { NovaMusica* NovoElemento; NovoElemento = (struct NovaMusica*)malloc(sizeof(struct NovaMusica)); //alocando na memoria strcpy_s(NovoElemento->musica, musica); strcpy_s(NovoElemento->banda, banda); NovoElemento->tempo = tempo; if (Head == NULL) //verificando se a playlist esta vazia { Head = NovoElemento; Head->prox = NULL; } else //inserindo antes do head { NovoElemento->prox = Head; Head = NovoElemento; } } void InserirFim(char musica[], char banda[], float tempo) //Função para inserir no fim { NovaMusica* NovoElemento; NovoElemento = (struct NovaMusica*)malloc(sizeof(struct NovaMusica)); //alocando na memoria NovaMusica* ElementoVarredura; ElementoVarredura = (struct NovaMusica*)malloc(sizeof(struct NovaMusica)); strcpy_s(NovoElemento->musica, musica); strcpy_s(NovoElemento->banda, banda); NovoElemento->tempo = tempo; if (Head == NULL) //vefificando se a lista esta vazia { Head = NovoElemento; Head->prox = NULL; } else //inserindo apos o ultimo elemento encontrado { ElementoVarredura = Head; while (ElementoVarredura->prox != NULL) ElementoVarredura = ElementoVarredura->prox; ElementoVarredura->prox = NovoElemento; NovoElemento->prox = NULL; } } Imagens do programa funcionando: Imagem 1: Menu da playlist Imagem 2: Inserindo músicas. Imagem 3: Listagem das músicas. 2 BUSCA SEQUENCIAL Faça um algoritmo em linguagem C que realiza a busca de um aluno da UNINTER no AVA. A busca deve ser realizada utilizando uma estrutura de dados bastante eficiente para esta tarefa. Defina a estrutura de dados que você irá utilizar para fazer esta implementação e JUSTIFI- QUE em texto porque você escolheu ela; 1. Deve-se armazenar o nome do aluno, seu e-mail e seu RU. Para o armazenamento utilize uma estrutura heterogênea de dados. 2. Não é necessário fazer a leitura dos dados dos dados dos alunos manualmente. Você já pode deixar pré-cadastrado os dados no seu código. Cadastre pelo menos uns 10 contatos de alunos na sua estrutura de dados. Um dos contatos deverá ser o seu próprio nome e o seu RU da UNINTER; 3. Em um menu na tela, peça para o usuário digitar um RU. O programa deverá realizar a busca por este RU na estrutura de dados e, caso localize o RU, deverá mostrar o nome correspondente do aluno e o e-mail deste contato. Caso não localize, uma mensagem de erro deve ser apresentada. 4. Para testar o programa, teste a busca com o seu RU e coloque a captura de dela. Abaixo está o meu algoritmo para a resolução deste exercício; Justificativa: Oalgoritmo escolhido para a implementação deste problema foi o algoritmo de BUSCA SEQUÊNCIAL, pois entendo que é um algoritmo simples para implementação e eficaz no que é proposto, sabendo que não tem o melhor desempenho quando se trata de uma lista de registros muito grande, mas, como os dados podem ser incluídos de forma desordenada, e não foi implementado um método para ordenar os dados, a BUSCA SEQUÊNCIAL foi a forma escolhida. Abaixo, o meu algoritmo para a resolução do exercício 2. #include<stdio.h> #include<stdlib.h> #include<string.h> struct NovoCadastro { //Declaração da Struct para o armazenamento dos dados char nome[51]; char email[51]; int ru; struct NovoCadastro* prox; } *Head; int menu(); void Inserir(char nome[], char email[], int ru); void BuscaSequencial(int ru); int main() { int op, c, ru; char nome[51]; char email[51]; Head = NULL; while (1) { op = menu(); switch (op) { case 1: printf("Digite o RU: \n"); scanf_s("%i", &ru); while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. printf("Nome do aluno\n"); gets_s(nome); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. printf("Digite o E-Mail do aluno\n"); gets_s(email); //while ((c = getchar()) != '\n' && c != EOF) {} // limpeza do buffer do teclado. Inserir(nome, email, ru); break; case 2: printf("Digite o RU que deseja buscar: \n"); scanf_s("%i", &ru); BuscaSequencial(ru); break; case 3: return 0; default: printf("Invalido\n"); } } return(0); } int menu() { //Funcao menu int op, c; system("Cls"); printf("\n\n ======== MENU ==========\n"); printf("\n= 1.Inserir dados no sistema =\n"); printf("= 2.Pesquisar pelo RU =\n"); printf("= 3.Sair =\n\n"); printf("Digite sua escolha: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. system("Cls"); return op; } void Inserir(char nome[], char email[], int ru) //Função para inserir aluno { NovoCadastro* NovoElemento; NovoElemento = (struct NovoCadastro*)malloc(sizeof(struct NovoCadastro)); //alocando na memoria strcpy_s(NovoElemento->nome, nome); strcpy_s(NovoElemento- >email, email); NovoElemento->ru = ru; if (Head == NULL) // se o head for nulo então é o primeiro registro { Head = NovoElemento; Head->prox = NULL; } else //inserindo antes do head { NovoElemento->prox = Head; Head = NovoElemento; } printf("\nInserido com sucesso !!\n"); system("pause"); } void BuscaSequencial(int ru) // método de busca sequencial { bool flag = false; NovoCadastro* ElementoVarredura; ElementoVarredura = (struct NovoCadastro*)malloc(sizeof(struct NovoCadastro)); //criando elemento de varredura ElementoVarredura = Head; if (ElementoVarredura == NULL) { printf("Nao ha dados cadastrados!\n"); system("pause"); return; } if (ElementoVarredura->prox == NULL ) { // verifica se o primeiro elemento é o buscado if (ElementoVarredura->ru == ru) { printf("\nO Ru %i foi encontrado \n", ElementoVarredura->ru); printf("\nCorresponde ao ALUNO: %s \n", ElementoVarredura->nome); printf("\nO e-mail deste aluno e: %s \n\n", ElementoVarredura->email); flag = true; } } else { while (ElementoVarredura->prox != NULL && flag == false) { //varre a lista até encontrar o ru ou até o fim. ElementoVarredura = ElementoVarredura->prox; if (ElementoVarredura->ru == ru) { printf("\nO Ru %i foi encontrado \n", ElementoVarredura->ru); printf("\nCorresponde ao ALUNO: %s \n", ElementoVarredura->nome); printf("\nO e-mail deste aluno e: %s \n\n", ElementoVarredura- >email); flag = true; } } } if(flag == false) { //se não for encontrado o RU buscado printf("Este Ru %i, nao foi encontrado nos registros \n", ru); } system("pause"); } Imagens do programa funcionando: Imagem 4: Menu do programa Imagem 5: Inserção dos dados Imagem 6: Pesquisa por RU
Compartilhar