Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #define KEYSIZE 6
- struct node // estructura de lista enlazada
- {
- int data;
- struct node* next;
- };
- int key[KEYSIZE] = { 6, 0, 1, 9, 3, 3 }; // La clave es 601933
- int a;
- int readInt()
- {
- int someint;
- scanf("%i", &someint);
- fflush(stdin);
- if((someint < 10) && (someint > -1))
- return(someint);
- else
- {
- puts("\n\nLa tecla ingresada no es un digito valido del 0 al 9.");
- return(10);
- }
- }
- int byArray(int array[]) // Utilizando un arreglo como metodo de verificacion
- {
- puts("\nComprobando por el metodo de arreglo...");
- for(a = 0; a < KEYSIZE; a++)
- {
- if(array[a] != key[a])
- {
- printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a+1), array[a], key[a]);
- return 0;
- }
- }
- system("cls");
- puts("Acceso aprobado.");
- return 1;
- }
- int byPointer(int* array) // Utilizando un puntero como metodo de verificacion
- {
- puts("\nComprobando por el metodo de puntero...");
- int value;
- for(a = 0; a < KEYSIZE; a++)
- {
- value = *(array + a);
- if(value != key[a])
- {
- printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), (array + a), key[a]);
- return 0;
- }
- }
- system("cls");
- puts("Acceso aprobado.");
- return 1;
- }
- void Add(struct node** headRef, int data) // agregar nodo en la lista enlazada
- {
- struct node* newNode = malloc(sizeof(struct node));
- newNode->data = data;
- newNode->next = *headRef;
- *headRef = newNode;
- }
- struct node* makeLinkedList() // creacion de lista enlazada
- {
- int value;
- struct node* head = NULL;
- struct node** lastPointer = &head;
- for(a = 0; a < KEYSIZE; a++)
- {
- printf("Ingrese el digito #%i: ", (a + 1));
- value = readInt();
- Add(lastPointer, value);
- lastPointer = &((*lastPointer)->next);
- if(value == 10)
- {
- a = (KEYSIZE + 1);
- return(NULL);
- }
- }
- return(head);
- }
- int byLinkedList(struct node* head) // Utilizando una lista enlazada como metodo de verificacion
- {
- puts("\nComprobando por el metodo de lista enlazada...");
- struct node* actual = head;
- for(a = 0; a < KEYSIZE; a++)
- {
- if(actual->data != key[a])
- {
- printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), actual->data, key[a]);
- return 0;
- }
- actual = actual->next;
- }
- system("cls");
- puts("Acceso aprobado.");
- return 1;
- }
- int main()
- {
- int option = 0;
- int tries = 0;
- int approval = 0;
- int num_array[KEYSIZE]; // arreglo para metodo por arreglo
- int num = 0;
- int *num_ptr = # // puntero para metodo por puntero
- int input;
- struct node* head_ptr;
- do
- {
- system("cls");
- 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");
- scanf("%i", &option);
- fflush(stdin);
- switch(option)
- {
- case 1:
- for(a = 0; a < KEYSIZE; a++)
- {
- printf("Ingrese el digito #%i: ", (a + 1));
- num_array[a] = readInt();
- if(num_array[a] == 10)
- {
- a = (KEYSIZE + 1);
- break;
- }
- }
- approval = byArray(num_array);
- if(approval == 0)
- tries++;
- break;
- case 2:
- num_ptr = (int *)calloc(KEYSIZE, sizeof(int));
- if(num_ptr != NULL)
- {
- for(a = 0; a < KEYSIZE; a++)
- {
- printf("Ingrese el digito #%i: ", (a + 1));
- *num_ptr = readInt();
- num_ptr = (num_ptr + a);
- if(*num_ptr == 10)
- {
- a = (KEYSIZE + 1);
- break;
- }
- }
- }
- approval = byPointer(num_ptr);
- if(approval == 0)
- tries++;
- break;
- case 3:
- head_ptr = makeLinkedList();
- approval = byLinkedList(head_ptr);
- if(approval == 0)
- tries++;
- break;
- case 0:
- puts("Gracias.");
- break;
- default:
- puts("Ingrese un valor de la lista.");
- }
- getch();
- free(num_ptr);
- }
- while((option != 0) && (tries != 3));
- if(tries > 2)
- {
- system("cls");
- puts("Acceso denegado, ha fallado en la clave 3 veces.");
- getch();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement