Ir ao conteúdo
  • Cadastre-se
Lucas Tezolini Herler

C Leia uma Matriz 3 x 5 que se refere às respostas de 5 questões

Recommended Posts

#include<stdio.h>
#include<locale.h>
#define l 3
#define c 5
int main ()
{
    setlocale(LC_ALL, "Portuguese_Brazil");
    int i, j, acertos[3];
    char gab[c], m[l][c];
    gabarito(gab);
    ler(m);
}
gabarito (char gab[c])
{
    printf("Criando o gabrito: \n\n");
    int i, j;
    for (i=0;i<5;i++)
    {
        printf("Questão %d: \nMarque a, b, c, d ou e = ", i+1);
        scanf("%c", &gab[i]);
        getchar();
    }
}
ler (char m[l][c])
{
    int i, j, acertos[i];
    char gab[5];
    for (i=0;i<l;i++)
    {
        acertos[i] = 0;
        printf("Informa as respostas do aluno %d \n");
        for (j=0;j<c;j++)
        {
            printf("Questão %d: \n", j+1);
            scanf("%c",&m[i][j]);
            getchar();
            if (m[i][j] = gab[i])
            {
                acertos[i] = acertos[i] + 1;
            }
            printf("\n");
        }
    }
    printf("\n\nINFORMANDO O RESULTADO !\n\n");
    for (i=0;i<l;i++)
    {
        for (j=0;j<c;j++)
        {
            printf("O aluno %d obteve %d acertos \n", i, acertos[i]);
        }
    }
    getchar();
}

10. Leia uma Matriz 3 x 5 que se refere às respostas de 5 questões de múltipla
escolha, referente a 3 alunos. Leia também um vetor de 5 posições contendo o
gabarito de respostas que podem ser a, b, c, d ou e. Seu programa deverá
comparar as respostas de cada candidato com o gabarito e emitir um vetor
denominado resultado, contendo a pontuação correspondente a cada aluno.

 

Esse programa que eu fiz só lê o gabarito e depois ele trava.. Alguém sabe onde poderia estar o erro ? Não to conseguindo visualizar. 

Agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

- A função main() deveria estar no fim do código, pois como está o main() chama funções que só estão definidas depois dele.

 

- Colocar o tipo void das funções que não retornam valores.

 

- Na função ler() está o vetor acertos[] está sendo declarado com comprimento i (int acertos[ i ]), mas deveria ser um número no lugar do i.

 

- Usou = neste if(m[ i ][j] = gab[ i ]), mas deveria ser == pois este é o operador de comparação de igualdade.

 

- São declaradas variáveis nas funções main() e gabarito() que não são usadas nas funções.

 

- A função ler() não recebe o gabarito como parâmetro de entrada, logo não dá pra comparar pois não tem os valores do gabarito.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Lucas Tezolini Herler disse:

Como eu faço isso ?

ler (char m[l][c], char gab[c])
{

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, Lucas Tezolini Herler disse:

entendi, porém não to conseguindo retornar o vetor todo.. Alguma ideia ?

Não entendi, o que você quer dizer com "retornar o vetor todo"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se retorna vetores em C, pois só se retorna 1 valor, então seria possível retornar um ponteiro de um vetor alocado dinamicamente, ou retornar uma struct que contém um vetor, mas não retornar um vetor comum.

 

Mas nesse caso não é necessário retornar nada, o vetor gab já é passado como parâmetro de entrada do função, e vetores são passados por referência, ou seja passa o endereço de memória onde os dados do vetor são guardados (ao invés de passar os valores guardados no vetor).

 

Isso significa que as alterações/atribuições que fizer ao vetor gab dentro da função estão de fato sendo guardadas no mesmo lugar da memória do vetor gab fora da função (o gab do main() que foi passado como argumento).

 

Então não precisa retornar o vetor pois o próprio gab que foi passado como argumento da função já funciona como uma espécie de variável de "retorno".

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Considerei o que disse e realizei as alterações, o código está assim. O problema é que não está contando de forma correta os acertos dos alunos, uma vez que quando eu testei o código e pus todas as respostas do aluno 0 de acordo com o gabarito, apareceu que ele tinha só 1 acerto. 

#include<stdio.h>
#include<locale.h>
#define l 3
#define c 5
void gabarito (char gab[c])
{
    printf("Criando o gabrito: \n\n");
    int i, j;
    for (i=0;i<5;i++)
    {
        printf("Questão %d: \nMarque a, b, c, d ou e = ", i+1);
        scanf("%c", &gab[i]);
        getchar();
    }
}
void ler (char m[l][c], char gab[c])
{
    int i, j, acertos[3];
    for (i=0;i<l;i++)
    {
        acertos[i] = 0;
        printf("Informe as respostas do aluno %d \n", i);
        for (j=0;j<c;j++)
        {
            printf("Questão %d: \n", j+1);
            scanf("%c",&m[i][j]);
            getchar();
            if (m[i][j] == gab[i])
            {
                acertos[i] = acertos[i] + 1;
            }
        }
    }
    printf("\n\nINFORMANDO O RESULTADO !\n\n");
    for (i=0;i<l;i++)
    {
        printf("O aluno %d obteve %d acertos \n", i, acertos[i]);
    }
    getchar();
}
int main ()
{
    setlocale(LC_ALL, "Portuguese_Brazil");
    int acertos[3];
    char gab[c], m[l][c];
    gabarito(gab);
    ler(m, gab);
    return 0;
}

 

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

×