Advertisement
Cividati

beta3

Nov 21st, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h> //getch
  4. #include <locale.h> //acentuação
  5.  
  6. /** ATENÇÃO
  7.  *  1.O arquivo ja deve existir com pelo menos um registro formatado!
  8.  **/
  9.  
  10.  
  11.  
  12. char seleciona_menu()
  13. {
  14.     char op;
  15.     printf("selecione uma das opções\n"
  16.            "0.Sair\n"
  17.            "1.Jogar\n"
  18.            "2.Ranking\n"
  19.            "R.");
  20.     scanf ("%s",&op);
  21.     system ("cls");
  22.  
  23.     return op;
  24. }
  25.  
  26. struct registro
  27. {
  28.     char nome[50];
  29.     int pontuacao;
  30.     struct registro *esq, *dir;
  31.  
  32. };
  33. typedef struct registro* registroptr;
  34.  
  35. // Funcao para criar o primeiro no de uma lista circular duplamente ligada
  36. void criad(registroptr *lista,char x[], int pont)
  37. {
  38.     registroptr p;
  39.     p = (registroptr)malloc(sizeof(struct registro));
  40.     strcpy(p->nome,x);
  41.     p->pontuacao=pont;
  42.     p->esq = p;
  43.     p->dir = p;
  44.     *lista = p;
  45. }
  46.  
  47.  
  48.  
  49. // Funcao para inserir um no a direita do no apontado por p em uma lista circular duplamente ligada
  50. void inseredir(registroptr *p,char x[], int pont)
  51. {
  52.  
  53.     registroptr q;
  54.     registroptr d; // ponteiro para o no a direita de p
  55.     q = (registroptr)malloc(sizeof(struct registro));
  56.  
  57.     strcpy(q->nome,x);
  58.     q->pontuacao=pont;
  59.  
  60.     d = (*p)->dir;
  61.     d->esq = q;
  62.     q->dir = d;
  63.     q->esq = *p;
  64.     (*p)->dir = q;
  65. }
  66.  
  67. // Funcao para inserir um no a esquerda do no apontado por p em uma lista circular
  68. //duplamente ligada
  69. void insereesq(registroptr *p, char x[] ,int pont)
  70. {
  71.     registroptr q;
  72.     registroptr e; // ponteiro para o no a direita de p
  73.     q = (registroptr)malloc(sizeof(struct registro));
  74.  
  75.     q->pontuacao=pont;
  76.     strcpy(q->nome,x);
  77.  
  78.     e = (*p)->esq;
  79.     e->dir = q;
  80.     q->esq = e;
  81.     q->dir = *p;
  82.     (*p)->esq = q;
  83. }
  84.  
  85. void insere_auto (registroptr *p, char nome[], int pont)
  86. {
  87.     registroptr q;
  88.     q=*p;
  89.     int cont=0;
  90.     int c=0;
  91.     do
  92.     {
  93.         cont ++;
  94.         if(q->pontuacao <= pont)
  95.         {
  96.             insereesq(&q, nome, pont);
  97.             printf ("inserido1!\n");
  98.  
  99.             for (c;c<cont;c++)
  100.                 q=q->esq;
  101.             *p=q;
  102.             return;
  103.         }
  104.         else if (q->pontuacao > q->esq->pontuacao && pont <= q->esq->pontuacao)
  105.         {
  106.             printf ("inserido2!\n");
  107.             insereesq(&q, nome, pont);
  108.             *p=q;
  109.             return;
  110.         }
  111.  
  112.         q=q->dir;
  113.     }while(q!=*p);
  114.  
  115. }
  116.  
  117. void mostrar_lista (registroptr p)
  118. {
  119.     registroptr q;
  120.  
  121.     system ("cls");
  122.     printf ("Pontuação || Nome\n");
  123.     q=p;
  124.     do
  125.     {
  126.         printf ("%d || %s\n",  q->pontuacao,q->nome);
  127.         q=q->dir;
  128.     }while(p!=q);
  129.     getch();
  130.     system ("cls");
  131. }
  132.  
  133. int main()
  134. {
  135.     setlocale(LC_ALL, "Portuguese"); //habilitando acentos
  136.     char op;
  137.     FILE *arquivo;
  138.  
  139.     system ("color f");
  140.     printf("Bem vindo ao Joguinho\n");
  141.     op = seleciona_menu();
  142.     while (op!='0')
  143.     {
  144.         switch(op)
  145.         {
  146.         case '1':
  147.  
  148.             system ("cls");
  149.             char nome[50];
  150.             printf ("Digite seu primeiro nome: ");
  151.             fflush(stdin);
  152.             gets(nome);
  153.             system ("cls");
  154.  
  155.             printf ("escolha a dificuldade\n"
  156.                     "1.Funções de primeiro grau\n"
  157.                     "2.Funções de segundo grau\n"
  158.                     "3.Funções de terceiro grau\n"
  159.                     "R.");
  160.             int pontuacao;
  161.             scanf ("%d",&pontuacao);
  162.  
  163.             //funcao_rafael(op);
  164.              //op nesse caso é a dificuldade
  165.  
  166.  
  167.  
  168.             registroptr lista = NULL;
  169.  
  170.             char rnome[50];
  171.             int rpontuacao;
  172.             arquivo = fopen("arquivo.txt", "r");
  173.             if (arquivo==NULL)
  174.                 printf ("erro ao abrir o arquivo\n");
  175.             else
  176.             {
  177.                 while((fscanf(arquivo,"%s %d\n",rnome, &rpontuacao))!=EOF)
  178.                     if(lista==NULL)
  179.                         criad(&lista,rnome,rpontuacao);
  180.  
  181.                     else
  182.                     {
  183.                         inseredir(&lista,rnome,rpontuacao);
  184.                         lista=lista->dir;
  185.                     }
  186.                     fclose(arquivo);
  187.             }
  188.             lista=lista->dir;
  189.  
  190.             mostrar_lista(lista);
  191.             insere_auto(&lista, nome, pontuacao);
  192.             getch();
  193.  
  194.  
  195.  
  196.             //inserindo os dados no arquivo
  197.             arquivo = fopen("arquivo.txt", "w+");
  198.             if(arquivo==NULL)
  199.                 printf ("erro ao abrir o arquivo\n");
  200.             else
  201.             {
  202.                 registroptr p;
  203.                 p=lista;
  204.                 do
  205.                 {
  206.                     fprintf (arquivo, "%s %d\n", p->nome,p->pontuacao);
  207.                     p=p->dir;
  208.                 }while(p!=lista);
  209.                 fclose(arquivo);
  210.             }
  211.  
  212.  
  213.  
  214.             break;
  215.  
  216.         case '2':
  217.             system ("color a");
  218.             arquivo = fopen("arquivo.txt","r");
  219.             if(arquivo==NULL)
  220.                 printf ("\nerro ao abrir arquivo..\n");
  221.             else
  222.             {
  223.                 printf ("Pontos || Nome\n");
  224.                 while((fscanf(arquivo,"%s %d\n",nome, &pontuacao))!=EOF)
  225.                     printf ("%d || %s\n", pontuacao,nome);
  226.  
  227.                 fclose(arquivo);
  228.             }
  229.  
  230.  
  231.             printf ("pressione alguma tecla pra continuar...");
  232.             getch();
  233.             system ("color f");
  234.             system ("cls");
  235.             break;
  236.  
  237.         default:
  238.             printf ("opção inválida! Pressione qualquer tecla\n");
  239.             getch();
  240.             system ("cls");
  241.             break;
  242.         }
  243.         op = seleciona_menu();
  244.     }
  245.     system ("color d");
  246.     printf ("obrigado por jogar :)");
  247.  
  248.  
  249.  
  250.     return 0;
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement