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

Rastreo y muestreo de dato en un arreglo

Estas en el tema de Rastreo y muestreo de dato en un arreglo en el foro de C/C++ en Foros del Web. Hola, tengo un problemita y desearia que me ayudaran, en el case 4 del programa, tengo que ingresar el ID de una persona(previamente se tuvo ...
  #1 (permalink)  
Antiguo 03/07/2011, 12:43
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Pregunta Rastreo y muestreo de dato en un arreglo

Hola, tengo un problemita y desearia que me ayudaran, en el case 4 del programa, tengo que ingresar el ID de una persona(previamente se tuvo que haber guardado,en la opcion 1, la de los socios), si se indentifica muestra a quien el nombre de la persona, y si no muestra que no existe un ID asi en memoria, y no lo he podido hacer, y ademas me sale un error en una variable al final del programa y no he podido comprobar si funciona, alguien que me AYUDEEE!!

Código C++:
Ver original
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6.  typedef struct{
  7.     int ISBN;
  8.     char nombre_libro[100];
  9.     char editorialfadeIn[100];
  10.     int numero_edicionfadeIn;
  11.     char autorfadeIn[100];
  12.     int identificadorfadeIn;
  13.     char nombrefadeIn[100];
  14.     char apellidosfadeIn[100];
  15.     int fecha_registrofadeIn;
  16.     int estadofadeIn;
  17.  } datos_libros;
  18.  
  19.  
  20.  int buscar(datos_libros vector[],int longitud, int valor){
  21.  
  22.    for(int i=0;i<longitud;i++){
  23.       if (vector[i].ISBN == valor)
  24.           return i;
  25.    }
  26.    return -1;
  27.  }
  28.  
  29.  
  30. int main ()
  31. {
  32.    
  33.     datos_libros libros[4];
  34.     int opcion;
  35.     int i = 0;
  36.     int j = 0;
  37.     int z;
  38.     int y;
  39.     int ISBN=0;
  40.     int socio;
  41.     int k;
  42.     int x;
  43.     int ID;
  44.     string respuesta;
  45.    
  46.    
  47.     while(respuesta!="N" && respuesta!="n")
  48.     {
  49.        system("color 0f");
  50.        cout<<"******Biblioteca Publica^El Raton Feliz^******"<<endl;
  51.        cout<<endl;
  52.        cout<<"Digite #1, para ingresar nuevo socio."<<endl;
  53.        cout<<"Digite #2, para cambiar estado del socio."<<endl;
  54.        cout<<"Digite #3, para ingresar nuevo libro."<<endl;
  55.        cout<<"Digite #4, para prestar libro."<<endl;
  56.        cout<<"Digite #5, pàra recibir libro."<<endl;
  57.        cout<<"Digite #6, para desplegar lista de libros."<<endl;
  58.        cout<<"Digite #7, para desplegar lista de socios."<<endl;
  59.        cout<<"Digite #8, para desplegar lista de libros prestados actualmente"<<endl;
  60.        cout<<endl;
  61.        cout<<"Que opcion desea realizar?"<<endl;
  62.        cin>>opcion;
  63.        system("cls");
  64.        
  65.        
  66.         switch(opcion){
  67.              
  68.          case 1:
  69.               if(i<4)
  70.               {
  71.               cout<<"******Ingreso de nuevo socio******"<<endl;
  72.               cout<<endl;
  73.               cout<<"Ingrese nombre del socio # "<<i<<":"<<endl;
  74.               cin>>libros[i].nombrefadeIn;
  75.               cout<<endl;
  76.               cout<<"Ingrese apellidos del socio:"<<endl;
  77.               cin>>libros[i].apellidosfadeIn;
  78.               cout<<endl;
  79.               cout<<"Ingrese cedula:"<<endl;
  80.               cin>>libros[i].identificadorfadeIn;
  81.               cout<<endl;
  82.               cout<<"Ingrese fecha de registro:(formato dd/mm/aaaa)"<<endl;
  83.               cin>>libros[i].fecha_registrofadeIn;
  84.               cout<<endl;
  85.               cout<<"Ingrese #1 para usuario activo o ingreso #2 para usuario inactivo:"<<endl;
  86.               cin>>libros[i].estadofadeIn;
  87.               cout<<endl;
  88.               system("cls");
  89.               if(libros[i].estadofadeIn==1)
  90.               {
  91.                 system("color 0e");
  92.                 cout<<"El socio de nombre "<<libros[i].nombrefadeIn<<" esta activo!!!"<<endl;
  93.                 system("pause");
  94.                 system("cls");
  95.                 }
  96.                 else
  97.                 {
  98.                     system("color 0e");
  99.                     cout<<"El socio de nombre "<<libros[i].nombrefadeIn<<" esta inactivo!!!"<<endl;
  100.                     system("pause");
  101.                     system("cls");
  102.                     }
  103.                     cout<<endl;
  104.               i=i+1;
  105.               }
  106.               else
  107.               {  
  108.                   system("color 4e");
  109.                   cout<<"ERROR/No se pueden ingresar mas datos/Memoria de socios llena"<<endl;
  110.               system("pause");
  111.                }
  112.                break;
  113.                
  114.                case 2:
  115.                     cout<<"*******Cambio de estado de los socios******"<<endl;
  116.                     cout<<endl;
  117.                     cout<<"Ingrese numero de socio(valido de 0 a 3)"<<endl;
  118.                     cin>>socio;
  119.                     cout<<endl;
  120.                     k=socio;
  121.                     if(k>3)
  122.                     {
  123.                            system("cls");
  124.                            system("color 0b");
  125.                            cout<<"ERROR//Numero de socio inexistente//Ingrese un numero de socio valido!!!"<<endl;
  126.                            cout<<endl;
  127.                            system("pause");
  128.                            system("cls");
  129.                            
  130.                            break;
  131.                            }
  132.                     if(libros[k].estadofadeIn==1)
  133.                     {
  134.                        cout<<"El socio #"<<k<<" de nombre: "<<libros[k].nombrefadeIn<<" se encuentra activo"<<endl;
  135.                        cout<<endl;
  136.                        cout<<"Para cambia el estado del socio a inactivo, presione #2!!"<<endl;
  137.                        cin>>libros[k].estadofadeIn;
  138.                        cout<<endl;
  139.                        cout<<"Cambio de estado del socio a inactivo, fue hecho satisfactoriamente!!"<<endl;
  140.                        system("pause");
  141.                        system("cls");
  142.                        }
  143.                        else
  144.                        {
  145.                            cout<<"El socio #"<<k<<" de nombre: "<<libros[k].nombrefadeIn<<" se encuentra inactivo"<<endl;
  146.                            cout<<endl;
  147.                            cout<<"Para cambiar el estado del socio a activo, presione#1!!"<<endl;
  148.                            cin>>libros[k].estadofadeIn;
  149.                            cout<<endl;
  150.                            cout<<"Cambio de socio a activo, fue hecho satisfactoriamente!!"<<endl;
  151.                            system("pause");
  152.                            system("cls");
  153.                            }
  154.                            cout<<endl;
  155.                            
  156.                            
  157.                            
  158.                     break;
  159.                    
  160.            case 3:
  161.  
  162.                if(j<4)
  163.                        {
  164.                        cout<<"******Ingreso de Nuevo Libro******"<<endl;
  165.                        cout<<endl;
  166.                        cout<<"Ingrese el nombre del libro nuevo # "<<j<<":"<<endl;
  167.                        cin>>libros[j].nombre_libro;
  168.                        cout<<endl;
  169.                        cout<<"Ingrese numero de edicion:"<<endl;
  170.                        cin>>libros[j].numero_edicionfadeIn;
  171.                        cout<<endl;
  172.                        cout<<"Ingrese editorial:"<<endl;
  173.                        cin>>libros[j].editorialfadeIn;
  174.                        cout<<endl;
  175.                        cout<<"Ingrese el ISBN del libro:"<<endl;
  176.                        cin>>ISBN;
  177.                        cout<<endl;
  178.                        while (buscar(libros,j,ISBN)!=-1){
  179.                          cout << "ERROR//Ya has introducido un libro con ese ISBN" << endl;  
  180.                          cout<<endl;        
  181.                          cout<<"Ingrese el ISBN correcto del libro:"<<endl;
  182.                          cin>>ISBN;
  183.                          system("cls");
  184.                        }        
  185.                        
  186.                        libros[j].ISBN = ISBN;
  187.                        j=j+1;
  188.                        }
  189.                        else
  190.                        {   system("color 0c");
  191.                            cout<<"ERROR//Memoria de libros llena"<<endl;
  192.                            system("pause");
  193.                            }
  194.                            break;
  195.                            
  196.                    case 4:
  197.                         cout<<"******Prestamo de libro******"<<endl;
  198.                         cout<<endl;
  199.                         cout<<"Ingrese la ID de la persona en cuestion:"<<endl;
  200.                         cin>>ID;
  201.                         x=i;
  202.                         for(int i=0;i<x;i++)
  203.                         if(libros[i].identificadorfadeIn==ID)
  204.                         {
  205.                           cout<<"El socio de con la cedula "<<ID<<" es de nombre: "<<libros[i].nombrefadeIn<<endl;
  206.                           cout<<endl;
  207.                          
  208.                           }
  209.                           else
  210.                           {
  211.                               cout<<"No existe una persona con ese ID"<<endl;
  212.                               cout<<endl;
  213.                               }
  214.                              
  215.                            break;        
  216.                    case 6:
  217.                             cout<<"Nombre del Libro"<<setw(20)<<"ISBN"<<endl;
  218.                             z=j;
  219.                             for(int j=0;j<z;j++)
  220.                             cout<<libros[j].nombre_libro<<setw(31)<<libros[j].ISBN<<endl;
  221.                             break;
  222.                            
  223.                      case 7:
  224.                               cout<<"Socios"<<setw(20)<<"Cedula"<<endl;
  225.                               y=i;
  226.                               for(int i=0;i<y;i++)
  227.                               cout<<libros[i].nombrefadeIn<<setw(8)<<libros[i].apellidosfadeIn<<setw(13)<<libros[i].identificadorfadeIn<<endl;
  228.                               }
  229.                               }
  230.                        
  231.        system("color 0f");
  232.        cout<<"******Biblioteca Publica-El Raton Feliz******"<<endl;                
  233.        cout<<"Desea realizar otra accion. s/n?"<<endl;
  234.        cin>>respuesta;
  235.        system("cls");
  236.        }
  237.        return 0;
  238.        }

De antemano muchas gracias
  #2 (permalink)  
Antiguo 03/07/2011, 13:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Rastreo y muestreo de dato en un arreglo

Solo tienes un problema de llaves, fijate que al final del case 7 pusiste dos llaves cuandp deberia ser una. Ese tipo de error deberias ir aprendiendo a leerlos desde el compilador y probar de solucionarlo por tu cuenta. Ayuda al aprendizaje.

Otra cosas para remarca que no me gusta mucho, y que cuesta ala interpretacion, vos llevas en la variable i el numero de socios registrados. ya de por si no es un nombre muy descriptivo. Segun fijate que cuando queres hacer un for desde 0 hasta i te pasa que queres usar a i como un contador. Entonces declaras una nueva varaible para poder saber el valor y definis en ese ambito una nueva i. Eso mezcla mucho las cosas. Si tan solo cambiaras el nombre de i por numerosocios (por ejemplo) y dejarias a i como un simple contador no deberias hacer esas vueltas para iterar. Son solo sugerencia que ayudan a vos y a lo demas a solucionar tus problemas.
Espero que te sirva.
La llave demas esta en la linea 229. Para ver que llave esta de mas en esto codigo muy largos te puede ayudar una buena identacion, comentarios cuando cerras las llaves, o un buen editor que te vaya marcando con colores las llaves.
  #3 (permalink)  
Antiguo 03/07/2011, 13:33
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Rastreo y muestreo de dato en un arreglo

si gracias por el comentario, ya lo arregle, y tenes razon, es que uso i, para que la salida del case 7 y el 4 vayan de la mano con los socios, porque digamos que en el 7 muestro los socios que hay, y tan solo he ingresado 1, me sale el primer socio, y un monton de caracteres raros, donde no hay nada, pero igual creare una variable cantidadsocios o cantidadlibros, segun como se necesiten, graxx por tu ayuda!!
  #4 (permalink)  
Antiguo 03/07/2011, 13:56
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Rastreo y muestreo de dato en un arreglo

lo unico que tienes uqe hacer es renombrear a la variable i por un nombre mas discriptivo. La i uqe esta en lo for se tiene que seguir llamando i. Y asi te ahorras intrucciones tales como:
y=i;

Realmente inacesarias.
  #5 (permalink)  
Antiguo 03/07/2011, 14:26
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Rastreo y muestreo de dato en un arreglo

para evitar hacer un nuevo tema necesito que me ayudes con el mismo case 4: con un while que tengo ahi, si meto un ID que no existe me tira que ingrese un el ID correcto, hasta ahi todo bien, pero si meto un ID correcto me muestra a quien pertenece y me hace un bucle infinito

Código C++:
Ver original
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6.  typedef struct{
  7.     int ISBN;
  8.     char nombre_libro[100];
  9.     char editorialfadeIn[100];
  10.     int numero_edicionfadeIn;
  11.     char autorfadeIn[100];
  12.     int identificadorfadeIn;
  13.     char nombrefadeIn[100];
  14.     char apellidosfadeIn[100];
  15.     int fecha_registrofadeIn;
  16.     int estadofadeIn;
  17.  } datos_libros;
  18.  
  19.  
  20.  int buscar(datos_libros vector[],int longitud, int valor){
  21.  
  22.    for(int i=0;i<longitud;i++){
  23.       if (vector[i].ISBN == valor)
  24.           return i;
  25.    }
  26.    return -1;
  27.  }
  28.  
  29.  
  30. int main ()
  31. {
  32.    
  33.     datos_libros libros[4];
  34.     int opcion;
  35.     int i = 0;
  36.     int j = 0;
  37.     int ISBN=0;
  38.     int socio;
  39.     int k;
  40.     int ID;
  41.     int cantidad_libros;
  42.     int cantidad_socios;
  43.     string respuesta;
  44.    
  45.    
  46.     while(respuesta!="N" && respuesta!="n")
  47.     {
  48.        system("color 0f");
  49.        cout<<"******Biblioteca Publica^El Raton Feliz^******"<<endl;
  50.        cout<<endl;
  51.        cout<<"Digite #1, para ingresar nuevo socio."<<endl;
  52.        cout<<"Digite #2, para cambiar estado del socio."<<endl;
  53.        cout<<"Digite #3, para ingresar nuevo libro."<<endl;
  54.        cout<<"Digite #4, para prestar libro."<<endl;
  55.        cout<<"Digite #5, pàra recibir libro."<<endl;
  56.        cout<<"Digite #6, para desplegar lista de libros."<<endl;
  57.        cout<<"Digite #7, para desplegar lista de socios."<<endl;
  58.        cout<<"Digite #8, para desplegar lista de libros prestados actualmente"<<endl;
  59.        cout<<endl;
  60.        cout<<"Que opcion desea realizar?"<<endl;
  61.        cin>>opcion;
  62.        system("cls");
  63.        
  64.        
  65.         switch(opcion){
  66.              
  67.          case 1:
  68.               if(i<4)
  69.               {
  70.               cout<<"******Ingreso de nuevo socio******"<<endl;
  71.               cout<<endl;
  72.               cout<<"Ingrese nombre del socio # "<<i<<":"<<endl;
  73.               cin>>libros[i].nombrefadeIn;
  74.               cout<<endl;
  75.               cout<<"Ingrese apellidos del socio:"<<endl;
  76.               cin>>libros[i].apellidosfadeIn;
  77.               cout<<endl;
  78.               cout<<"Ingrese cedula:"<<endl;
  79.               cin>>libros[i].identificadorfadeIn;
  80.               cout<<endl;
  81.               cout<<"Ingrese fecha de registro:(formato dd/mm/aaaa)"<<endl;
  82.               cin>>libros[i].fecha_registrofadeIn;
  83.               cout<<endl;
  84.               cout<<"Ingrese #1 para usuario activo o ingreso #2 para usuario inactivo:"<<endl;
  85.               cin>>libros[i].estadofadeIn;
  86.               cout<<endl;
  87.               system("cls");
  88.               if(libros[i].estadofadeIn==1)
  89.               {
  90.                 system("color 0e");
  91.                 cout<<"El socio de nombre "<<libros[i].nombrefadeIn<<" esta activo!!!"<<endl;
  92.                 system("pause");
  93.                 system("cls");
  94.                 }
  95.                 else
  96.                 {
  97.                     system("color 0e");
  98.                     cout<<"El socio de nombre "<<libros[i].nombrefadeIn<<" esta inactivo!!!"<<endl;
  99.                     system("pause");
  100.                     system("cls");
  101.                     }
  102.                     cout<<endl;
  103.               i=i+1;
  104.               cantidad_socios=i;
  105.               }
  106.               else
  107.               {  
  108.                   system("color 4e");
  109.                   cout<<"ERROR/No se pueden ingresar mas datos/Memoria de socios llena"<<endl;
  110.               system("pause");
  111.                }
  112.                break;
  113.                
  114.                case 2:
  115.                     cout<<"*******Cambio de estado de los socios******"<<endl;
  116.                     cout<<endl;
  117.                     cout<<"Ingrese numero de socio(valido de 0 a 3)"<<endl;
  118.                     cin>>socio;
  119.                     cout<<endl;
  120.                     k=socio;
  121.                     if(k>3)
  122.                     {
  123.                            system("cls");
  124.                            system("color 0b");
  125.                            cout<<"ERROR//Numero de socio inexistente//Ingrese un numero de socio valido!!!"<<endl;
  126.                            cout<<endl;
  127.                            system("pause");
  128.                            system("cls");
  129.                            
  130.                            break;
  131.                            }
  132.                     if(libros[k].estadofadeIn==1)
  133.                     {
  134.                        cout<<"El socio #"<<k<<" de nombre: "<<libros[k].nombrefadeIn<<" se encuentra activo"<<endl;
  135.                        cout<<endl;
  136.                        cout<<"Para cambia el estado del socio a inactivo, presione #2!!"<<endl;
  137.                        cin>>libros[k].estadofadeIn;
  138.                        cout<<endl;
  139.                        cout<<"Cambio de estado del socio a inactivo, fue hecho satisfactoriamente!!"<<endl;
  140.                        system("pause");
  141.                        system("cls");
  142.                        }
  143.                        else
  144.                        {
  145.                            cout<<"El socio #"<<k<<" de nombre: "<<libros[k].nombrefadeIn<<" se encuentra inactivo"<<endl;
  146.                            cout<<endl;
  147.                            cout<<"Para cambiar el estado del socio a activo, presione#1!!"<<endl;
  148.                            cin>>libros[k].estadofadeIn;
  149.                            cout<<endl;
  150.                            cout<<"Cambio de socio a activo, fue hecho satisfactoriamente!!"<<endl;
  151.                            system("pause");
  152.                            system("cls");
  153.                            }
  154.                            cout<<endl;
  155.                            
  156.                            
  157.                            
  158.                     break;
  159.                    
  160.            case 3:
  161.  
  162.                if(j<4)
  163.                        {
  164.                        cout<<"******Ingreso de Nuevo Libro******"<<endl;
  165.                        cout<<endl;
  166.                        cout<<"Ingrese el nombre del libro nuevo # "<<j<<":"<<endl;
  167.                        cin>>libros[j].nombre_libro;
  168.                        cout<<endl;
  169.                        cout<<"Ingrese numero de edicion:"<<endl;
  170.                        cin>>libros[j].numero_edicionfadeIn;
  171.                        cout<<endl;
  172.                        cout<<"Ingrese editorial:"<<endl;
  173.                        cin>>libros[j].editorialfadeIn;
  174.                        cout<<endl;
  175.                        cout<<"Ingrese el ISBN del libro:"<<endl;
  176.                        cin>>ISBN;
  177.                        cout<<endl;
  178.                        while (buscar(libros,j,ISBN)!=-1){
  179.                          cout << "ERROR//Ya has introducido un libro con ese ISBN" << endl;  
  180.                          cout<<endl;        
  181.                          cout<<"Ingrese el ISBN correcto del libro:"<<endl;
  182.                          cin>>ISBN;
  183.                          system("cls");
  184.                        }        
  185.                        
  186.                        libros[j].ISBN = ISBN;
  187.                        j=j+1;
  188.                        cantidad_libros=j;
  189.                        }
  190.                        else
  191.                        {   system("color 0c");
  192.                            cout<<"ERROR//Memoria de libros llena"<<endl;
  193.                            system("pause");
  194.                            }
  195.                            break;
  196.                            
  197.                    case 4:
  198.                         cout<<"******Prestamo de libro******"<<endl;
  199.                         cout<<endl;
  200.                         cout<<"Ingrese la ID de la persona en cuestion:"<<endl;
  201.                         cin>>ID;
  202.                        
  203.                         while(libros[i].identificadorfadeIn!=ID)
  204.                         {
  205.                         for(int i=0;i<cantidad_socios;i++)
  206.                         if(libros[i].identificadorfadeIn==ID)
  207.                         {
  208.                           cout<<"El socio de con la cedula "<<ID<<" es de nombre: "<<libros[i].nombrefadeIn<<endl;
  209.                           cout<<endl;
  210.                          
  211.                           }
  212.                           else
  213.                           {
  214.                               system("cls");
  215.                               cout<<"ERROR//No existe una persona con ese ID"<<endl;
  216.                               cout<<endl;
  217.                               system("pause");
  218.                               system("cls");
  219.                               cout<<"Ingrese la ID correcto:"<<endl;
  220.                               cin>>ID;
  221.                              
  222.                               }
  223.                               }
  224.                              
  225.                            break;        
  226.                    case 6:
  227.                             cout<<"Nombre del Libro"<<setw(20)<<"ISBN"<<endl;
  228.                             for(int j=0;j<cantidad_libros;j++)
  229.                             cout<<libros[j].nombre_libro<<setw(31)<<libros[j].ISBN<<endl;
  230.                             break;
  231.                            
  232.                      case 7:
  233.                               cout<<"Socios"<<setw(20)<<"Cedula"<<endl;
  234.                               for(int i=0;i<cantidad_socios;i++)
  235.                               cout<<libros[i].nombrefadeIn<<setw(8)<<libros[i].apellidosfadeIn<<setw(13)<<libros[i].identificadorfadeIn<<endl;
  236.                               break;
  237.                               }
  238.                        
  239.        system("color 0f");
  240.        cout<<"******Biblioteca Publica-El Raton Feliz******"<<endl;                
  241.        cout<<"Desea realizar otra accion. s/n?"<<endl;
  242.        cin>>respuesta;
  243.        system("cls");
  244.        }
  245.        return 0;
  246.        }

no se que estoy haciendo mal en while del case 4
  #6 (permalink)  
Antiguo 03/07/2011, 16:31
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Rastreo y muestreo de dato en un arreglo

La variable i del while es la que lleva el conteo. en tu caso siempre va a estar uno mas arriba del indice correcto. Es como si fuese el tope. Por eso al fuscar el identificador de ese indice siempre va aver basura y siempre a ser distinto del while.
Yo sacaria el while. si la id es correcta, que vuelva ingresar en el case 4 para buscar.

Etiquetas: errores, muestreo, rastreo, arreglos
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 00:02.