Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ************************************
- ********* C O M P L E T O **********
- ************************************
- Corregido hoy martes 11/12 por prof.
- ************************************
- A) Implemente el TAD UrnaElectronica, cuya interface se muestra a continuación. Tener en cuenta al momento de implementar que una
- UrnaElectronica puede manejar a lo sumo 50 agrupaciones.
- TAD UrnaElectronica; type exportado urna;
- procedure CrearUrna (var u:urna; nombre: string; cant_Agrupaciones:integer)
- // Crea la urna con nombre “nombre”, los códigos de las agrupaciones enumeradas de 1 a cant_Agrupaciones y sin votos
- function cantidadAgrupacionesPosibles(u:urna): integer;
- // Retorna la cantidad de agrupaciones disponibles para votar.
- function numeroAgrupacionValida (u: urna, num: integer) : boolean;
- // Retorna si el número que ingresa como parámetro corresponde a una agrupación válida.
- procedure votarPorAgrupacion(var u: urna; num_Agrupacion: integer) ;
- // Actualiza la urna sumando 1 a la agrupación cuyo número ingresa como parámetro.
- procedure votarEnBlanco(var u:urna);
- // Actualiza la urna sumando 1 al contador de votos en blanco.
- function cantidadDeVotosEnBlanco(u:urna): integer;
- // Retorna la cantidad de votos en blanco que se emitieron.
- function cantidadDeVotosPorAgrupacion(u: urna; num_Agrupacion: integer);
- // Retorna la cantidad de votos que recibió la agrupación cuyo número ingresa como parámetro.
- B) Utilizando el TAD UrnaElectronica resolver el siguiente problema:
- La facultad de Informática va a implementar las elecciones por medio de voto electrónico. Para ello dispone de una estructura
- eficiente que representa el padrón de alumnos que cumplen las condiciones necesarias para votar en las elecciones estudiantiles
- 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
- del alumno.
- {Implementación}
- Implementation
- urna = record // urna es el tipo exportado.
- nombreurna:string;
- agrupaciones:vector;
- votosenblanco:integer;
- cantidaddeagrup:integer;
- end;
- vector = array [1..50] of integer // Cada posición es el código de la agrupación
- procedure CrearUrna (var u:urna; nombre: string; cant_Agrupaciones:integer)
- // Crea la urna con nombre “nombre”, los códigos de las agrupaciones enumeradas de 1 a cant_Agrupaciones y sin votos
- var
- i:integer;
- begin
- u.nombreurna:=nombre;
- u.cantidaddeagrup:=cant.Agrupaciones;
- u.votosenblanco:=0;
- for i:=1 to cant_Agrupaciones do {cant_Agrupaciones lo uso como mi dimensión lógica}
- u.agrupaciones[i]:=0; {u.agrupaciones es de tipo vector}
- end;
- function cantidadAgrupacionesPosibles(u:urna): integer;
- // Retorna la cantidad de agrupaciones disponibles para votar.
- begin
- cantidaddeAgrupacacionesPosible:=u.cantidaddeagrup;
- end;
- function numeroAgrupacionValida (u: urna, num: integer) : boolean;
- // Retorna si el número que ingresa como parámetro corresponde a una agrupación válida.
- var
- aux:boolean;
- begin
- 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}
- aux:=FALSE;
- else
- aux:=TRUE;
- numeroAgrupacionValida:=aux;
- end;
- procedure votarPorAgrupacion(var u: urna; num_Agrupacion: integer) ;
- // Actualiza la urna sumando 1 a la agrupación cuyo número ingresa como parámetro.
- begin
- u.agrupaciones[num_Agrupacion]:=u.agrupaciones[num_Agrupacion] + 1;
- end;
- procedure votarEnBlanco(var u:urna);
- // Actualiza la urna sumando 1 al contador de votos en blanco.
- begin
- u.votosenblanco:=u.votosenblanco + 1;
- end;
- function cantidadDeVotosEnBlanco (u:urna) : integer;
- // Retorna la cantidad de votos en blanco que se emitieron.
- begin
- cantidadDeVotosEnBlanco:=u.votosenblanco;
- end;
- function cantidadDeVotosPorAgrupacion(u: urna; num_Agrupacion: integer);
- // Retorna la cantidad de votos que recibió la agrupación cuyo número ingresa como parámetro.
- begin
- cantidadDeVotosPorAgrupacion:=u.agrupaciones[num_Agrupacion];
- end;
- {Programa Principal}
- program Elecciones_Ejercicio_6_Práctica17Repaso;
- uses UrnaElectronica; // nombre del TAD
- type
- arbol=^nodo_arbol;
- nodo_arbol=record
- datosalumno : padron;
- dni:integer; // Ver Nota 1)
- izq:arbol;
- der:arbol;
- end;
- padron=record
- nro_alumno:integer;
- apellido:string;
- nombre:string;
- voto:boolean;
- end;
- procedure Crear_la_Urna (var u:urna);
- var
- cant_agrup:integer;
- nombreurna:integer;
- begin
- writeln ('Ingrese el nombre de la Urna a crear:');
- readln (nombreurna);
- writeln ('Ingrese la cantidad de agrupaciones de la Urna');
- readln (cant_agrup);
- crearUrna (u,nombreurna,cant_agrup);
- end;
- procedure votacion (var A:arbol; var u:urna);
- var
- dni:integer;
- voto:integer;
- begin
- writeln ('Ingrese su D.N.I.:');
- readln (dni);
- while (dni <> 0) then
- if (esvalido(A,dni) then begin
- writeln ('Ingrese el código de la Agrupación elegida:');
- readln ('Si elije votar en blanco, ingrese 0');
- readln (voto);
- if (voto = 0) then
- votarenBlanco (u);
- else
- if (numeroAgrupacionValida(voto)) then
- votarporAgrupacion (u,voto);
- else
- writeln ('La agrupación elegida no existe');
- end
- else
- writeln ('Invalido');
- writeln ('Ingrese su D.N.I.:');
- readln (dni);
- end;
- end;
- function esvalido (A:arbol; dni:integer) : boolean;
- begin
- if (A <> nil) then
- if (A^.dni > dni) then
- esvalido:=esvalido(A^.izq, dni);
- else
- if (A^.dni < dni) then
- esvalido:=esvalido(A^.der, dni);
- else {es igual}
- if (A^.padron.voto = FALSE) then
- A^.padron.voto:=TRUE; {S/ Prof. es necesario hacerlo aquí}
- esvalido:=TRUE;
- else
- esvalido:=FALSE;
- else
- esvalido:=FALSE;
- end;
- procedure recuento_votos (u:urna);
- var
- max:integer;
- i:integer;
- agrupacionganadora:integer;
- cantidadagrup:integer;
- begin
- max:=-1;
- cantidadagrup:=cantidadAgrupacionesPosibles(u);
- for i:=1 to cantidadagrup do
- if (cantidadDeVotosPorAgrupacion(u,i) > max) then begin
- max:=cantidadDeVotosPorAgrupacion(u,i);
- agrupacionganadora:=i;
- end;
- end;
- writeln ('La Agrupación ganadora es:',agrupacionganadora);
- end;
- var
- u:urna;
- A:arbol;
- begin
- A := nil;
- cargardatos (A); //Se dispone
- CrearUrna (u);
- votacion (A, u);
- recuento_votos (u);
- end.
- Nota 1)
- 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.
- Sino otra forma también valida es:
- {Otra forma de declarar la estructura}
- (...)
- arbol=^nodo_arbol;
- nodo_arbol=record
- datosalumno:padron; // Si ponemos también DNI aquí y en el registro, estaría duplicado y por ende, incorrecto.
- izq:arbol;
- der:arbol;
- end;
- padron=record
- DNI:integer; // Esto cambia
- nro_alumno:integer;
- apellido:string;
- nombre:string;
- voto:boolean;
- end;
- Las dos formas de hacerlo son válidas.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement