Baixe o app para aproveitar ainda mais
Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER ESCOLA SUPERIOR POLITÉCNICA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURA DE DADOS ATIVIDADE PRÁTICA NOME ALUNO: GABRIEL PEREIRA DA FONSECA – RU: 3356131 NOME PROFESSOR: VINICIUS POZZOBON BORIN CAXIAS DO SUL - RS ANO DO PROJETO 2021 EXERCÍCIO 1 #include<stdio.h> #include<stdlib.h> //adição das bibliotecas #include <string.h> #define _CRT_SECURE_NO_WARNINGS //declaração de todas as funções int menu(); void adicionarMusica(char t[40], char a[40], char al[40], char d[40]); void imprimePlaylist(); //struct de dados da playlist struct playlist { char titulo[40]; char artista[40]; char duracao[40]; char album[40]; struct playlist *prox; } *Head; int main() { //declaração das variáveis, opção para escolha do menu e c para limpeza de buffer int opcao, c; char t[40], a[40], al[40], d[40]; // Head nulo Head = NULL; //Estrutura de repetição, executando até o usuário selecionar a opção de saída while (1) { //variável opcao referencia a função menu opcao = menu(); // estrutura condicional para a variável opcao switch (opcao) { //caso digitado 1, inicia a inserção de dados na playlist case 1: printf("Digite o titulo da musica: "); fgets(t, 40, stdin); while ((c = getchar()) != '\n' && c != EOF) {} printf("Digite o nome do artista: "); fgets(a, 40, stdin); while ((c = getchar()) != '\n' && c != EOF) {} printf("Digite o album: "); fgets(al, 40, stdin); while ((c = getchar()) != '\n' && c != EOF) {} printf("Digite a duracao da faixa: "); fgets(d, 40, stdin); adicionarMusica(t, a, al, d); break; //caso selecionado a opcao 2, imprime a playlist case 2: printf("Playlist: \n"); imprimePlaylist(); break; // opcao de encerramento do programa case 3: return 0; break; // caso o usuário digite uma opção inválida default: printf("Opcao Invalida!\n"); } } } // definição da função menu int menu() { int opcao, c; //limpeza do promt system("Cls"); printf("=============================================================\n"); printf("GABE MEDIA PLAYER\n"); printf("=============================================================\n"); printf("Menu:\n"); printf("1 - Adicionar Musica\n"); printf("2 - Listar Playlist\n"); printf("3 - Sair\n"); printf("Digite a opcao desejada: "); scanf_s("%i", &opcao); //limpeza de buffer while ((c = getchar()) != '\n' && c != EOF) {} system("Cls"); return opcao; } // funçao para adicionar musicas, com os parâmetros definidos void adicionarMusica(char t[40], char a[40], char al[40], char d[40]) { //criado novo elemento do tipo ponteiro para a struct playlist struct playlist *nova; //alocado espaço na memória para o novo elemento nova = (struct playlist*)malloc(sizeof(struct playlist)); //realizado a cópia das informações contidas nas variaveis e direcionadas para seus respectivos //dados na struct strcpy_s(nova->titulo, 40, t); strcpy_s(nova->artista, 40, a); strcpy_s(nova->album, 40, al); strcpy_s(nova->duracao, 40, d); //estrutura condicional para adicionar os elementos sempre no inicio da lista if (Head == NULL) { Head = nova; Head->prox = NULL; } else { nova->prox = Head; Head = nova; } printf("Musica adicionada com sucesso!\n"); } //definido a função para imprimir a playlist void imprimePlaylist() { struct playlist *ElementoVarredura; ElementoVarredura = (struct playlist*)malloc(sizeof(struct playlist)); ElementoVarredura = Head; if (ElementoVarredura == NULL) { return; } while (ElementoVarredura != NULL) { printf("Titulo: %s\n", ElementoVarredura->titulo); printf("Artista: %s\n", ElementoVarredura->artista); printf("Duracao: %s\n", ElementoVarredura->duracao); printf("Album: %s\n", ElementoVarredura->album); ElementoVarredura = ElementoVarredura->prox; } printf("\n"); system("pause"); return; } EXERCÍCIO 2 #include <stdlib.h> // adição das bibliotecas #include <stdio.h> #include <locale.h> #include <string.h> void inicializarTabela(); // função de espalhamento (resto da divisão do numeroRU por M). Inicializa a tabela com o valor -1. void inserir(); // função para inserir um aluno na tabela. void listarTabela(); //funcao para listar todos os alunos da tabela. int criarCodigoHash(int numeroRU); // função para gerar um código hash para cada elemento da tabela. #define M 11 // valor constante chamado "M" para representar o tamanho da tabela // estrutura dadosAluno com nome, matrícula e email typedef struct { int ruAluno; char nome[50]; char email[50]; }dadosAluno; // tabela hash do tipo dadosAluno dadosAluno tabelaHash[M]; // função para ler e retornar os dados do aluno dadosAluno lerdadosAluno() { dadosAluno Aluno; printf("Digite o RU do aluno:\n"); scanf_s("%d", &Aluno.ruAluno); scanf_s("%*c"); printf("Digite o nome do Aluno:\n"); fgets(Aluno.nome, 50 - 1, stdin); printf("Digite o e-mail do Aluno:\n"); fgets(Aluno.email, 50 - 1, stdin); printf("\nDados inseridos com sucesso!\n"); system("pause"); return Aluno; } // definida a função para a busca dos alunos dadosAluno* procurar(int numeroRU) { int indice = criarCodigoHash(numeroRU); while (tabelaHash[indice].ruAluno != -1) { if (tabelaHash[indice].ruAluno == numeroRU) { return &tabelaHash[indice]; } else { indice = criarCodigoHash(indice + 1); } } return NULL; } //função principal int main() { setlocale(LC_ALL, "Portuguese"); // prepara o código para portugues BR. int opcao, numeroRU; dadosAluno* Aluno; // inicializa a tabela com os índices para cada aluno inicializarTabela(); // inicializa a tabela com os índices para cada aluno. // menu de opções do { system("cls"); printf("SISTEMA DE CADASTRO DE ALUNOS UNINTER\n\n"); printf("\tMENU PRINCIPAL\n\n"); printf("(1) - Inserir novo aluno\n"); printf("(2) - Procurar aluno por RU\n"); printf("(3) - Listar todos os alunos\n"); printf("(4) - Sair\n\n"); printf("Digite a opção:\n"); scanf_s("%d", &opcao); switch (opcao) { case 1: system("cls"); printf("SISTEMA DE CADASTRO DE ALUNOS UNINTER\n\n"); printf(" CADASTRO DE ALUNO\n\n"); // chamada da função de inserção de dados do aluno inserir(); break; case 2: system("cls"); printf("SISTEMA DE CADASTRO DE ALUNOS UNINTER\n\n"); printf("\tMENU DE BUSCA\n\n"); printf("Digite o RU do aluno:\n"); scanf_s("%d", &numeroRU); / / chama a função para procurar o ru, usando como parâmetro o ru informado. Aluno = procurar(numeroRU); if (Aluno) { printf("\nDados encontrados!\n"); printf("\nRU:\t%d\n", Aluno->ruAluno); printf("Nome:\t%s", Aluno->nome); printf("E-mail:\t%s", Aluno->email); printf("\n"); system("pause"); } else { printf("\nRU nao encontrado!\n"); system("pause"); } break; case 3: listarTabela(); // chama a função para listagem dos alunos cadastrados. break; case 4: system("cls"); // encerra o código. printf("SAINDO!\n\n"); break; default: printf("Opção inválida!\n"); } } while (opcao != 4); // fica no menu até que o usuário escolha sair return 0; } // função de espalhamento (resto da divisão do numeroRU por M). Inicializa a tabela com o valor -1. void inicializarTabela() { int i; for (i = 0; i < M; i++) { tabelaHash[i].ruAluno = -1; } } // função para inserir um aluno na tabela. void inserir() { dadosAluno alu = lerdadosAluno(); int indice = criarCodigoHash(alu.ruAluno); while (tabelaHash[indice].ruAluno != -1) { indice = criarCodigoHash(indice + 1); } tabelaHash[indice] = alu; } //funcao para listar todos os alunos da tabela. void listarTabela() { system("cls"); printf("CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER\n\n"); printf("\tALUNOS CADASTRADOS\n\n"); int i; for (i = 0; i < M; i++) { if (tabelaHash[i].ruAluno != -1) { printf("RU:\t%d\n", tabelaHash[i].ruAluno); printf("Nome:\t%s", tabelaHash[i].nome); printf("E-mail\t%s\n", tabelaHash[i].email); } } printf("\n"); system("pause"); } // função para gerar um código hash para cada elemento da tabela. int criarCodigoHash(int numeroRU) { return numeroRU % M; }
Compartilhar