Ir ao conteúdo

Posts recomendados

Postado

Estou tendo algumas dificuldades no seguinte exercício: 

Leia uma matriz 10 x 5 que se refere respostas de 5 questões de múltipla escolha, referentes a 10 alunos. Leia também um vetor de 5 posições contendo o gabarito de respostas que podem ser a, b, c ou d. Seu programa devera comparar as respostas de cada candidato com o gabarito e emitir o resultado na tela, contendo a pontuações correspondente a cada aluno.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define a 10		//Define a Quantidade de alunos
#define q 5			//Define a Quantidade de questões

int main(int argc, char *argv[]) {
	
	int soma[a+1],i,j;
	char gab[q], resp[a][j];
	
	printf("----------GABARITO----------\n");
	printf("Digite as respostas das Questoes com a, b, c ou d");
	
	for(j=0 ; j<q ; j++){
		
		printf("\nResposta da questão %d:  ", j+1);
		scanf(" %c", &gab[j]);
		fflush(stdin);
	}
	
	printf("\n\n");
	
	for (i=0; i<a ; i++){
		printf("\nDigite as respostas do aluno %d", i+1);
		for(j=0 ; j<q ; j++){
			printf ("\nQuestao %d:  ",j+1);
			scanf(" %c", &resp[i][j]);
			fflush(stdin);
			
			if(resp[i][j] == gab[j]) soma[i]++;
			
		}
	}
	
	for(i=0 ; i<a ; i++) printf("O aluno %d acertou, %d Questoes!\n", i+1, soma[i+1]);
	
	return 0;
}

 

Consegui fazer o código normalmente porém na parte da soma das notas :

	for (i=0; i<a ; i++){
		printf("\nDigite as respostas do aluno %d", i+1);
		for(j=0 ; j<q ; j++){
			printf ("\nQuestao %d:  ",j+1);
			scanf(" %c", &resp[i][j]);
			fflush(stdin);
			
			if(resp[i][j] == gab[j]) soma[i]++;
			
		}
	}
	
	for(i=0 ; i<a ; i++) printf("O aluno %d acertou, %d Questoes!\n", i+1, soma[i+1]);

 Toda vez que eu compilo e tento testar o resultado sai um número enorme e sem sentido, ja tentei debugar, tentei iniciar todas as variáveis inteiras em 0, tentei monitorar a entrada de dados com scanf pra ver onde ta o problema mas sempre acontece que um valor do nada já inicia com um valor alto.

Alguém pode me ajudar urgentemente com o problema dessa soma de valores???

  • Curtir 1
Postado
2 horas atrás, DanielSantos_20 disse:

Toda vez que eu compilo e tento testar o resultado sai um número enorme e sem sentido, ja tentei debugar, tentei iniciar todas as variáveis inteiras em 0, tentei monitorar a entrada de dados com scanf pra ver onde ta o problema mas sempre acontece que um valor do nada já inicia com um valor alto.

Alguém pode me ajudar urgentemente com o problema dessa soma de valores???

Seu problema está aqui

2 horas atrás, DanielSantos_20 disse:
for(i=0 ; i<a ; i++) printf("O aluno %d acertou, %d Questoes!\n", i+1, soma[i+1]);

Perceba que na array soma você está somando +1 ao índice, por isso você está recebendo uma resposta invalida.

 

@DanielSantos_20 De nomes mais significativos para as variáveis e constantes, seguir o código assim é horrível.

Veja que uma variável ou uma constante de uma letra só como "a" no meio do código não representa nada significativo.

Fica bem fácil se perder dessa maneira.

Experimente algo assim

#define QUANTIDADE_RESPOSTAS 5

 

Não use fflush() no buffer de entrada, veja uma alternativa melhor nesse tópico contornar o problema do buffer do teclado  

 

Eu dei uma arrumadinha no seu algoritmo

#include <stdio.h>
#include <ctype.h>
#include <string.h>

/* Constantes */
#define QUANTIDADE_GABARITO_RESPOSTAS 5
#define QUANTIDADE_GABARITO_ALUNOS 5
#define QUANTIDADE_ALUNOS 10
#define QUANTIDADE_LETRAS_GABARITO 4

void
barraInformacoes(char *str, char caractere, int tamanho)
{
    const int quantidade_caracteres = (tamanho-(strlen(str)-1))/2;
    int contador;
    for (contador = 0; contador < quantidade_caracteres; contador++) {
        printf("%c", caractere);
    }
    printf("%s", str);
    for (contador = 0; contador < quantidade_caracteres; contador++) {
        printf("%c", caractere);
    }
    printf("\n");
}

int main(void)
{
    char
        gabarito_respostas[QUANTIDADE_GABARITO_RESPOSTAS],
        gabaritos_alunos[QUANTIDADE_ALUNOS][QUANTIDADE_GABARITO_ALUNOS];
    
    int 
        contador1,
        contador2,
        quantidade_acetos_aluno[QUANTIDADE_ALUNOS] = {0};
        
        /* Pega o gabarito das provas */
    barraInformacoes("GABARITO", '-', 40);
    printf("Digite as respostas das questoes como A,B,C ou D\n");
    
    for (contador1 = 0; contador1 < QUANTIDADE_GABARITO_RESPOSTAS; contador1++) {
        printf("Digite a resposta da prova [%i]:", contador1+1);
        scanf("%c%*c", &gabarito_respostas[contador1]);
    }
    
        /* Mostra as respostas no gabarito */
    barraInformacoes("RESPOSTAS DO GABARITO", '-', 40);
    printf("[-]");
    for (contador1 = 0; contador1 < QUANTIDADE_LETRAS_GABARITO; contador1++) {
        printf("[%c]", contador1+'A');
    }
    printf("\n");
    for (contador1 = 0; contador1 < QUANTIDADE_GABARITO_RESPOSTAS; contador1++) {
        printf("[%i]", contador1+1);
        for (contador2 = 0; contador2 < QUANTIDADE_LETRAS_GABARITO; contador2++) {
            if (toupper(gabarito_respostas[contador1]) == contador2+'A') {
                printf("[#]");
            } else {
                printf("[ ]");
            }
        }
        printf("\n");
    }
    
        /* Pega as respostas dos alunos */
    barraInformacoes("GABARITO DO ALUNO", '#', 40);
    for (contador1 = 0; contador1 < QUANTIDADE_ALUNOS; contador1++) {
        printf("Digite as respostas do aluno:[%i]\n", contador1+1);
        for (contador2 = 0; contador2 < QUANTIDADE_GABARITO_ALUNOS; contador2++) {
            printf("Prova[%i]\n", contador2+1);
            printf("A, B, C ou D por favor\n:");
            scanf("%c%*c", &gabaritos_alunos[contador1][contador2]);
            
            /* Checa se a resposta coincide com a do gabarito */
            if (toupper(gabaritos_alunos[contador1][contador2]) == toupper(gabarito_respostas[contador2])) {
                quantidade_acetos_aluno[contador1]++;
            }
        }
    }
    
        /* Mostra o resultado de cada aluno */
    barraInformacoes("ACERTOS DE CADA ALUNO", '-', 40);
    for (contador1 = 0; contador1 < QUANTIDADE_ALUNOS; contador1++) {
        printf("O aluno %i acertou %i questoes\n", contador1+1, quantidade_acetos_aluno[contador1]);
    }
    printf("Pressione enter para encerrar o programa\n");
    getchar();
    return(0);
}

Mas eu acho que acabei incluindo código demais 😕

  • Curtir 2
Postado

Obrigado kgin e JorgeGus, me ajudaram bastante.

 

Com certeza um dos problemas era a utilização do fflush(stdin);  

 

9 horas atrás, kgin disse:

Não use fflush() no buffer de entrada

 

e também a inicialização do vetor: 

7 horas atrás, JorgeGus disse:
int soma[a] = {0};

 

Alterando principalmente esses dois problemas e seguindo algumas dicas que vocês me deram consegui acertar o algoritmo e agora ta funcionando certinho!!!

 

Pra quem estiver interessado o código ficou desse jeito:

 

/*
Leia uma matriz 10 x 5 que se refere respostas de 5 questões de múltipla escolha, 
referentes a 10 alunos. Leia também um vetor de 5 posições contendo o gabarito de 
respostas que podem ser a, b, c ou d. Seu programa devera comparar as respostas de 
cada candidato com o gabarito e emitir o resultado na tela, contendo a pontuações 
correspondente a cada aluno. Insira o arquivo contendo o código na linguagem C abaixo.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//------Constantes------//
#define qtde_alunos 10			//Define a Quantidade de alunos
#define qtde_questao 5			//Define a Quantidade de questões

int main(int argc, char *argv[]) {
	
	char gab[qtde_questao], resp[qtde_alunos][qtde_questao];
	int i,j;				//i = qtde. de linhas da matriz // j = qtde de colunas da matriz
	int soma[qtde_alunos] = {0};

//-------Define o Gabarito das questões-------//
	
	printf("----------GABARITO----------\n");
	printf("Digite as respostas das Questoes com a, b, c ou d");
	
	for(j=0 ; j<qtde_questao ; j++){
		
		printf("\nResposta da questão %d:  ", j+1);
		scanf("%c%*c", &gab[j]);
	}
	
	printf("\n\n");
	
//-------Recebe as questões dos alunos-------//	

	for (i=0; i<qtde_alunos ; i++){
		printf("\nDigite as respostas do aluno %d", i+1);
		for(j=0 ; j<qtde_questao ; j++){
			printf ("\nQuestao %d:  ",j+1);
			scanf("%c%*c", &resp[i][j]);

//-------Conta quantas respostas os alunos acertaram-------//	

			if(toupper(resp[i][j]) == toupper(gab[j])) soma[i]++;
		}
	}

//-------Mostra quantas questões os alunos acertaram-------//	

	printf("\n\n");
	printf("----------GABARITO DOS ALUNOS----------\n\n");	
	for(i=0 ; i<qtde_alunos ; i++) printf("O aluno %d acertou, %d Questoes!\n", i+1, soma[i]);
	
	printf("\n\nPressione 'ENTER' para encerrar o programa\n");
    getchar();
	
	return 0;
}

 

@kgin Seu algoritmo ficou bem completo e bem explicado e ajudou bastante, porém seria demais então eu so acertei o antigo!!!!!

Postado

@DanielSantos_20 Agora sim ficou bacana!

 

Só inclua a biblioteca ctype para usar a função toupper()

#include <ctype.h>

No devC++ ele provavelmente vai funcionar, mas se você compilar em outro lugar vai dar erro porque está faltando a biblioteca.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!