Errores con un ejercicio de registros en el que tengo que crear una agenda. C++

Iniciado por seryioo, 8 Septiembre 2015, 13:03 PM

0 Miembros y 1 Visitante están viendo este tema.

seryioo

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 (cpp) [Seleccionar]

//- Definiciones de funciones -----------------------------------------

void inicializar_agenda(Tagenda& ag){
    ag.numEntradas=0;
}

void a_mayusculas(string& str){
    for(int pos=0; pos<str.size(); pos++){
        if(str[pos]>='a' && str[pos]<='z'){
            str[pos]-=32;
        }
    }
}

void leer_contacto(Tentrada& ent){
    string nombre, apellido;
    long numero;
    cout<<"Introduce nombre, apellido y numero de contacto: ";
    cin>>ws;
    cin>>nombre>>apellido>>numero;

    a_mayusculas(nombre);
    a_mayusculas(apellido);

    ent.nombre=nombre;
    ent.apellido=apellido;
    ent.numero=numero;
}

void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& ok){
    if(ag.numEntradas>=DIM-1) ok=false;
    else{
        int pos=0;
        while(pos<=ag.numEntradas){
            if(ag.entradas[pos].nombre==ent.nombre && ag.entradas[pos].apellido==ent.apellido) ok=false;
            else{
                ok=true;
                ag.entradas[pos].nombre=ent.nombre;
                ag.entradas[pos].apellido=ent.apellido;
                ag.entradas[pos].numero=ent.numero;
            }//end else
            ++pos;
        }//end while

    }//end else
}

//int pos_en_agenda(string nom, string apdo, const Tagenda& ag);

void eliminar_contacto(Tagenda& ag, string nom, string apdo, bool& ok){
    a_mayusculas(nom);
    a_mayusculas(apdo);
    int pos=0;
    while(pos<=ag.numEntradas){
        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo){
            ok=true;
            ag.entradas[pos].nombre=ag.entradas[ag.numEntradas].nombre;
            ag.entradas[pos].apellido=ag.entradas[ag.numEntradas].apellido;
            ag.entradas[pos].numero=ag.entradas[ag.numEntradas].numero;
            --ag.numEntradas;
        }else ok=false;
        ++pos;
    }
}

long numero(const Tagenda& ag, string nom, string apdo){
    long n=0;
    a_mayusculas(nom);
    a_mayusculas(apdo);
    int pos=0;
    while(pos<=ag.numEntradas){
        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo) n=ag.entradas[pos].numero;
        ++pos;
    }//end while
    return n;
}

void listar_agenda(const Tagenda& ag){
    int pos=0;
    while(pos<=ag.numEntradas){
         cout<<ag.entradas[pos].nombre<<" "<<ag.entradas[pos].apellido<<" "<<ag.entradas[pos].numero;
         ++pos;
    }//end while
}





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.

ivancea96

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.

seryioo

a ver, esta función no me está pasando el string a mayúscula
Código (cpp) [Seleccionar]
void a_mayusculas(string& str){
    for(int i; i<str.size(); ++i){
        str[i] = toupper(str[i]);
    }
}

DarK_FirefoX


ivancea96

Código (cpp) [Seleccionar]
for(int i; i<str.size(); ++i){
No inicializas la variable i.

De todos modos, dudo que esa fuera la causa del error.