View difference between Paste ID: vDt7Gmvn and 3cgkRyBu
SHOW: | | - or go back to the newest paste.
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-
void Add(struct node** headRef, int data) // "push" de un 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-
	struct node* tail;
83+
84
	for(a = 0; a < KEYSIZE; a++)
85-
	puts("\nIngrese el digito #1: ");
85+
86-
	value = readInt();
86+
		printf("Ingrese el digito #%i: ", (a + 1));
87-
	Add(&head, value);
87+
88
		Add(lastPointer, value);
89-
	for(a = 1; a < KEYSIZE; a++)
89+
		lastPointer = &((*lastPointer)->next);
90
		
91-
		printf("\nIngrese el digito #%i: ", (a + 1));
91+
		if(value == 10)
92
		{
93-
		Add(&(tail->next), value);
93+
			a = (KEYSIZE + 1);
94-
		tail = tail->next;
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-
	int *num_ptr; // puntero para metodo por puntero
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-
		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");
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-
					printf("\nIngrese el digito #%i: ", (a + 1));
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-
						printf("\nIngrese el digito #%i: ", (a + 1));
166+
167
				
168-
						num_ptr++;
168+
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-
				approval = byLinkedList(makeLinkedList());
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-
	while((option != 0) && (tries < 4));
195+
196
				approval = byLinkedList(head_ptr);
197-
	if(tries > 3)
197+
198
				if(approval == 0)
199
					tries++;
200-
		puts("Acceso denegado, ha fallado en la clave mas de 3 veces.");
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