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

[Ajuda] Programa de média de testes de alunos com matrizes.


PedroCJ

Pergunta

Bom dia! Comecei a trabalhar em C há algumas semanas atrás e tenho um trabalho para entregar na quinta. O único problema é que nem todas as funcionalidades do meu programa estão a trabalhar devidamente. Se alguém me poder ajudar, agradeço.

O programa devia de calcular:

-- A media da turma;

-- A media de cada aluno;

-- A media maxima e a media minima;

-- Quantos alunos tiveram media positiva;

-- Quantos alunos tiveram media negativa;

- Quantos alunos tiveram nota superior a 16;

- Quantos alunos tiveram nota entre 12 e 15.

- Quantos alunos tiveram nota inferior a 10.

As últimas 3 partes do programa, por alguma razão, não estão a funcionar devidamente. :X

Aqui está o código:

#include <stdio.h>
#include <stdlib.h>
main()
{
     /*
                        -- A media da turma;
                        -- A media de cada aluno;
                        -- A media maxima e a media minima;
                        -- Quantos alunos tiveram media positiva;
                        -- Quantos alunos tiveram media negativa;
                        - Quantos alunos tiveram nota superior a 16;
                        - Quantos alunos tiveram nota entre 12 e 15.
                        - Quantos alunos tiveram nota inferior a 10.
      */
      
      
      /* 
      n1 = nota1, n2 = nota2, maior=media maior, menor= media menor, mediaf = media final
      
      na = numero de alunos, c = controlo, nap = numero de alunos com media positiva, nan = numero de alunos com media  negativa
      
      ns16 - numero de alunos com nota superior a 16,  n12_n15 - nota superior a 12 e inferior a 15,ni10 - numero de alunos com nota inferior a 10  */
      
      

      
      float n1, n2, maior, menor, mediaf;
      
      float media[32];
      char nome[32][30];
      
      int c,na,nap=0,nan=0,n16=0,n12_n15=0,ni10=0;
      
      printf("Qual e' o numero de alunos da turma: ");
      scanf("%d", &na);
      
      /* ------------------------------------------------------------------------------------------
                                                  Media Individual
      ---------------------------------------------------------------------------------------------*/
      
      for(c=0;c<=na-1;c++)
                  {
                                  printf("Qual o nome do aluno: ");
                                  scanf("%s", &nome[c]);
                                  
                                  printf("Qual a nota do primeiro teste: ");
                                  scanf("%f", &n1);
                                   
                                  printf("Qual a nota do segundo teste: ");
                                  scanf("%f", &n2);
                                   
                                  media[c]=(n1+n2)/2;               

          }
                  

     
         /* ------------------------------------------------------------------------------------
                  
         --------------------------------------Media Maxima e media minima------------------
          ----------------------------------------------------------------------------------------*/
       maior=0;
       menor=20;
       
       for(c=0;c<=na-1;c++)
       
       {                   
                           
                  /*-------------------------------------------------------------------------------------------------------       
                  ---------------------------------------- Media da turma -----------------------------------------
                  -------------------------------------------------------------------------------------------------------*/    
         

                    mediaf=mediaf+media[c];
                                        
                    if(media[c]>maior)
                    maior=media[c];
                                                        
                    if(media[c]<menor)
                    menor=media[c];
                                       
                       /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos que tiveram media positiva -----------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(media[c]>=10)
                       nap=nap+1;
                       
                        /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos que tiveram media negativa -----------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(media[c]<10)
                       nan=nan+1;
                       
                       /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos com nota superior a 16 ---------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(n1>16 || n2>16)
                       n16=n16+1;
                       
                       /*------------------------------------------------------------------------------------
                       -----------------------Numero de alunos com nota superior 12 e inferior a 15----------
                       ------------------------------------------------------------------------------------*/
                       
                       if((n1>12 && n1<15) || (n2>12 && n2<15))
                       n12_n15=n12_n15+1;

                       
                       /*------------------------------------------------------------------------------------
                       -----------------------Numero de alunos com nota inferior a 10------------------------
                       ------------------------------------------------------------------------------------*/

                       if(n1<10 || n2<10)
                       ni10=ni10+1;

                       

                       printf("\nO %s tem uma media de %f", nome[c], media[c]);
                      
       }
       
                              
       mediaf=mediaf/na; /* media final */
       
      
       printf("\nA media da turma e' de %f.", mediaf);
       printf("\nA media maxima foi de %f", maior);
       printf("\nA media minima foi de %f", menor);
       printf("\nHouve %d alunos com media positiva", nap);
       printf("\nHouve %d alunos com media negativa", nan);
       printf("\nHouve %d alunos com nota superior a 16", n16);
       printf("\nHouve %d alunos com uma nota superior a 12 e inferior a 15", n12_n15);
       printf("\nHouve %d alunos com nota inferior a 10", ni10);
       
       system("pause");
                                  
       
}

-----------------------

Obrigado uma vez mais.

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

8 respostass a esta questão

Posts Recomendados

  • 0

Saudações,

Para fazer as verificações com as notas você está levando em consideração apenas a última nota digitada ("n1" e "n2") e não a nota respectiva de cada aluno.

Você pode armazenar as notas dos alunos para realizar as validações depois ou terá que fazer na hora de leitura das notas (da mesma forma que monta a média dos alunos).

Sacou?! ;)

Abraços,

William Rodrigues.

Link para o comentário
Compartilhar em outros sites

  • 0
Saudações,

Para fazer as verificações com as notas você está levando em consideração apenas a última nota digitada ("n1" e "n2") e não a nota respectiva de cada aluno.

Você pode armazenar as notas dos alunos para realizar as validações depois ou terá que fazer na hora de leitura das notas (da mesma forma que monta a média dos alunos).

Sacou?! ;)

Abraços,

William Rodrigues.

Então era suposto criar uma matriz para cada a 'n1' e a 'n2', certo? Qualquer das formas eu comecei a fazer isso e isto deu-me uns erros. Eu tentei fazer com base na matriz do 'nome' e da 'media', mas de certeza que estou a fazer alguma coisa de errado. Não consegui ainda perceber o quê. :x Podia-me dizer como devia de ficar o codigo e depois eu irei estudá-lo e perceber o porquê? :)

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Li com mais atenção o primeiro post, e aparentemente agora está a funcionar devidamente - armazenar as notas foi definitivamente a melhor solução. Estava também a fazer confusão com uns printf's, mas agora também já estão resolvidos. Muito obrigado pelas respostas. :)

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

  • 0

Saudações,

Se você colocar as linhas abaixo fora do "loop" ficará menos confuso a saída do programa:

printf("\nHouve %d alunos com nota superior a 16", n16);
printf("\nHouve %d alunos com uma nota superior a 12 e inferior a 15", n12_n15);
printf("\nHouve %d alunos com nota inferior a 10", ni10);

Ainda tem alguma dúvida ? :huh:

Abraços,

William Rodrigues.

Link para o comentário
Compartilhar em outros sites

  • 0
Saudações,

Se você colocar as linhas abaixo fora do "loop" ficará menos confuso a saída do programa:

printf("\nHouve %d alunos com nota superior a 16", n16);
printf("\nHouve %d alunos com uma nota superior a 12 e inferior a 15", n12_n15);
printf("\nHouve %d alunos com nota inferior a 10", ni10);
Ainda tem alguma dúvida ? :huh: Abraços, William Rodrigues.
Oh, estive agora a tentar melhorar o programa e sim, na realidade tenho mais uma questão: Não estou a pôr o código todo, porque os printf's que vem a seguir estão bem, é só mesmo na parte do programa quando ele tem de dizer os nomes é que não está a funcionar: o dev c++ compila, mas depois dá erro enquanto está a correr.
#include <stdio.h>
#include <stdlib.h>
main()
{
     /*
                        -- A media da turma;
                        -- A media de cada aluno;
                        -- A media maxima e a media minima;
                        -- Quantos alunos tiveram media positiva;
                        -- Quantos alunos tiveram media negativa;
                        - Quantos alunos tiveram nota superior a 16;
                        - Quantos alunos tiveram nota entre 12 e 15.
                        - Quantos alunos tiveram nota inferior a 10.
      */
      
      
      /* 
      n1 = nota1, n2 = nota2, maior=media maior, menor= media menor, mediaf = media final
      
      na = numero de alunos, c = controlo, nap = numero de alunos com media positiva, nan = numero de alunos com media  negativa
      
      ns16 - numero de alunos com nota superior a 16,  n12_n15 - nota superior a 12 e inferior a 15,ni10 - numero de alunos com nota inferior a 10  
      
      nada= numero do aluno;*/
      
      

      
      float maior, menor, mediaf;
      
      float media[32],n1[32],n2[32];
      char nome[32][32];
      
      int c,na,nap=0,nan=0,n16=0,n12_n15=0,ni10=0, nada=0;
      
      printf("Qual e' o numero de alunos da turma? \n(Tenha em conta que a turma podera ter apenas ate 32 alunos.)\n");
      scanf("%d", &na);
      
      /* ------------------------------------------------------------------------------------------
                                                  Media Individual
      ---------------------------------------------------------------------------------------------*/
      
      for(c=0;c<=na-1;c++)
                  {
                                  nada=nada+1;
                                  printf("\nQual o nome do aluno numero %d?\n(Insira o primeiro e o ultimo nome)\n", nada);
                                  scanf("%s%s", &nome[c][c]);
                                 
                                  
                                  printf("Qual foi a nota que o(a) %s %s teve no primeiro teste?\n", nome[c]);
                                  scanf("%f", &n1[c]);
                                   
                                  printf("E no segundo?\n");
                                  scanf("%f", &n2[c]);
                                   
                                  media[c]=(n1[c]+n2[c])/2;               

          }
                  

     

       maior=0;
       menor=20;
       
       for(c=0;c<=na-1;c++)
       
       {                   
                       
                  /*-------------------------------------------------------------------------------------------------------       
                  ---------------------------------------- Media da turma -----------------------------------------
                  -------------------------------------------------------------------------------------------------------*/    
         

                    mediaf=mediaf+media[c];
                   
                   /* ------------------------------------------------------------------------------------
                  --------------------------------------Media Maxima e media minima-----------------------
                  ----------------------------------------------------------------------------------------*/                     
                    if(media[c]>maior)
                    maior=media[c];
                                                        
                    if(media[c]<menor)
                    menor=media[c];
                                       
                       /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos que tiveram media positiva -----------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(media[c]>=10)
                       nap=nap+1;
                       
                        /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos que tiveram media negativa -----------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(media[c]<10)
                       nan=nan+1;
                       
                       /*------------------------------------------------------------------------------------
                       -------------------------------Numero de alunos com nota superior a 16 ---------------
                       ------------------------------------------------------------------------------------*/
                       
                       if(n1[c]>16 || n2[c]>16)
                       n16=n16+1;
                       
                       /*------------------------------------------------------------------------------------
                       -----------------------Numero de alunos com nota superior 12 e inferior a 15----------
                       ------------------------------------------------------------------------------------*/
                       
                       if((n1[c]>12 && n1[c]<15) || (n2[c]>12 && n2[c]<15))
                       n12_n15=n12_n15+1;

                       
                       /*------------------------------------------------------------------------------------
                       -----------------------Numero de alunos com nota inferior a 10------------------------
                       ------------------------------------------------------------------------------------*/

                       if(n1[c]<10 || n2[c]<10)
                       ni10=ni10+1;
                       
                        printf("------------------------\nMedias finais da turma:\n------------------------");        
                        printf("--------------------------\nO %s %s tem uma media de %f\n--------------------------\n", nome[c][c], media[c]);
                                
                       
                       
                      
       }
       
      system("pause");               
       
}
Acredito que seja ou aqui:
printf("\nQual o nome do aluno numero %d?\n(Insira o primeiro e o ultimo nome)\n", nada);
         scanf("%s%s", &nome[c][c]);
...ou aqui:
printf("------------------------\nMedias finais da turma:\n------------------------");        
printf("--------------------------\nO %s %s tem uma media de %f\n--------------------------\n", nome[c][c], media[c]);

...que está o erro, mas não sei como solucionar.

Link para o comentário
Compartilhar em outros sites

  • 0

Alguém sabe o porquê? :o Isto pode não ajudar muito, mas só estou a fazer um double post porque tenho de entregar isto amanhã :S

Supostamente a variável nome[32][32] devia de armazenar dois nomes por pessoa (o primeiro e o ultimo nome), mas por alguma razão isto compila, mas da forma que eu estou a fazer, depois dá erro quando chega à parte de dizer a média de cada aluno. O programa simplesmente pára de correr.

Link para o comentário
Compartilhar em outros sites

  • 0

printf("\nQual o nome do aluno numero %d?\n(Insira o primeiro e o ultimo nome)\n", nada);
         scanf("%s%s", &nome[c][c]);
Para um string alocar 2 nomes (Nome e sobrenome) não se usa uma matriz[j] e sim matriz, pois o string é um conjunto de palavras. Exemplo:
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]){
    
    char palavra[10];
    
    strcpy(palavra, "Jose Maria");
    
    printf("Nome : %s\n", palavra);
    

  system("PAUSE");    
  return 0;
}

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