danan Postado Abril 7, 2010 Denunciar Share Postado Abril 7, 2010 (editado) O sistema de avaliação de uma determinada disciplina obedece aos seguintes critérios:- Durante o semestre são dadas três notas;- A nota final é obtida pela média aritmética das três notas;- É considerado aprovado o aluno que obtiver nota final superior ou igual a 6 e que tiver comparecido a um mínimo de 40 aulas.Faça um programa que leia um conjunto de dados contendo o número da matrícula, as três notas e a freqüência (número de aulas freqüentadas).Calcule e mostre:a) Para cada aluno o número da matrícula, a nota final e a mensagem (aprovado ou reprovado);b) A maior e a menor nota da turma;c) O total de alunos reprovados;d) a percentagem de alunos reprovados por freqüência abaixo da mínima necessária.A turma tem 40 alunos.# include <stdio.h> int main () { float n1, n2, n3, media, maiorn, menorn; int aluno=40, alunorepr, alunofreq; printf (“digite a matricula:“); scanf (“%f”, &n1, &n2, &n3, &media); scanf (“%d”, & aluno, & alunorepr, & alunofreq); media=(n1+n2+n3)/3; if (media>=6) printf (“aprovado”); else printf (reprovado”); ...eu preciso declarar a variável matrícula?também tenho dúvidas em relação ao scanf e em como calcular a maior e a menor nota. Editado Abril 7, 2010 por Jonathan Queiroz Modificar título para descrever melhor a dúvida e adicionar tag's (Jonathan) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Abril 7, 2010 Denunciar Share Postado Abril 7, 2010 Já que são 40 alunos você vai ter que criar vetores para armazenas os dados de cada aluno. Neste caso 3 vetores: matricula, nota e frequencia.int matricula[40]; float nota[40]; int frequencia[40]; Depois com um for você vai ler os dados de cada aluno: for(i = 0; i < 40; i++) { printf (“digite a matricula:“); scanf("%d", &matricula[i]); printf (“digite as três notas:“); scanf("%f %f %f", &n1, &n2, &n3); nota[i] = (n1 + n2 + n3) / 3; printf (“digite a frequencia:“); scanf("%d", &frequencia[i]); }Depois usa uns if pra verificar a situação do aluno. Qualquer coisa posta ai.Obs.:Existe outra forma mais "elegante" que é usando struct, mas como vejo que você tá iniciando então dei esse exemplo bem simples. Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 7, 2010 Autor Denunciar Share Postado Abril 7, 2010 era isso!!! vou fazer aqui e posto dinovo..é eu sou iniciante em lp1obrigado pelo empurrão rs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 7, 2010 Autor Denunciar Share Postado Abril 7, 2010 (editado) # include <stdio.h> int main () { int matricula[40]; float nota[40]; int frequencia[40]; for(i = 0; i < 40; i++) { printf (“digite a matricula:“); scanf("%d", &matricula[i]); printf (“digite as tres notas:“); scanf("%f %f %f", &n1, &n2, &n3); nota[i] = (n1 + n2 + n3) / 3; printf (“digite a frequencia:“); scanf("%d", &frequencia[i]); } if (nota>=6){ printf ("aprovado"); else printf ("reprovado"); } if (frequencia<=40){ printf ("reprovado por falta"); }...ta certo os if ? :huh: agora como que eu calculo a maior e a menor nota??? Editado Abril 7, 2010 por danan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 7, 2010 Denunciar Share Postado Abril 7, 2010 Para calcular a maior e menor nota, você pode percorrer todas num loop e deixar uma variável para salvar a menor e a maior. Algo assim:int maior=-1, menor=-1; //coloquei como -1 para indicar que nenhuma nota foi verificada ainda for(int i=0;i<40;i++){ if(notas[i]<menor||menor==-1){ menor=notas[i]; } if(notas[i]>maior){ //não preciso comparar com -1 porque qualquer nota será maior que -1 maior=notas[i]; } }Poste aí se funcionou ou não.Edit:Os if's não estão certos porque há um array com 40 notas (uma por aluno). Você vai ter que percorrer todos os alunos e fazer os cálculos com cada um deles. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Abril 7, 2010 Denunciar Share Postado Abril 7, 2010 (editado) a) Para cada aluno o número da matrícula, a nota final e a mensagem (aprovado ou reprovado); E de cara mata a letra c também ( O total de alunos reprovados); int total_reprovado = 0; ... for(i = 0; i < 40; i++) { printf("Matricula: %d, Nota final: %.1f, Mensagem: ", matricula[i], nota[i]); if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("Aprovado\n"); else { printf("Reprovado\n"); total_reprovado++; } } ... printf("Total de alunos reprovados: %d", total_reprovado);b ) A maior e a menor nota da turma;Segue a orientação de Jonathan no post anterior.Abraço. Editado Abril 7, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 7, 2010 Autor Denunciar Share Postado Abril 7, 2010 eu preciso criar uma variável aluno?eu estou calculando a percentagem assim: total_reprovado / aluno * 100ta certo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Abril 7, 2010 Denunciar Share Postado Abril 7, 2010 Não é preciso."a percentagem de alunos reprovados por freqüência abaixo da mínima necessária."É só você percorrer o vetor frequencia, contar quantos tiveram frequencia menor que 40 e calcular a percentagem.int reprovado_falta = 0; ... for(i = 0; i < 40; i++) { if(frequencia[i] < 40) reprovado_falta++; } printf("Percentagem de alunos reprovados por falta: %.1f", reprovado_falta / 40 * 100); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 (editado) Ronaldo, quando fui executar o programa não estava funcionandoporque o i não estava declarado, então declarei ele.. vê se ta certosó que agora esta dando erro no printf.. :huh:# include <stdio.h> int main () { int matricula[40]; float nota[40]; int frequencia[40]; int maior=-1, menor=-1; int total_reprovado = 0; int reprovado_falta = 0; int i=0; for(i=0; i<40; i++) { printf (“digite a matricula:“); scanf("%d", &matricula[i]); printf (“digite as tres notas:“); scanf("%f %f %f", &n1, &n2, &n3); nota[i] = (n1 + n2 + n3) / 3; printf (“digite a frequencia:“); scanf("%d", &frequencia[i]); } if (nota[i]>=6){ printf ("aprovado"); else printf ("reprovado"); } if (frequencia[i]<=40){ printf ("reprovado por falta"); } for(i=0; i<40; i++){ if(nota[i]<menor||menor==-1){ menor=nota[i]; } if(nota[i]>maior){ maior=nota[i]; } } for(i=0; i<40; i++) { printf("matricula: %d, nota final: %d, mensagem: ", matricula[i], nota[i]); if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { printf("reprovado\n"); total_reprovado++; } } printf("total de alunos reprovados: %d", total_reprovado); for(i = 0; i < 40; i++) { if(frequencia[i] < 40) reprovado_falta++; } printf("Percentagem de alunos reprovados por falta: %.1f", reprovado_falta / 40 * 100); return 0; } Editado Abril 8, 2010 por danan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 Qual o erro?A porcentagem está sendo calculada com erros?Se for isso, tente assim:(float)reprovado_falta / 40 * 100 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 (editado) já concertei o erro do printf.. agora ta no elsediz assim: expected primary-expression before "else" Editado Abril 8, 2010 por danan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 Diz que a função printf não está declarada?Se possível poste a descrição completa do erro.Edit:Como já concertou o erro, tente trocar:if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { Por: if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); }else {Faltou uma chave ali. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 então.. agora ta tudo certo, o programa rodousó que ele só pede os dados mas não calcula os resultados# include <stdio.h> int main () { float n1, n2, n3; int matricula[40]; float nota[40]; int frequencia[40]; int maior=-1, menor=-1; int total_reprovado = 0; float reprovado_falta = 0; int i=0; for(i=0; i<40; i++) { printf ("digite a matricula:"); scanf("%d", &matricula[i]); printf ("digite as tres notas:"); scanf("%f %f %f", &n1, &n2, &n3); nota[i] = (n1 + n2 + n3) / 3; printf ("digite a frequencia:"); scanf("%d", &frequencia[i]); } if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { printf ("reprovado"); } if (frequencia[i]<=40){ printf ("reprovado por falta"); } for(i=0; i<40; i++){ if(nota[i]<menor||menor==-1){ menor=nota[i]; } if(nota[i]>maior){ maior=nota[i]; } } for(i=0; i<40; i++) { printf("matricula: %d, nota final: %d, mensagem: ", matricula[i], nota[i]); if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { printf("reprovado\n"); total_reprovado++; } } printf("total de alunos reprovados: %d", total_reprovado); for(i = 0; i < 40; i++) { if(frequencia[i] < 40) reprovado_falta++; } printf("Percentagem de alunos reprovados por falta: %.1f", reprovado_falta / 40 * 100); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 (editado) O que essa parte depois do primeiro for faz ai?... if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { printf ("reprovado"); } if (frequencia[i]<=40){ printf ("reprovado por falta"); } ... Retira isso do seu código e tenta compilar de novo. E troca essa parte: printf("matricula: %d, nota final: %d, mensagem: ", matricula[i], nota[i]); Por esta: printf("matricula: %d, nota final: %.1f, mensagem: ", matricula[i], nota[i]);Volto a repetir, quando o compilador acusar um erro posta a mensagem de erro dele pra gente. Abraço. Editado Abril 8, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 então .. ta acontecendo a mesma coisafica pedindo os dados varias vezes e não calcula os resultadosesta aparecendo isso aqui: C:\Documents and Settings\Fernanda\Desktop\Sem Título1.cpp In function `int main()': 23 C:\Documents and Settings\Fernanda\Desktop\Sem Título1.cpp [Warning] converting to `int' from `float'26 C:\Documents and Settings\Fernanda\Desktop\Sem Título1.cpp [Warning] converting to `int' from `float' eu acho que o erro tem a ver com o calculo da maior e da menor nota Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 (editado) Testa esse código ai:int main (int argc, char *argv[]) { float n1, n2, n3; int matricula[40]; float nota[40]; int frequencia[40]; int maior=-1, menor=-1; int total_reprovado = 0; int reprovado_falta = 0; int i=0; for(i=0; i<40; i++) { printf ("\ndigite a matricula:"); scanf("%d", &matricula[i]); printf ("digite as tres notas:"); scanf("%f %f %f", &n1, &n2, &n3); nota[i] = (n1 + n2 + n3) / 3; printf ("digite a frequencia:"); scanf("%d", &frequencia[i]); } for(i=0; i<40; i++) { if(nota[i]<menor||menor==-1) { menor=nota[i]; } if(nota[i]>maior) { maior=nota[i]; } } for(i=0; i<40; i++) { printf("matricula: %d, nota final: %.1f, mensagem: ", matricula[i], nota[i]); if(nota[i] >= 6.0 && frequencia[i] >= 40) printf("aprovado\n"); else { printf("reprovado\n"); total_reprovado++; } } printf("\ntotal de alunos reprovados: %d", total_reprovado); for(i = 0; i < 40; i++) { if(frequencia[i] < 40) reprovado_falta++; } printf("\nPercentagem de alunos reprovados por falta: %.1f", (float)reprovado_falta / 40.0 * 100.0); return 0; } ... fica pedindo os dados varias vezes e não calcula os resultados Acho que você tá se esquecendo que seu programa deve realizar os cálculos dos 40 alunos. Portanto você vai ter que informar os dados dos 40 alunos, um por um e só depois disso ele realizará os cálculos. Cansativo né. Mas é isso. Se você não tiver paciência: muda o valor 40 nos fors para um valor menor, 4 por exemplo, e testa se der certo aumenta pra 40 de novo. for( i = 0; i < 40; i++) => for(i = 0; i < 4; i++) e também aqui: (float)reprovado_falta / 40.0 * 100.0) => (float)reprovado_falta / 4.0 * 100.0)Abraço. Editado Abril 8, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 é.. pode crer .. tem que informar os dados dos 40 alunosmt cansativo! valeu brigadao pela ajudaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 O tópico pode ser marcado com o Resolvido?Quer dizer, você já testou?Uma forma mais fácil de se fazer é diminuir o número de alunos (só pra testes). Se quiser pode colocar de acordo com uma variável. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danan Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 SIM! RESOLVIDO! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
danan
O sistema de avaliação de uma determinada disciplina obedece aos seguintes critérios:
- Durante o semestre são dadas três notas;
- A nota final é obtida pela média aritmética das três notas;
- É considerado aprovado o aluno que obtiver nota final superior ou igual a 6 e que tiver comparecido a um mínimo de 40 aulas.
Faça um programa que leia um conjunto de dados contendo o número da matrícula, as três notas e a freqüência (número de aulas freqüentadas).
Calcule e mostre:
a) Para cada aluno o número da matrícula, a nota final e a mensagem (aprovado ou reprovado);
b) A maior e a menor nota da turma;
c) O total de alunos reprovados;
d) a percentagem de alunos reprovados por freqüência abaixo da mínima necessária.
A turma tem 40 alunos.
eu preciso declarar a variável matrícula?
também tenho dúvidas em relação ao scanf e em como calcular a maior e a menor nota.
Editado por Jonathan QueirozModificar título para descrever melhor a dúvida e adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites
18 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.