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

(Resolvido) Sistema de avaliação


danan

Pergunta

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 por Jonathan Queiroz
Modificar 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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

# 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 por danan
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por RonaldoRG
Link para o comentário
Compartilhar em outros sites

  • 0

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);

Link para o comentário
Compartilhar em outros sites

  • 0

Ronaldo, quando fui executar o programa não estava funcionando

porque o i não estava declarado, então declarei ele.. vê se ta certo

só 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 por danan
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

então.. agora ta tudo certo, o programa rodou

só 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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

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 por RonaldoRG
Link para o comentário
Compartilhar em outros sites

  • 0

então .. ta acontecendo a mesma coisa

fica pedindo os dados varias vezes e não calcula os resultados

esta 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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por RonaldoRG
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,4k
×
×
  • Criar Novo...