Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Josesousa

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

Recommended Posts

Postado (editado)

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

 

Editado por Josesousa
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

A matriz mat está com tipo float, mas deveria ser tipo char.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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.

Editado por Josesousa

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






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

×