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)
| | |-+  Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Errores con un ejercicio de registros en el que tengo que crear una agenda. C++  (Leído 1,767 veces)
seryioo

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
« en: 8 Septiembre 2015, 13:03 pm »

Buenas, llevo desde ayer dándole vueltas a este ejercicio en el que tengo que crear una agenda.

Os voy a dejar el código de las funciones y lo que se supone que debe hacer cada una.

Código
  1. //- Definiciones de funciones -----------------------------------------
  2.  
  3. void inicializar_agenda(Tagenda& ag){
  4.    ag.numEntradas=0;
  5. }
  6.  
  7. void a_mayusculas(string& str){
  8.    for(int pos=0; pos<str.size(); pos++){
  9.        if(str[pos]>='a' && str[pos]<='z'){
  10.            str[pos]-=32;
  11.        }
  12.    }
  13. }
  14.  
  15. void leer_contacto(Tentrada& ent){
  16.    string nombre, apellido;
  17.    long numero;
  18.    cout<<"Introduce nombre, apellido y numero de contacto: ";
  19.    cin>>ws;
  20.    cin>>nombre>>apellido>>numero;
  21.  
  22.    a_mayusculas(nombre);
  23.    a_mayusculas(apellido);
  24.  
  25.    ent.nombre=nombre;
  26.    ent.apellido=apellido;
  27.    ent.numero=numero;
  28. }
  29.  
  30. void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& ok){
  31.    if(ag.numEntradas>=DIM-1) ok=false;
  32.    else{
  33.        int pos=0;
  34.        while(pos<=ag.numEntradas){
  35.            if(ag.entradas[pos].nombre==ent.nombre && ag.entradas[pos].apellido==ent.apellido) ok=false;
  36.            else{
  37.                ok=true;
  38.                ag.entradas[pos].nombre=ent.nombre;
  39.                ag.entradas[pos].apellido=ent.apellido;
  40.                ag.entradas[pos].numero=ent.numero;
  41.            }//end else
  42.            ++pos;
  43.        }//end while
  44.  
  45.    }//end else
  46. }
  47.  
  48. //int pos_en_agenda(string nom, string apdo, const Tagenda& ag);
  49.  
  50. void eliminar_contacto(Tagenda& ag, string nom, string apdo, bool& ok){
  51.    a_mayusculas(nom);
  52.    a_mayusculas(apdo);
  53.    int pos=0;
  54.    while(pos<=ag.numEntradas){
  55.        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo){
  56.            ok=true;
  57.            ag.entradas[pos].nombre=ag.entradas[ag.numEntradas].nombre;
  58.            ag.entradas[pos].apellido=ag.entradas[ag.numEntradas].apellido;
  59.            ag.entradas[pos].numero=ag.entradas[ag.numEntradas].numero;
  60.            --ag.numEntradas;
  61.        }else ok=false;
  62.        ++pos;
  63.    }
  64. }
  65.  
  66. long numero(const Tagenda& ag, string nom, string apdo){
  67.    long n=0;
  68.    a_mayusculas(nom);
  69.    a_mayusculas(apdo);
  70.    int pos=0;
  71.    while(pos<=ag.numEntradas){
  72.        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo) n=ag.entradas[pos].numero;
  73.        ++pos;
  74.    }//end while
  75.    return n;
  76. }
  77.  
  78. void listar_agenda(const Tagenda& ag){
  79.    int pos=0;
  80.    while(pos<=ag.numEntradas){
  81.         cout<<ag.entradas[pos].nombre<<" "<<ag.entradas[pos].apellido<<" "<<ag.entradas[pos].numero;
  82.         ++pos;
  83.    }//end while
  84. }
  85.  
  86.  
  87.  


ENUNCIADOS:

ara poder utilizar una agenda, primero habrá que inicializarla simplemente poniendo el nº
de entradas a 0. De esto se encargará la función siguiente

void inicializar_agenda(Tagenda& ag).
Para introducir contactos en la agenda se utilizarán las funciones

void leer_contacto(Tentrada& ent),
que se encargará de pedir y leer, de la consola, los datos de un contacto, pasar nombre y
apellido a mayúsculas, y rellenar con ellos los campos de la entrada ent que recibe como
argumento, y

void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& OK),
que pedirá los datos de un nuevo contacto para agregarlo a la agenda ag; pero si ya existe
una entrada en la agenda con el mismo nombre y apellido o la agenda está llena, no lo
agrega y devuelve false en el parámetro OK, de lo contrario agrega un nuevo registro con
los datos del contacto en la primera posición libre de la agenda y devuelve true en OK.
Recuérdese que los datos de una entrada deberán estar siempre en mayúsculas.
Para eliminar un contacto de la agenda se utilizará la función

void eliminar_contacto(Tagenda& ag, string nom, string apdo,bool& OK),
que buscará la entrada correspondiente al contacto cuyo nombre y apellido se especifican en
los argumentos y, si la encuentra, la elimina de la agenda ag y devuelve true en el
parámetro OK; pero si no lo encuentra, no modifica la agenda y devuelve false en OK. Para
eliminar la entrada bastará con copiar en su lugar del array la entrada situada en la última
posición ocupada y disminuir el número de entradas de la agenda. Se deberá tener cuidado
con las diferencias entre mayúsculas y minúsculas.
Para obtener el número de teléfono de un contacto se utilizará la función

long numero(const Tagenda& ag, string nom, string apdo),
que buscará en la agenda la entrada correspondiente al contacto cuyo nombre y apellido se
especifican en los argumentos y, si lo encuentra, lo devolverá como resultado; pero si no lo
encuentra, devuelve 0. Se deberá tener cuidado con las diferencias entre mayúsculas y
minúsculas.

Para ver en la pantalla el contenido de la agenda se utilizará la función
void listar_agenda(const Tagenda& ag);
que listará cada una de las entradas de la agenda ag en una línea de la pantalla.


He rehecho el ejercicio varias veces, cuando ejecuto el programa me dice que dejó de funcionar.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
« Respuesta #1 en: 8 Septiembre 2015, 15:01 pm »

Lo primero es ver en qué parte o instrucción deja de funcionar. ve buscando, colocando salidas por pantalla por ejemplo. Coloca "cout" hasta ver en qué parte deja de funcionar.

Una vez que sepas qué variables están metidas en el problema, mira una a una, su declaración, su asignación de memoria, y su correcta sintaxis en donde sea que la uses.

Si tras ver eso no has localizado nada, di cual es la linea que falla.


En línea

seryioo

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Re: Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
« Respuesta #2 en: 8 Septiembre 2015, 17:08 pm »

a ver, esta función no me está pasando el string a mayúscula
Código
  1. void a_mayusculas(string& str){
  2.    for(int i; i<str.size(); ++i){
  3.        str[i] = toupper(str[i]);
  4.    }
  5. }
En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
« Respuesta #3 en: 8 Septiembre 2015, 17:32 pm »

Y el main()??

Salu2s
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Errores con un ejercicio de registros en el que tengo que crear una agenda. C++
« Respuesta #4 en: 8 Septiembre 2015, 19:53 pm »

Código
  1. for(int i; i<str.size(); ++i){
No inicializas la variable i.

De todos modos, dudo que esa fuera la causa del error.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines