Programa electoral : para contar votos y qué votos ha tenido en cada barrio
Bueno, aquí viene otro programa hecho en C con su respectivo código fuente.. El programa lo que hace es que pide nombres de partidos politicos y de barrios segun especificados en las constantes del principio del programa y calcula el número de votos totales y el repartimiento de regidores ( hay 10 ).
Si hay algún tipo de duda no dudeis en hacer un comentario.
Licencia:

Esta obra está bajo una
licencia de Creative Commons.
/*
Autor: Imydes
Data:11/03/2008
Descripció Programa de les eleccions.
*/
#include
/******************
Definicions
******************/
#define MAXLL 16
#define MAXP 2
#define MAXB 2
/******************
Tipus
******************/
typedef char Tnom[MAXLL];
typedef int Tvots[MAXP][MAXB];
typedef Tnom Tnp[MAXP];
typedef Tnom Tnb[MAXB];
/******************
Capcelera
******************/
void Demanar_noms_partits(Tnp partits);
void Demanar_noms_barris(Tnb barris);
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots);
int buscar_guanyador(Tvots vots);
void Dir_guanyador(Tnp partits, int pguanyador);
int buscar_barri_guanyador(Tvots vots, int guanyador);
void dir_barri_guanyador(Tnb barris, int barriguanyador);
void repartir_regidors(Tvots vots, Tnp partits);
void main(void) {
Tnp partits;
Tnb barris;
Tvots vots;
int guanyador; //aquí guardarem la posició del partit guanyador.
int barriguanyador;
Demanar_noms_partits(partits);
Demanar_noms_barris(barris);
Demanar_vots(partits,barris,vots);
guanyador = buscar_guanyador(vots);
Dir_guanyador(partits, guanyador);
barriguanyador = buscar_barri_guanyador(vots,guanyador);
dir_barri_guanyador(barris,barriguanyador);
repartir_regidors(vots, partits);
}
// Demanar noms dels partits.
void Demanar_noms_partits(Tnp partits) {
int p=0;
while(p < MAXP) {
printf("Insereix el nom del %i partit\n",p+1);
gets(partits[p]);
p++;
}
}
// Demanar nom dels barris.
void Demanar_noms_barris(Tnb barris) {
int b=0;
while(b < MAXB) {
printf("Insereix el nom del %i barri\n",b+1);
gets(barris[b]);
b++;
}
}
// Demanar els bots segons el partit i el barri.
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots) {
int p, b;
for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
printf("Diguem el nombre de vots del partit %s al barri %s\n", partits[p], barris[b]);
scanf("%i", &vots[p][b]);
}
}
}
// Cerquem el partit guanyador i retornem la seva posició.
int buscar_guanyador(Tvots vots) {
int p, b, votstemp;
int pguanyador = -1;
int pvotsguanyador = -1;
for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
votstemp = vots[p][b];
}
if (votstemp > pvotsguanyador) {
pguanyador = p;
pvotsguanyador = votstemp;
}
}
return pguanyador;
}
// Mostrem un missatge de qui és el guanyador.
void Dir_guanyador(Tnp partits, int pguanyador) {
printf(”Ha guanyat el partit %s\n”, partits[pguanyador]);
}
int buscar_barri_guanyador(Tvots vots, int guanyador) {
int b;
int bguanyador, bvotstemp;
bguanyador = bvotstemp = -1;
for (b=0; b < MAXB; b++) {
if (bvotstemp < vots[guanyador][b]) {
bvotstemp = vots[guanyador][b];
bguanyador = b;
}
}
return bguanyador;
}
// Mostrem el barri guanyador.
void dir_barri_guanyador(Tnb barris, int barriguanyador) {
printf("Ha guanyat el barri %s\n", barris[barriguanyador]);
}
// Repartir regidors
void repartir_regidors(Tvots vots, Tnp partits) {
int totalvots,votspartittemp;
int npartits, barris;
int votspartit[MAXP];
totalvots = 0;
for (npartits = 0; npartits < MAXP; npartits++) {
votspartittemp = 0;
for (barris = 0; barris < MAXB; barris++) {
votspartittemp = votspartittemp + vots[npartits][barris];
}
totalvots = totalvots + votspartittemp;
votspartit[npartits] = votspartittemp;
}
//a partir d'aqui esta malament
for (npartits = 0; npartits < MAXP; npartits++) {
printf("El partit %s ha tret un total de %f regidors.\n", partits[npartits], ((float)votspartit[npartits]/(float)totalvots)*10);
}
}
En teoria si tienes las librerias de ANSI C instaladas y un compilador de C (como gcc en *NUX y Visual C++ en Windows) debería funcionar perfectamente.

