Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funcion de busqueda?

Estas en el tema de Funcion de busqueda? en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original #include <stdio.h> #include <windows.h> #define p printf #define s scanf   struct agenda { char nombre [ 25 ] ...
  #1 (permalink)  
Antiguo 16/06/2011, 16:42
 
Fecha de Ingreso: enero-2011
Mensajes: 33
Antigüedad: 13 años, 3 meses
Puntos: 0
Funcion de busqueda?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #define p printf
  4. #define s scanf
  5.  
  6. struct agenda{
  7. char nombre[25][100];
  8. char telefono[25][100];
  9. int edad[100];
  10. int n;
  11. }a;
  12.  
  13.  
  14. void reordenar(char x[]){
  15. int i2,i, temp1;
  16. char temp2,temp3;
  17.  
  18. for(i=0 ; x[i] ; i++)
  19. for(i2=0 ; x[i2] ; i++){
  20. if(x[i2]<x[i]){
  21. temp1=x[i2];
  22. x[i2]=x[i];
  23. x[i]=temp1;
  24. }}}
  25.  
  26. void buscarcosas(char buscarl[]){
  27. int i;
  28. for(i=0 ; i<a.n ; i++){
  29. if(buscarl==a.nombre[i]){
  30. p("Encontrado!\n");
  31. p("Organizando Datos!...\n");
  32. Sleep(2000);
  33. p("Nombre: %s\n Telefono: %s \n Edad: %d\n\n",&a.nombre[i], &a.telefono[i], a.edad[i]);
  34. }}return;}
  35.  
  36. main(){
  37.  
  38. int i, buscar,n, op;
  39. char buscarl[25];
  40. p("---Bienvenido A Su Agenda Virtual!---\n");
  41. p("Cuantas Personas Registrara en la Agenda: \n");
  42. s("%d", &a.n);
  43.  
  44. for(i=0 ; i<a.n ; i++){
  45. p("Introduzca Nombre: \n");
  46. s("%s", a.nombre[i]);
  47. p("Introduzca Telefono: \n");
  48. s("%s", a.telefono[i]);
  49. p("Introduzca Edad: \n");
  50. s("%s", a.edad);}
  51. do{
  52. p("Generando Menu...\n");
  53. Sleep(1000);
  54. p("\nEscoja Que Hacer: \n");
  55. p("1. Mostrar Lista de Todas las personas: \n");
  56. p("2. Buscar Por Nombre: \n");
  57. p("3. Buscar Por Telefono: \n");
  58. p("4. Buscar Por Edad: \n");
  59. p("5. Salir \n");
  60. p("Opcion: ");
  61. s("%d", &op);
  62.  
  63. switch(op){
  64.  
  65. case 1:{
  66. for(i=0 ; i<a.n ; i++){
  67. p("\nNombre: %s Telefono: %s Edad %d \n", &a.nombre[i], &a.telefono[i], a.edad[i]);
  68. }}break;
  69.  
  70. case 2: {
  71.     p("Que Desea Buscar: \n");
  72.     s("%s", &buscarl);
  73. buscarcosas(buscarl);
  74. }break;
  75.  
  76. case 3:{
  77.     p("Que Desea Buscar: \n");
  78.     s("%s", &buscarl);
  79. buscarcosas(buscarl);
  80. }break;
  81.  
  82. case 4:{
  83.     p("Que Desea Buscar: \n");
  84.     s("%s", &buscarl);
  85. buscarcosas(buscarl);
  86. }break;}
  87. }while(op!=5);
  88. s("%d");
  89. }

El problema que tengo es como dice el nombre, Con la funcion buscar, ya que la misma no busca, Espero me puedan ayudar, Saludos!
  #2 (permalink)  
Antiguo 16/06/2011, 20:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Funcion de busqueda?

Primero que todo al definir el struct los indices estan al revez:

Código C:
Ver original
  1. struct agenda{
  2. char nombre[100][25];
  3. char telefono[100][25];
  4. int edad[100];
  5. int n;
  6. }a;

Como lo habias hecho vos solo permitias 25 cotactos con nombre de 100 caracteres. Pero viendo como definiste el vector edad supongo que queres un maximo de 100 contactos.

Otro error, cuando pides los datos de la edad tambien tienes que ponerle indice y ademas el operador & para pasar la direccion de memoria:

Código C:
Ver original
  1. s("%s", &a.edad[i])

Cuando imprimes datos no es necesario que usses el operador &.

Código C:
Ver original
  1. p("\nNombre: %s Telefono: %s Edad %d \n", a.nombre[i], a.telefono[i], a.edad[i]);

Con respecto a tu error fijate que para comparar cadenas no podes hacer
buscarl==a.nombre[i]

Eso solo compara las direcciones de memoria que en este caso van a ser diferentes. Lo que tienes uqe usar es la funcion strcmp. Esta va comparando caracter a caracter para ver si es la misma cadena.

Por el momento eso es todo. Fijate de leer un buen manual de punteros.
  #3 (permalink)  
Antiguo 17/06/2011, 12:51
 
Fecha de Ingreso: enero-2011
Mensajes: 33
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Funcion de busqueda?

Bien, Ahora el programa Corre, Pero al utilizar el indice en la edad, el programa se Congela, Ademas, la funcion buscar no Funciona Con el telefono, y la Funcion de Organizar de errores:

Código C:
Ver original
  1. void reordenar(char x[]){
  2. int i2,i, temp1;
  3. char temp2,temp3;
  4. for(i=0 ; x[i] ; i++)
  5. for(i2=0 ; x[i2] ; i++){
  6. if(a.nombre[i2]<a.nombre[i]){
  7.     temp2=a.nombre[i2];
  8.     a.nombre[i2]=a.nombre[i];
  9.     a.nombre[i]=temp2;
  10.     temp3=a.telefono[i2];
  11.     a.telefono[i2]=a.telefono[i];
  12.     a.telefono[i]=temp3;
  13.     temp1=a.edad[i2];
  14.     a.edad[i2]=a.edad[i];
  15.     a.edad[i]=temp1;
  16. }}}

No estoy seguro si la sintaxis del la funcion de ordenar es correcta... Tiene que organizar los Nombres y al mismo tiempo Mover cada telefono con su respectivo nombre al igual que la edad.

Código C:
Ver original
  1. void buscarcosas(char buscarl[]){
  2. int i;
  3. for(i=0 ; i<a.n ; i++){
  4. if(strcmp(buscarl, a.nombre[i])==0){
  5. p("\nEncontrado!\n");
  6. p("Organizando Datos!...\n");
  7. Sleep(2000);
  8. p("Nombre: %s\n Telefono: %s\n Edad: %d\n\n",&a.nombre[i], &a.telefono[i], a.edad[i]);
  9. }}return;}

Al buscar el telefono no muestra el mensaje encontrado.

Código C:
Ver original
  1. p("Introduzca Edad: \n");
  2. s("%s", a.edad);}

Si pongo "a.edad[i];" el programa se congela.

Espero me puedas ayudar, Saludos!
  #4 (permalink)  
Antiguo 17/06/2011, 13:15
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Funcion de busqueda?

En el scanf de la edad tienes que poner &(a.edad[i])

Fijate que en mi respuesta si puse el operador &. Este se usa para pasar una direccion de memoria. En este caso estas pasando la direccion de memoria de la variable edad en el indice i. De la forma que lo haces vos estarias pasando la direccion de la primer variable. Por eso funciona. nada mas uqe te modifica siempre el primer contacto.

Fijate que en los tres cases usas la misma funcion buscar, asi que siempre va a estar buscando por nombre. Deberias hacer una funcion por busqueda un pasar un parametro que indique que busqueda hacer.

Sobre la funcion reordenar no entiendo que es ese array de caracteres "x" que le estas pasando..para que lo usas y para que iteras sobre el.
Deberias aprender un poco mas sobre cadenas de caracteres. No es como en otros lenguajes que puedes usar los operadores <,>,= para compara cadenas. Eso se usan para compara caracteres. Despues tienes que iterar caracter a caracter de la cadena para ver si son iguales o menor.
Fijate que en la libreria string.h vienen un monton de funciones para el manejo de arrays.

Y por ultimo leete algun manual sobre punteros, porque veo que no tener muy buena idea de que se trata y como se manejan,

Etiquetas: funcion, busquedas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.