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. |