Baixe o app para aproveitar ainda mais
Prévia do material em texto
Simulado para P4 Nome do aluno: ___________________________________________________ Prof.: _____________ Instruções para a realização da avaliação prática A prova terá duração de 150 minutos (2 horas e 30 minutos). É responsabilidade do aluno salvar periodicamente o seu trabalho!!!!. O nome do seu projeto e do seu programa-fonte devem ser iguais ao código da sua turma mais o número da sua matricula. Exemplo: 33F-1012983. No início do seu programa-fonte, coloque, como comentários, o seu nome completo, sua matrícula e o nome do seu professor. Todos os arquivos mencionados no texto abaixo estão armazenados e/ou devem ser criados no diretório especificado pelo professor no início da prova. Não é permitido destacar as folhas que compõem a prova (2 folhas). Antes de perguntar, leia atentamente o que está sendo pedido. Quando terminar a prova, permaneça sentado e chame um professor ou um fiscal. A nota da prova será entregue na data divulgada pelo seu professor. Questão única A eleição para presidente da Ilha de Alimac terminou ontem à noite, sem nenhum incidente. Tanto os eleitores que moram na ilha quanto os que moram no exterior já votaram em um dos candidatos à presidência. Cada voto de um eleitor que mora no exterior contabiliza um voto para o candidato e cada voto de um eleitor que mora na ilha contabiliza 2 votos. Considere que a quantidade máxima de candidatos é 19. Mas é claro que um eleitor pode anular seu voto. Basta digitar na urna eletrônica um código inválido de candidato. O resultado dessa votação está no arquivo texto VOTOS.TXT. Informações sobre o arquivo VOTOS.TXT: arquivo texto com os votos dos eleitores; uma linha para cada eleitor, contendo: código do candidato (inteiro) local da residência do eleitor: 0 (se é morador da ilha) ou 1 (se mora no exterior) Há também o arquivo texto CANDIDATOS.TXT: arquivo texto com os códigos e os nomes dos candidatos à presidência, contendo (uma informação por linha): código do candidato (inteiro) nome do candidato (máximo de 20 caracteres válidos) Faça um programa que imprima um relatório (na tela) baseado nas informações dos arquivos fornecidos de acordo com a saída esperada (vide seção RESULTADO ESPERADO). O seu programa deverá utilizar as seguintes funções feitas por você: função le_dados_candidatos(): recebe um vetor de strings e um vetor de inteiros como parâmetros; preenche os vetores com os dados lidos do arquivo CANDIDATOS.TXT e retorna a quantidade de candidatos; função gera_relatorio(): recebe, como parâmetros, todos as informações necessárias para gerar o relatório conforme seção RESULTADO ESPERADO; Além disso seu programa deve informar o candidato mais votado e o menos votado, ler via teclado o nome de um candidato exibir uma mensagem informando se o candidato foi encontra ou não e imprimir no arquivo SAÍDA.TXT as informações referentes ao candidato encontrados, seu programa termina quando for digitado a palavra “FIM”. Observação: obrigatoriamente, o seu programa deverá utilizar, no mínimo, mais 1 função auxiliar feita por você!!!! � RESULTADO ESPERADO (na tela): Nome Total de Total de Total geral Candidato votos locais votos exterior de votos CLARABELA 1 0 1 GASTAO 7 0 7 MARGARIDA 1 3 4 MICKEY MOUSE 14 3 17 PATETA 2 0 2 JOAO BAFO DE ONCA 0 0 0 ZEZINHO 1 0 1 LUIZINHO 1 0 1 HUGUINHO 1 0 1 PLUTO 0 0 0 PROFESSOR PARDAL 9 4 13 MINNIE 8 0 8 ZE CARIOCA 87 8 95 TECO 0 1 1 TICO 0 1 1 PATO DONALD 5 2 7 PENINHA 4 0 4 TIO PATINHAS 1 0 1 VOVO DONALDA 15 0 15 //Simulado para P4 GABARITO #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_CAND 19 #define MAX_NOME 21 int le_dados_candidatos(int cod_cand[], char nome_cand[][MAX_NOME]) { FILE *arq; int qtd = 0; arq = fopen("Candidatos.txt", "r"); if (arq == NULL) { printf("Erroe abertura Canditatos.txt\n"); exit(1); } while (fscanf(arq, " %d %21[^\n]", &cod_cand[qtd], nome_cand[qtd] ) == 2 && qtd < MAX_CAND) { qtd++; } return qtd; fclose(arq); } int busca(int codigo, int cod_cand [], int qtd_cand) { int i; for (i = 0; i < qtd_cand; i++) { if (codigo == cod_cand[i]) return i; } return -1; } void inicializa(int qtd_votos_locais[MAX_CAND], int qtd_votos_ext[MAX_CAND], int qtd_votos_total[MAX_CAND]) { int i; for (i = 0; i < MAX_CAND; i++) { qtd_votos_ext[i] = 0; qtd_votos_locais[i] = 0; qtd_votos_total[i] = 0; } } void busca_maior_menor(int qtd_votos_tot [], int *cand_maior, int *cand_menor,int *pos_maior, int *pos_menor ) { int i; for (i = 0; i < MAX_CAND; i++) { if (qtd_votos_tot[i] > *cand_maior) { *cand_maior = qtd_votos_tot[i]; *pos_maior = i; } if (qtd_votos_tot[i] < *cand_menor) { *cand_menor = qtd_votos_tot[i]; *pos_menor = i; } } return *cand_maior, *cand_menor; } void gera_relatorio(int qtd_candidatos, int codigos[], int qtd_votos_locais[],int qtd_votos_ext[],int qtd_votos_total[],char nome_cands[][21]) { FILE *arq2; int i, cod, voto, pos, qtd_nulos = 0, tamanho; arq2 = fopen("Votos.txt", "r"); if (arq2 == NULL) { printf("Erro de abertura Votos.txt"); exit(1); } while (fscanf(arq2, " %d %d", &cod, &voto) == 2) { pos = busca(cod, codigos, qtd_candidatos); // declarar cod if (pos != -1) // achou { if (voto == 0) // morador ilha { qtd_votos_locais[pos]++; qtd_votos_total[pos] += 2; } else if (voto == 1) // morador exterior { qtd_votos_ext[pos]++; qtd_votos_total[pos] ++; } else // votos nulos qtd_nulos++; } } fclose(arq2); printf("Nome Candidato\t Votos locais\tVotos exterior\tTotal\n\n"); for (i = 0; i < MAX_CAND; i++) { tamanho = strlen(nome_cands[i]); if (tamanho > 13) { printf(" %s\t", nome_cands[i]); printf("%d\t\t %d\t %d\t\t\n", qtd_votos_locais[i], qtd_votos_ext[i], qtd_votos_total[i]); } else if (tamanho > 6 && tamanho <= 13) { printf(" %s\t\t", nome_cands[i]); printf("%d\t\t %d\t %d\t\t\n", qtd_votos_locais[i], qtd_votos_ext[i], qtd_votos_total[i]); } else { printf(" %s\t\t\t", nome_cands[i]); printf("%d\t\t %d\t %d\t\t\n", qtd_votos_locais[i], qtd_votos_ext[i], qtd_votos_total[i]); } } printf("\nQtd nulos: %d\n\n", qtd_nulos); } int busca_candidato(char nome[MAX_NOME], char nome_cand[][MAX_NOME], int qtd_cand) { int i; for (i = 0; i < qtd_cand; i++) { if (strcmp(nome, nome_cand[i]) == 0) return i; } return -1; } int main(void) { char nome_cands[MAX_CAND][MAX_NOME]; char termino[4], nome[MAX_NOME], pos; int cods[MAX_CAND], qtd_cand, teste ; int qtd_votos_locais[MAX_CAND], qtd_votos_ext[MAX_CAND], qtd_votos_total [MAX_CAND]; int maior = 0, menor = 100000, p_maior, p_menor; qtd_cand= le_dados_candidatos(cods, nome_cands); // le cand e retorna qtd lida inicializa(qtd_votos_locais, qtd_votos_ext, qtd_votos_total); // inicializa vetores de contagem de votos gera_relatorio(qtd_cand, cods, qtd_votos_locais, qtd_votos_ext, qtd_votos_total, nome_cands); // imprime na tela resultados busca_maior_menor(qtd_votos_total, &maior, &menor,&p_maior, &p_menor); // busca mais e menos votado printf("Maior qnt votos: %d, %s\nMenor qtd votos: %d, %s\n\n", maior,nome_cands[p_maior], menor, nome_cands[p_menor] ); strcpy(termino, "FIM"); // copia a palavra FIM maiuscula para a string termino. FILE *arq3; arq3 = fopen("Saida.txt", "w"); if (arq3 == NULL) { printf("Erro de abertura Saida.txt"); exit(1); } printf("Digite o nome do candidato ou FIM para terminar.: "); scanf(" %21[^\n]", &nome); strupr(nome); // converte p/ maiscula if (strcmp(termino, nome) == 0) // compara strings teste = 0; while (teste != 0) { pos = busca_candidato(nome, nome_cands, qtd_cand); if (pos > -1) { printf("Candidato encontrado.\n\n"); fprintf(arq3,"Qtd votos locais: %d\nQtd votos exterior: %d\nTotal de votos: %d\n\n", qtd_votos_locais[pos], qtd_votos_ext[pos], qtd_votos_total[pos]); } else printf("Candidato inexistente.\n\n"); printf("Digite o nome do candidato ou FIM para terminar.: "); scanf(" %21[^\n]", &nome); strupr(nome); if (strcmp(termino, nome) == 0) teste = 0; } fclose(arq3); return 0; }
Compartilhar