A maior rede de estudos do Brasil

Grátis
7 pág.
ATIVIDADE PRÁTICA Estrutura de Dados

Pré-visualização | Página 1 de 1

· EXERCÍCIO 1
ENUNCIADO:
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; 
Utilize como base o código de listas da AULA PRÁTICA 2 da disciplina. Código está disponível no Github do professor. O link está na aula prática 2;. 
Solução do aluno:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct ListaArtista {
	char musica[50], artista[50];
	float duracao;
	struct ListaArtista* prox;
};	struct ListaArtista* inicio, * meio, * fim, * aux;
void inserirMusica() {
	int c;
	struct ListaArtista* novo;
	novo = (struct ListaArtista*)malloc(sizeof(struct ListaArtista));
	printf("\nSelecione a musica");
	fgets(novo->musica, 49, stdin);
	printf("De qual artista? ");
	fgets(novo->artista, 49, stdin);
	printf("Duracao da musica? ");
	scanf_s("%f", &novo->duracao);
	fflush(stdin); // Limpar buffer do teclado
	novo->prox = NULL;
	if (inicio == NULL) 		//A Fila esta vazia e iremos inserir o primeiro elemento
	{
		inicio = fim = novo;
	}
	else {
		fim->prox = novo;
		fim = novo;
	}
}
void LimparLista() {
	char ch;
	if (inicio == NULL) {
		printf("\nLista\n");
	}
	else {
		printf("s/n ");
		ch = getchar();
		if (ch == 's' || ch == 'S') {
			while (inicio != NULL) {
				aux = inicio;
				inicio = inicio->prox;
				free(aux); // Limpa o espaco da memoria
			}
			printf("\nLista vazia\n");
		}
	}
}
void VizualizarLista() {
	aux = inicio;
	if (inicio == NULL)
	{
		printf("\n Lista vazia!");
	}
	else {
		while (aux != NULL) {
			printf("musica:%s", aux->musica);
			printf("artista: %s", aux->artista);
			printf("duracao: %f\n\n", aux->duracao);
			aux = aux->prox;
		}
	}
	printf("\n");
}
void ProcurarMusica()
{
	aux = inicio;
	if (inicio == NULL)
	{
		printf("\nLista vazia");
	}
	else
	{
		char musica[50];
		printf("Digite a faixa: ");
		scanf_s("%s", &aux);
		while (aux != NULL)
		{
			if (musica == aux->musica) {
				printf("\n Musica %s encontrada\n", aux->musica);
				printf("musica %s", aux->musica);
				printf("cantor:%s\n", aux->artista);
				return;
			}
			else {
				aux = aux->prox;
			}
		}
		if (aux == NULL) {
			printf("\nMusica %s não encontrada!", musica);
		}
	}
	printf("\n");
}
int main() {
	setlocale(LC_ALL, "");
	int opc, c;
	do {
		printf("1.Inserir música\n");
		printf("2.Procuar música\n");
		printf("3.Vizualizar lista\n");
		printf("4.Limpar lista\n");
		printf("5.Sair\n");
		printf("Escolha o opção!");
		scanf_s("%d", &opc);
		fflush(stdin);
		switch (opc) {
		case 1:
			inserirMusica();
			system("pause");
			break;
		case 2:
			ProcurarMusica();
			system("pause");
			break;
		case 3:
			VizualizarLista();
			system("pause");
			break;
		case 4:
			LimparLista();
			system("pause");
			break;
		case 5:
			exit;
			break;
		default:
			printf("Opcão incorreta!");
			break;
		}
		system("cls");
	} while (opc != 5);
	return 0;
}
· EXERCÍCIO 2
ENUNCIADO:
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 JUSTIFIQUE 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. 
Solução do aluno:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>
typedef struct aluno { // Cria uma STRUCT para armazenar os dados do alunos
	char nome[100];
	char email[100];
	int ru;
	struct aluno* prox;
} troca;
troca* inicia = NULL;
int opc;
void cadas();// chamada das funcoes
void pesqui();
int main(int argc, char* argv[]) {
	setlocale(LC_ALL, "Portuguese");
	do { // para o painel aparece na tela com switch estruturado com comando a escolha
		system("cls");
		printf("\||=======================||\n");
		printf("\|| Escolha uma opção || \n");
		printf("\|| 1. Cadastrar Aluno: || \n");
		printf("\|| 2. Pesquisar Aluno: || \n");
		printf("\||=======================|| \n");
		
		scanf_s("%d", &opc);
		
		switch (opc) {
		case 1:
			cadas();// chamada das funcao cadastro
			break;
		case 2:
			pesqui();// chamada das funcao pesquisa
			break;
		default:
			printf("\nDigite outra opção.\n");
			break;
		}
	} while (opc != 3);
}
void liberarmemoria() //Função liberamemoria
{
	troca* prox_troca;
	while (inicia != NULL) {
		prox_troca = inicia;
		inicia = prox_troca->prox;
		free(prox_troca);
	}
}
void cadas() { // Função cadastro
	int conti;
	troca* prox_troca;
	if (inicia == NULL)
	{
		inicia = (troca*)malloc(sizeof(troca));
		inicia->prox = NULL;
		if (inicia == NULL) exit(1);
	}
	prox_troca = inicia;
	while (1) { // Lista os usuarios cadastrados.
		printf("RU: \n");
		scanf_s("%d", &prox_troca->ru);
		printf("\Digite o Nome: \n");
		scanf_s("%s", &prox_troca->nome, 100);
		printf("\Digite o email:\n");
		scanf_s("%s", &prox_troca->email, 100);
		printf("\Novo Cadastro?(1)SIM e (0)NÁO: ");
		scanf_s("\n %d", &conti);
		if (conti == 0) break;
		prox_troca->prox = (troca*)malloc(sizeof(troca));
		prox_troca = prox_troca->prox;
		prox_troca->prox = NULL;
	}
	printf("\n");
}
void pesqui() { //Função pesquisa
	int rux;
	char nomeax[100];
	troca* prox_troca;
	do {
		printf("\nDigite seus dados para pesquisa: \n1 RU: \n2 Nome:\n0 para sair\n");
		scanf_s("%d", &opc);
		if (opc == 0) break;
		prox_troca = inicia;
		switch (opc) {
		case 1:
			printf("\nDigite o RU do Aluno:\n");
			scanf_s("%d", &rux);
			while (prox_troca != NULL) {
				if (prox_troca->ru == rux)
				{
					printf("\nRu:%d\nNome:%s\nemail:%s\n", prox_troca->ru, prox_troca->nome, prox_troca->email);
					break;
				}
				prox_troca = prox_troca->prox;
			}
			break;
		case 2:
			printf("\nDigite o nome do Aluno:\n");
			scanf_s("%s", nomeax, 100);
			while (prox_troca != NULL) {
				if (strcmp(prox_troca->nome, nomeax) == 0)
				{
					printf("\nru:%d\nNome:%s\nemail:%s\n", prox_troca->ru, prox_troca->nome, prox_troca->email);
					break;
				}
				prox_troca = prox_troca->prox;
			}
			break;
		default:
			printf("\nDigite outra opçâo.\n");
			break;
		}
	} while (1);
}