Vous êtes sur la page 1sur 9

Facultad de Ingeniería

Programa de Ingeniería de Sistemas


Programación I
Semana 4

CASO DE ESTUDIO: ESTADÍSTICAS DE


VOTACIONES MUNICIPALES
1. ENUNCIADO
En un departamento de N municipios se realizan elecciones para gobernador, para las
cuales se presentan M candidatos. Elabore un algoritmo que haga lo siguiente:
Datos de entrada:
1. Solicite la cantidad de municipios (N) y la cantidad de candidatos a gobernador (M)
2. Defina los vectores de tipo string: Municipios[N] y Candidatos[M]
3. Defina la matriz Votos[N][M] de tipo float.
4. Solicite y almacene los nombres de los candidatos en el vector Candidatos[M]
5. Solicite y almacene los nombres de los municipios en el vector Municipios[N]
6. Solicite y almacene en la matriz Votos[N][M], la cantidad de votos que cada
candidato obtuvo en cada municipio de la siguiente manera: el elemento Votos[2,5]
contendrá la cantidad de votos que el candidato 5 obtuvo en el municipio 2.
Datos de salida:
7. Calcule e imprima el número total de votos que recibió cada candidato.
8. Busque e imprima el nombre del candidato ganador.
9. Calcule e imprima el total de votos emitidos en cada municipio.
10. Busque e imprima el nombre del municipio donde fue la mayor la votación.

Contexto del caso:


Las elecciones: son un proceso de toma de decisiones en el que los electores eligen, con
su voto, entre una pluralidad de candidatos a quienes ocuparán los cargos políticos en
una democracia representativa.
La organización de unas elecciones libres y competitivas es en la calidad en nuestro país
un enorme reto, para lo cual se establecen, regularmente para cada proceso electoral,
nuevas reglas que buscan perfeccionarlo, en el caso de nuestro país, es hoy en día
conocido el camino, desde la instauración por primera vez en la historia de los procesos
electorales de un Tribunal especializado en materia electoral a finales de 1986, así como la
desincorporación total de la función estatal de organizar las elecciones por parte del Poder
Ejecutivo Federal, y la subsecuente instauración de un sistema de medios de impugnación
en materia electoral que garantiza que todos los actos y resoluciones de las autoridades
electorales, e incluso las que no lo son en esa materia, se sujeten invariablemente a un
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

control de constitucionalidad y legalidad, en el que se garantice además, la definitividad de


cada una de las etapas del procedimiento electoral.
El voto: es el acto por el cual un individuo expresa apoyo o preferencia por cierta moción,
propuesta, candidato, o selección de candidatos durante una votación, de forma secreta o
pública. Es, por tanto, un método de toma de decisiones en el que un grupo, tal como una
junta o un electorado, trata de medir su opinión conjunta.
Un candidato: Persona que opta a un cargo, premio o distinción a solicitud propia o de otra
persona.

2. ESTRUCTURAS DE DATOS
//Se definen las variables de candidatos y municipios que se
guardan en N y M.
int N,M;
do
{
cout<<"Ingrese el numero de municipios: ";
cin>>N;
}
while(N<1);

do
{
cout<<"Ingrese el numero de candidatos: ";
cin>>M;
}
while(M<1);

// Se terminan de declarar el resto de las variables que se


necesitan.
string candidatos[M];
int VotosTotales[M];
int habitantes[N],votos[M][N];
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

3. REQUERIMIENTOS FUNCIONALES

RF1: El número total de votos que recibirá cada candidato se ordenara de modo
ascendente (menor a mayor).

// Se utiliza un cliclo anidado for para calcular el arreglo


votos.

RF2: Al momento que calcular quien fue el candidato ganador, se hace una búsqueda en
todo el arreglo y se selecciona quien gano las elecciones.
//Se calcula mediante la siguiente ecuación la cual permite
seleccionar el candidato ganador.
for (int i=0;i<M;i++){
if (VotosTotales [i]>mayor){
mayor = VotosTotales[i];
índice = i;
}
}
int ganador=indice;

RF3: De la misma manera que como se viene trabajando anteriormente se utiliza ciclos
anidados para hallar el nombre del municipio que voto más.
// Se expresara de igual manera mediante un ciclo anidado.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

4. REQUERIMIENTOS INSTRUCCIONALES

A. ANÁLISIS, DISEÑO E IMPLEMENTACIÓN

Teniendo en cuenta lo especificado anteriormente, en este espacio se dará forma de


manera detalla al problema se fue establecido en un inicio en el enunciado, seguido de
un contexto del caso para mayor comprensión de términos.
Al finalizar los datos estructurales y los requerimientos fundamentales tendremos todo lo
necesario para poder dar solución a este caso de elecciones.

Lo utilizado al solicitar los documentos de entradas.

//Se utilizan ciclos anidados para pedir datos y almacenarlos en


los arreglos de entrada.

cout<<endl<<"\n\tCandidatos:"<<endl;
for (int i=0;i<M;i++){
cout<<"\n\tIngrese el nombre del candidato "<<i+1<<": ";
cin>>candidatos[i];
}
cout<<endl<<"\n\tHabitantes:"<<endl;
for (int i=0;i<N;i++){
cout<<"\n\tNumero de habitantes del municipio "<<i+1<<":
";
cin>>habitantes[i];
}

cout<<endl<<"\n\tVotos:"<<endl;
for (int i=0;i<M;i++){
for (int j=0;j<N;j++){
cout<<"\n\tNumero de votos por "<<candidatos[i]<<" en
el municipio "<<j+1<<": ";
cin>>votos[i][j];

}
cout<<endl;
}
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

TÉCNICAS DE ORDENAMIENTO

// Se ordena al programa para buscar y seleccionar el candidato


que obtuvo más votos entre todos los municipios.

int indice=0,mayor=VotosTotales[0];
for (int i=0;i<M;i++){
if (VotosTotales[i]>mayor){
mayor = VotosTotales[i];
índice =i;
}
}
int ganador=indice;
cout<<"\n\t El Gobernador electo es: "<<candidatos[ganador]<<",
con "<<mayor<<" votos"<<endl;

*Aunque no estaba entre los requerimientos hacer también, se sacó


el porcentaje por municipio teniendo en cuenta quien fue el pueblo
que votos, quien tuvo mayor actividad en las elecciones.

//Se verá reflejado en la implantación donde se estará todo el


programa completo.

B. Pruebas: Después de codificar las actividades y/o procesos en la herramienta


computacional seleccionada, es necesario realizar las debidas pruebas que garanticen el
correcto funcionamiento del programa construido bajo un conjunto de situaciones
posibles a las que se pueda enfrentar.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
int N,M;
float sm=644350;
cout<<"\n\tIngrese el numero de municipios: ";cin>>N;
cout<<"\n\tIngrese el numero de candidatos: ";cin>>M;

string candidatos[M];
int VotosTotales[M];
int habitantes[N],votos[M][N];

//PEDIR DATOS

cout<<endl<<"\n\tCandidatos:"<<endl;
for (int i=0;i<M;i++){
cout<<"\n\tIngrese el nombre del candidato "<<i+1<<": ";
cin>>candidatos[i];

}
cout<<endl<<"\n\tHabitantes:"<<endl;
for (int i=0;i<N;i++){
cout<<"\n\tNumero de habitantes del municipio "<<i+1<<": ";
cin>>habitantes[i];

}
cout<<endl<<"\n\tVotos:"<<endl;
for (int i=0;i<M;i++){
for (int j=0;j<N;j++){
cout<<"\n\tNumero de votos por "<<candidatos[i]<<" en
el municipio "<<j+1<<": ";
cin>>votos[i][j];

}
cout<<endl;
}
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

cout<<"\n\t TOTAL DE VOTOS \n\t Candidato - Votos"<<endl;


for (int i=0;i<M;i++){
VotosTotales[i]=0;cout<<endl;
for (int j=0;j<N;j++){
VotosTotales[i]=VotosTotales[i]+votos[i][j];
}
cout<<setw(11)<<candidatos[i]<<" - "<<VotosTotales[i];
}

int indice=0,mayor=VotosTotales[0];
for (int i=0;i<M;i++){
if (VotosTotales[i]>mayor){
mayor=VotosTotales[i];
indice=i;
}
}
int ganador=indice;
cout<<"\n\t El Gobernador electo es:
"<<candidatos[ganador]<<", con "<<mayor<<" votos"<<endl;

int TotalVotosMunicipios[N];
for (int j=0;j<N;j++){
TotalVotosMunicipios[j]=0;
for (int i=0;i<M;i++){

TotalVotosMunicipios[j]=TotalVotosMunicipios[j]+votos[i][j];
}
}
indice=0,mayor=TotalVotosMunicipios[0];
for (int i=0;i<N;i++){
if (TotalVotosMunicipios[i]>mayor){
mayor=TotalVotosMunicipios[i];
indice=i;
}
}
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

cout<<"\n\t El Municipio con mayor numero de votos es:


Municipio "<<indice+1<<", con "<<mayor<<" votos"<<endl;

unsigned long long auxilio; int categoria;


cout<<"\n AUXILIOS DEL GOBIERNO \n Municipio -
Valor\n"<<endl;
for (int i=0;i<N;i++){
if (habitantes[i]<100000){
categoria=3;
auxilio=4000*sm+(sm/4*TotalVotosMunicipios[i]);
}
if (habitantes[i]>=100000 && habitantes[i]<=500000){
categoria=2;
auxilio=6000*sm+(sm/3*TotalVotosMunicipios[i]);
}
if (habitantes[i]>500000){
categoria=1;
auxilio=10000*sm+(sm/2*TotalVotosMunicipios[i]);
}

cout<<setw(11)<<"Municipio "<<i+1<<" - $"<<auxilio<<"


(Categoria "<<categoria<<")"<<endl;
}

cout<<"\n PORCENTAJES DEL CANDIDATO GANADOR


("<<candidatos[ganador]<<")"<<endl;
for (int j=0;j<N;j++){
cout<<" Municipio "<<j+1<<" -
"<<float(votos[ganador][j])/TotalVotosMunicipios[j]*100<<"%"<<endl;
}

return 0;
}
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
Semana 4

Casos de prueba (Entrada y salida)

TABLA DE DATOS DE PRUEBA

Votaciones Hugo Paco Luis Maria Totales

Arjona 23 45 23 47 138

Turbaco 34 12 34 22 102

Simiti 56 23 11 23 113

Santarosa 45 34 12 12 103

TOTALES 158 114 80 104 456

ENTREGABLES
● T00044125_CasoDeEleciones.