Ir ao conteúdo
  • Cadastre-se

C Não Consigo calcular a média de alunos numa matriz


IsraelDev
Ir à solução Resolvido por Midori,

Posts recomendados

Olá pessoal...

Sou iniciante e peguei um exercício, que tá me deixando encucado pra carambolas.

 

Deixarei o código aí pra alguém me dá uma luz.

 

O "X" da questão é o seguinte, criei uma matriz para armazenar as notas de 2 alunos para o 1º, 2º e 3º bimestre.

Até aí tudo bem.

 

O que não consigo fazer agora é encontrar uma lógica pra somar essas notas e calcular a média para cada aluno.

Fiz do meu jeito aqui mas não deu certo. Sei que deve ser simples, porém eu ainda não tenho essa experiência toda.

 

Tela execução do código em anexo.

 

CÓDIGO:   DEV C++ 5.11

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <conio.h>
#include <locale.h>


#define QTD_LINHAS 2
#define QTD_COLUNAS 3

int main(){
    
    setlocale(LC_ALL, "Portuguese");
    
    float notas_Alunos[QTD_LINHAS][QTD_COLUNAS];
    char nome_Aluno[QTD_LINHAS][30];
    int controle_Linha = 0;
    int controle_Coluna = 0;
    float soma_Notas = 0;
    float media_Aluno = 0;
            
    for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
        printf("Informe o nome do Aluno \nAluno: ");
        fflush(stdin);
        scanf("%30[^\n]", nome_Aluno[controle_Linha]);
        system("cls");
        for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
            printf("Informe as Notas do %dº Aluno %s, p/ o %dº bimestre \nNota: ", controle_Linha + 1, nome_Aluno[controle_Linha], controle_Coluna + 1);
            fflush(stdin);
            scanf("%f", &notas_Alunos[controle_Linha][controle_Coluna]);
            fflush(stdin);
            system("cls");
        }
        printf("\nNotas Para o Aluno %s Informadas Com Sucesso!! \n \n \n", nome_Aluno[controle_Linha]);
                
        system("pause");
        system("cls");
    }        
    
        printf("\n");
        
    for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
        for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
            printf("A nota do %dº Aluno %s, p/ o %dº bimestre é: ===> %.2f \n", controle_Linha + 1, nome_Aluno[controle_Linha], controle_Coluna + 1, notas_Alunos[controle_Linha][controle_Coluna]);
            soma_Notas = soma_Notas + notas_Alunos[controle_Linha][controle_Coluna];
        }
        media_Aluno = (media_Aluno + soma_Notas) / 2;
        printf("A Média das Notas do %dº Aluno %s, é: %.2f \n \n", controle_Linha + 1, nome_Aluno[controle_Linha], media_Aluno);
    }    
                    
        printf("\n");
    
    system("pause");
    return 0;
}

 

 

Agradecido!!! 

 

Cálculo Média Notas Alunos.jpg

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Nem sei se entendi direito. Porque /2? A definição de média é a soma dividida pelo número de vezes que foi somado. Também não entendi porque da matriz. Sugiro começar com algo mais simples pra que você entenda o conceito de média

Algo como...

#include <stdio.h>

int main() {
    // Write C code here
    unsigned int nota=0,media=0,i;
    for (i=0;i<4;i++)
    {
    printf("%s%d = ","Nota bimestre ",i+1);
    scanf("%d",&nota);
    media+=nota;    
    }
    printf("%s%d","Media= ",media/4);
    
    return 0;
}


https://www.onlinegdb.com/online_c_compiler

ou aguarde resposta mais avançada/inteligente

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Realmente talvez não tenha explicado direito.

mais o meu problema não é que eu queira um código pra calcular a média.

isso posso fazer simplesmente criando 2 3 4 5 variáveis e somar e dividir pra obter a média.

Meu problema não é esse.

 

o que eu quero é a solução pra esse código que fiz

pois travei porque o que estou aprendendo no momento é sobre matrizes.

 

O caso em questão é simples de entender...

eu criei uma matriz pra armazenar as notas de 2 alunos referente a 3 bimestres. 

por isso a necessidade de se criar uma matriz.

 

o problema é que a partir dessa matriz e com todas as notas já informadas pelo usuário,

agora preciso somar essas notas e depois obter a média.

no caso usei duas notas apenas pra ficar fácil a compreensão. mas poderia ser a media de 3 bimestres 4 5 6, 

tantos quanto quiser.

 

se observar na execução do programa. tá lá mostrando os dados tudo certinho... menos as médias.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, IsraelDev disse:

Realmente talvez não tenha explicado direito.

mais o meu problema não é que eu queira um código pra calcular a média.

isso posso fazer simplesmente criando 2 3 4 5 variáveis e somar e dividir pra obter a média.

Meu problema não é esse.

 

o que eu quero é a solução pra esse código que fiz

pois travei porque o que estou aprendendo no momento é sobre matrizes.

 

O caso em questão é simples de entender...

eu criei uma matriz pra armazenar as notas de 2 alunos referente a 3 bimestres. 

por isso a necessidade de se criar uma matriz.

 

o problema é que a partir dessa matriz e com todas as notas já informadas pelo usuário,

agora preciso somar essas notas e depois obter a média.

no caso usei duas notas apenas pra ficar fácil a compreensão. mas poderia ser a media de 3 bimestres 4 5 6, 

tantos quanto quiser.

 

se observar na execução do programa. tá lá mostrando os dados tudo certinho... menos as médias.

Eu pensei da seguinte maneira, criando 2 iteradores no mesmo loop "for", sem precisar fazer um for dentro do outro (que seria uma matriz no caso). Não sei se resolve da forma como você quer mas pelo menos pode dar algumas ideias e deixar o código mais enxuto.

O código foi testado no CLion e naquele OnlineGB. Ficou da seguinte maneira:

 

#include <stdio.h>

int main()
{
    const int QuantBi = 3; //3 é a quant. de bimestres, supondo que seja 1 nota pra cada bimestre

    char aluno[30];

    float NotaBi1, NotaBi2, NotaBi3;


    for (int i = 0, numAluno = 1; i < 2; i++, numAluno++)
    {
        printf("Insira o nome do aluno %d: ", numAluno);
        scanf("%s", aluno);

        printf("\nInsira a nota do primeiro bimestre: ");
        scanf("%f", &NotaBi1);

        printf("\nInsira a nota do segundo bimestre: ");
        scanf("%f", &NotaBi2);

        printf("\nInsira a nota do terceiro bimestre: ");
        scanf("%f", &NotaBi3);

        float media = (NotaBi1 + NotaBi2 + NotaBi3) / QuantBi;

        printf("\n\nA media do %s: %0.1f\n\n\n", aluno, media);
    }


    return 0;
}


A média é sempre calculada através da soma dos valores pela quantidade de valores. Então se eu quero tirar a média de idade de 5 pessoas por exemplo, eu pego as idades de todas elas, somo e depois divido por 5. Igualmente se eu quero saber a média de altura entre 2 pessoas, eu somo as 2 alturas e divido por 2 e assim por diante.

Link para o comentário
Compartilhar em outros sites

@IsraelDev Olá!

Quão tão dito em postagens acima: a média de uma aluno é soma (de suas notas) DIV (número).

 

Em 30/01/2022 às 16:07, IsraelDev disse:
media_Aluno = (media_Aluno + soma_Notas) / 2;

 

 Não há nome para essa expressão: em outras circunstâncias gostaria que explicasse isso, mas aqui é perda de tempo.

 

 

Em 30/01/2022 às 16:07, IsraelDev disse:

O que não consigo fazer agora é encontrar uma lógica pra somar essas notas e calcular a média para cada aluno.

 

Talvez se escrevesse antes para 1 aluno e quando tudo ocorresse bem, escrevesse para muitos não tivesse dificuldade.  Basta começar do problema simples; uma média com uso de vetor de n-itens.

 

O X da questão é resolver o problema!

Algo bem diferente de assistir o problema sendo resolvido.

[:)

 

Link para o comentário
Compartilhar em outros sites

Em 30/01/2022 às 21:59, Felipecfk disse:

Eu pensei da seguinte maneira, criando 2 iteradores no mesmo loop "for", sem precisar fazer um for dentro do outro (que seria uma matriz no caso). Não sei se resolve da forma como você quer mas pelo menos pode dar algumas ideias e deixar o código mais enxuto.

O código foi testado no CLion e naquele OnlineGB. Ficou da seguinte maneira:

 

#include <stdio.h>

int main()
{
    const int QuantBi = 3; //3 é a quant. de bimestres, supondo que seja 1 nota pra cada bimestre

    char aluno[30];

    float NotaBi1, NotaBi2, NotaBi3;


    for (int i = 0, numAluno = 1; i < 2; i++, numAluno++)
    {
        printf("Insira o nome do aluno %d: ", numAluno);
        scanf("%s", aluno);

        printf("\nInsira a nota do primeiro bimestre: ");
        scanf("%f", &NotaBi1);

        printf("\nInsira a nota do segundo bimestre: ");
        scanf("%f", &NotaBi2);

        printf("\nInsira a nota do terceiro bimestre: ");
        scanf("%f", &NotaBi3);

        float media = (NotaBi1 + NotaBi2 + NotaBi3) / QuantBi;

        printf("\n\nA media do %s: %0.1f\n\n\n", aluno, media);
    }


    return 0;
}


A média é sempre calculada através da soma dos valores pela quantidade de valores. Então se eu quero tirar a média de idade de 5 pessoas por exemplo, eu pego as idades de todas elas, somo e depois divido por 5. Igualmente se eu quero saber a média de altura entre 2 pessoas, eu somo as 2 alturas e divido por 2 e assim por diante.

 

Bom... essa seria quase uma solução, mais nesse caso eu não tenho as variáveis pra armazenar os dois alunos... 

por exemplo: se eu fizer um printf na variável aluno... então eu vou obter o nome do ultimo aluno inserido.

 

O que eu quero, é a solução dessa matriz: 

                   float notas_Alunos[2][3];     

       onde será inseridos notas de 2 alunos referentes 3 bimestres, depois mostrar esses dados inseridos.

e mostrar o calculo da média pra cada um dos alunos. 

 

                      digamos:       aluno 1 seja = israel e suas notas sejam = 7, 8 e 9       

                                             então pra esse aluno quero saber a media 7+8+9/3   

                                              Isso pra cada aluno... igual tá la na imagem da execução do programa que fiz...

 

dá uma olhadinha na imagem, vou anexar aqui....

 

 

 

                  

 

Cálculo Média Notas Alunos.jpg

Em 31/01/2022 às 15:02, Midori disse:

@IsraelDev Para calcular a média divida a soma pela quantidade de colunas,

media_Aluno = soma_Notas/QTD_COLUNAS;

 

E lembre-se de zerar a variável da soma antes do loop das colunas.

Não é bem isso... sei que pra obter a media é só dividir as notas pela quantidade de bimestre...

mas não é esse o problema do código...

o que eu quero é calcular a média individual para cada aluno... no caso são 2 alunos.

igual está na imagem de execução do programa.

Cálculo Média Notas Alunos.jpg

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, IsraelDev disse:

Não é bem isso... sei que pra obter a media é só dividir as notas pela quantidade de bimestre...

mas não é esse o problema do código...

o que eu quero é calcular a média individual para cada aluno... no caso são 2 alunos.

A linha que postei vai ficar dentro do loop das linhas (quantidade de alunos), no lugar da atribuição que está no código do seu primeiro post.... Assim será calculada a média individual de cada aluno já que no loop das colunas tem o cálculo da soma de cada nota, p.ex,

 

for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
    soma_Notas = 0;
    for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
        soma_Notas += notas_Alunos[controle_Linha][controle_Coluna];
    }
    media_Aluno = soma_Notas/QTD_COLUNAS;
    printf("A Média das Notas do %dº Aluno %s, é: %.2f \n \n",
        controle_Linha + 1, nome_Aluno[controle_Linha], media_Aluno);
}    

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Midori disse:

A linha que postei vai ficar dentro do loop das linhas (quantidade de alunos), no lugar da atribuição que está no código do seu primeiro post.... Assim será calculada a média individual de cada aluno já que no loop das colunas tem o cálculo da soma de cada nota, p.ex,

 

for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
    soma_Notas = 0;
    for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
        soma_Notas += notas_Alunos[controle_Linha][controle_Coluna];
    }
    media_Aluno = soma_Notas/QTD_COLUNAS;
    printf("A Média das Notas do %dº Aluno %s, é: %.2f \n \n",
        controle_Linha + 1, nome_Aluno[controle_Linha], media_Aluno);
}    

 

 

Ahh entendi... você me dando a dica e eu não olhei que tinha trocado bimestres(QTD_COLUNAS) por alunos(QTD_LINHAS) kkkk

                                    media_Aluno = soma_Notas / QTD_COLUNAS;

                                                        e eu havia colocado:

                                    media_Aluno = (media_Aluno + soma_Notas) / 2;

 

Bom... de já te agradeço por essa luz...

             Mas agora o programa calculou corretamente apenas a média do primeiro aluno.

                       A média do segundo não calcula corretamente....

 

       Vou deixar novamente o imagem da execução pra você ver se consegue descobrir o erro e me ajudar.

e o código inteiro corrigido novamente tá...

 

valeu brother... 

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <locale.h>

#define QTD_LINHAS 2
#define QTD_COLUNAS 3

int main(){
	
	setlocale(LC_ALL, "Portuguese");
	
	float notas_Alunos[QTD_LINHAS][QTD_COLUNAS];
	int controle_Linha = 0;
	int controle_Coluna = 0;
	float soma_Notas = 0;
	float media_Aluno = 0;
	char nome_Aluno[30];
		
	for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
		printf("Informe o nome do Aluno \nAluno: ");
		fflush(stdin);
		scanf("%30[^\n]", nome_Aluno);
		system("cls");
		for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
			printf("Informe as Notas do %dº Aluno %s, p/ o %dº bimestre \nNota: ", controle_Linha + 1, nome_Aluno, controle_Coluna + 1);
			fflush(stdin);
			scanf("%f", &notas_Alunos[controle_Linha][controle_Coluna]);
			fflush(stdin);
			system("cls");
		}
		printf("\nNotas Para o Aluno %s Informadas Com Sucesso!! \n \n \n", nome_Aluno);
				
		system("pause");
		system("cls");
	}		
	
		printf("\n");
		
	for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
		for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
			printf("A nota do %dº Aluno %s, p/ o %dº bimestre é: ===> %.2f \n", controle_Linha + 1, nome_Aluno, controle_Coluna + 1, notas_Alunos[controle_Linha][controle_Coluna]);
			soma_Notas = soma_Notas + notas_Alunos[controle_Linha][controle_Coluna];
		}
		media_Aluno = soma_Notas / QTD_COLUNAS;
		printf("A Média das Notas do %dº Aluno %s, é: %.2f \n \n", controle_Linha + 1, nome_Aluno, media_Aluno);
	}	
					
		printf("\n");
	
	system("pause");
	return 0;
}

                   

Cálculo Média Notas Alunos 2.jpg

Link para o comentário
Compartilhar em outros sites

  • Solução
10 horas atrás, IsraelDev disse:

                       A média do segundo não calcula corretamente....

 

Faltou zerar a variável da soma para não ficar com o total do cálculo anterior, veja que no trecho que postei faço isso antes do loop das colunas.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

12 horas atrás, Midori disse:

Faltou zerar a variável da soma para não ficar com o total do cálculo anterior, veja que no trecho que postei faço isso antes do loop das colunas.

 

  

Em 02/02/2022 às 20:13, Midori disse:

A linha que postei vai ficar dentro do loop das linhas (quantidade de alunos), no lugar da atribuição que está no código do seu primeiro post.... Assim será calculada a média individual de cada aluno já que no loop das colunas tem o cálculo da soma de cada nota, p.ex,

 

for(controle_Linha = 0; controle_Linha < QTD_LINHAS; controle_Linha ++){
    soma_Notas = 0;
    for(controle_Coluna = 0; controle_Coluna < QTD_COLUNAS; controle_Coluna ++){
        soma_Notas += notas_Alunos[controle_Linha][controle_Coluna];
    }
    media_Aluno = soma_Notas/QTD_COLUNAS;
    printf("A Média das Notas do %dº Aluno %s, é: %.2f \n \n",
        controle_Linha + 1, nome_Aluno[controle_Linha], media_Aluno);
}    

 

 

é isso aí mano... valeu... 

obrigadão... 

esse era meu erro... não zerar a variável soma_Notas.

 

ajudou muito... 

agora estou esse código direitinho e vê passa-a-passo como

o código é executado... 

Para assim aprender... porque não adianta só eu receber a solução que você me passou, e não

entender como isso foi feito.

 

MAIS UMA VEZ MUITOOOOOOOO obrigado... 

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!