Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*rato_cybernetico
- versão beta - ajude-me a aprimora-lo
- dia 12 de fevereiro de 2011*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define f 255
- #define w 3 //total de notas
- #define west 6
- typedef struct {
- char nome[f];
- unsigned long int matricula;
- float media; //apenas declarei uma variavel nao entendi se deveria imprimir junto as notas com a media
- char turma[9]; //nao entendi a questão da turma então coloquei ela na estrutura
- }turmas;
- int entrada (void);
- void cadastro (void);
- float media_turma(void);
- int ordena (turmas *aula, int qnt, int i);
- void imprime_lista (turmas *final, int qnt);
- void imprime_aprovados (turmas *final, int qnt);
- int main (int argc, char* argv[])
- {
- int i,as;
- for (i=0;;i++){
- as = entrada ();
- switch (as){
- case 1: cadastro ();
- break;
- case 2: return (EXIT_SUCCESS);
- }
- }
- }
- int entrada (void)
- {
- int escolha;
- puts ("1 - Cadastrar nova turma");
- puts ("2 - Sair\n");
- printf ("Escolha uma das opcoes ->");
- do {
- scanf ("%d",&escolha);
- }while (escolha < 1 || escolha > 2);
- return escolha;
- }
- void cadastro (void)
- {
- turmas *aula, *aula1; //utilizo aula1 para ordenar os nomes alfabeticamente
- int i,l,t,z,qnt,c;
- printf ("Quantidade de alunos na turma:");
- scanf ("%d",&qnt);
- printf ("\n");
- //alocando memoria para minha matriz de estrutura
- aula = (turmas*) malloc(sizeof(turmas)*qnt);
- aula1 = (turmas*) malloc(sizeof(turmas)*qnt);
- printf ("Turma:");
- scanf ("%s",aula[0].turma);
- printf ("\n");
- for (i=0; i<qnt; i++){
- fflush (stdin);
- printf ("Nome do aluno:");
- scanf ("%s",aula[i].nome); //no ambiente gnu/linux o gets nao funciona e me limito ao scanf -pode me ajudar?
- printf ("Matricula:");
- scanf ("%lu",&aula[i].matricula);
- aula[i].media = media_turma();
- printf ("\n");
- }
- //irei organizar os nomes alfabeticamente
- for (i=0; i<qnt; i++){
- fflush (stdin);
- z = ordena(&aula[0], qnt, i);
- t = strlen(aula[i].nome);
- for (l=0; l<t; ++l)
- aula1[z].nome[l] = aula[i].nome[l];
- aula1[z].nome[l] = '\0';
- t = strlen(aula[i].turma);
- for (l=0; l<t; l++)
- aula1[z].turma[l] = aula[i].turma[l];
- aula1[z].turma[l] = '\0';
- aula1[z].matricula = aula[i].matricula;
- aula1[z].media = aula[i].media;
- }
- printf ("\tImprimir lista completa ou apenas dos aprovados? (1 - Sim, 2 - Nao)\n");
- do{
- scanf ("%d",&c);
- }while (c < 1 || c>2);
- if (c == 1)
- imprime_lista (&aula1[0], qnt);
- else
- imprime_aprovados (&aula1[0], qnt);
- free (aula);
- free (aula1);
- }
- float media_turma(void) //modifiquei a função porque ao meu ver nao tem necessidade de haver tantos parametros - mas isso eh para mim!
- {
- int i,l=0;
- float med;
- for (i=0; i< w; i++){
- printf ("Nota da avaliacao %d =>",i+1);
- scanf ("%d",&l);
- med+=l;
- }
- med /= w;
- return med;
- }
- int ordena (turmas *aula, int qnt, int i)
- {
- int j,l,p=0;
- for (j=0; j<qnt; j++){
- for (l=0; l<f;l++){
- if (!aula[i].nome[l]) break;
- if (!aula[j].nome[l]){
- p++;
- break;
- }
- if (aula[i].nome[l] > aula[j].nome[l]){
- p++;
- break;
- }
- if (aula[i].nome[0] < aula[j].nome[l]) break;
- }
- }
- return p;
- }
- void imprime_lista (turmas *final, int qnt)
- {
- int i;
- puts ("\n------------------------------------------------------------------\n");
- puts (" Turma | Matricula | Nome do aluno | Media final\n");
- for (i=0; i<qnt; i++){
- printf ("%5s %12lu %25s %20.2f\n",final[0].turma,final[i].matricula,final[i].nome,final[i].media);
- puts ("\n------------------------------------------------------------------\n");
- }
- }
- void imprime_aprovados (turmas *final, int qnt)
- {
- int i;
- puts ("\n------------------------------------------------------------------\n");
- puts (" Turma | Matricula | Nome do aluno | Media final\n");
- for (i=0; i<qnt; i++){
- if (final[i].media >= west){
- printf ("%5s %12lu %25s %20.2f\n",final[0].turma,final[i].matricula,final[i].nome,final[i].media);
- puts ("\n------------------------------------------------------------------\n");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment