Buscar

ATIVIDADE PRÁTICA -Estrutura de dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais