Guest User

Rato_cybernetico

a guest
Feb 14th, 2011
696
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.24 KB | None | 0 0
  1. /*rato_cybernetico
  2. versão beta - ajude-me a aprimora-lo
  3. dia 12 de fevereiro de 2011*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9.  
  10. #define f 255
  11. #define w 3  //total de notas
  12. #define west 6
  13. typedef struct {
  14.     char nome[f];
  15.     unsigned long int matricula;
  16.     float media; //apenas declarei uma variavel nao entendi se deveria imprimir junto as notas com a media
  17.     char turma[9]; //nao entendi a questão da turma então coloquei ela na estrutura
  18. }turmas;
  19.  
  20. int entrada (void);
  21. void cadastro (void);
  22. float media_turma(void);
  23. int ordena (turmas *aula, int qnt, int i);
  24. void imprime_lista (turmas *final, int qnt);
  25. void imprime_aprovados (turmas *final, int qnt);
  26.  
  27. int main (int argc, char* argv[])
  28. {
  29.     int i,as;
  30.  
  31.     for (i=0;;i++){
  32.         as = entrada ();
  33.         switch (as){
  34.         case 1: cadastro ();
  35.             break;
  36.             case 2: return (EXIT_SUCCESS);
  37.         }
  38.     }
  39. }
  40.  
  41. int entrada (void)
  42. {
  43.     int escolha;
  44.  
  45.     puts ("1 - Cadastrar nova turma");
  46.     puts ("2 - Sair\n");
  47.     printf ("Escolha uma das opcoes ->");
  48.  
  49.     do {
  50.         scanf ("%d",&escolha);
  51.     }while (escolha < 1 || escolha > 2);
  52.     return escolha;
  53. }
  54.  
  55. void cadastro (void)
  56. {
  57.      turmas *aula, *aula1; //utilizo aula1 para ordenar os nomes alfabeticamente
  58.     int i,l,t,z,qnt,c;
  59.  
  60.     printf ("Quantidade de alunos na turma:");
  61.     scanf ("%d",&qnt);
  62.     printf ("\n");
  63.  
  64.     //alocando memoria para minha matriz de estrutura
  65.     aula = (turmas*) malloc(sizeof(turmas)*qnt);
  66.     aula1 = (turmas*) malloc(sizeof(turmas)*qnt);
  67.  
  68.         printf ("Turma:");
  69.         scanf ("%s",aula[0].turma);
  70.         printf ("\n");
  71.     for (i=0; i<qnt; i++){
  72.          fflush (stdin);
  73.          printf ("Nome do aluno:");
  74.          scanf ("%s",aula[i].nome); //no ambiente gnu/linux o gets nao funciona  e me limito ao scanf -pode me ajudar?
  75.          printf ("Matricula:");
  76.          scanf ("%lu",&aula[i].matricula);
  77.          aula[i].media = media_turma();
  78.          printf ("\n");
  79.     }
  80.  
  81.     //irei organizar os nomes alfabeticamente
  82.     for (i=0; i<qnt; i++){
  83.         fflush (stdin);
  84.         z = ordena(&aula[0], qnt, i);
  85.         t = strlen(aula[i].nome);
  86.         for (l=0; l<t; ++l)
  87.             aula1[z].nome[l] = aula[i].nome[l];
  88.         aula1[z].nome[l] = '\0';
  89.  
  90.         t = strlen(aula[i].turma);
  91.         for (l=0; l<t; l++)
  92.             aula1[z].turma[l] = aula[i].turma[l];
  93.             aula1[z].turma[l] = '\0';
  94.  
  95.         aula1[z].matricula = aula[i].matricula;
  96.         aula1[z].media = aula[i].media;
  97.     }
  98.     printf ("\tImprimir lista completa ou apenas dos aprovados? (1 - Sim, 2 - Nao)\n");
  99.     do{
  100.     scanf ("%d",&c);
  101.     }while (c < 1 || c>2);
  102.     if (c == 1)
  103.     imprime_lista (&aula1[0], qnt);
  104.     else
  105.     imprime_aprovados (&aula1[0], qnt);
  106.  
  107.     free (aula);
  108.     free (aula1);
  109. }
  110.  
  111.  
  112. float media_turma(void)  //modifiquei a função porque ao meu ver nao tem necessidade de haver tantos parametros - mas isso eh para mim!
  113. {
  114.     int i,l=0;
  115.     float med;
  116.  
  117.     for (i=0; i< w; i++){
  118.         printf ("Nota da avaliacao %d =>",i+1);
  119.         scanf ("%d",&l);
  120.         med+=l;
  121.     }
  122.     med /= w;
  123.     return med;
  124. }
  125.  
  126. int ordena (turmas *aula, int qnt, int i)
  127. {
  128.     int j,l,p=0;
  129.  
  130.     for (j=0; j<qnt; j++){
  131.         for (l=0; l<f;l++){
  132.         if (!aula[i].nome[l]) break;
  133.         if (!aula[j].nome[l]){
  134.                    p++;
  135.            break;
  136.            }
  137.         if (aula[i].nome[l] > aula[j].nome[l]){
  138.            p++;
  139.            break;
  140.         }
  141.         if (aula[i].nome[0] < aula[j].nome[l]) break;
  142.          }
  143.     }
  144.     return p;
  145. }
  146.  
  147.  
  148. void imprime_lista (turmas *final, int qnt)
  149. {
  150.     int i;
  151.  
  152.     puts ("\n------------------------------------------------------------------\n");
  153.     puts ("  Turma  |    Matricula   |       Nome do aluno       |  Media final\n");
  154.     for (i=0; i<qnt; i++){
  155.            printf ("%5s %12lu %25s %20.2f\n",final[0].turma,final[i].matricula,final[i].nome,final[i].media);
  156.            puts ("\n------------------------------------------------------------------\n");
  157.     }
  158. }
  159.  
  160. void imprime_aprovados (turmas *final, int qnt)
  161. {
  162.     int i;
  163.     puts ("\n------------------------------------------------------------------\n");
  164.     puts ("  Turma  |    Matricula   |       Nome do aluno       |  Media final\n");
  165.     for (i=0; i<qnt; i++){
  166.         if (final[i].media >= west){
  167.            printf ("%5s %12lu %25s %20.2f\n",final[0].turma,final[i].matricula,final[i].nome,final[i].media);
  168.            puts ("\n------------------------------------------------------------------\n");
  169.         }
  170.     }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment