Ir para conteúdo
Fórum Script Brasil
  • 0

Matriz Notas


viciado

Pergunta

Programa que receba:

as notas de 15 alunos em cinco provas diferentes e armazene-as em uma matriz 15x5

os nomes dos 15 alunos e armazene-os em um vetor de 15 posições

Calcular e mostrar

para cada aluno, o nome, a média aritmética das cinco provas e a situação (aprovado, reprovado ou exame)

Para cada aluno está imprimindo aprovado exame reprova varias vezes

#include <stdio.h>
#include <stdlib.h>
#define M 5
#define N 30
#define P 4
int main()
{
  char nome[M][N];
  float notas[N][P];
  int i, j;
  int num = 0;
  for(i=0;i<M;i++){
                    printf("Aluno %d :Digite o nome:",num);
                    scanf("%s",&nome[i]);
                    num++;
                    }
  printf("Preeche a matriz M[15][5] \n");
  printf("Informando as notas dos alunos \n");
  for(i=0;i<M;i++)
      for(j=0;j<P;j++){
                       printf("M[%d][%d] \n",i,j);
                       scanf("%f",&notas[i][j]);
                       }
  alunos(nome,notas);
  system("PAUSE");    
  return 0;
}
int alunos(char nome[M][N], float notas[M][P]){
    int i,j;
    int soma = 0;
    int k = 0;
    while(k < P){
                      printf("%s \n",nome[k]);
    for(i=0;i<M;i++)
        for(j=0;j<P;j++){
                         soma = soma + notas[0][j];
                         float media = soma / (float)P;
                         if(media >= 7){
                                  printf("Aprovado \n");
                                  }
                         if(media < 5){
                                  printf("Reprovado \n");
                                  }
                         else{
                              printf("Exame \n");
                              }
                              }
                         k++;
                              }
}

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Agora imprimi aprovado varias vezes para todos os alunos

#include <stdio.h>
#include <stdlib.h>
#define M 5
#define N 30
#define P 4
int main()
{
  char nome[M][N];
  float notas[N][P];
  int i, j;
  int num = 0;
  for(i=0;i<M;i++){
                    printf("Aluno %d :Digite o nome:",num);
                    scanf("%s",&nome[i]);
                    num++;
                    }
  printf("Preeche a matriz M[15][5] \n");
  printf("Informando as notas dos alunos \n");
  for(i=0;i<M;i++)
      for(j=0;j<P;j++){
                       printf("M[%d][%d] \n",i,j);
                       scanf("%f",&notas[i][j]);
                       }
  alunos(nome,notas);
  system("PAUSE");    
  return 0;
}
int alunos(char nome[M][N], float notas[M][P]){
    int i,j;
    int soma = 0;
    int k = 0;
    while(k < P){
                      printf("%s \n",nome[k]);
    for(i=0;i<M;i++)
        for(j=0;j<P;j++){
                         soma = soma + notas[0][j];
                         float media = soma / (float)P;
                         if(media >= 7){
                                  printf("Aprovado \n");
                                  }
                         else{ if(media < 5){
                                  printf("Reprovado \n");
                                  }
                         else{
                              printf("Exame \n");
                              }
                              }
                              }
                         k++;
                              }
}

Editado por viciado
Link para o comentário
Compartilhar em outros sites

  • 0

O if das notas está dentro do loop que calcula a média

OBS: Cuide mais da endentação do seu código. Você não usa um padrão; horas abre o bloco num lugar, dá um , dois, trÊs ou dez espaços. Fica ruim de visualizar o código.

Deixe tudo alnihado:

if (condicao)
{
    comando1
    comando2
    comando3
}
else
{
    comando1
    comando2
    comando3
}

Fica bem mais fácil de entender

OBS 2: Use nomes auto-descritivos para as constantes. M, N, P não descrevem bem. Use ALUNOS, PROVAS, TAM_NOME. Coisas desse tipo. Daqui um ano você pdoe olhar para esse programa e demorar até entender o que significa o que.

Link para o comentário
Compartilhar em outros sites

  • 0

Há um loop para os alunos e um loop dentro dele para as notas. A exebição da média deve estar dentro do loop de alunos, mas fora do que faz a média.

Você está errando na divisão também. VocÊ está dividindo dentro do loop. Pense assim: tenho que somar TODAS as notas do launo; somente DEPOIS DE SMOAR, tenho de dividir

for (percorre os alunos)
{
    media = 0
    for (percorre as provas)
    {
        media += nota_corrente_do_loop
    }
    media /= numero_de_provas
    verifica se está aprovado ou não
}

Link para o comentário
Compartilhar em outros sites

  • 0

A saída que eu tenho agora para cada aluno é:

Exame

Exame

Aprovado

Exame

Aprovado

#include <stdio.h>
#include <stdlib.h>
#define M 5
#define N 30
#define P 4
int main()
{
  char nome[M][N];
  float notas[N][P];
  int i, j;
  int num = 0;
  for(i=0;i<M;i++){
                    printf("Aluno %d :Digite o nome:",num);
                    scanf("%s",&nome[i]);
                    num++;
                    }
  printf("Preeche a matriz M[15][5] \n");
  printf("Informando as notas dos alunos \n");
  for(i=0;i<M;i++)
      for(j=0;j<P;j++){
                       printf("M[%d][%d] \n",i,j);
                       scanf("%f",&notas[i][j]);
                       }
  alunos(nome,notas);
  system("PAUSE");    
  return 0;
}
int alunos(char nome[M][N], float notas[M][P]){
    int i,j;
    int soma = 0;
    int k = 0;
    while(k < P){
                      printf("%s \n",nome[k]);
    for(i=0;i<M;i++){
                     float media = 0;
        for(j=0;j<P;j++){
                        media += notas[i][j];
                         }
                         media /= (float) P;
                         if(media >= 7){
                                  printf("Aprovado \n");
                                  }
                         else{ if(media < 5){
                                  printf("Reprovado \n");
                                  }
                         else{
                              printf("Exame \n");
                              }
                              }
                              }
                         k++;
                              }
}

Link para o comentário
Compartilhar em outros sites

  • 0

O que é M e o que é N? Pelo que entendi, M é o número de alunos e N, o tamanho do nome de cada um deles.

Se for isso, de fato, esta declaração não faz sentido:

float notas[N][P];

Por isso usar nomes auto-descritivos ajuda. Até você está se confundindo com o seu próprio programa.

Há cinco alunos e 30 notas?? :unsure:

Por que o for usa a variável i e num ao mesmo tempo?

Mais uma vez: não coloque o operador & no scanf quando a variável é uma string, pois o nome da variável é o endereço da posição 0 (nome == &nome[0])

O while(k < P) não faz sentido. Basta um loop para percorrer os alunos e um loop dentro dele para percorrer as respectivas notas

Já pensou em usar uma struct? Fica bem melhor.

Seu compilar está configurado para exibir warnings (avisos)? Ative essa opção. Ela ajuda você a fazer programas melhores e mais corretos,.

Editado por Beraldo
Link para o comentário
Compartilhar em outros sites

  • 0

Tentei arrumar mais tenho problemas na hora de exibir a situação dos alunos

#include <stdio.h>
#include <stdlib.h>
#define PROVAS 5
#define TAM_MAX 30
#define ALUNOS 15
int main()
{
  char nome[ALUNOS][TAM_MAX];
  float notas[ALUNOS][PROVAS];
  int i, j;
  int num = 0;
  for(i=0;i<ALUNOS;i++){
                    printf("Aluno %d :Digite o nome:",num);
                    scanf("%s",&nome[i]);
                    num++;
                    }
  printf("Preeche a matriz M[15][5] \n");
  printf("Informando as notas dos alunos \n");
  for(i=0;i<ALUNOS;i++)
      for(j=0;j<PROVAS;j++){
                       printf("M[%d][%d] \n",i,j);
                       scanf("%f",&notas[i][j]);
                       }
  alunos(nome,notas);
  system("PAUSE");    
  return 0;
}
int alunos(char nome[ALUNOS][TAM_MAX], float notas[ALUNOS][PROVAS]){
    int i,j;
    int soma = 0;
    int k = 0;
    while(k < ALUNOS){
                      printf("%s \n",nome[k]);
    for(i=0;i<ALUNOS;i++){
                     float media = 0;
        for(j=0;j<PROVAS;j++){
                        media += notas[i][j];
                         }
                         media /= (float) PROVAS;
                         if(media >= 7){
                                  printf("Aprovado \n");
                                  }
                         else{ if(media < 5){
                                  printf("Reprovado \n");
                                  }
                         else{
                              printf("Exame \n");
                              }
                              }
                              }
                         k++;
                              }
}

Link para o comentário
Compartilhar em outros sites

  • 0

mais uma vez: não use o operador & em scanf com string.

em vez de

scanf("%s", &nome);

faça

scanf("%s",nome);

Mas é preferível usar fgets() para pegar strings. Além de permitir espaços, evita estouro de buffer

Eu falei para você retirar o loop do k.

void alunos(char nome[ALUNOS][TAM_MAX], float notas[ALUNOS][PROVAS]){
    int i,j;
    int soma = 0;
    int k = 0;
    
    for(i=0;i<ALUNOS;i++)
    {
        printf("ALuno: %s\n", nome[i]);
        float media = 0;
        for(j=0;j<PROVAS;j++)
        {
             media += notas[i][j];
         }
                 media /= (float) PROVAS;
                 if(media >= 7){
                                  printf("Aprovado \n");
          }
                         else{ if(media < 5){
                                  printf("Reprovado \n");
                                  }
                         else{
                              printf("Exame \n");
                              }
                              }
                              
                              }
}

Editado por Beraldo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...