Advertisement
Eriol-kun

pointers_whee_final

Nov 7th, 2011
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4.  
  5. #define KEYSIZE 6
  6.  
  7. struct node // estructura de lista enlazada
  8. {
  9.     int data;
  10.     struct node* next;
  11. };
  12.  
  13. int key[KEYSIZE] = { 6, 0, 1, 9, 3, 3 };  // La clave es 601933
  14. int a;
  15.  
  16. int readInt()
  17. {
  18.     int someint;
  19.     scanf("%i", &someint);
  20.     fflush(stdin);
  21.  
  22.     if((someint < 10) && (someint > -1))
  23.         return(someint);
  24.     else
  25.     {
  26.         puts("\n\nLa tecla ingresada no es un digito valido del 0 al 9.");
  27.         return(10);
  28.     }
  29. }
  30.  
  31. int byArray(int array[])  // Utilizando un arreglo como metodo de verificacion
  32. {
  33.     puts("\nComprobando por el metodo de arreglo...");
  34.    
  35.     for(a = 0; a < KEYSIZE; a++)
  36.     {
  37.         if(array[a] != key[a])
  38.         {
  39.             printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a+1), array[a], key[a]);
  40.             return 0;
  41.         }
  42.     }
  43.    
  44.     system("cls");
  45.     puts("Acceso aprobado.");
  46.     return 1;
  47. }
  48.  
  49. int byPointer(int *array) // Utilizando un puntero como metodo de verificacion
  50. {
  51.     puts("\nComprobando por el metodo de puntero...");
  52.    
  53.     int *array_ptr = array;
  54.     for(a = 0; a < KEYSIZE; a++)
  55.     {
  56.         if(*(array_ptr + a) != key[a])
  57.         {
  58.             printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), array[a], key[a]);
  59.             return 0;
  60.            
  61.             free(array_ptr);
  62.             free(array);
  63.         }
  64.     }
  65.    
  66.     free(array_ptr);
  67.     free(array);
  68.    
  69.     system("cls");
  70.     puts("Acceso aprobado.");
  71.     return 1;
  72. }
  73.  
  74. void Add(struct node** headRef, int data) // agregar nodo en la lista enlazada
  75. {
  76.     struct node* newNode = malloc(sizeof(struct node));
  77.     newNode->data = data;
  78.     newNode->next = *headRef;
  79.     *headRef = newNode;
  80. }
  81.  
  82. struct node* makeLinkedList() // creacion de lista enlazada
  83. {
  84.     int value;
  85.     struct node* head = NULL;
  86.     struct node** lastPointer = &head;
  87.    
  88.     for(a = 0; a < KEYSIZE; a++)
  89.     {
  90.         printf("Ingrese el digito #%i: ", (a + 1));
  91.         value = readInt();
  92.         Add(lastPointer, value);
  93.         lastPointer = &((*lastPointer)->next);
  94.        
  95.         if(value == 10)
  96.         {
  97.             a = (KEYSIZE + 1);
  98.             return(NULL);
  99.         }
  100.     }
  101.     return(head);
  102. }
  103.  
  104. int byLinkedList(struct node* head) // Utilizando una lista enlazada como metodo de verificacion
  105. {
  106.     puts("\nComprobando por el metodo de lista enlazada...");
  107.    
  108.     struct node* actual = head;
  109.    
  110.     for(a = 0; a < KEYSIZE; a++)
  111.     {
  112.         if(actual->data != key[a])
  113.         {
  114.             printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), actual->data, key[a]);
  115.             return 0;
  116.         }
  117.        
  118.         actual = actual->next;
  119.     }
  120.    
  121.     system("cls");
  122.     puts("Acceso aprobado.");
  123.     return 1;
  124. }
  125.  
  126. int main()
  127. {
  128.     int option = 0;
  129.     int tries = 0;
  130.     int approval = 0;
  131.    
  132.     int num_array[KEYSIZE]; // arreglo para metodo por arreglo
  133.  
  134.     int *num_ptr; // puntero para metodo por puntero
  135.     int bad_check = 0;
  136.    
  137.     int input;
  138.     struct node* head_ptr;
  139.    
  140.     do
  141.     {
  142.         system("cls");
  143.         puts("Menu:\n(La clave es 601933)\n1. Verificacion de clave por metodo de arreglo\n2. Verificacion de clave por metodo de desplazamiento de puntero\n3. Verificacion de clave por metodo de lista enlazada\n0. Salir\n\n");
  144.         scanf("%i", &option);
  145.         fflush(stdin);
  146.        
  147.         switch(option)
  148.         {
  149.             case 1:
  150.                
  151.                 for(a = 0; a < KEYSIZE; a++)
  152.                 {
  153.                     printf("Ingrese el digito #%i: ", (a + 1));
  154.                     num_array[a] = readInt();
  155.                    
  156.                     if(num_array[a] == 10)
  157.                     {
  158.                         a = (KEYSIZE + 1);
  159.                         break;
  160.                     }
  161.                 }
  162.                
  163.                 approval = byArray(num_array);
  164.                
  165.                 if(approval == 0)
  166.                     tries++;
  167.                
  168.                 break;
  169.             case 2:
  170.                
  171.                 num_ptr = (int *)calloc(KEYSIZE, sizeof(int));
  172.                
  173.                 if(num_ptr != NULL)
  174.                 {
  175.                     for(a = 0; a < KEYSIZE; a++)
  176.                     {
  177.                         printf("Ingrese el digito #%i: ", (a + 1));
  178.                             fflush(stdin);
  179.                             scanf("%i", num_ptr + a);
  180.                             fflush(stdin);
  181.  
  182.                         if((num_ptr[a] > 9) || (num_ptr[a] < 0))
  183.                         {
  184.                             puts("\n\nLa tecla ingresada no es un digito valido del 0 al 9.");
  185.                             free(num_ptr);
  186.                             a = (KEYSIZE + 1);
  187.                             bad_check = 1;
  188.                             break;
  189.                         }
  190.                     }
  191.                 }
  192.                
  193.                 if(bad_check != 1)
  194.                     approval = byPointer(&num_ptr[0]);
  195.                 else
  196.                 {
  197.                     if(bad_check == 1)
  198.                         tries++;
  199.                 }
  200.                
  201.                 free(num_ptr);
  202.                 break;
  203.             case 3:
  204.                
  205.                 head_ptr = makeLinkedList();
  206.                
  207.                 approval = byLinkedList(head_ptr);
  208.                
  209.                 if(approval == 0)
  210.                     tries++;
  211.                
  212.                 break;
  213.             case 0:
  214.                 puts("Gracias.");
  215.                 break;
  216.             default:
  217.                 puts("Ingrese un valor de la lista.");
  218.         }
  219.        
  220.         getch();
  221.     }
  222.     while((option != 0) && (tries != 3));
  223.    
  224.     if(tries > 2)
  225.     {
  226.         system("cls");
  227.         puts("Acceso denegado, ha fallado en la clave 3 veces.");
  228.         getch();
  229.     }
  230. }
  231.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement