Advertisement
Eriol-kun

pointers_whee

Oct 31st, 2011
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.93 KB | None | 0 0
  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 value;
  54.    
  55.     for(a = 0; a < KEYSIZE; a++)
  56.     {
  57.         value = *(array + a);
  58.         if(value != key[a])
  59.         {
  60.             printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), (array + a), key[a]);
  61.             return 0;
  62.         }
  63.     }
  64.    
  65.     system("cls");
  66.     puts("Acceso aprobado.");
  67.     return 1;
  68. }
  69.  
  70.  
  71. void Add(struct node** headRef, int data) // "push" de un nodo en la lista enlazada
  72. {
  73.     struct node* newNode = malloc(sizeof(struct node));
  74.     newNode->data = data;
  75.     newNode->next = *headRef;
  76.     *headRef = newNode;
  77. }
  78.  
  79. struct node* makeLinkedList() // creacion de lista enlazada
  80. {
  81.     int value;
  82.     struct node* head = NULL;
  83.     struct node* tail;
  84.    
  85.     puts("\nIngrese el digito #1: ");
  86.     value = readInt();
  87.     Add(&head, value);
  88.    
  89.     for(a = 1; a < KEYSIZE; a++)
  90.     {
  91.         printf("\nIngrese el digito #%i: ", (a + 1));
  92.         value = readInt();
  93.         Add(&(tail->next), value);
  94.         tail = tail->next;
  95.     }
  96.    
  97.     return(head);
  98. }
  99.  
  100. int byLinkedList(struct node* head) // Utilizando una lista enlazada como metodo de verificacion
  101. {
  102.     puts("\nComprobando por el metodo de lista enlazada...");
  103.    
  104.     struct node* actual = head;
  105.    
  106.     for(a = 0; a < KEYSIZE; a++)
  107.     {
  108.         if(actual->data != key[a])
  109.         {
  110.             printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), actual->data, key[a]);
  111.             return 0;
  112.         }
  113.     }
  114.    
  115.     system("cls");
  116.     puts("Acceso aprobado.");
  117.     return 1;
  118. }
  119.  
  120. int main()
  121. {
  122.     int option = 0;
  123.     int tries = 0;
  124.     int approval = 0;
  125.    
  126.     int num_array[KEYSIZE]; // arreglo para metodo por arreglo
  127.    
  128.     int *num_ptr; // puntero para metodo por puntero
  129.  
  130.     int input;
  131.    
  132.     do
  133.     {
  134.         system("cls");
  135.         puts("Menu:\n\n\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");
  136.         scanf("%i", &option);
  137.         fflush(stdin);
  138.        
  139.         switch(option)
  140.         {
  141.             case 1:
  142.                
  143.                 for(a = 0; a < KEYSIZE; a++)
  144.                 {
  145.                     printf("\nIngrese el digito #%i: ", (a + 1));
  146.                     num_array[a] = readInt();
  147.                    
  148.                     if(num_array[a] == 10)
  149.                         a = (KEYSIZE + 1);
  150.                 }
  151.                
  152.                 approval = byArray(num_array);
  153.                
  154.                 if(approval == 0)
  155.                     tries++;
  156.                
  157.                 break;
  158.             case 2:
  159.                
  160.                 num_ptr = (int *)calloc(KEYSIZE, sizeof(int));
  161.                
  162.                 if(num_ptr != NULL)
  163.                 {
  164.                     for(a = 0; a < KEYSIZE; a++)
  165.                     {
  166.                         printf("\nIngrese el digito #%i: ", (a + 1));
  167.                         *num_ptr = readInt();
  168.                         num_ptr++;
  169.                     }
  170.                 }
  171.                
  172.                 approval = byPointer(num_ptr);
  173.                
  174.                 if(approval == 0)
  175.                     tries++;
  176.                
  177.                 break;
  178.             case 3:
  179.                
  180.                 approval = byLinkedList(makeLinkedList());
  181.                
  182.                 if(approval == 0)
  183.                     tries++;
  184.                
  185.                 break;
  186.             case 0:
  187.                 puts("Gracias.");
  188.                 break;
  189.             default:
  190.                 puts("Ingrese un valor de la lista.");
  191.         }
  192.        
  193.         getch();
  194.     }
  195.     while((option != 0) && (tries < 4));
  196.    
  197.     if(tries > 3)
  198.     {
  199.         system("cls");
  200.         puts("Acceso denegado, ha fallado en la clave mas de 3 veces.");
  201.         getch();
  202.     }
  203. }
  204.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement