Advertisement
weldisalves

Lista 07 - exercício 03

Aug 11th, 2013
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX_ALUNOS 10
  4. #define TAM_NOME 50
  5.  
  6. /* 1. No programa do exemplo 1, acrescente na estrutura que representa o aluno um campo para
  7. armazenar a quantidade de faltas. Faça as modificações necessárias no programa para que o novo
  8. campo seja utilizado na entrada e saída de dados. Dê um bônus de 0,5 pontos na média final para o
  9. aluno que não tem faltas.
  10. Para isso, crie as seguintes duas funções:
  11.  a função 'solicitaFaltas' que faz a entrada da quantidade de faltas. Observe o
  12.      funcionamento semelhante da função 'solicitaNota'
  13.  a função ‘bonusMedia’, que retorna 0,5 pontos sempre que o aluno não tiver faltas. Para isso, ela
  14.           deverá receber a quantidade de faltas como argumento. Faça a sua chamada de dentro da
  15.            função ‘calculaMedia’ para acrescentar a pontuação de bônus de forma apropriada e altere o
  16.                    que for necessário em ‘calculaMedia’.
  17. Sugestão para o protótipo destas funções:
  18. float solicitaNota(void);
  19. float calculaMedia(float nota1, float nota2, float pontos, int fal);
  20. float bonusMedia(int fal); */
  21.  
  22. /* 2. Ainda no exemplo 1, acrescente a função 'exibeTodosAlunos'. Esta função deverá receber como
  23. argumento o vetor contendo todos os alunos e fazer a exibição de cada um através da chamada da
  24. função já existente 'exibeAluno'.
  25. Sugestão de protótipo:
  26. void exibeTodosAlunos(struct TipoAluno turma[]);
  27. Observe que o parâmetro turma indicado com colchetes [] se refere ao vetor inteiro e não somente a um
  28. aluno.
  29. Após a sua construção, use-a no programa principal. */
  30.  
  31.  
  32. /* 3. Modifique o exemplo (juntamente com as alterações propostas nos exercícios 1 e 2) para que a
  33. quantidade de alunos possa ser decidida durante a entrada de dados. Por exemplo, permita que o
  34. usuário finalize a entrada quando o nome for vazio.
  35. Observe que a função exibeTodosAlunos precisará da quantidade de alunos que deixa de ser sempre
  36. especificada pela constante MAX_ALUNOS. Sugestão de protótipo:
  37. void exibeTodosAlunos(struct TipoAluno turma[], int qtde); */
  38.  
  39. struct TipoAluno {
  40.     char nome[TAM_NOME];
  41.     float media;
  42.     int faltas;
  43.     };
  44.  
  45. int solicitaFaltas()
  46. {
  47.     int faltas;
  48.  
  49.     do{
  50.         printf("\n Digite o numero de faltas: ");
  51.         scanf("%d",&faltas);
  52.  
  53.         if(faltas<0) printf("\n ERROR: Numero negativo!");
  54.         }while(faltas<0);
  55.     return faltas;
  56. }
  57.  
  58. float solicitaNota()
  59. {
  60.     float nota;
  61.  
  62.     do {
  63.         scanf("%f", &nota);
  64.         if(nota < 0 || nota > 10)printf("Erro, valor deve ser de 0 a 10 \n");
  65.         }while(nota < 0 || nota > 10);
  66. return nota;
  67. }
  68.  
  69. float bonusMedia(int faltas)
  70. {
  71.     float bonus=0;
  72.     if(faltas==0) bonus=0.5;
  73.     return bonus;
  74. }
  75. float calculaMedia(float nota1,float nota2,float pontos,int faltas)
  76. {
  77.     float bonus=bonusMedia(faltas);
  78.     float media = (nota1+nota2)/2 + pontos+bonus;
  79.  
  80.     return media;
  81. }
  82.  
  83. void exibeAluno(struct TipoAluno aluno)
  84. {
  85.     printf("\n\nAluno: %s", aluno.nome);
  86.     printf(" Media: %.2f", aluno.media);
  87. }
  88.  
  89. void exibeTodosAlunos(struct TipoAluno alunos[],int tam)
  90. {
  91.     int i;
  92.  
  93.     for(i=0;i<tam;i++)
  94.     {
  95.         printf("\n\n Nome: %s",alunos[i].nome);
  96.         printf(" Media: %.2f",alunos[i].media);
  97.         printf("\n Faltas: %d\n",alunos[i].faltas);
  98.     }
  99.  
  100. }
  101. int main()
  102. {
  103.     struct TipoAluno alunos[MAX_ALUNOS];
  104.     float nota1, nota2, pontos;
  105.     int i=0,j;
  106.     char opcao;
  107.     while(i<MAX_ALUNOS)
  108.     {
  109.         printf("\nEntre com o nome do aluno: ");
  110.         __fpurge(stdin);
  111.         fgets(alunos[i].nome,TAM_NOME,stdin);
  112.         printf("Entre com a primeira nota (0 a 10): ");
  113.         nota1 = solicitaNota();
  114.         printf("Entre com a segunda nota (0 a 10): ");
  115.         nota2 = solicitaNota();
  116.         printf("Entre com os pontos (0 a 10): ");
  117.         pontos = solicitaNota();
  118.         alunos[i].faltas=solicitaFaltas();
  119.         alunos[i].media = calculaMedia(nota1, nota2, pontos,alunos[i].faltas);
  120.  
  121.         printf("\n Deseja parar?(s/n) : ");
  122.         getchar();
  123.         scanf("%c",&opcao);
  124.  
  125.         i++;
  126.  
  127.         if(opcao=='s')break;
  128.     }
  129.  
  130.     for(j=0; j < i; j++)
  131.     {
  132.         exibeAluno(alunos[j]);
  133.     }
  134.     exibeTodosAlunos(alunos,i);
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement