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