Ir ao conteúdo
  • Cadastre-se
Josesousa

C MAtriz e Vetor: Comparar as respostas do aluno com o gabarito final.

Recommended Posts

Boa noite, to precisando de ajuda num exercicio aqui.

 

Nao estou entendendo como deveria realizar a comparacao das respostas dos alunos com o gabarito. 

 

Por se tratar apenas de um caracter acredito que nao der para usar o strcmp da biblioteca de string, mas realizando a comparação por meio do == nao esta surtindo efeito, pois o vetor que era para guardar o resultado final das pontuacoes dos alunos parece esta sendo preenchido por lixo na memoria.

 

Segue o codigo que consegui fazer.

 

/**15. Leia uma matriz 5 x 10 que se refere respostas de 10 quest˜oes de m´ultipla escolha, referentes a 5 alunos.
Leia tamb´em um vetor de 10 posic¸˜oes contendo o gabarito de respostas que podem ser a, b, c ou d. Seu programa
dever´a comparar as respostas de cada candidato com o gabarito e emitir um vetor denominado resultado, contendo
 a pontuac¸˜ao correspondente a cada aluno.**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
    const int coluna=3;
    char mat[5][10];
    int i,j, s1=0,s2=0,s3=0,s4=0,s5=0, res[5], a=0;
    char vet[10];

    for(i=0;i<5;i++){
        for(j=0;j<10;j++){
            printf("resposta do %d aluno: ", i+1);
            scanf("%c", &mat[i][j]);
            fflush(stdin);
        }
    }

    for(j=0;j<10;j++){
        printf("Gabarito [%d]: ",j);
        scanf("%c", &vet[j]);
        fflush(stdin);
    }
    /*for(i=0;i<5;i++){
        for(j=0;j<10;j++){
            if(mat[i][j]==vet[i]){
                printf("O ")
            }
        }f
    }*/
for(i=0;i<5;i++){
    for(j=0;j<10;j++){
        if(mat[0][j]==vet[j]){
            s1++;
            res[0]=s1;
        }
        if(mat[1][j]==vet[j]){
            s2++;
            res[1]=s2;
        }
        if(mat[2][j]==vet[j]){
            s3++;
            res[2]=s3;
        }
        if(mat[3][j]==vet[j]){
            s4++;
            res[3]=s4;
        }
        if(mat[4][j]==vet[j]){
            s5++;
            res[4]=s5;
        }
    }
}
    /*res[0]=s1;
    res[1]=s2;
    res[2]=s3;
    res[3]=s4;
    res[4]=s5;*/

    for(i=0;i<5;i++){
        printf("%d ,", res[i]);
    }

system("pause");
return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consertei o erro em relação a matriz ser do tipo float passando para char, entretanto, continua dando erro em relação a comparar a coluna de respostas do aluno com o gabarito.

(A pontuacao aparece errada)

Vou continuar tentando aqui, mando noticias se conseguir resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai dar errado pois você está somando checando 5 vezes (logo, também soma 5 vezes) os mesmos valores já verificados.

 

Primeiramente, tem 2 métodos para inicializar todas as posições de um vetor com valor 0:

 

- Durante a declaração:

int res[5] = {0};

 

- Ou percorrendo o vetor:

for (i=0; i<5; i++){
    res[i] = 0;
}

 

E você também pode incrementar +1 usando a notação:

res[i]++;

Como qualquer variável.

 

 

Logo, exclua todos esses ifs do for, assim como essas variáveis s1, s2, etc, e faça algo que funciona para incrementar os contadores de todos os alunos diretamente.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Valeu, amigo!! :thumbsup:

Consegui resolver....:D

Segue o codigo 

 

for(i=0;i<5;i++){
        res[i]=0;
        soma=0;
        for(j=0;j<10;j++){
            if(mat[i][j]==vet[j]){
                soma++;
                res[i]=soma;
            }
        }
    }

Muito mais simples dessa forma.

Como eu estava tentando somar somente as colunas, acreditava que precisaria fixa a linha em cada if, mas me esqueci que no caso o primeiro for faria isso por mim, ja que ele teria que executar todos os J do sengundo for para poder incrementar (i++).

Valeu mesmo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Note que não precisa da variável soma:

    for(i=0;i<5;i++){
        res[i]=0;
        for(j=0;j<10;j++){
            if(mat[i][j]==vet[j]){
                res[i]++;
            }
        }
    }

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×