View difference between Paste ID: zgjKQcf8 and vDt7Gmvn
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
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-
		value = *(array + a);
57+
58-
		if(value != key[a])
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-
			printf("\n\nLa clave no concuerda en el digito #%i, %i no es igual a %i", (a + 1), (array + a), key[a]);
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-
	int num = 0;
131+
132-
	int *num_ptr = &num; // puntero para metodo por puntero
132+
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-
						*num_ptr = readInt();
175+
176-
						num_ptr = (num_ptr + a);
176+
177-
						
177+
178-
						if(*num_ptr == 10)
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-
				approval = byPointer(num_ptr);
186+
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-
		free(num_ptr);
210+
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