View difference between Paste ID: XDN3bFHB and Z7uQJZap
SHOW: | | - or go back to the newest paste.
1-
                         
1+
                             ************************************
2-
                         ************************************
2+
                             ********* C O M P L E T O **********
3-
			 Corregido ayer martes 7/12 por prof.
3+
                             ************************************
4-
			 ************************************
4+
                             Corregido hoy martes 11/12 por prof.
5-
			 
5+
                             ************************************
6-
A) Implemente el TAD UrnaElectronica, cuya interface se muestra a continuación. Tener en cuenta al momento de implementar que una 
6+
                             
7-
UrnaElectronica puede manejar a lo sumo 50 agrupaciones.  
7+
    A) Implemente el TAD UrnaElectronica, cuya interface se muestra a continuación. Tener en cuenta al momento de implementar que una
8
    UrnaElectronica puede manejar a lo sumo 50 agrupaciones.  
9-
TAD UrnaElectronica; type exportado urna; 
9+
     
10-
procedure CrearUrna (var u:urna; nombre: string; cant_Agrupaciones:integer)  
10+
    TAD UrnaElectronica; type exportado urna;
11-
// Crea la urna con nombre “nombre”, los códigos de las agrupaciones enumeradas de 1 a cant_Agrupaciones y sin votos 
11+
    procedure CrearUrna (var u:urna; nombre: string; cant_Agrupaciones:integer)  
12-
function cantidadAgrupacionesPosibles(u:urna): integer; 
12+
    // Crea la urna con nombre “nombre”, los códigos de las agrupaciones enumeradas de 1 a cant_Agrupaciones y sin votos
13-
// Retorna la cantidad de agrupaciones disponibles para votar. 
13+
    function cantidadAgrupacionesPosibles(u:urna): integer;
14-
function numeroAgrupacionValida (u: urna, num: integer) : boolean; 
14+
    // Retorna la cantidad de agrupaciones disponibles para votar.
15-
// Retorna si el número que ingresa como parámetro corresponde a una agrupación válida. 
15+
    function numeroAgrupacionValida (u: urna, num: integer) : boolean;
16-
procedure votarPorAgrupacion(var u: urna; num_Agrupacion: integer) ; 
16+
    // Retorna si el número que ingresa como parámetro corresponde a una agrupación válida.
17-
// Actualiza la urna sumando 1 a la agrupación cuyo número ingresa como parámetro. 
17+
    procedure votarPorAgrupacion(var u: urna; num_Agrupacion: integer) ;
18-
procedure votarEnBlanco(var u:urna); 
18+
    // Actualiza la urna sumando 1 a la agrupación cuyo número ingresa como parámetro.
19-
// Actualiza la urna sumando 1 al contador de votos en blanco. 
19+
    procedure votarEnBlanco(var u:urna);
20-
function cantidadDeVotosEnBlanco(u:urna): integer; 
20+
    // Actualiza la urna sumando 1 al contador de votos en blanco.
21-
// Retorna la cantidad de votos en blanco que se emitieron. 
21+
    function cantidadDeVotosEnBlanco(u:urna): integer;
22-
function cantidadDeVotosPorAgrupacion(u: urna; num_Agrupacion: integer); 
22+
    // Retorna la cantidad de votos en blanco que se emitieron.
23-
// Retorna la cantidad de votos que recibió la agrupación cuyo número ingresa como parámetro. 
23+
    function cantidadDeVotosPorAgrupacion(u: urna; num_Agrupacion: integer);
24
    // Retorna la cantidad de votos que recibió la agrupación cuyo número ingresa como parámetro.
25-
B) Utilizando el TAD UrnaElectronica resolver el siguiente problema: 
25+
     
26
    B) Utilizando el TAD UrnaElectronica resolver el siguiente problema:
27-
La facultad de Informática va a implementar las elecciones por medio de voto electrónico. Para ello dispone de una estructura 
27+
     
28-
eficiente que representa el padrón de alumnos  que cumplen las condiciones necesarias para votar en las elecciones estudiantiles 
28+
    La facultad de Informática va a implementar las elecciones por medio de voto electrónico. Para ello dispone de una estructura
29-
de la facultad. De cada alumno se conoce: Número de Alumno, DNI y Apellido y Nombre. La estructura se encuentra ordena por el DNI
29+
    eficiente que representa el padrón de alumnos  que cumplen las condiciones necesarias para votar en las elecciones estudiantiles
30-
del alumno. 
30+
    de la facultad. De cada alumno se conoce: Número de Alumno, DNI y Apellido y Nombre. La estructura se encuentra ordena por el DNI
31
    del alumno.
32
     
33
     
34-
{Implementación}
34+
     
35
    {Implementación}
36-
Implementation
36+
     
37
    Implementation
38-
	urna = record     // urna es el tipo exportado.
38+
     
39-
	  nombreurna:string;
39+
            urna = record     // urna es el tipo exportado.
40-
	agrupaciones:vector;
40+
              nombreurna:string;
41-
       votosenblanco:integer;
41+
            agrupaciones:vector;
42-
     cantidaddeagrup:integer;
42+
           votosenblanco:integer;
43-
               end;
43+
         cantidaddeagrup:integer;
44
                   end;
45-
	vector = array [1..50] of integer // Cada posición es el código de la agrupación
45+
           
46
            vector = array [1..50] of integer // Cada posición es el código de la agrupación
47-
	(...)
47+
           
48
      
49
	procedure CrearUrna (var u:urna; nombre: string; cant_Agrupaciones:integer)   
50
	// Crea la urna con nombre “nombre”, los códigos de las agrupaciones enumeradas de 1 a cant_Agrupaciones y sin votos
51-
{Programa Principal}
51+
		
52
	var
53-
program Elecciones_Ejercicio_6_Práctica17Repaso;
53+
		i:integer;
54
	
55-
uses UrnaElectronica; // nombre del TAD
55+
	begin
56
		u.nombreurna:=nombre;
57-
type
57+
		u.cantidaddeagrup:=cant.Agrupaciones;
58
		u.votosenblanco:=0;
59-
	arbol=^nodo_arbol;
59+
		for i:=1 to cant_Agrupaciones do {cant_Agrupaciones lo uso como mi dimensión lógica}
60-
	nodo_arbol=record
60+
			u.agrupaciones[i]:=0; {u.agrupaciones es de tipo vector}
61-
	 datosalumno : padron; // Ver Nota 1)
61+
62-
		  izq:arbol;
62+
63-
	          der:arbol;
63+
64-
	 end;
64+
	function cantidadAgrupacionesPosibles(u:urna): integer;
65-
	 
65+
	    // Retorna la cantidad de agrupaciones disponibles para votar.
66-
	padron=record
66+
	begin
67
		cantidaddeAgrupacacionesPosible:=u.cantidaddeagrup;
68-
		nro_alumno:integer;
68+
69-
		apellido:string;
69+
70-
		nombre:string;
70+
71-
		voto:boolean;
71+
	function numeroAgrupacionValida (u: urna, num: integer) : boolean;
72
	   // Retorna si el número que ingresa como parámetro corresponde a una agrupación válida.
73
	var 
74-
Nota 1)	
74+
		aux:boolean;
75-
Según la prof. es indistinto que este DNI en el arbol, puede estar en el padron y cuando recorro el árbol, accedo directamente desde el registro (arbol^.datosalumno.dni), puesto que, esta ordenado por DNI y esta estructura ya se dispone. 
75+
76-
Sino otra forma también valida es:
76+
	begin
77
		if (u.cantidaddeagrup > num) and (num >= 1) then {num >= 1 agregado por el prof. para evitar que entre si se introduce un número negativo}
78-
{Otra forma de declarar la estructura}
78+
			aux:=FALSE;
79
	    else
80-
(...)
80+
			aux:=TRUE;
81
		numeroAgrupacionValida:=aux;
82-
	arbol=^nodo_arbol;
82+
83-
	nodo_arbol=record
83+
84-
                DNI:integer; // Esto cambia
84+
85-
        datosalumno:padron; 
85+
	procedure votarPorAgrupacion(var u: urna; num_Agrupacion: integer) ;
86-
                izq:arbol;
86+
	    // Actualiza la urna sumando 1 a la agrupación cuyo número ingresa como parámetro.
87-
	        der:arbol;
87+
88-
	 end;
88+
	begin
89-
	 
89+
		u.agrupaciones[num_Agrupacion]:=u.agrupaciones[num_Agrupacion] + 1;
90-
	padron=record
90+
91-
	nro_alumno:integer; // Si ponemos también DNI aquí, estaría duplicado y por ende, incorrecto.
91+
92-
	  apellido:string;
92+
93-
	    nombre:string;
93+
	procedure votarEnBlanco(var u:urna);
94-
	      voto:boolean;
94+
	    // Actualiza la urna sumando 1 al contador de votos en blanco.
95
96
	begin
97-
Las dos formas de hacerlo son válidas.
97+
		u.votosenblanco:=u.votosenblanco + 1;
98
	end;
99
100
	
101
	function cantidadDeVotosEnBlanco (u:urna) : integer;
102
	    // Retorna la cantidad de votos en blanco que se emitieron.
103
	
104
	begin
105
		cantidadDeVotosEnBlanco:=u.votosenblanco;
106
	end;
107
	
108
	
109
	function cantidadDeVotosPorAgrupacion(u: urna; num_Agrupacion: integer);
110
	    // Retorna la cantidad de votos que recibió la agrupación cuyo número ingresa como parámetro.
111
	
112
	begin
113
		cantidadDeVotosPorAgrupacion:=u.agrupaciones[num_Agrupacion];   
114
	end;
115
116
117
118
119
         
120
         
121
    {Programa Principal}
122
     
123
    program Elecciones_Ejercicio_6_Práctica17Repaso;
124
     
125
    uses UrnaElectronica; // nombre del TAD
126
     
127
    type
128
     
129
            arbol=^nodo_arbol;
130
            nodo_arbol=record
131
             datosalumno : padron; 
132
                      dni:integer;   // Ver Nota 1)
133
						izq:arbol;
134
                      der:arbol;
135
             end;
136
             
137
            padron=record
138
                    nro_alumno:integer;
139
                    apellido:string;
140
                    nombre:string;
141
                    voto:boolean;
142
            end;
143
     
144
   
145
146
	procedure Crear_la_Urna (var u:urna);
147
	var
148
		cant_agrup:integer;
149
		nombreurna:integer;
150
	
151
	begin
152
		writeln ('Ingrese el nombre de la Urna a crear:');
153
		readln (nombreurna);
154
		writeln ('Ingrese la cantidad de agrupaciones de la Urna');
155
		readln (cant_agrup);
156
		crearUrna (u,nombreurna,cant_agrup);
157
	end;
158
	
159
	
160
	procedure votacion (var A:arbol; var u:urna);
161
	var
162
		dni:integer;
163
		voto:integer;
164
	begin
165
		writeln ('Ingrese su D.N.I.:');
166
		readln (dni);
167
		while (dni <> 0) then
168
			if (esvalido(A,dni) then begin
169
				writeln ('Ingrese el código de la Agrupación elegida:');
170
				readln ('Si elije votar en blanco, ingrese 0');
171
				readln (voto);
172
				if (voto = 0) then
173
					votarenBlanco (u);
174
				else
175
					if (numeroAgrupacionValida(voto)) then
176
						votarporAgrupacion (u,voto);
177
					else
178
						writeln ('La agrupación elegida no existe');
179
			end
180
			else
181
				writeln ('Invalido');
182
			writeln ('Ingrese su D.N.I.:');
183
			readln (dni);
184
	    end;
185
	end;
186
	
187
	
188
	function esvalido (A:arbol; dni:integer) : boolean;
189
190
	begin
191
		if (A <> nil) then
192
			if (A^.dni > dni) then
193
				esvalido:=esvalido(A^.izq, dni);
194
			else
195
				if (A^.dni < dni) then
196
					esvalido:=esvalido(A^.der, dni);
197
				else {es igual}
198
					if (A^.padron.voto = FALSE) then
199
						A^.padron.voto:=TRUE; {S/ Prof. es necesario hacerlo aquí}
200
						esvalido:=TRUE;
201
					else
202
						esvalido:=FALSE;
203
		else
204
			esvalido:=FALSE;
205
	end;	
206
	
207
		
208
	procedure recuento_votos (u:urna);
209
	var
210
		max:integer;
211
	    i:integer;
212
		agrupacionganadora:integer;
213
		cantidadagrup:integer;
214
	
215
	begin
216
		max:=-1;
217
		cantidadagrup:=cantidadAgrupacionesPosibles(u);
218
		for i:=1 to cantidadagrup do
219
			if (cantidadDeVotosPorAgrupacion(u,i) > max) then begin
220
				max:=cantidadDeVotosPorAgrupacion(u,i);
221
				agrupacionganadora:=i;
222
			end;
223
		end;
224
		writeln ('La Agrupación ganadora es:',agrupacionganadora);
225
	end;
226
	
227
	
228
	
229
	var 
230
		u:urna;
231
		A:arbol;
232
	
233
	begin
234
		A := nil;
235
		cargardatos (A);              //Se dispone
236
    	CrearUrna (u);
237
		votacion (A, u);
238
		recuento_votos (u);
239
	end.   
240
241
242
243
244
245
246
 	Nota 1)
247
    Según la prof. es indistinto que este DNI en el arbol, puede estar en el padron y cuando recorro el árbol, accedo directamente desde el registro 		(arbol^.datosalumno.dni), puesto que, esta ordenado por DNI y esta estructura ya se dispone.
248
    Sino otra forma también valida es:
249
     
250
    {Otra forma de declarar la estructura}
251
     
252
    (...)
253
     
254
            arbol=^nodo_arbol;
255
            nodo_arbol=record                
256
            datosalumno:padron; // Si ponemos también DNI aquí y en el registro, estaría duplicado y por ende, incorrecto.
257
                    izq:arbol;
258
                    der:arbol;
259
             end;
260
             
261
            padron=record
262
                   DNI:integer; // Esto cambia
263
            nro_alumno:integer; 
264
              apellido:string;
265
                nombre:string;
266
                  voto:boolean;
267
            end;
268
           
269
    Las dos formas de hacerlo son válidas.