Store values in matrices

Asked

Viewed 459 times

4

I am using codeblocks, I am beginner in programming, starting with C, on account of college.

The error is this: In the part of the code where it stores the value of the average of the student, only stores the correct value of the average of the first student, the averages of the following students the algorithm does not make correct average, that is, initially it calculates the average, from the second student it does not store the correct value.

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

struct aluno{
    char nome[50];
    float nota[6];
    float media;
};

main()
{
    int i, j;
    float soma, troca;
    char classificado[10];
    soma = 0;

    struct aluno ficha[6];
    // Entrada de dados
    for (i=1; i<6; i++){
    printf("\n Digite o nome do aluno: ");
    scanf("%s", &ficha[i].nome);
    printf("\n Nome: %s", ficha[i].nome);
        for (j=1; j<5; j++){
            printf("\n Informe a nota: ",j);
            scanf("%f", &ficha[i].nota[j]);
            soma =  soma + ficha[i].nota[j];
        }
        ficha[i].media = soma/4;
        printf("\n A média do  aluno é: %f",ficha[i].media);


    }
    // Reordernação de vetor para crescente
     for(i=0; i<5; i++){
        for(j=i+1; j<6; j++){
            if(ficha[i].media > ficha[j].media){
                troca = ficha[i].media;
                ficha[i].media = ficha[j].media;
                ficha[i].media = ficha[j].media;
                ficha[j].media = troca;

            }// if
        }
    }




    for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    }
    // Saída de dados
    for(i=1; i<6; i++){
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }



}

After compiled

Depois de compilado

  • soma = 0 has to be inside the first for, otherwise does not clear the sum between students.

  • 1

    Code::Blocks is not a compiler, see https://answall.com/q/101691/101

  • Thank you very much Ricardo, solved it. Thanks also Maniero. Despite having solved, could tell me Ricardo, what the reason of having to put inside the first is ?

3 answers

0

just reset the sum at the end of the second for loop:

for (i=1; i<6; i++){
printf("\n Digite o nome do aluno: ");
scanf("%s", &ficha[i].nome);
printf("\n Nome: %s", ficha[i].nome);
    for (j=1; j<5; j++){
        printf("\n Informe a nota: ",j);
        scanf("%f", &ficha[i].nota[j]);
        soma =  soma + ficha[i].nota[j];
    }
    ficha[i].media = soma/4;
    printf("\n A média do  aluno é: %f",ficha[i].media);

    soma = 0; //ADICIONAR ESSE TRECHO

}

Follow the running code:

inserir a descrição da imagem aqui

0

I realized that the assignment is from loop, this allows the variable SUM to have the balance of the previous sum. To solve the problem, place the assignment of the value zero within the loop, as below:

You could optimize your code, check your logic and try to improve data output as there is no need to own two loops.

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

struct aluno{
    char nome[50];
    float nota[6];
    float media;
};

main()
{
    int i, j;
    float soma, troca;
    char classificado[10];

    struct aluno ficha[6];
    // Entrada de dados
    for (i=1; i<6; i++){
        soma:=0;
        printf("\n Digite o nome do aluno: ");
        scanf("%s", &ficha[i].nome);
        printf("\n Nome: %s", ficha[i].nome);
        for (j=1; j<5; j++){
            printf("\n Informe a nota: ",j);
            scanf("%f", &ficha[i].nota[j]);
            soma =  soma + ficha[i].nota[j];
        }
        ficha[i].media = soma/4;
        printf("\n A média do  aluno é: %f",ficha[i].media);


    }
    // Reordernação de vetor para crescente
     for(i=0; i<5; i++){
        for(j=i+1; j<6; j++){
            if(ficha[i].media > ficha[j].media){
                troca = ficha[i].media;
                ficha[i].media = ficha[j].media;
                ficha[i].media = ficha[j].media;
                ficha[j].media = troca;

            }// if
        }
    }



    // Saída de dados

    for(i=1; i<6; i++){
        printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
        printf("\n A média do  aluno é: %2f",ficha[i].media);
    }

}

0


Codeblocks is a development environment in which it has compatibility for multiple compilers.

Evaluating your code:

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

struct aluno{
    char nome[50];
    float nota[6];
    float media;
};

main()
{
    int i, j;
    float soma, troca;
    char classificado[10];
    soma = 0;

    struct aluno ficha[6];
    // Entrada de dados
    for (i=1; i<6; i++){
    printf("\n Digite o nome do aluno: ");
    scanf("%s", &ficha[i].nome);
    printf("\n Nome: %s", ficha[i].nome);
        for (j=1; j<5; j++){
            printf("\n Informe a nota: ",j);
            scanf("%f", &ficha[i].nota[j]);
            soma =  soma + ficha[i].nota[j];
        }
        ficha[i].media = soma/4;
        printf("\n A média do  aluno é: %f",ficha[i].media);


    }
    // Reordernação de vetor para crescente
     for(i=0; i<5; i++){
        for(j=i+1; j<6; j++){
            if(ficha[i].media > ficha[j].media){
                troca = ficha[i].media;
                ficha[i].media = ficha[j].media;
                ficha[i].media = ficha[j].media;
                ficha[j].media = troca;

            }// if
        }
    }




    for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    }
    // Saída de dados
    for(i=1; i<6; i++){
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }



}

I realized that the soma=0 could be inside the first go to reset the grade to each new student;

I also saw that the last two loops of repetitions can become one, for example:

for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }
  • Thank you Yoda, well noted !

  • @Felipemascarenhas if I can help you can accept the answer :D , as it says in this post https://pt.meta.stackoverflow.com/questions/1078/como-e-por-que-aceitar-uma-resposta/1079#1079

Browser other questions tagged

You are not signed in. Login or sign up in order to post.