Buscar

Simulado_ P3_P4_GABARITO

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 5 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

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;
}

Outros materiais