Advertisement
Eriol-kun

pointers_whee2

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