Según el criterio de la edad me da bien la respuesta de Si o No pero al fijarse si viven en argentina y en la provincia hay un error.
Les dejo el código (en algunas funciones hay parámetros de mas que no uso, después lo arreglo)
Espero que alguien pueda darme una mano. Gracias!
Código
#include <iostream> #include <cstdio> #include <string.h> #define rutaCandidatos "DatosCandidatos.dat" #define rutaVive "Vive.dat" using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ struct candidato { char nombre[50]; unsigned fechaNacimiento; char paisCuatro [50]; char puesto [15]; }; struct vive{ char nombre[50]; char pais [50]; char provincia [50]; }; struct NodolistaCandidatos{ candidato info; NodolistaCandidatos*sgte; }; struct NodolistaVive{ vive info; NodolistaVive*sgte; }; void insertarNodoCandidatosalfinal(NodolistaCandidatos *&lista, candidato a) { if (lista==NULL) { lista= new NodolistaCandidatos(); lista->info = a; lista->sgte = NULL; } else { NodolistaCandidatos *aux=lista; while (aux->sgte!=NULL) { aux= aux->sgte; } aux->sgte= new NodolistaCandidatos(); aux = aux->sgte; aux->info= a; aux->sgte = NULL; } return; } void insertarNodoVivealfinal(NodolistaVive *&lista, vive j) { if (lista==NULL) { lista= new NodolistaVive(); lista->info = j; lista->sgte = NULL; } else { NodolistaVive *aux=lista; while (aux->sgte!=NULL) { aux= aux->sgte; } aux->sgte= new NodolistaVive(); aux = aux->sgte; aux->info= j; aux->sgte = NULL; } return; } NodolistaCandidatos*crearListaCandidatos (FILE*data) { NodolistaCandidatos*Lcandidatos =NULL; candidato a; while(fread(&a, sizeof(candidato),1, data)) { insertarNodoCandidatosalfinal(Lcandidatos, a); } fclose(data); return Lcandidatos; } NodolistaVive *crearListaVive(FILE *data) { NodolistaVive *lvive=NULL; vive b; while (fread(&b, sizeof(vive),1,data)) { insertarNodoVivealfinal(lvive, b); } fclose(data); return lvive; } void DatosMemoria (FILE*candidatos, FILE*vive, NodolistaCandidatos*&listacandidatos, NodolistaVive*&listaVive) {listacandidatos=crearListaCandidatos (candidatos); listaVive=crearListaVive(vive); return; } NodolistaCandidatos* BuscarNodoCandidato(NodolistaCandidatos *lista, char nombre []) { while (lista) { if (lista->info.nombre==nombre) return lista; lista= lista->sgte; } return lista; } NodolistaVive* BuscarNodoVive(NodolistaVive*lista, char nombre[]) { while (lista) { if (lista->info.nombre==nombre) return lista; lista= lista->sgte; } return lista; } int edadCandidato(int Fechanacimiento) { int z = 2017 - Fechanacimiento / 10000; return z; } bool NoCumpleRequisitos (NodolistaVive*listaVive, NodolistaCandidatos*listacandidatos, char nombre [], char pais[], char paisCuatro [], char provincia []) { while ( listaVive!=NULL ) { if(( listaVive-> info.nombre == nombre) &&( (strcmp(listacandidatos->info.paisCuatro, "argentina")==0))) { if ( (strcmp(listaVive ->info.provincia, "buenos aires"))==0) return false; // encuentra el candidato y residio los ultimos 4 años en argentina y reside en buenos aires desde hace 2 años else return true; } return true; } } bool puedeSerCandidato (char provincia[], char paisCuatro [], char puesto[], char nombre[], char pais[], NodolistaCandidatos*listacandidatos, NodolistaVive*listaVive) { if ( strcmp (puesto, "senador")==0) {if (!NoCumpleRequisitos (listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>30) return true; else return false; } if ( strcmp (puesto, "diputado")==0) {if (!NoCumpleRequisitos(listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>22) return true; else return false; } } int main() { candidato c; FILE* p; p=fopen(rutaCandidatos,"w"); strcpy(c.nombre,"Carlos Gomez"); c.fechaNacimiento=19670803; strcpy(c.puesto, "senador"); strcpy(c.paisCuatro,"venezuela"); // pais en el que vivio los ultimos por lo menos 4 años, fwrite(&c,sizeof(c),1,p); strcpy(c.nombre,"Carla Robles"); c.fechaNacimiento=20130807; strcpy(c.puesto, "senador"); strcpy(c.paisCuatro,"argentina"); fwrite(&c,sizeof(c),1,p); strcpy(c.nombre,"Luis Alberto"); c.fechaNacimiento= 19689612; strcpy(c.puesto, "diputado"); strcpy(c.paisCuatro,"argentina"); fwrite(&c,sizeof(c),1,p); strcpy(c.nombre,"Fabiana Riez"); c.fechaNacimiento=19859394; strcpy(c.paisCuatro,"argentina"); strcpy(c.puesto, "diputado"); fwrite(&c,sizeof(c),1,p); fclose(p); vive d; FILE *f; f=fopen(rutaVive,"w"); // strcpy(d.pais,"Argentina"); strcpy(d.nombre,"Carlos Gomez"); strcpy(d.provincia, "buenos aires"); fwrite(&d,sizeof(d),1,f); strcpy(d.nombre,"Fabiana Riez"); strcpy(d.provincia, "buenos aires"); fwrite(&d,sizeof(d),1,f); strcpy(d.nombre,"Luis Alberto"); strcpy(d.provincia, "cordoba"); fwrite(&d,sizeof(d),1,f); strcpy(d.nombre,"Carla Robles"); strcpy(d.provincia, "buenos aires"); //provincia en la que residio por lo menos los ultimos dos años fwrite(&d,sizeof(d),1,f); fclose(f); FILE *fcand; FILE *fviv; NodolistaVive *lvive=NULL; NodolistaCandidatos *Lcandidatos =NULL; NodolistaCandidatos *aux; bool puede; //muestro los archivos if ((fcand =fopen(rutaCandidatos,"r")) && (fviv =fopen(rutaVive,"r"))) { DatosMemoria(fcand, fviv, Lcandidatos, lvive); fclose(fcand); fclose(fviv); aux = Lcandidatos; while (aux) { puede =puedeSerCandidato(lvive->info.provincia, aux->info.paisCuatro, aux->info.puesto, aux->info.nombre, lvive->info.pais, Lcandidatos, lvive); if (puede==true) cout << aux->info.nombre << " puede ser candidato " << endl; if(puede==false) cout << aux->info.nombre << " NO puede ser candidato " << endl; aux= aux->sgte; } } else cout << "Error al intentar abrir un archivo" << endl; return 0; }
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex