EXAMEN 27 MAYO 2003 ITIG
PROBLEMA
Se quiere hacer un programa para obtener los resultados electorales de las
elecciones MUNICIPALES de los 8.108 Municipios de España donde hay 56.151
mesas electorales en total . La aplicación pedirá provincia y municipio y se obtendrá
el siguiente informe:
PROVINCIA:Madrid
Municipio: Madrid
PARTIDO
PP
PSOE
IU
LV
LVCM
IR
PFyV
FE
CDS
FEI
PH
PRIM
TC-PNC
ODEP
PADE
FA
INDIO
FR
SOLUCION EXAMEN 27 MAYO 2003 ITIG
VOTOS
874.264
625.148
123.015
26.448
9.944
3.553
3.094
2.174
2.136
1.113
1.022
903
820
810
801
635
479
478
ESTRUCTURAS DE DATOS
1
EXAMEN 27 MAYO 2003 ITIG
Para este programa se dispone de dos Ficheros secuenciales
desordenados y no depurados:
MESAS.TXT
Provincia: alfanumérico
Municipio: Alfanumerico
Mesa: Entero (Las mesas están numeradas del 1 al 56.151)
VOTACIONES.TXT
Mesa: entero
Partido: Alfanumerico
Votos: entero
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
2
EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURA DE DATOS
Se creará un árbol binario de búsqueda ordenado por nº de mesa a
partir del fichero MESAS.TXT. El Nodo del árbol tiene el siguiente
diseño:
PROV MUNI MESA IZQ DER PVOT
PVOT: Puntero a las votaciones
A cada nodo del árbol se añadirá una lista enlazada con las votaciones
de los diferentes partidos a partir del fichero VOTACIONES.TXT. El
nodo de la lista enlazada tiene el siguiente diseño:
PARTIDO VOTOS SIG
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
3
Carga Datos
1º. Algoritmo CARGA_DATOS que crea la estructura de datos a
partir de los dos ficheros
COMIENZO CARGA_DATOS (RAIZ)
TRANSFORMA
RAIZ ES PUNTERO A NODO ARBOL
ENTORNO
PROVINCIA,MUNICIPIO,PARTIDO SON ALFANUMERICOS
MESA,VOTOS SON ENTEROS
ST ES ENTERO
POS,PAD SON PUNTEROS A NODO ARBOL
LUG ES PUNTERO NODO LISTA
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
4
Carga Datos
1º. Algoritmo CARGA_DATOS que crea la estructura de datos a
partir de los dos ficheros
ALGORITMO
RAIZ = NULL
ST = 0
ABRIR(MESAS.TXT)
LEER PROVINCIA,MUNICIPIO,MESA
MIENTRAS((!FF) Y (ST != 2))
LLAMAR INSERCION (RAIZ,PROVINCIA,MUNICIPIO,MESA,NULL,ST)
SI(ST = 1)
ESCRIBIR “ERROR, MESA DUPLICADA”
SINO SI (ST = 2)
ESCRIBIR “ERROR, PROBLEMAS CON LA MEMORIA”
FIN SI
LEER PROVINCIA,MUNICIPIO,MESA
FIN MIENTRAS
CERRAR(MESAS.TXT)
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
5
Carga Datos
1º. Algoritmo CARGA_DATOS que crea la estructura de datos a
partir de los dos ficheros
ABRIR (VOTACIONES.TXT)
LEER MESA,PARTIDO,VOTOS
MIENTRAS ((!FF) Y (ST != 2))
LLAMAR BUSCA_ADD(RAIZ,MESA,POS,PAD)
SI (POS = NULL)
ESCRIBIR “ERROR, NO EXISTE MESA”
SINO
LLAMAR BUSCA(POS->PVOT,PARTIDO,LUG)
SI (LUG != NULL)
ESCRIBIR “ERROR, YA HA VOTADO ESE PARTIDO”
SINO
LLAMAR INSPRI(POS->PVOT,PARTIDO,VOTOS,ST)
SI (ST = 2)
ESCRIBIR “ERROR, PROBLEMAS CON LA MEMORIA”
FIN SI
FIN SI
FIN SI
LEER MESA,PARTIDO,VOTOS
FIN MIENTRAS
CERRAR (VOTACIONES.TXT)
FIN CARGA_DATOS
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
6
INFORME 1
2º Algoritmo INFORME1 que tecleando el nombre de un partido
obtiene en pantalla el total de votos obtenidos a nivel nacional.
COMIENZO INFORME1(RAIZ)
RECIBE
RAIZ ES PUNTERO A NODO ARBOL
ENTORNO
TOTAL ES ENTERO
PARTIDO ES ALFANUMERICO
ALGORITMO
LEER PARTIDO
TOTAL = 0
LLAMAR RECO-IN1(RAIZ,TOTAL,PARTIDO)
ESCRIBIR CABECERA
ESCRIBIR PARTIDO,TOTAL
FIN INFORME1
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
7
INFORME 1
2º Algoritmo INFORME1 que tecleando el nombre de un partido
obtiene en pantalla el total de votos obtenidos a nivel nacional.
COMIENZO RECO-IN1(RAIZ,TOTAL,PARTIDO)
RECIBE
PARTIDO ES ALFANUMERICO
RAIZ ES PUNTERO A NODO
TRANSFORMA
TOTAL ES ENTERO
ENTORNO
LUG ES PUNTERO A VOTOS
ALGORITMO
SI (RAIZ!= NULL)
LLAMAR RECO-IN1(RAIZ->IZQ,TOTAL,PARTIDO)
LLAMAR BUSCA(RAIZ->PVOT,PARTIDO,LUG)
SI LUG != NULL)
TOTAL = TOTAL + LUG->VOTOS
FIN SI
LLAMAR RECO-IN1(RAIZ->DER, TOTAL,PARTIDO)
FIN SI
FIN RECO-IN1
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
8
INFORME 2
3º. Algoritmo INFORME2 que tecleando PROVINCIA y
MUNICIPIO, obtiene en pantalla el listado del enunciado ordenado
por número de votos (Máximo 50 partidos).
COMIENZO INFORME2(RAIZ)
RECIBE
RAIZ ES PUNTERO A NODO ARBOL
ENTORNO
T-PARTIDOS ES ARRAY(50) DE ALFANUMERICOS
T-VOTOS ES ARRAY(50) DE ENTEROS
NP ES ENTERO
PROVINCIA,MUNICIPIO SON ALFANUMERICOS
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
9
INFORME 2
3º. Algoritmo INFORME2 que tecleando PROVINCIA y
MUNICIPIO, obtiene en pantalla el listado del enunciado ordenado
por número de votos (Máximo 50 partidos).
ALGORITMO
LEER PROVINCIA, MUNICIPIO
NP = 0;
LLAMAR RECO-IN2(RAIZ,T-PARTIDOS, T-VOTOS,NP, PROVINCIA, MUNICIPIO)
LLAMAR CLASIFICACION(T_PARTIDOS,T_VOTOS,1,NP)
SI(NP = 0)
NO HAY VOTACIONES PARA EL MUNICIPIO
SINO
ESCRIBIR CABECERA,PROVINCIA,MUNICIPIO
PARA(I=1;I<=NP;I++)
ESCRIBIR T_PARTIDO(I),T-VOTOS(I)
FIN PARA
FIN SI
FIN INFORME2
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
10
INFORME 2
3º. Algoritmo INFORME2 que tecleando PROVINCIA y
MUNICIPIO, obtiene en pantalla el listado del enunciado ordenado
por número de votos (Máximo 50 partidos).
COMIENZO RECO-IN2(RAIZ,T-PARTIDOS, T-VOTOS,NP, PROVINCIA, MUNICIPIO)
RECIBE
RAIZ ES PUNTERO A NODO
TRANSFORMA
NP ES ENTERO
T-PARTIDOS ES ARRAY(50) DE ALFANUMERICOS
T-VOTOS ES ARRAY(50) DE ENTEROS
ENTORNO
AUX ES PUNTERO A VOTOS
POS ES ENTERO
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
11
INFORME 2
ALGORITMO
SI (RAIZ!= NULL)
LLAMAR RECO-IN2(RAIZ->IZQ,T-PARTIDOS, T-VOTOS,NP, PROVINCIA, MUNICIPIO)
SI((RAIZ->PROV = PROVINCIA) && (RAIZ->MUNI = MUNICIPIO))
AUX = RAIZ->PVOT
MIENTRAS (AUX!=NULL)
LLAMAR BUSQUEDA_SECUENCIAL (T-TARTIDOS,1,NP,AUX->PARTIDO,POS)
SI(POS > NP)
SI (NP < 50)
NP = NP +1
T-PARTIDOS(NP) = AUX->PARTIDO
T-VOTOS(NP) = AUX->VOTOS
SINO
ESCRIBIR “ERROR,SE HAN LLENADO LAS TABLAS”
FIN SI
SINO
T-VOTOS(POS) = T-VOTOS(POS) + AUX->VOTOS
FIN SI
AUX = AUX->SIG
FIN MIENTRAS
FIN SI
LLAMAR RECO-IN2(RAIZ->DER,T-PARTIDOS, T-VOTOS,NP, PROVINCIA, MUNICIPIO)
FIN SI
FIN RECO-IN 2
SOLUCION EXAMEN 27 MAYO 2003 ITIG
ESTRUCTURAS DE DATOS
12