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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Buscador (C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Buscador (C)  (Leído 7,575 veces)
dfr2198

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Buscador (C)
« Respuesta #10 en: 20 Mayo 2017, 19:48 pm »

Código
  1. A continuacion, indique los criterios de busqueda
  2. Introduzca 1 para buscar por el nombre del sistema
  3. Introduzca 2 para buscar por el c├│digo del sistema de propulsion
  4. Introduzca 3 para buscar seg├║n la energia del sistema (en MW)
  5. Introduzca 4 para buscar en terminos de velocidad de escape de la masa de reaccion
  6. Introduca 5 para buscar segun el Impulso especifico (en segundos)
  7. Pulse 6 para buscar seg├║n el empuje (en Newtons)
  8. Con el 7, buscará según la masa del motor(se mostraran los valores iguales o mas pequeños)
  9. Pulse 0 para salir
  10. 5
  11. Seleccione el contenido a buscar. tenga en cuenta que para valores numericos distintos del peso,
  12. se mostraran cantidades iguales o SUPERIORES
  13. Se ha completado la carga del archivo
y ahí "programa.exe ha dejado de funcionar".
He tomado nota y corregido vuestras indicaciones, sustituyendo por ejemplo
Código
  1. for(contadorf[contador] != ';'; contador=0; contador++)//Aquí se realiza la cuenta para saber los elementos de char.
  2. {
  3. if (contadorf[contador]==', ')
  4. {
  5. contador2++;
  6. }
  7. }
Código
  1. if (fent==NULL)
  2. {
  3. printf("ERROR DE APERTURA DE %d\n",field);//Comprobación de errores en apertura.
  4. exit(0);
  5. }


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Buscador (C)
« Respuesta #11 en: 20 Mayo 2017, 20:08 pm »

Código:
contadorf[contador]==', '

te dije que entre comillas es char, no hay char de 2 bytes... si quieres comparar char es de 1 a 1 (ahí hay coma y espacio) si quieres comparar string (más de 1 char) usa strcmp



todo lo que suena es que se desborda el contador, coloca un printf junto a contador2++ (que imprima el valor de contador2)


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.
dfr2198

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Buscador (C)
« Respuesta #12 en: 21 Mayo 2017, 18:48 pm »

Finalmente, he resuelto todos los errores de compilación y tengo un codigo operativo al 90%. Salvo.... Que falla la parte más importante. No es capaz de cargar los datos que posee en la cadena resultado del fgets a los vectores y cadenas correspondientes para su análisis. Y ya no sé como solucionarlo.

SI a alguno se le ocurriera que puede estar mal, sería de gran ayuda.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>  
  4. #include <windows.h>
  5. #include <math.h>
  6. int main (int argc, char *argv[])
  7. {
  8. char field [5000];
  9. int buscador=0;
  10.  
  11.  
  12. printf("A continuacion, indique los criterios de busqueda\n");
  13. printf("Introduzca 1 para buscar por el nombre del sistema\n");
  14. printf("Introduzca 2 para buscar por el código del sistema de propulsion\n");
  15. printf("Introduzca 3 para buscar según la energia del sistema (en MW)\n");
  16. printf("Introduzca 4 para buscar en terminos de velocidad de escape de la masa de reaccion\n");
  17. printf("Introduca 5 para buscar segun el Impulso especifico (en segundos)\n");
  18. printf("Pulse 6 para buscar según el empuje (en Newtons)\n");
  19. printf("Con el 7, buscará según la masa del motor(se mostraran los valores iguales o mas pequeños)\n");
  20. printf("Pulse 0 para salir\n");
  21. scanf("%d", &buscador);
  22. printf("Seleccione el contenido a buscar. tenga en cuenta que para valores numericos distintos del peso,\n se mostraran cantidades iguales o SUPERIORES\n");
  23.  
  24. int contador=1;
  25. int contador2=0;
  26. char contadorf[500000];
  27.  
  28. int objetivo;
  29. strcpy(field, argv[1]);
  30. FILE *fent;//Apertura de archivo.
  31. fent=fopen (field, "r");
  32.  
  33.  
  34.  
  35. if (fent==NULL)
  36. {
  37. printf("ERROR DE APERTURA DE %d\n",field);//Comprobación de errores en apertura.
  38. exit(0);
  39. }
  40.  
  41.  
  42. printf("Se ha completado la carga del archivo\n");
  43.  
  44. fgets(contadorf, 5000, fent);
  45. for(contadorf[contador] != ';'; contador=0; contador++)//Aquí se realiza la cuenta para saber los elementos de char.
  46. {
  47. if (((contadorf[contador])!=' ') && ((contadorf[contador-1])!=','))
  48. {
  49. contador2++;
  50. }
  51. }
  52.  
  53.  
  54.  
  55. printf("Se ha completado comprobación de longitud\n");
  56.  
  57. int i=0;
  58. char **nombre = (char**) calloc(contador2, sizeof(char*));
  59. for ( i = 0; i < contador2; i++ )
  60. {
  61.    nombre[i] = (char*) calloc(500, sizeof(char));
  62. }
  63. char **codigo = (char**)calloc(contador2, sizeof(char*));
  64.  
  65. for ( i = 0; i < contador2; i++ )
  66. {
  67.    codigo[i] = (char*) calloc(500, sizeof(char));
  68. }
  69.  
  70. float * power = malloc(contador2 * sizeof(float));
  71. float * v = malloc(contador2 * sizeof(float));
  72. float * isp = malloc(contador2 * sizeof(float));
  73. float * empuje = malloc(contador2 * sizeof(float));
  74. float * peso = malloc(contador2 * sizeof(float));
  75. int x=0, y=0, z=0, xx=0, yy=0, zz=0;
  76. char auxiliar[40];
  77. float suma=0;
  78.  
  79. printf("Asignacion de memoria completada\n");
  80.  
  81. fgets(contadorf, 7000, fent);
  82.  
  83. for(contadorf[x]!=';'; x=0; x++)
  84.  
  85. {
  86. while (((contadorf[x])!=' ') && ((contadorf[x-1])!=','))
  87. {
  88. y=0;
  89. nombre[x][y]=contadorf[x+y];
  90. y++;
  91. }
  92. }
  93. for(contadorf[x]!=';'; x; x++)
  94. {
  95.  
  96. while (((contadorf[x])!=' ') && ((contadorf[x-1])!=','))
  97. {
  98. y=0;
  99. codigo[z][y]=contadorf[x+y];
  100. y++;
  101. }
  102. z++;
  103. }
  104. for(contadorf[x]!=';'; x; x++)
  105. {
  106. {
  107.  
  108. while (contadorf[xx]!=' ')
  109. {
  110. y=0;
  111. auxiliar[y]=contadorf[x+y];
  112. y++;
  113. }
  114. xx = strlen(auxiliar);
  115. while (xx>=0)
  116. {
  117.  
  118. (auxiliar[xx]=(int)auxiliar[xx]);
  119. suma=suma+auxiliar[xx]*pow(10, strlen(auxiliar)-xx);
  120. xx--;
  121. }
  122. suma=power[zz];
  123. zz++;
  124. }
  125. suma=0;
  126. zz=0;
  127. for(contadorf[x]!=';'; x; x++)
  128. {
  129. {
  130.  
  131. while (contadorf[xx]!=' ')
  132. {
  133. y=0;
  134. auxiliar[y]=contadorf[x+y];
  135. y++;
  136. }
  137. xx = strlen(auxiliar);
  138. while (xx>=0)
  139. {
  140. (auxiliar[xx]=(int)auxiliar[xx]);
  141. suma=suma+auxiliar[xx]*pow(10, strlen(auxiliar)-xx);
  142. xx--;
  143. }
  144. suma=v[zz];
  145. zz++;
  146. }
  147.  
  148. }
  149. suma=0;
  150. zz=0;
  151. for(contadorf[x]!=';'; x; x++)
  152. {
  153. {
  154.  
  155. while (contadorf[xx]!=' ')
  156. {
  157. y=0;
  158. auxiliar[y]=contadorf[x+y];
  159. y++;
  160. }
  161. xx = strlen(auxiliar);
  162. while (xx>=0)
  163. {
  164. (auxiliar[xx]=(int)auxiliar[xx]);
  165. suma=suma+auxiliar[xx]*pow(10, strlen(auxiliar)-xx);
  166. xx--;
  167. }
  168. suma=isp[zz];
  169. zz++;
  170. }
  171.  
  172. }
  173. suma=0;
  174. zz=0;
  175. for(contadorf[x]!=';'; x; x++)
  176. {
  177. {
  178.  
  179. while (contadorf[xx]!=' ')
  180. {
  181. y=0;
  182. auxiliar[y]=contadorf[x+y];
  183. y++;
  184. }
  185. xx = strlen(auxiliar);
  186. while (xx>=0)
  187. {
  188. (auxiliar[xx]=(int)auxiliar[xx]);
  189. suma=suma+auxiliar[xx]*pow(10, strlen(auxiliar)-xx);
  190. xx--;
  191. }
  192. suma=empuje[zz];
  193. zz++;
  194. }
  195.  
  196. }
  197. suma=0;
  198. zz=0;
  199. for(contadorf[x]!=';'; x; x++)
  200. {
  201. {
  202.  
  203. while (contadorf[xx]!=' ')
  204. {
  205. y=0;
  206. auxiliar[y]=contadorf[x+y];
  207. y++;
  208. }
  209. xx = strlen(auxiliar);
  210. while (xx>=0)
  211. {
  212. (auxiliar[xx]=(int)auxiliar[xx]);
  213. suma=suma+auxiliar[xx]*pow(10, strlen(auxiliar)-xx);
  214. xx--;
  215. }
  216. suma=peso[zz];
  217. zz++;
  218. }
  219. }
  220. }
  221.  
  222. fclose (fent);
  223.  
  224. printf("Carga de datos a programa completada\n");
  225. for(i<=contador2; i=0;i++)
  226. { printf("%c\n", *nombre[i]);
  227. printf("%c\n",*codigo[i]);
  228. printf("%f\n", power[i]);
  229. printf("%f\n", v[i]);
  230. printf("%f\n", isp[i]);
  231. printf("%f\n", empuje[i]);
  232. printf("%f\n", peso[i]);
  233. }
  234.  
  235.  
  236. int * resultados = malloc(contador2 * sizeof(int));
  237. i=0;
  238. int j=0;
  239. char objetivof[50];
  240. switch(buscador)
  241. {
  242.  
  243. case 1:
  244.  
  245. printf("Ha pulsado el 1\n");
  246. printf("Introduzca el contenido a buscar.");
  247. scanf("%c", &objetivof);
  248. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  249. while(i<contador2)
  250. {
  251. if (strstr(nombre[i], objetivof) != NULL);
  252. {
  253. resultados[j]=i;
  254. j++;
  255. }
  256. i++;
  257. }
  258. break;
  259.  
  260. case 2:
  261.  
  262. printf("Ha pulsado el 2\n");
  263. printf("Introduzca el contenido a buscar.\n");
  264. scanf("%c", &objetivof);
  265. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  266. while(i<contador2)
  267. {
  268. if (strstr(codigo[i], objetivof) != NULL);
  269. {
  270. resultados[j]=i;
  271. j++;
  272. }
  273. i++;
  274. }
  275. break;
  276.  
  277.  
  278. case 3:
  279. printf("Ha pulsado el 3\n");
  280. printf("Introduzca el contenido a buscar.\n");
  281.  
  282. scanf("%d", &objetivo);
  283. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  284. while(i<contador2)
  285. {
  286. if((power[i])>=objetivo)
  287. {
  288. resultados[j]=i;
  289. j++;
  290. }
  291. i++;
  292. }
  293. break;
  294.  
  295.  
  296. case 4:
  297. printf("Ha pulsado el 4\n");
  298. printf("Introduzca el contenido a buscar.\n");
  299.  
  300. scanf("%d", &objetivo);
  301. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  302. while(i<contador2)
  303. {
  304. if((v[i])>=objetivo)
  305. {
  306. resultados[j]=i;
  307. j++;
  308. }
  309. i++;
  310. }
  311.  
  312.  
  313. break;
  314.  
  315.  
  316. case 5:
  317. printf("Ha pulsado el 5\n");
  318. printf("Introduzca el contenido a buscar.");
  319.  
  320. scanf("%d", &objetivo);
  321. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  322. while(i<contador2)
  323. {
  324. if((isp[i])>=objetivo)
  325. {
  326. resultados[j]=i;
  327. j++;
  328. }
  329. i++;
  330. }
  331.  
  332. break;
  333.  
  334.  
  335. case 6:
  336. printf("Ha pulsado el 6\n");
  337. printf("Introduzca el contenido a buscar.");
  338.  
  339. scanf("%d", &objetivo);
  340. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  341. while(i<contador2)
  342. {
  343. if((empuje[i])>=objetivo)
  344. {
  345. resultados[j]=i;
  346. j++;
  347. }
  348. i++;
  349. }
  350.  
  351. break;
  352.  
  353.  
  354. case 7:
  355. printf ("Ha pulsado el 7\n");
  356. printf("Introduzca el contenido a buscar.");
  357.  
  358. scanf("%d", &objetivo);
  359. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  360. while(i<contador2)
  361. {
  362. if((peso[i])<=objetivo)
  363. {
  364. resultados[j]=i;
  365. j++;
  366. }
  367. i++;
  368. }
  369.  
  370. break;
  371.  
  372. case 0:
  373. exit(0);
  374.  
  375.  
  376. default:
  377. {
  378. printf("Ha introducido un caracter no incluido en el menu\n");
  379. }
  380. break;
  381. }
  382.  
  383. printf("Busqueda y comparacion completada\n");
  384.  
  385. if(j != 0)
  386. {
  387. printf("Se han encontrado los siguientes resultados que concuerdan con el criterio:\n");
  388. for(i=0; i!=j; i++)
  389. {
  390. printf("%c\n", *nombre[resultados[i]]);
  391. printf("[%d]\n",i);
  392. }
  393. }
  394. if (j != 0)
  395. {
  396. int sino=0;
  397. int comp=1;
  398. printf("¿Desea ver los datos de alguno de los sistemas presentados? [1 si, 0 no]\n");
  399. scanf("%c", &sino);
  400. if(sino==1)
  401. {
  402. printf("A cada resultado anterior se le ha asignado un numero identificativo que figura bajo cada resultado. Por favor, insertelo a continuacion.\n");
  403. printf("Para salir, presione el [0].\n");
  404. while(comp!=0)
  405. { scanf("%d", &comp);
  406. printf("Nombre: %c", *nombre[comp]);
  407. printf("Tipo: %c", *codigo[comp]);
  408. printf("Energia: %f", power[comp]);
  409. printf("velocidad de escape: %f", v[comp]);
  410. printf("ISP: %f", isp[comp]);
  411. printf("Empuje: %f", empuje[comp]);
  412. printf("Peso: %f", peso[comp]);
  413. printf("Introduzca más datos, o pulse 0 para salir.\n");
  414. }
  415. }
  416. }
  417. if(j != 0)
  418. {
  419. int sino=0;
  420. int comp=0;
  421. printf("¿Desea iniciar la funcion calculadora? [1 si, 0 no]");
  422. scanf("%c", &sino);
  423. if(sino==1)
  424. {
  425. int mf=0;
  426. int mi=0;
  427. int comb=0;
  428. float resultado=0;
  429. printf("A cada resultado anterior se le ha asignado un numero identificativo que figura bajo cada resultado. Por favor, insertelo a continuacion.\n");
  430. scanf("%d",&comp);
  431. printf("¿Cuanto pesa el vehiculo?(en kg)\n");
  432. scanf("%d",&mi);
  433. printf("¿Cuantos kilos de combustible lleva?\n");
  434. scanf("%d", &comb);
  435. mf=comb+mi;
  436. resultado=v[comp]*log(mi/mf);
  437. printf("Delta-V estimada: %f m/s\n");
  438. }
  439. }
  440. for ( i = 0; i < contador2; i++ )
  441. {
  442.    free(nombre[i]);
  443. }
  444.  
  445. free(nombre);
  446. for ( i = 0; i < contador2; i++ )
  447. {
  448.    free(codigo[i]);
  449. }
  450.  
  451. free(codigo);
  452. free(v);
  453. free(isp);
  454. free(power);
  455. free(peso);
  456. free(empuje);
  457.  
  458.  
  459. }
  460.  

Este es el txt a cragar 
Código
  1. DAWN mission NSTAR, Resistojet, Radioisotope, ArcJet, Magneto Inertial Fusion (low), VASIMR (low gear), VASIMR (high gear), VASIMR (med gear), Space Shuttle RCS, Mirror Steamer, Solar Moth, Umbrella Ship, ArcJet, Hall Effect, Pulsed Plasmoid Thruster, Ponderomotive VASIMR, Ablative Laser, Tungsten Resistojet, NASA space tug, Mass Driver, Ion Drive, NERVA (CO or N2), NERVA (CO2), NERVA (H2O), NERVA (NH3), D-D Fusion Inertial, NERVA (CH4), Dusty Plasma (550AU), Colloid Thruster, NERVA (H2), Laser Thermal, Mass Driver, LANTR (high gear), Magneto Inertial Fusion (high), Aluminum/LOX rocket, NERVA (H), Vortex Confined (H2), LH2/LOX rocket, LANTR (low gear), Dual-mode Fission (H2), Cermet NERVA (H2), Bimodal NTR Solid (NASA), Ion, D-T Fusion, NERVA Deriv (H2), Antimatter Bottle, n-6Li Microfission, Pebble Bed (H2), Vapor Core (H2), Tokamak MC, Antimatter Solid max, Dusty Plasma (0.5LY), Proton RD-253 x1, NTR Gas/Closed (H2), ORION Fission, THS Fusion Pulse high gear, THS Fusion Pulse low gear, ORION Fusion, saturn V F-1 (x1), Space Shuttle SSME x3, Solid rocket, Proton RD-253 x6, VISTA, Project Orion, Nuclear DC-X NERVA, APCP Space Shuttle SRB x2, ORION USAF 10m, NTR Solid MAX, Gasdynamic Mirror, Nuclear DC-X LANTR, NTR Liquid max, Saturn-V F-1 x5, NTR Gas/Open (H2), NTR Gas/Open 2nd Gen, Mini-Mag Orion, NTR Gas MAX, NTR Gas/Coaxial (H2), He3-D Fusion, MC-Fusion MAX, ORION battleship, ORION 10k ton adv, ORION MAX, Antimatter Beam MAX, IC-Fusion MAX;ESTAT, ETHERM, NTR SOLID, ETHERM, EMAG, EMAG, EMAG, PULSE, EMAG, EMAG, EMAG,CHEM LIQUID, BEAM, BEAM, ESTAT, ETHERM, ESTAT, PULSE, EMAG, BEAM, ETHERM, CHEM LIQUID, OTHER, ESTAT, NTR SOLID, NTR SOLID, NTR SOLID, NTR SOLID, PULSE, NTR SOLID, NTR FRAG, ESTAT, NTR SOLID, BEAM, OTHER, NTR SOLID, PULSE, CHEM LIQUID, NTR SOLID, NTR GAS OP, CHEM LIQUID, NTR SOLID, NTR SOLID, NTR SOLID, NTR SOLID, ESTAT, FUSION, NTR SOLID, PULSE, PULSE, NTR SOLID, NTR VAPOR, FUSION, AM SOLID, NTR FRAG, CHEM LIQUI, NTR GAS CL, PULSE, PULSE, PULSE, PULSE, CHEM LIQUID, CHEM LIQUID, CHEM SOLID, CHEM LIQUID, PULSE, PULSE, NTR SOLID, CHEM SOLID,PULSE, NTR SOLID, FUSION, NTR SOLID, NTR GAS OP, CHEM LIQUID, NTR GAS OP, NTR GAS OP, PULSE, NTR GAS OP, NTR GAS OP, FUSION, FUSION, PULSE, PULSE, PULSE, AM BEAM, PULSE; 1.37e-06, 7.25e-04, 5.85e-03, 2.00e-02, 3, 6, 6, 6, 6, 13, 18, 20, 31, 32, 43, 44, 47, 49, 49, 51, 57, 65, 81, 99, 125, 126, 155, 165, 172, 198, 260, 300, 309, 348, 388, 392, 494, 540, 584, 612, 659, 898, 1,05, 1,188, 1,35, 1,362, 1,57, 1,59, 1,617, 2,231, 2,374, 2,58, 2,836, 4,54, 5,654, 6, 6, 10,658, 11,541, 12,115, 15, 16,228, 20,4, 21,731, 27,272, 31,2, 32,9, 42, 46,06, 49,206, 56, 58,054, 61,25, 125, 146,795, 147, 157,156, 192,08, 200, 1,560,000, 24,000,000, 39,200,000, 500,000,000, 500,000,000; 30,411, 2,9, 7,8, 20, 50,42, 29, 294, 147, 3,1 ,9,81, 9, 80,442, 19,62, 19,62, 78,48, 39,24, 39,24, 9,81, 4,4, 9,81, 78,48, 2,649, 3,306, 4,042, 5,101, 78,48, 6,318, 15,000,000, 43, 8,093, 40, 30, 9,221, 50,42, 2,649, 16, 19,62, 4,905, 6,347, 9,81, 9,81, 8,98, 210, 22, 8,085, 78,48, 156,96, 9,53 ,9,8, 66,8, 10,791, 15,000,000, 3,1, 20,405, 43, 300, 150, 73, 2,982, 4,444, 3, 3,1, 170, 19,62, 9,81, 2,6, 32,9, 12, 1,960,000, 5,9, 16, 3, 35, 50, 157, 98, 17,658, 7,840,000, 8,000,000, 39, 120, 9,800,000, 100,000,000, 10,000,000; 3,1, 296, 795, 2,039, 5,14, 2,956, 29,969, 14,985, 316, 1, 917, 8,2, 2, 2, 8, 4, 4, 1, 449, 1, 8, 270, 337, 412, 520, 8, 644, 1,529,052, 4,383, 825, 4,077, 3,058, 940, 5,14, 270, 1,631, 2, 500, 647, 1, 1, 915, 21,407, 2,243, 824, 8, 16, 971, 999, 6,809, 1,1, 1,529,052, 316, 2,08, 4,383, 30,581, 15,291, 7,441, 304, 453, 306, 316, 17,329, 2, 1, 265, 3,354, 1,223, 199,796, 601, 1,631, 306, 3,568, 5,097, 16,004, 9,99, 1,8, 799,185, 815,494, 3,976, 12,232, 998,981, 10,193,680, 1,019,368; 9.00e-05, 1, 2, 2, 103, 400, 40, 80, 3,87, 2,6, 4, 490, 3,2, 3,3, 1,1, 2,25, 2,4, 9,9, 22,4, 10,4, 1,444, 49, 49, 49, 49, 3,2, 49, 22, 8, 49, 13, 20, 67, 13,8, 292,6, 49, 50,4, 220, 184, 124,7, 134,4, 200, 10, 108, 334,061, 34,7, 20, 333,617, 330, 66,8, 440, 344, 1,830,000, 445, 263, 40, 80, 292, 7,740,500, 5,452,200, 10,000,000, 10,470,000, 240, 2,215,200, 5,560,000, 24,000,000, 2,000,000, 7,000,000, 47, 16,680,000, 7,000,000, 38,702,500, 3,500,000, 5,000,000, 1,870,000, 3,000,000, 17,800,000, 49, 50, 80,000,000, 400,000,000, 8,000,000, 10,000,000, 100,000,000; 26, N/A, N/A, N/A, N/A, 10, 10, 10, 4, 20,977, 100, N/A, 22,369, 85,469, 83,611, 43,796, 22,222, 42,601, 199,6, 163, 120,149, 10, 10, 10, 10, 243,333, 10, 9, 20, 10, 20, 150, N/A, N/A, 56, 10, 114,116, 26,667, N/A, 33, 32,546, 6,672, 400, 10, 10,1, 180, 106,667, 1,7, 6,83, 197, N/A, 9, 1,26, 56,8, 200, 4, 4, 200, 9,153, 9,531, N/A, 7,56, N/A, 203,68, 199,6, 1,180,000, 107,9, 15, N/A, 199,6, 70, 45,765, 200, 200, 199,6, 15, 127, 1,200,000, 600, 1,700,000, 3,250,000, 8, 10, 1,000,000;
  2.  
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Buscador (C)
« Respuesta #13 en: 21 Mayo 2017, 19:30 pm »

Estos for están mal construidos.
Inicialización, comprobación y actualización.
En línea

dfr2198

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Buscador (C)
« Respuesta #14 en: 22 Mayo 2017, 21:51 pm »

MAFUS, primero de todo muchisimas gracias por llevarme hasta aquí.
Por desgracia, aun me queda mucho más por aprender. y lacosa va para largo. Y esto debería de estar acabado para mañana a las 5. Y me queda bastante grande.

EN primer lugar, tengo que decir un poco lo que debería de hacer el programa.
Leer los datos del txt y guardarlos en arrays de caracteres bidimensionales (nombre y codigo[numero de elementos][50] ) y el resto en arrays normales. (potencia)
Las premisas son que el txt está divido:
en lineas, de forma que cada fgets consigue una linea de codigo. por este motivo introduzco el char contador0, ya que la primera linea está en blanco (para que la asignacion dinamica de memoria dependiente de contador 2 funcione).

EN cada linea, los elementos etán separados en con una coma y un espacio. Y creo que el error del programa está justamente ahí: en estas lineas. En identificar los datos a extraer.

Luego debe de comparar esos datos con los que le indica el usuario. No se si hay errores ahí porque nunca llega tan lejos.
EL caso es que decidi usar printf para establecer qué va mal. Y le ordené dvolverme todos lo datos introducidos en la secuencia
nombre
cadena
vector
etc.
Consigo dos lineas en blanco y 5 lineas de 0.
Así que el problema está en sacar los datos de la cadena que sale de fgets (la he imprimido y sale) a los vectores.

Agradecería si alguien puede decirme como puedo hacerlo para fijar los criterios y que el programa ejecute. No es elegante ni bonito. Pero debería funcionar. Adjunto mas abajo el txt (de nuevo) y el programa completo, por si acaso.


Código
  1. for( x=0; x<strlen(nnombre); x++)
  2. {
  3. if(nnombre[x]!=',' && nnombre[x+1]!=' ')
  4. {
  5. nombre[z][y]=nnombre[x];
  6. y++;
  7. }
  8. else{
  9.  
  10. z++;
  11. y=0;
  12. }
  13. z=0;
  14. y=0;
  15. j=0;
  16. }
  17. for( x=0; x<strlen(ccodigo); x++)
  18. {
  19. if(ccodigo[x]!=',' && ccodigo[x+1]!=' ')
  20. {
  21. codigo[z][y]=ccodigo[x];
  22. y++;
  23. }
  24. else{
  25.  
  26. z++;
  27. y=0;
  28. }
  29. z=0;
  30. y=0;
  31. j=0;
  32. }
  33. for(x=0; x<strlen(ppower); x++)
  34.  
  35. {
  36. if (((ppower[x+1])!=' ') && ((ppower[x])!=','))
  37. {
  38.  
  39. auxiliar[y]=ppower[x];
  40. y++;
  41. x++;
  42. }
  43. else
  44. {
  45. y=0;
  46. }
  47.  
  48.  
  49. power[zz]=atoi(auxiliar);
  50. zz++;
  51. suma=0;
  52. zz=0;
  53. }
  54.  
  55. y=0;
  56. for(x=0; x<strlen(vv); x++)
  57.  
  58. {
  59. if (((vv[x+1])!=' ') && ((vv[x])!=','))
  60. {
  61.  
  62. auxiliar[y]=vv[x];
  63. y++;
  64. x++;
  65. }
  66. else
  67. {
  68. y=0;
  69. }
  70.  
  71.  
  72. v[zz]=atoi(auxiliar);
  73. zz++;
  74. suma=0;
  75. zz=0;
  76. }
  77.  
  78.  
  79. y=0;
  80. for(x=0; x<strlen(iisp); x++)
  81.  
  82. {
  83. if (((iisp[x+1])!=' ') && ((iisp[x])!=','))
  84. {
  85.  
  86. auxiliar[y]=iisp[x];
  87. y++;
  88. x++;
  89. }
  90. else
  91. {
  92. y=0;
  93. }
  94.  
  95. isp[zz]=atoi(auxiliar);
  96. zz++;
  97.  
  98. suma=0;
  99. zz=0;
  100. }
  101.  
  102. y=0;
  103. for(x=0; x<strlen(eempuje); x++)
  104.  
  105. {
  106. if (((eempuje[x+1])!=' ') && ((eempuje[x])!=','))
  107. {
  108.  
  109. auxiliar[y]=eempuje[x];
  110. y++;
  111. x++;
  112. }
  113. else
  114. {
  115. y=0;
  116. }
  117.  
  118. empuje[zz]=atoi(auxiliar);
  119. zz++;
  120. suma=0;
  121. zz=0;
  122. }
  123.  
  124.  
  125. y=0;
  126. for(x=0; x<strlen(ppeso); x++)
  127.  
  128. {
  129. if (((ppeso[x+1])!=' ') && ((ppeso[x])!=','))
  130. {
  131.  
  132. auxiliar[y]=ppeso[x];
  133. y++;
  134. x++;
  135. }
  136. else
  137. {
  138. y=0;
  139. }
  140. peso[zz]=atoi(auxiliar);
  141. zz++;
  142. }
  143. suma=0;
  144. zz=0;



Código
  1. DAWN mission NSTAR, Resistojet, Radioisotope, ArcJet, Magneto Inertial Fusion (low), VASIMR (low gear), VASIMR (high gear), VASIMR (med gear), Space Shuttle RCS, Mirror Steamer, Solar Moth, Umbrella Ship, ArcJet, Hall Effect, Pulsed Plasmoid Thruster, Ponderomotive VASIMR, Ablative Laser, Tungsten Resistojet, NASA space tug, Mass Driver, Ion Drive, NERVA (CO or N2), NERVA (CO2), NERVA (H2O), NERVA (NH3), D-D Fusion Inertial, NERVA (CH4), Dusty Plasma (550AU), Colloid Thruster, NERVA (H2), Laser Thermal, Mass Driver, LANTR (high gear), Magneto Inertial Fusion (high), Aluminum/LOX rocket, NERVA (H), Vortex Confined (H2), LH2/LOX rocket, LANTR (low gear), Dual-mode Fission (H2), Cermet NERVA (H2), Bimodal NTR Solid (NASA), Ion, D-T Fusion, NERVA Deriv (H2), Antimatter Bottle, n-6Li Microfission, Pebble Bed (H2), Vapor Core (H2), Tokamak MC, Antimatter Solid max, Dusty Plasma (0.5LY), Proton RD-253 x1, NTR Gas/Closed (H2), ORION Fission, THS Fusion Pulse high gear, THS Fusion Pulse low gear, ORION Fusion, saturn V F-1 (x1), Space Shuttle SSME x3, Solid rocket, Proton RD-253 x6, VISTA, Project Orion, Nuclear DC-X NERVA, APCP Space Shuttle SRB x2, ORION USAF 10m, NTR Solid MAX, Gasdynamic Mirror, Nuclear DC-X LANTR, NTR Liquid max, Saturn-V F-1 x5, NTR Gas/Open (H2), NTR Gas/Open 2nd Gen, Mini-Mag Orion, NTR Gas MAX, NTR Gas/Coaxial (H2), He3-D Fusion, MC-Fusion MAX, ORION battleship, ORION 10k ton adv, ORION MAX, Antimatter Beam MAX, IC-Fusion MAX;
  2. ESTAT, ETHERM, NTR SOLID, ETHERM, EMAG, EMAG, EMAG, PULSE, EMAG, EMAG, EMAG,CHEM LIQUID, BEAM, BEAM, ESTAT, ETHERM, ESTAT, PULSE, EMAG, BEAM, ETHERM, CHEM LIQUID, OTHER, ESTAT, NTR SOLID, NTR SOLID, NTR SOLID, NTR SOLID, PULSE, NTR SOLID, NTR FRAG, ESTAT, NTR SOLID, BEAM, OTHER, NTR SOLID, PULSE, CHEM LIQUID, NTR SOLID, NTR GAS OP, CHEM LIQUID, NTR SOLID, NTR SOLID, NTR SOLID, NTR SOLID, ESTAT, FUSION, NTR SOLID, PULSE, PULSE, NTR SOLID, NTR VAPOR, FUSION, AM SOLID, NTR FRAG, CHEM LIQUI, NTR GAS CL, PULSE, PULSE, PULSE, PULSE, CHEM LIQUID, CHEM LIQUID, CHEM SOLID, CHEM LIQUID, PULSE, PULSE, NTR SOLID, CHEM SOLID,PULSE, NTR SOLID, FUSION, NTR SOLID, NTR GAS OP, CHEM LIQUID, NTR GAS OP, NTR GAS OP, PULSE, NTR GAS OP, NTR GAS OP, FUSION, FUSION, PULSE, PULSE, PULSE, AM BEAM, PULSE;
  3. 1.37e-06, 7.25e-04, 5.85e-03, 2.00e-02, 3, 6, 6, 6, 6, 13, 18, 20, 31, 32, 43, 44, 47, 49, 49, 51, 57, 65, 81, 99, 125, 126, 155, 165, 172, 198, 260, 300, 309, 348, 388, 392, 494, 540, 584, 612, 659, 898, 1,05, 1,188, 1,35, 1,362, 1,57, 1,59, 1,617, 2,231, 2,374, 2,58, 2,836, 4,54, 5,654, 6, 6, 10,658, 11,541, 12,115, 15, 16,228, 20,4, 21,731, 27,272, 31,2, 32,9, 42, 46,06, 49,206, 56, 58,054, 61,25, 125, 146,795, 147, 157,156, 192,08, 200, 1,560,000, 24,000,000, 39,200,000, 500,000,000, 500,000,000;
  4. 30,411, 2,9, 7,8, 20, 50,42, 29, 294, 147, 3,1 ,9,81, 9, 80,442, 19,62, 19,62, 78,48, 39,24, 39,24, 9,81, 4,4, 9,81, 78,48, 2,649, 3,306, 4,042, 5,101, 78,48, 6,318, 15,000,000, 43, 8,093, 40, 30, 9,221, 50,42, 2,649, 16, 19,62, 4,905, 6,347, 9,81, 9,81, 8,98, 210, 22, 8,085, 78,48, 156,96, 9,53 ,9,8, 66,8, 10,791, 15,000,000, 3,1, 20,405, 43, 300, 150, 73, 2,982, 4,444, 3, 3,1, 170, 19,62, 9,81, 2,6, 32,9, 12, 1,960,000, 5,9, 16, 3, 35, 50, 157, 98, 17,658, 7,840,000, 8,000,000, 39, 120, 9,800,000, 100,000,000, 10,000,000;
  5. 3,1, 296, 795, 2,039, 5,14, 2,956, 29,969, 14,985, 316, 1, 917, 8,2, 2, 2, 8, 4, 4, 1, 449, 1, 8, 270, 337, 412, 520, 8, 644, 1,529,052, 4,383, 825, 4,077, 3,058, 940, 5,14, 270, 1,631, 2, 500, 647, 1, 1, 915, 21,407, 2,243, 824, 8, 16, 971, 999, 6,809, 1,1, 1,529,052, 316, 2,08, 4,383, 30,581, 15,291, 7,441, 304, 453, 306, 316, 17,329, 2, 1, 265, 3,354, 1,223, 199,796, 601, 1,631, 306, 3,568, 5,097, 16,004, 9,99, 1,8, 799,185, 815,494, 3,976, 12,232, 998,981, 10,193,680, 1,019,368;
  6. 9.00e-05, 1, 2, 2, 103, 400, 40, 80, 3,87, 2,6, 4, 490, 3,2, 3,3, 1,1, 2,25, 2,4, 9,9, 22,4, 10,4, 1,444, 49, 49, 49, 49, 3,2, 49, 22, 8, 49, 13, 20, 67, 13,8, 292,6, 49, 50,4, 220, 184, 124,7, 134,4, 200, 10, 108, 334,061, 34,7, 20, 333,617, 330, 66,8, 440, 344, 1,830,000, 445, 263, 40, 80, 292, 7,740,500, 5,452,200, 10,000,000, 10,470,000, 240, 2,215,200, 5,560,000, 24,000,000, 2,000,000, 7,000,000, 47, 16,680,000, 7,000,000, 38,702,500, 3,500,000, 5,000,000, 1,870,000, 3,000,000, 17,800,000, 49, 50, 80,000,000, 400,000,000, 8,000,000, 10,000,000, 100,000,000;
  7. 26, N/A, N/A, N/A, N/A, 10, 10, 10, 4, 20,977, 100, N/A, 22,369, 85,469, 83,611, 43,796, 22,222, 42,601, 199,6, 163, 120,149, 10, 10, 10, 10, 243,333, 10, 9, 20, 10, 20, 150, N/A, N/A, 56, 10, 114,116, 26,667, N/A, 33, 32,546, 6,672, 400, 10, 10,1, 180, 106,667, 1,7, 6,83, 197, N/A, 9, 1,26, 56,8, 200, 4, 4, 200, 9,153, 9,531, N/A, 7,56, N/A, 203,68, 199,6, 1,180,000, 107,9, 15, N/A, 199,6, 70, 45,765, 200, 200, 199,6, 15, 127, 1,200,000, 600, 1,700,000, 3,250,000, 8, 10, 1,000,000;
  8.  




Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>  
  4. #include <windows.h>
  5. #include <math.h>
  6. int main (int argc, char *argv[])
  7. {
  8. char field [5000];
  9. int buscador=0;
  10.  
  11.  
  12. printf("A continuacion, indique los criterios de busqueda\n");
  13. printf("Introduzca 1 para buscar por el nombre del sistema\n");
  14. printf("Introduzca 2 para buscar por el codigo del sistema de propulsion\n");
  15. printf("Introduzca 3 para buscar segun la energia del sistema (en MW)\n");
  16. printf("Introduzca 4 para buscar en terminos de velocidad de escape de la masa de reaccion/propelente\n");
  17. printf("Introduca 5 para buscar segun el Impulso especifico (en segundos)\n");
  18. printf("Pulse 6 para buscar segun el empuje (en Newtons)\n");
  19. printf("Con el 7, buscara segun la masa del motor(se mostraran los valores iguales o mas pequenos)\n");
  20. printf("Pulse 0 para salir\n");
  21. scanf("%d", &buscador);
  22. printf("Seleccione el contenido a buscar. tenga en cuenta que para valores numericos distintos del peso,\n se mostraran cantidades iguales o SUPERIORES\n");
  23.  
  24. int contador=0;
  25. int contador2=2;
  26. char contador0[10];
  27. char contadorf[15000];
  28. int j=0;
  29. int objetivo;
  30. strcpy(field, argv[1]);
  31. FILE *fent;//Apertura de archivo.
  32. fent=fopen (field, "r");
  33.  
  34. char auxilar[100];
  35.  
  36.  
  37. if (fent==NULL)
  38. {
  39. printf("ERROR DE APERTURA DE %d\n",field);//Comprobación de errores en apertura.
  40. exit(0);
  41. }
  42.  
  43.  
  44. printf("Se ha completado la carga del archivo\n");
  45. fgets(contador0, 10, fent);
  46. fgets(contadorf, 5000, fent);
  47. for( contador=0; contadorf[contador] != ';'; contador++)//Aquí se realiza la cuenta para saber los elementos de char.
  48. {
  49. if (((contadorf[contador+1])==' ') && ((contadorf[contador])==','))
  50. {
  51. contador2++;
  52. }
  53. }
  54.  
  55. char nnombre[5000];
  56. char ccodigo[5000];
  57. char ppower[5000];
  58. char vv[5000];
  59. char iisp[5000];
  60. char eempuje[5000];
  61. char ppeso[5000];
  62.  
  63. printf("Se ha completado comprobacion de longitud\n");
  64.  
  65. int i=0;
  66. char **nombre = (char**) calloc(contador2, sizeof(char*));
  67. for ( i = 0; i < contador2; i++ )
  68. {
  69.    nombre[i] = (char*) calloc(500, sizeof(char));
  70. }
  71. char **codigo = (char**)calloc(contador2, sizeof(char*));
  72.  
  73. for ( i = 0; i < contador2; i++ )
  74. {
  75.    codigo[i] = (char*) calloc(500, sizeof(char));
  76. }
  77.  
  78. float * power = malloc(contador2 * sizeof(float));
  79. float * v = malloc(contador2 * sizeof(float));
  80. float * isp = malloc(contador2 * sizeof(float));
  81. float * empuje = malloc(contador2 * sizeof(float));
  82. float * peso = malloc(contador2 * sizeof(float));
  83. int x=0, y=0, z=0, xx=0, yy=0, zz=0;
  84. char auxiliar[40];
  85. float suma=0;
  86.  
  87. printf("%d\n",contador2);
  88.  
  89. printf("Asignacion de memoria completada\n");
  90.  
  91. fgets(contador0,10,fent);
  92. fgets(nnombre, 5000, fent);
  93. fgets(ccodigo,5000,fent);
  94. fgets(ppower,5000,fent);
  95. fgets(vv,5000,fent);
  96. fgets(iisp,5000,fent);
  97. fgets(eempuje,5000,fent);
  98. fgets(ppeso,5000,fent);
  99.  
  100. puts(nnombre);
  101. puts(ccodigo);
  102. puts(ppower);
  103. puts(vv);
  104. puts(iisp);
  105. puts(eempuje);
  106. puts(ppeso);
  107.  
  108.  
  109. for( x=0; x<strlen(nnombre); x++)
  110. {
  111. if(nnombre[x]!=',' && nnombre[x+1]!=' ')
  112. {
  113. nombre[z][y]=nnombre[x];
  114. y++;
  115. }
  116. else{
  117.  
  118. z++;
  119. y=0;
  120. }
  121. z=0;
  122. y=0;
  123. j=0;
  124. }
  125. for( x=0; x<strlen(ccodigo); x++)
  126. {
  127. if(ccodigo[x]!=',' && ccodigo[x+1]!=' ')
  128. {
  129. codigo[z][y]=ccodigo[x];
  130. y++;
  131. }
  132. else{
  133.  
  134. z++;
  135. y=0;
  136. }
  137. z=0;
  138. y=0;
  139. j=0;
  140. }
  141. for(x=0; x<strlen(ppower); x++)
  142.  
  143. {
  144. if (((ppower[x+1])!=' ') && ((ppower[x])!=','))
  145. {
  146.  
  147. auxiliar[y]=ppower[x];
  148. y++;
  149. x++;
  150. }
  151. else
  152. {
  153. y=0;
  154. }
  155.  
  156.  
  157. power[zz]=atoi(auxiliar);
  158. zz++;
  159. suma=0;
  160. zz=0;
  161. }
  162.  
  163. y=0;
  164. for(x=0; x<strlen(vv); x++)
  165.  
  166. {
  167. if (((vv[x+1])!=' ') && ((vv[x])!=','))
  168. {
  169.  
  170. auxiliar[y]=vv[x];
  171. y++;
  172. x++;
  173. }
  174. else
  175. {
  176. y=0;
  177. }
  178.  
  179.  
  180. v[zz]=atoi(auxiliar);
  181. zz++;
  182. suma=0;
  183. zz=0;
  184. }
  185.  
  186.  
  187. y=0;
  188. for(x=0; x<strlen(iisp); x++)
  189.  
  190. {
  191. if (((iisp[x+1])!=' ') && ((iisp[x])!=','))
  192. {
  193.  
  194. auxiliar[y]=iisp[x];
  195. y++;
  196. x++;
  197. }
  198. else
  199. {
  200. y=0;
  201. }
  202.  
  203. isp[zz]=atoi(auxiliar);
  204. zz++;
  205.  
  206. suma=0;
  207. zz=0;
  208. }
  209.  
  210. y=0;
  211. for(x=0; x<strlen(eempuje); x++)
  212.  
  213. {
  214. if (((eempuje[x+1])!=' ') && ((eempuje[x])!=','))
  215. {
  216.  
  217. auxiliar[y]=eempuje[x];
  218. y++;
  219. x++;
  220. }
  221. else
  222. {
  223. y=0;
  224. }
  225.  
  226. empuje[zz]=atoi(auxiliar);
  227. zz++;
  228. suma=0;
  229. zz=0;
  230. }
  231.  
  232.  
  233. y=0;
  234. for(x=0; x<strlen(ppeso); x++)
  235.  
  236. {
  237. if (((ppeso[x+1])!=' ') && ((ppeso[x])!=','))
  238. {
  239.  
  240. auxiliar[y]=ppeso[x];
  241. y++;
  242. x++;
  243. }
  244. else
  245. {
  246. y=0;
  247. }
  248. peso[zz]=atoi(auxiliar);
  249. zz++;
  250. }
  251. suma=0;
  252. zz=0;
  253.  
  254.  
  255.  
  256. fclose (fent);
  257.  
  258. printf("Carga de datos a programa completada\n");
  259. for(i=0; i<=contador2; i++)
  260. { printf("%c\n", *nombre[i]);
  261. printf("%c\n",*codigo[i]);
  262. printf("%f\n", power[i]);
  263. printf("%f\n", v[i]);
  264. printf("%f\n", isp[i]);
  265. printf("%f\n", empuje[i]);
  266. printf("%f\n", peso[i]);
  267. }
  268.  
  269.  
  270. int * resultados = malloc(contador2 * sizeof(int));
  271. i=0;
  272. j=0;
  273. char objetivof[50];
  274. switch(buscador)
  275. {
  276.  
  277. case 1:
  278.  
  279. printf("Ha pulsado el 1\n");
  280. printf("Introduzca el contenido a buscar.");
  281. scanf("%c", &objetivof);
  282. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  283. while(i<contador2)
  284. {
  285. if (strstr(nombre[i], objetivof) != NULL);
  286. {
  287. resultados[j]=i;
  288. j++;
  289. }
  290. i++;
  291. }
  292. break;
  293.  
  294. case 2:
  295.  
  296. printf("Ha pulsado el 2\n");
  297. printf("Introduzca el contenido a buscar.\n");
  298. scanf("%c", &objetivof);
  299. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  300. while(i<contador2)
  301. {
  302. if (strstr(codigo[i], objetivof) != NULL);
  303. {
  304. resultados[j]=i;
  305. j++;
  306. }
  307. i++;
  308. }
  309. break;
  310.  
  311.  
  312. case 3:
  313. printf("Ha pulsado el 3\n");
  314. printf("Introduzca el contenido a buscar.\n");
  315.  
  316. scanf("%d", &objetivo);
  317. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  318. while(i<contador2)
  319. {
  320. if((power[i])>=objetivo)
  321. {
  322. resultados[j]=i;
  323. j++;
  324. }
  325. i++;
  326. }
  327. break;
  328.  
  329.  
  330. case 4:
  331. printf("Ha pulsado el 4\n");
  332. printf("Introduzca el contenido a buscar.\n");
  333.  
  334. scanf("%d", &objetivo);
  335. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  336. while(i<contador2)
  337. {
  338. if((v[i])>=objetivo)
  339. {
  340. resultados[j]=i;
  341. j++;
  342. }
  343. i++;
  344. }
  345.  
  346.  
  347. break;
  348.  
  349.  
  350. case 5:
  351. printf("Ha pulsado el 5\n");
  352. printf("Introduzca el contenido a buscar.");
  353.  
  354. scanf("%d", &objetivo);
  355. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  356. while(i<contador2)
  357. {
  358. if((isp[i])>=objetivo)
  359. {
  360. resultados[j]=i;
  361. j++;
  362. }
  363. i++;
  364. }
  365.  
  366. break;
  367.  
  368.  
  369. case 6:
  370. printf("Ha pulsado el 6\n");
  371. printf("Introduzca el contenido a buscar.");
  372.  
  373. scanf("%d", &objetivo);
  374. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  375. while(i<contador2)
  376. {
  377. if((empuje[i])>=objetivo)
  378. {
  379. resultados[j]=i;
  380. j++;
  381. }
  382. i++;
  383. }
  384.  
  385. break;
  386.  
  387.  
  388. case 7:
  389. printf ("Ha pulsado el 7\n");
  390. printf("Introduzca el contenido a buscar.");
  391.  
  392. scanf("%d", &objetivo);
  393. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  394. while(i<contador2)
  395. {
  396. if((peso[i])<=objetivo)
  397. {
  398. resultados[j]=i;
  399. j++;
  400. }
  401. i++;
  402. }
  403.  
  404. break;
  405.  
  406. case 0:
  407. exit(0);
  408.  
  409.  
  410. default:
  411. {
  412. printf("Ha introducido un caracter no incluido en el menu\n");
  413. }
  414. break;
  415. }
  416.  
  417. printf("Busqueda y comparacion completada\n");
  418.  
  419. if(j != 0)
  420. {
  421. printf("Se han encontrado los siguientes resultados que concuerdan con el criterio:\n");
  422. for(i=0; i!=j; i++)
  423. {
  424. printf("%c\n", *nombre[resultados[i]]);
  425. printf("[%d]\n",i);
  426. }
  427. }
  428. if (j != 0)
  429. {
  430. int sino=0;
  431. int comp=1;
  432. printf("¿Desea ver los datos de alguno de los sistemas presentados? [1 si, 0 no]\n");
  433. scanf("%c", &sino);
  434. if(sino==1)
  435. {
  436. printf("A cada resultado anterior se le ha asignado un numero identificativo que figura bajo cada resultado. Por favor, insertelo a continuacion.\n");
  437. printf("Para salir, presione el [0].\n");
  438. while(comp!=0)
  439. { scanf("%d", &comp);
  440. printf("Nombre: %c", *nombre[comp]);
  441. printf("Tipo: %c", *codigo[comp]);
  442. printf("Energia: %f", power[comp]);
  443. printf("velocidad de escape: %f", v[comp]);
  444. printf("ISP: %f", isp[comp]);
  445. printf("Empuje: %f", empuje[comp]);
  446. printf("Peso: %f", peso[comp]);
  447. printf("Introduzca más datos, o pulse 0 para salir.\n");
  448. }
  449. }
  450. }
  451. if(j != 0)
  452. {
  453. int sino=0;
  454. int comp=0;
  455. printf("¿Desea iniciar la funcion calculadora? [1 si, 0 no]");
  456. scanf("%c", &sino);
  457. if(sino==1)
  458. {
  459. float mf=0;
  460. float mi=0;
  461. float comb=0;
  462. float resultado=0;
  463. int n=0;
  464. printf("A cada resultado anterior se le ha asignado un numero identificativo que figura bajo cada resultado. Por favor, inserte a continuacion el numero del motor a utilizar.\n");
  465. scanf("%d",&comp);
  466. printf("¿Cuantos motores va a llevar?\n");
  467. scanf("%d",&n);
  468. printf("¿Cuanto pesa el vehiculo?(en kg)\n");
  469. scanf("%d",&mi);
  470. printf("¿Cuantos kilos de combustible lleva?\n");
  471. scanf("%d", &comb);
  472. mf=comb+mi+peso[comp]*n;
  473. resultado=v[comp]*log(mi/mf);
  474. printf("Delta-V estimada: %f m/s\n");
  475. if(mf*9,8>=empuje[comp]*n)
  476. {
  477. printf("¡ADVERTENCIA! No podrás despegar de la Tierra usando este vehículo.\n");
  478. }
  479. }
  480. }
  481. for ( i = 0; i < contador2; i++ )
  482. {
  483.    free(nombre[i]);
  484. }
  485.  
  486. free(nombre);
  487. for ( i = 0; i < contador2; i++ )
  488. {
  489.    free(codigo[i]);
  490. }
  491.  
  492. free(codigo);
  493. free(v);
  494. free(isp);
  495. free(power);
  496. free(peso);
  497. free(empuje);
  498.  
  499.  
  500. }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Buscador (C)
« Respuesta #15 en: 22 Mayo 2017, 23:47 pm »

Sí, es grande, no es una cosa que se haga en diez minutos.
Lo malo es que no has sabido aprovechar C: Lo bueno de este lenguaje es que es pequeño y por ende su biblioteca también es pequeña, pero hace muchas cosas.
Por ejemplo, para separar las palabras de una cadena, y sobre todo si tienen un formato bien definido como es esta del texto, tienes la función strtok, de string.h que te devuelve un token de la línea cada vez que es llamada.

Código de ejemplo de cómo podrías usarlo en tu programa:
strtok es destructivo por tanto modifica la línea de búsqueda
strtok tiene una forma peculiar de funcionar. Aquí explica como usarla: http://c.conclase.net/librerias/?ansifun=strtok

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char *linea="DAWN mission NSTAR, Resistojet, Radioisotope, ArcJet";
  6.  
  7. int main() {
  8.    unsigned pos = 0;
  9.    char nombre[255];
  10.    char *token;
  11.    char *c;
  12.    char *linea_busqueda;
  13.  
  14.    linea_busqueda = malloc((strlen(linea)+1)*sizeof(char));
  15.    strcpy(linea_busqueda, linea);
  16.  
  17.    printf("Busqueda: ");
  18.    fgets(nombre, 255, stdin);
  19.    if((c = strchr(nombre, '\n')))
  20.        *c = '\0';
  21.  
  22.    token = strtok(linea_busqueda, ",;");
  23.  
  24.    while(token) {
  25.        fprintf(stderr, "%d\n", pos);
  26.        while(*token == ' ') ++token;
  27.  
  28.        if(*token == '\0' || strcmp(token, nombre))
  29.            token = strtok(NULL, ",;");
  30.        else
  31.            break;
  32.  
  33.        ++pos;
  34.    }
  35.  
  36.    if(token)
  37.        printf("Elemento encontrado en posicion %d", pos);
  38.    else
  39.        printf("Elemento no encontrado");
  40. }

Otra cosa. Para capturar números que eran cadenas y convertirlos en número de verdad tienes más funciones como sscanf (nótese las 2 eses al principio). Ejemplo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.    char *numero_real = "2.14e+10";
  6.    double numero;
  7.  
  8.    sscanf(numero_real, "%lf", &numero);
  9.  
  10.    printf("%lf", numero);
  11. }

En línea

dfr2198

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Buscador (C)
« Respuesta #16 en: 23 Mayo 2017, 11:22 am »

Bueno, pues aquí estoy otra vez. La funcion sscanf a veces no me carga. El rpograma avees arroja resultadoserroneos y a veces no, pero siempre se cuelga. Y ya no sé que más intentar despues de 5 horas frente al ordenador. Cuando el sscanf no funciona utilizo atoi. Pero me devuelve 0 en los arrays pese a que los printf (ver programa) me devuelven valores.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>  
  4. #include <windows.h>
  5. #include <math.h>
  6. int main (int argc, char *argv[])
  7. {
  8. char field [5000];
  9. int buscador=0;
  10. char cargavacio[10];
  11. char carganombres[3400];
  12. char cargacodigo[1500];
  13. char cargapower[1500];
  14. char cargav[1200];
  15. char cargaisp[1100];
  16. char cargaempuje[1100];
  17. char delim[3]=", ";
  18. char *cadenaauxiliar1;
  19. int contador=0;
  20. int contador2=1;
  21. int y=0;
  22. int j=0;
  23. int contador3=0;
  24. int resultados[150];
  25. int objetivo=0;
  26. char objetivof[50];
  27. int numero;
  28.  
  29. strcpy(field, argv[1]);
  30. FILE *fent;//Apertura de archivo.
  31. fent=fopen (field, "r");
  32. fgets(cargavacio, 10, fent);
  33. fgets(carganombres, 3400, fent);
  34. printf("Inicio comprobaciones\n");
  35. for( contador=0; carganombres[contador] != ';'; contador++)//Aquí se realiza la cuenta para saber los elementos de char.
  36. {
  37. if (carganombres[contador]==' ' && carganombres[contador-1]==',')
  38. {
  39. contador2++;
  40. }
  41. }
  42.  
  43. printf("contador 2 fijado a %d\n", contador2);
  44. int i=0;
  45. char **nombre = (char**) calloc(contador2, sizeof(char*));
  46. for ( i = 0; i < contador2; i++ )
  47. {
  48.    nombre[i] = (char*) calloc(500, sizeof(char));
  49. }
  50. char **codigo = (char**)calloc(contador2, sizeof(char*));
  51.  
  52. for ( i = 0; i < contador2; i++ )
  53. {
  54.    codigo[i] = (char*) calloc(500, sizeof(char));
  55. }
  56.  
  57. double * power = malloc(contador2 * sizeof(int));
  58. int * v = malloc(contador2 * sizeof(int));
  59. int * isp = malloc(contador2 * sizeof(int));
  60. double * empuje = malloc(contador2 * sizeof(int));
  61.  
  62. printf("Asignacion de memoria lista\n");
  63.  
  64. fgets (cargacodigo, 1500, fent);
  65. fgets (cargapower, 1500, fent);
  66. fgets (cargav,1200, fent);
  67. fgets (cargaisp, 1100, fent);
  68. fgets (cargaempuje, 1100, fent);
  69. puts(cargaempuje);
  70. puts(cargapower);
  71. printf("Carga de datos de fichero completada");
  72. y=0;
  73. cadenaauxiliar1 = strtok(carganombres, delim);
  74. while(cadenaauxiliar1!= NULL )
  75.   {
  76.       nombre[y]=cadenaauxiliar1;
  77.   printf( " %s\n",nombre[y]);
  78.  y++;
  79. cadenaauxiliar1 = strtok(NULL, delim);
  80.   }
  81. printf("Distribucion de nombres lista\n");
  82. contador3=y;
  83.   y=0;
  84. cadenaauxiliar1 = strtok(cargacodigo, delim);
  85. while(cadenaauxiliar1!= NULL )
  86.   {
  87.  codigo[y]=cadenaauxiliar1;
  88.  
  89.  printf( " %s\n",codigo[y]);
  90.  y++;
  91. cadenaauxiliar1 = strtok(NULL, delim);
  92.   }
  93.   printf("distribucion de codigos completa\n");
  94. y=0;
  95.   cadenaauxiliar1 = strtok(cargapower, delim);
  96. while(y<contador2 )
  97.   {
  98.  
  99.  power[y]=atoi(cadenaauxiliar1);
  100.   printf("%d\n",atoi(cadenaauxiliar1));
  101.  
  102.  y++;
  103. cadenaauxiliar1 = strtok(NULL, delim);
  104.   }
  105.  
  106.   printf("Power listo\n");
  107.   y=0;
  108.  cadenaauxiliar1 = strtok(cargav, delim);
  109. while(y<contador2)
  110.   {
  111. sscanf(cadenaauxiliar1, "%d", &numero);
  112.  v[y]=numero;
  113. printf("%d\n",v[y]);
  114. y++;
  115. cadenaauxiliar1 = strtok(NULL, delim);
  116.   }
  117.  
  118.   printf("V cargada\n");
  119.   y=0;
  120.   cadenaauxiliar1 = strtok(cargaisp, delim);
  121. while(y<contador2 )
  122.   {
  123. sscanf(cadenaauxiliar1, "%d", &numero);
  124.  isp[y]=numero;
  125. printf("%d\n",isp[y]);
  126.  y++;
  127. cadenaauxiliar1 = strtok(NULL, delim);
  128.   }
  129.  
  130.   printf("ISP cargado\n");
  131.   y=0;
  132.   cadenaauxiliar1 = strtok(cargaempuje, delim);
  133. while(y<contador2)
  134. {
  135. empuje[y]=atoi(cadenaauxiliar1);
  136.   printf("%d\n",atoi(cadenaauxiliar1));
  137. y++;
  138.  
  139. cadenaauxiliar1 = strtok(NULL, delim);
  140.   }
  141.  
  142.   printf("Empuje listo\n");
  143.  
  144.  
  145. printf("A continuacion, indique los criterios de busqueda\n");
  146. printf("Introduzca 1 para buscar por el nombre del sistema\n");
  147. printf("Introduzca 2 para buscar por el codigo del sistema de propulsion\n");
  148. printf("Introduzca 3 para buscar segun la energia del sistema (en MW)\n");
  149. printf("Introduzca 4 para buscar en terminos de velocidad de escape de la masa de reaccion/propelente\n");
  150. printf("Introduca 5 para buscar segun el Impulso especifico (en segundos)\n");
  151. printf("Pulse 6 para buscar segun el empuje (en Newtons)\n");
  152. printf("Pulse 0 para salir\n");
  153. scanf("%d", &buscador);
  154. i=0;
  155.   switch(buscador)
  156. {
  157.  
  158. case 1:
  159.  
  160. printf("Ha pulsado el 1\n");
  161. printf("Introduzca el contenido a buscar.\n");
  162. scanf("%s", &objetivof);
  163. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  164. for(i=0; i<contador2; i++)
  165. {
  166. if (strcmp(nombre[i], objetivof) == 0);
  167. {
  168. printf("Nombre: %s\n", *nombre[i]);
  169. printf("Tipo: %s\n", *codigo[i]);
  170. printf("Energia: %d\n", power[i]);
  171. printf("velocidad de escape: %d\n", v[i]);
  172. printf("ISP: %d\n", isp[i]);
  173. printf("Empuje: %d\n", empuje[i]);
  174. }
  175. }
  176. break;
  177.  
  178. case 2:
  179.  
  180. printf("Ha pulsado el 2\n");
  181. printf("Introduzca el contenido a buscar.\n");
  182. scanf("%s", &objetivof);
  183. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  184. for(i=0; i<contador2; i++)
  185. {
  186. if (strcmp(codigo[i], objetivof) == 0);
  187. {
  188. printf("Nombre: %s\n", *nombre[i]);
  189. printf("Tipo: %s\n", *codigo[i]);
  190. printf("Energia: %d\n", power[i]);
  191. printf("velocidad de escape: %d\n", v[i]);
  192. printf("ISP: %d\n", isp[i]);
  193. printf("Empuje: %d\n", empuje[i]);
  194. }
  195. }
  196.  
  197. break;
  198.  
  199.  
  200. case 3:
  201. printf("Ha pulsado el 3\n");
  202. printf("Introduzca el contenido a buscar.\n");
  203.  
  204. scanf("%d", &objetivo);
  205. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  206. for(i=0; i<contador2; i++)
  207. {
  208. if((power[i])> objetivo)
  209. { printf("Nombre: %s\n", *nombre[i]);
  210. printf("Tipo: %s\n", *codigo[i]);
  211. printf("Energia: %d\n", power[i]);
  212. printf("velocidad de escape: %d\n", v[i]);
  213. printf("ISP: %d\n", isp[i]);
  214. printf("Empuje: %d\n", empuje[i]);
  215. }
  216. i++;
  217. }
  218.  
  219. break;
  220.  
  221.  
  222. case 4:
  223. printf("Ha pulsado el 4\n");
  224. printf("Introduzca el contenido a buscar.\n");
  225.  
  226. scanf("%d", &objetivo);
  227. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  228. for(i=0; i<contador2; i++)
  229. {
  230. if((v[i])>objetivo)
  231. {
  232. printf("Nombre: %s\n", *nombre[i]);
  233. printf("Tipo: %s\n", *codigo[i]);
  234. printf("Energia: %d\n", power[i]);
  235. printf("velocidad de escape: %d\n", v[i]);
  236. printf("ISP: %d\n", isp[i]);
  237. printf("Empuje: %d\n", empuje[i]);
  238. }
  239. i++;
  240. }
  241.  
  242.  
  243. break;
  244.  
  245.  
  246.  
  247. case 5:
  248. printf("Ha pulsado el 5\n");
  249. printf("Introduzca el contenido a buscar.\n");
  250.  
  251. scanf("%d", &objetivo);
  252. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  253. for(i=0; i<contador2; i++)
  254. {
  255. if((isp[i])>objetivo)
  256. {
  257. printf("Nombre: %s\n", *nombre[i]);
  258. printf("Tipo: %s\n", *codigo[i]);
  259. printf("Energia: %d\n", power[i]);
  260. printf("velocidad de escape: %d\n", v[i]);
  261. printf("ISP: %d\n", isp[i]);
  262. printf("Empuje: %d\n", empuje[i]);
  263. }
  264. i++;
  265. }
  266.  
  267.  
  268. break;
  269.  
  270.  
  271. case 6:
  272. printf("Ha pulsado el 6\n");
  273. printf("Introduzca el contenido a buscar.\n");
  274.  
  275. scanf("%d", &objetivo);
  276. printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
  277. for(i=0; i<contador2; i++)
  278. {
  279. if((empuje[i])>objetivo)
  280. {
  281. printf("Nombre: %s\n", *nombre[i]);
  282. printf("Tipo: %s\n", *codigo[i]);
  283. printf("Energia: %d\n", power[i]);
  284. printf("velocidad de escape: %d\n", v[i]);
  285. printf("ISP: %d\n", isp[i]);
  286. printf("Empuje: %d\n", empuje[i]);
  287. }
  288. i++;
  289. }
  290.  
  291. break;
  292.  
  293. case 0:
  294. exit(0);
  295.  
  296. break;
  297.  
  298. default:
  299. {
  300. printf("Ha introducido un caracter no incluido en el menu\n");
  301. }
  302. break;
  303.  
  304. }
  305.  
  306. printf("Busqueda y comparacion completada\n");
  307.  
  308.  
  309.  
  310.  
  311. if(j!=0){
  312. int sino=0;
  313. int comp=0;
  314. printf("¿Desea iniciar la funcion calculadora? [1 si, 0 no]");
  315. scanf("%d", &sino);
  316. if(sino==1)
  317. {
  318. float mf=0;
  319. float mi=0;
  320. float comb=0;
  321. float resultado=0;
  322. int n=0;
  323.  
  324. printf("Introduzca el dato de velocidad de escape del propulsor sleccionado.\n");
  325. scanf("%d",&comp);
  326. printf("¿Cuanto pesa el vehiculo?(en kg)\n");
  327. scanf("%d",&mi);
  328. printf("¿Cuantos kilos de combustible lleva?\n");
  329. scanf("%d", &comb);
  330. mf=comb+mi;
  331. resultado=comp*log(mi/mf);
  332. printf("Delta-V estimada: %f m/s\n", resultado);
  333. }
  334. }
  335. for ( i = 0; i < contador2; i++ )
  336. {
  337.    free(nombre[i]);
  338. }
  339.  
  340. free(nombre);
  341. for ( i = 0; i < contador2; i++ )
  342. {
  343.    free(codigo[i]);
  344. }
  345.  
  346. free(codigo);
  347. free(v);
  348. free(isp);
  349. free(power);
  350.  
  351. free(empuje);
  352. }
Código
  1.  
  2. DAWN-mission-NSTAR, Resistojet, Radioisotope, ArcJet
  3. ESTAT, ETHERM, NTR-SOLID, ETHERM,
  4. 5, 9, 7, 85,
  5. 4, 6, 7, 83,
  6. 5, 3, 9, 27,
  7. 9, 5, 8, 55,
  8.  
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Buscador (C)
« Respuesta #17 en: 23 Mayo 2017, 16:24 pm »

El programa todavía sigue teniendo muchos errores. Pero más grave aún es que el propio archivo de datos está mal formateado.

Lo he estado revisando y en las filas de números usas como separador la coma ',' pero también usas como separador de millares la coma ','. Puedes decir que el separador de elementos no es solo una coma, sino una coma y un espacio; pero sigue habiendo datos erróneos, como por ejemplo el '3,2' '3,3' '1,25'. Si hay que interpretar que eso son números decimales la cosa empeora más ya que si un número tiene 3 decimales ¿cómo lo distingues de un entero de millares? Si son números separados hay un problema de formato.

La solución que te doy es que uses como único separador de datos la coma y para los números que sean en formato C. Así te facilitarás mucho la vida. Si después quieres representarlos de forma entendible para humanos ya crea las rutinas necesarias.

Por cierto, deberías pensar en separar tus programas en subrutinas. Te ahorrarías instrucciones, estaría más ordenado y facilitarías su lectura.
« Última modificación: 23 Mayo 2017, 18:06 pm por MAFUS » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Buscador
Sugerencias y dudas sobre el Foro
celeron7777777 2 2,454 Último mensaje 27 Noviembre 2004, 10:39 am
por ...:::SuPrA:::...
¿buscador? « 1 2 »
Sugerencias y dudas sobre el Foro
buhomaster 10 5,122 Último mensaje 24 Noviembre 2006, 09:56 am
por Neobius
Buscador
Scripting
Nilrac 2 2,476 Último mensaje 7 Febrero 2010, 18:31 pm
por Nilrac
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines