elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA no encuentro error . C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA no encuentro error . C++  (Leído 3,186 veces)
seanagu

Desconectado Desconectado

Mensajes: 2


Ver Perfil
AYUDA no encuentro error . C++
« en: 19 Octubre 2017, 01:36 am »

Estoy recién arrancando con la programación  y como ejercicio tengo que hacer un programa que se fije si las personas ingresadas pueden o no ser candidatos a diputados/senadores. Compila pero el resultado dado es incorrecto.
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
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string.h>
  4.  
  5. #define rutaCandidatos "DatosCandidatos.dat"
  6. #define rutaVive "Vive.dat"
  7.  
  8. using namespace std;
  9.  
  10.  
  11. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  12.  
  13. struct candidato {
  14. char nombre[50];
  15. unsigned fechaNacimiento;
  16. char paisCuatro [50];
  17. char puesto [15];
  18.  
  19. };
  20.  
  21.  
  22. struct vive{
  23. char nombre[50];
  24. char pais [50];
  25. char provincia [50];
  26. };
  27.  
  28. struct NodolistaCandidatos{
  29. candidato info;
  30. NodolistaCandidatos*sgte;
  31. };
  32.  
  33. struct NodolistaVive{
  34. vive info;
  35. NodolistaVive*sgte;
  36. };
  37.  
  38.  
  39. void insertarNodoCandidatosalfinal(NodolistaCandidatos *&lista, candidato a)
  40. {
  41. if (lista==NULL)
  42. {
  43. lista= new NodolistaCandidatos();
  44. lista->info = a;
  45. lista->sgte = NULL;
  46. }
  47. else
  48. {
  49. NodolistaCandidatos *aux=lista;
  50. while (aux->sgte!=NULL)
  51. {
  52. aux= aux->sgte;
  53. }
  54. aux->sgte= new NodolistaCandidatos();
  55.  
  56. aux = aux->sgte;
  57. aux->info= a;
  58. aux->sgte = NULL;
  59. }
  60. return;
  61. }
  62.  
  63.  
  64.  
  65. void insertarNodoVivealfinal(NodolistaVive *&lista, vive j)
  66. {
  67. if (lista==NULL)
  68. {
  69. lista= new NodolistaVive();
  70. lista->info = j;
  71. lista->sgte = NULL;
  72. }
  73. else
  74. {
  75. NodolistaVive *aux=lista;
  76. while (aux->sgte!=NULL)
  77. {
  78. aux= aux->sgte;
  79. }
  80. aux->sgte= new NodolistaVive();
  81. aux = aux->sgte;
  82. aux->info= j;
  83. aux->sgte = NULL;
  84. }
  85. return;
  86. }
  87.  
  88.  
  89.  
  90.  
  91. NodolistaCandidatos*crearListaCandidatos (FILE*data)
  92. { NodolistaCandidatos*Lcandidatos =NULL;
  93. candidato a;
  94. while(fread(&a, sizeof(candidato),1, data))
  95. { insertarNodoCandidatosalfinal(Lcandidatos, a);
  96.  
  97. }
  98. fclose(data);
  99. return Lcandidatos;
  100.  
  101. }
  102.  
  103.  
  104.  
  105. NodolistaVive *crearListaVive(FILE *data)
  106. {
  107. NodolistaVive *lvive=NULL;
  108. vive b;
  109. while (fread(&b, sizeof(vive),1,data))
  110. {
  111. insertarNodoVivealfinal(lvive, b);
  112. }
  113. fclose(data);
  114. return lvive;
  115. }
  116.  
  117.  
  118.  
  119. void DatosMemoria (FILE*candidatos, FILE*vive, NodolistaCandidatos*&listacandidatos, NodolistaVive*&listaVive)
  120. {listacandidatos=crearListaCandidatos (candidatos);
  121. listaVive=crearListaVive(vive);
  122. return;
  123. }
  124.  
  125.  
  126.  
  127.  
  128.  
  129. NodolistaCandidatos* BuscarNodoCandidato(NodolistaCandidatos *lista, char nombre [])
  130. {
  131. while (lista)
  132. {
  133. if (lista->info.nombre==nombre)
  134. return lista;
  135. lista= lista->sgte;
  136. }
  137. return lista; }
  138.  
  139.  
  140.  
  141.  
  142. NodolistaVive* BuscarNodoVive(NodolistaVive*lista, char nombre[])
  143. {
  144. while (lista)
  145. {
  146. if (lista->info.nombre==nombre)
  147. return lista;
  148. lista= lista->sgte;
  149. }
  150. return lista;
  151. }
  152.  
  153.  
  154.  
  155. int edadCandidato(int Fechanacimiento)
  156. {
  157. int z = 2017 - Fechanacimiento / 10000;
  158. return z;
  159. }
  160.  
  161.  
  162.  
  163.  
  164. bool NoCumpleRequisitos (NodolistaVive*listaVive, NodolistaCandidatos*listacandidatos, char nombre [], char pais[], char paisCuatro [], char provincia [])
  165. {
  166. while (  listaVive!=NULL )
  167.  
  168.   { if(( listaVive-> info.nombre == nombre) &&( (strcmp(listacandidatos->info.paisCuatro, "argentina")==0)))
  169. {
  170.  
  171. if ( (strcmp(listaVive ->info.provincia, "buenos aires"))==0)
  172. return false; // encuentra el candidato y residio los ultimos 4 años en argentina y reside en buenos aires desde hace 2 años
  173. else
  174. return true;
  175.  
  176. }
  177. return true;
  178.  
  179.    }
  180. }
  181.  
  182. bool puedeSerCandidato (char provincia[], char paisCuatro [], char puesto[], char nombre[], char pais[], NodolistaCandidatos*listacandidatos, NodolistaVive*listaVive)
  183. {  if ( strcmp (puesto, "senador")==0)
  184.  {if (!NoCumpleRequisitos (listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>30)
  185. return true;
  186.  
  187. else return false;
  188.  }
  189.  
  190.  
  191. if ( strcmp (puesto, "diputado")==0)
  192.  {if (!NoCumpleRequisitos(listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>22)
  193. return true;
  194.  
  195. else
  196. return false;
  197.  }
  198.  
  199. }
  200.  
  201.  
  202.  
  203.  
  204.  
  205. int main() {
  206.  
  207. candidato c;
  208. FILE* p;
  209. p=fopen(rutaCandidatos,"w");
  210. strcpy(c.nombre,"Carlos Gomez");
  211. c.fechaNacimiento=19670803;
  212. strcpy(c.puesto, "senador");
  213. strcpy(c.paisCuatro,"venezuela");  // pais en el que vivio los ultimos por lo menos 4 años,
  214.  
  215. fwrite(&c,sizeof(c),1,p);
  216. strcpy(c.nombre,"Carla Robles");
  217. c.fechaNacimiento=20130807;
  218. strcpy(c.puesto, "senador");
  219. strcpy(c.paisCuatro,"argentina");
  220.  
  221. fwrite(&c,sizeof(c),1,p);
  222. strcpy(c.nombre,"Luis Alberto");
  223. c.fechaNacimiento= 19689612;
  224. strcpy(c.puesto, "diputado");
  225. strcpy(c.paisCuatro,"argentina");
  226.  
  227. fwrite(&c,sizeof(c),1,p);
  228. strcpy(c.nombre,"Fabiana Riez");
  229. c.fechaNacimiento=19859394;
  230. strcpy(c.paisCuatro,"argentina");
  231. strcpy(c.puesto, "diputado");
  232. fwrite(&c,sizeof(c),1,p);
  233. fclose(p);
  234.  
  235.  
  236. vive d;
  237. FILE *f;
  238. f=fopen(rutaVive,"w");
  239. // strcpy(d.pais,"Argentina");
  240. strcpy(d.nombre,"Carlos Gomez");
  241. strcpy(d.provincia, "buenos aires");
  242. fwrite(&d,sizeof(d),1,f);
  243.  
  244.  
  245. strcpy(d.nombre,"Fabiana Riez");
  246. strcpy(d.provincia, "buenos aires");
  247. fwrite(&d,sizeof(d),1,f);
  248.  
  249.  
  250. strcpy(d.nombre,"Luis Alberto");
  251. strcpy(d.provincia, "cordoba");
  252. fwrite(&d,sizeof(d),1,f);
  253.  
  254.  
  255. strcpy(d.nombre,"Carla Robles");
  256. strcpy(d.provincia, "buenos aires");  //provincia en la que residio por lo menos los ultimos dos años
  257. fwrite(&d,sizeof(d),1,f);
  258. fclose(f);
  259.  
  260.  
  261. FILE *fcand;
  262. FILE *fviv;
  263. NodolistaVive *lvive=NULL;
  264. NodolistaCandidatos *Lcandidatos =NULL;
  265. NodolistaCandidatos *aux;
  266. bool puede;
  267. //muestro los archivos
  268. if ((fcand =fopen(rutaCandidatos,"r")) && (fviv =fopen(rutaVive,"r")))
  269. {
  270. DatosMemoria(fcand, fviv, Lcandidatos, lvive);
  271. fclose(fcand);
  272. fclose(fviv);
  273. aux = Lcandidatos;
  274. while (aux)
  275. {
  276. puede =puedeSerCandidato(lvive->info.provincia, aux->info.paisCuatro, aux->info.puesto, aux->info.nombre, lvive->info.pais, Lcandidatos, lvive);
  277.  
  278. if (puede==true)
  279. cout  << aux->info.nombre << " puede ser candidato "  << endl;
  280.  
  281. if(puede==false)
  282. cout << aux->info.nombre << " NO puede ser candidato "  << endl;
  283. aux= aux->sgte;
  284. }
  285. }
  286.  
  287. else
  288. cout << "Error al intentar abrir un archivo" << endl;
  289.  
  290.  
  291.  
  292.  
  293. return 0;
  294. }


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex


« Última modificación: 19 Octubre 2017, 01:41 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: AYUDA no encuentro error . C++
« Respuesta #1 en: 19 Octubre 2017, 01:42 am »

muestra lo que haces, el resultado obtenido y el esperado


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
seanagu

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: AYUDA no encuentro error . C++
« Respuesta #2 en: 19 Octubre 2017, 01:46 am »

Lo que me da:

Carlos Gomez NO puede ser candidato
Carla Robles NO puede ser candidato
Luis Alberto NO puede ser candidato
Fabiana Riez NO puede ser candidato


Lo que debería dar:


Carlos Gomez NO  puede ser candidato (segun requisito de la ciudadania arg)
Carla Robles NO puede ser candidato (según el requisito de la edad)
Luis Alberto  NO puede ser candidato (según el requisito de la residencia en bs as)
Fabiana Riez  puede ser candidato
En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: AYUDA no encuentro error . C++
« Respuesta #3 en: 19 Octubre 2017, 17:03 pm »

Depura en las funciones puedeSerCandidato() y NoCumpleRequisitos(), ahí tienes unas condiciones que terminan devolviendo true o false, responsables del resultado no correcto.

Para depurar puedes ayudarte mostrando los datos por pantalla (por medio de cout) de los datos que son comparados en las condiciones conflictivas, y de esa forma te ayudará a seguir mejor el flujo del programa. Por ejemplo usando un :

Código:
...

cout << "True, el dato tal es mayor que el dato cual" << endl;
return true;
...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No encuentro el error, ayuda o_o
Programación C/C++
deserto 8 3,948 Último mensaje 15 Septiembre 2013, 19:38 pm
por deserto
Ayuda con C++ , no encuentro un error
Programación C/C++
Ozharu-Ad 7 3,528 Último mensaje 15 Noviembre 2013, 06:09 am
por Ozharu-Ad
ayuda no encuentro el error!
PHP
ediporey2000 1 1,941 Último mensaje 23 Febrero 2014, 22:49 pm
por engel lex
[Resuelto] AYUDA esto me esta mantando (CODIGO PHP) no encuentro el error
PHP
invdoolca 1 2,003 Último mensaje 30 Enero 2015, 22:05 pm
por MinusFour
No encuentro el error ayuda! C
Programación C/C++
Mozzard 4 2,068 Último mensaje 14 Noviembre 2018, 18:52 pm
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines