viciado Postado Dezembro 12, 2008 Denunciar Share Postado Dezembro 12, 2008 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çõesCalcular 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",¬as[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++; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 13, 2008 Denunciar Share Postado Dezembro 13, 2008 repare bem no IF que você fezO if(media >7) e o if(media < 5) sempre são executados.O certo é:if (media >= 7) { ... } else { if (media < 5) ... else /*exame */ ... } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 13, 2008 Autor Denunciar Share Postado Dezembro 13, 2008 (editado) 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",¬as[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 Dezembro 13, 2008 por viciado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 13, 2008 Denunciar Share Postado Dezembro 13, 2008 O if das notas está dentro do loop que calcula a médiaOBS: 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 13, 2008 Autor Denunciar Share Postado Dezembro 13, 2008 Como eu vou tirar do loop se tem que mostrar a media para cada aluno ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 13, 2008 Denunciar Share Postado Dezembro 13, 2008 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 dividirfor (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 } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 13, 2008 Autor Denunciar Share Postado Dezembro 13, 2008 A saída que eu tenho agora para cada aluno é:ExameExameAprovadoExameAprovado#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",¬as[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++; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 14, 2008 Denunciar Share Postado Dezembro 14, 2008 (editado) 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 notasJá 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 Dezembro 14, 2008 por Beraldo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 14, 2008 Autor Denunciar Share Postado Dezembro 14, 2008 Não, é 30 alunos e 5 notas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 14, 2008 Denunciar Share Postado Dezembro 14, 2008 Então P é o quê?? float notas[N][P];int alunos(char nome[M][N], float notas[M][P]){Já não estendi mais nada... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 14, 2008 Autor Denunciar Share Postado Dezembro 14, 2008 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",¬as[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++; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 14, 2008 Denunciar Share Postado Dezembro 14, 2008 (editado) mais uma vez: não use o operador & em scanf com string.em vez de scanf("%s", &nome);façascanf("%s",nome);Mas é preferível usar fgets() para pegar strings. Além de permitir espaços, evita estouro de bufferEu 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 Dezembro 14, 2008 por Beraldo Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
viciado
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
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
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.