Cool C/C++

Programacion en C/C++

Home Foros
Bienvenido, Invitado
Por favor Identificarse o Registrarse.    Contraseña olvidada?

Error en la aplicacion (Ayuda urgente por favor...
(1 viendo) (1) Invitado
AbajoPágina: 1
TEMA: Error en la aplicacion (Ayuda urgente por favor...
#6
Error en la aplicacion (Ayuda urgente por favor... Creado el día: 15/03/2011 00:01 Karma: 0
Buenas gente, necesito de su valiosa ayuda, por favor!!! el programa que les voy a poner a continuacion esta con cerro errores, pero a la hora de ejecutarlo me da este error de aplicacion, el cual no se como solucionar. mucho les agradezco su colaboracion.

/*********************************/
/* */
/* Ingenieria en Sistemas */
/* */
/* Hubert Garcia Gordon */
/* */
/* Curso: Estructura de Datos */
/* Prof. Franklin Bonilla */
/* Tarea 3 Listas Enlazadas */
/* Fecha de entrega: 17/03/2011 */
/* */
/*********************************/

/* Requerimiento */

// Implementar una agenda telefonica para N registros

/* Debe implementar lo siguiente */

/* 1. Agregar contacto: insertar datos a la lista.
2. Modificar contacto: busca un dato en la lista, si lo encuentra
permite modificarlo, de lo contario presenta un mensaje.
3. Eliminar contacto: busca un dato en la lista, si lo encuentra pide
confirmacion para borrarlo. si se confirma, se borra el dato.
Si dato no se encuentra se presenta un mensaje.
4. Ver contactos: despliega los datos contenidos en la lista. */


#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


// declara registro
struct registro{
char nom[50];
char tel[10];
struct registro *sgte;

};

// procedimiento para crear registros en la lista
void insertarRegistro(registro* &lista)
{
char seguir;
do
{
// declara variable tipo struc registro
// nuevo es para crear registros y ptrActual es para recorrer lista
struct registro *nuevo;
struct registro *ptrActual;

// toma memoria RAM para el nuevo nodo
nuevo = (struct registro *) malloc(sizeof(struct registro));



clrscr();
cout << "*-------------------------------*" << endl;
cout << "* AGREGAR REGISTRO *" << endl;
cout << "*-------------------------------*" << endl;
cout << endl;
cout << "Ingrese el nombre del de la persona a registrar: " ;
cin >> nuevo->nom;
cout << "Ingrese el numero de telefono de la persona a registrar: " ;
cin >> nuevo->tel;

nuevo->sgte = NULL;


// asigna posición de primer nodo de la lista a ptrActual
ptrActual = lista;

// recorre la lista
while (ptrActual->sgte != NULL)
{
ptrActual = ptrActual->sgte;
}

if(ptrActual != NULL) // si la lista ya existe, se agrega el nodo
{
ptrActual->sgte = nuevo;
nuevo->sgte = NULL;
}
else // si la lista no existe, es creada con nuevo nodo
{
lista = nuevo;
nuevo->sgte = NULL;
}
cout << endl;
cout << "El dato " << nuevo->nom << " fue ingresado. Gracias..." << endl << endl;
cout << "Desea ingresar mas datos? s/n (si/no)";
cin >> seguir;
cout << endl;
}while(seguir == 's' || seguir == 'S');
}

// procedimiento para modificar un registro
void modificarRegistro(registro* &lista)
{
char seguir;
do
{
// declara variable tipo struc registro. ptrActual es para recorrer lista
struct registro *ptrActual;

char dato_buscar[10], dato_modif[10];
int encontrado = 1;

// asigna posición de primer nodo de la lista a ptrActual
ptrActual = lista;

clrscr();

// si la lista existe inicia el proceso
// de lo contrario se informa al usuario que lista no existe
if(ptrActual != NULL)
{
cout << "*-------------------------------*" << endl;
cout << "* MODIFICAR REGISTRO *" << endl;
cout << "*-------------------------------*" << endl;
cout << endl;

cout << "Ingrese el dato a buscar: ";
cin >> dato_buscar;

// recorre la lista buscando el dato indicado por el usuario
while (ptrActual != NULL)
{
if(ptrActual->nom == dato_buscar)
{
encontrado = 0;
break;
} // if
ptrActual = ptrActual->sgte;
} // while

// si encontro el dato, actualiza dato el registro
if (encontrado == 0)
{
cout << endl;
cout << "El dato fue encontrado." << endl;
cout << "Ingrese el nombre del registro a modificar: ";
cin >> dato_modif;
ptrActual->nom == dato_modif;
cout << endl << "El dato fue modificado. Consulte lista para verificar...";
encontrado = 1;
} // if encontrado
else
{
cout << endl;
cout << "Dato no encontrado. Consulte lista para verificar...";
} // else encontrado
} // if ptrActual != NULL
else // la lista no existe, se informa al usuario
{
cout << endl;
cout << "La lista está vacia." << endl;
cout << "Digite cualquier tecla para continuar..." << endl;
getch();
break;
} // else ptrActual != NULL

cout << endl << endl << endl;
cout << "Desea modificar otro dato? s/n (si/no)";
cin >> seguir;
cout << endl;

}while(seguir == 's' || seguir == 'S');
}


// procedimiento para eliminar nodos de la lista
void eliminarRegistro(registro* &lista)
{

char seguir;
do
{
// declara variable tipo struc registro
// ptrAntr y ptrActual son para recorrer lista
// ptrTemp es puntero auxiliar para ejecutar borrado
struct registro *ptrAntr;
struct registro *ptrActual;
struct registro *ptrTemp;

char dato_buscar[10];
int borrado = 0;

// asigna posición de primer registro de la lista a ptrActual
ptrActual = lista;

clrscr();

// si la lista existe se inicia el proceso
// de lo contrario se informa al usuario que lista no existe
if(ptrActual != NULL)
{
cout << "*-------------------------------*" << endl;
cout << "* MODIFICAR REGISTRO *" << endl;
cout << "*-------------------------------*" << endl;
cout << endl;

cout << "Ingrese el dato a buscar: ";
cin >> dato_buscar;

// si dato a borrar se encuentra en el primer nodo de la lista
if(dato_buscar == ptrActual->nom)
{
ptrTemp = lista;
lista = ptrTemp->sgte;
free(ptrTemp);
borrado = 1;
} // if dato_buscar
else
{
// recorre lista mientras puntero sea distinto de NULL
// y no encuentre el dato buscado
while(ptrActual != NULL && ptrActual->nom != dato_buscar)
{
ptrAntr = ptrActual;
ptrActual = ptrActual->sgte;
}

// si encontro el dato en posición distinta de primer registro, lo borra
if(ptrActual->sgte != NULL && ptrActual->nom == dato_buscar)
{
ptrTemp = ptrActual->sgte;
ptrAntr->sgte = ptrTemp;
free(ptrActual);
borrado = 1;
} // if ptrActual != NULL
} // else dato_buscar
} // if ptrActual != NULL
else // la lista no existe, se informa al usuario
{
cout << endl;
cout << "La lista está vacia." << endl;
cout << "Digite cualquier tecla para continuar..." << endl;
getch();
break;
} // el ptrActual != NULL

// if/else para saber que ocurrio en el proceso y avisar al usuario
if(borrado==1)
{
cout << endl;
cout << "El dato fue encontrado y eliminado." << endl;
cout << "Verifique consultando lista.";
borrado = 0;
}
else
{
cout << endl;
cout << "Dato no se encuentra." << endl;
}

cout << endl << endl << endl;
cout << "Desea eliminar otro dato? s/n (si/no)";
cin >> seguir;
cout << endl;
}while(seguir == 's' || seguir == 'S');
}


// procedimiento para recorrer la lista mostrando el dato en pantalla
void consultarLista(registro* &lista)
{
// declara variable tipo struct regostrp para recorrer la lista
struct registro *ptrActual;

// asigna posición de primer registro de la lista a ptrActual
ptrActual = lista;

clrscr();

// si la lista existe se incia el proceso
// de lo contrario se informa al usuario que lista no existe
if(ptrActual != NULL)
{
cout << "*-------------------------------*" << endl;
cout << "* CONTENIDO DE LA LISTA *" << endl;
cout << "*-------------------------------*" << endl;
cout << endl;

// recorre la lista
while (ptrActual != NULL)
{
cout << ptrActual->nom << " ";
ptrActual = ptrActual->sgte;
}
cout << endl << endl;
cout << "Digite cualquier tecla para continuar..." << endl;
}
else
{
cout << endl;
cout << "La lista está vacia." << endl;
cout << "Digite cualquier tecla para continuar..." << endl;
}
getch();
}





void despedida()
{
clrscr();
cout << endl;
cout << " SALIO DEL SISTEMA. BYE..." << endl;
}

void opcionIncorrecta()
{
clrscr();
cout << endl;
cout << "Opcion incorrecta." << endl;
cout << "Digite cualquier tecla para continuar..." << endl;
getch();
}


void main()
{
struct registro *lista;

lista = NULL;

int opt;
do {
clrscr();
cout << endl;
cout << "MENU PRINCIPAL DEL SISTEMA" << endl;
cout << endl;
cout << " 1. Agregar contacto" << endl;
cout << " 2. Modificar Contacto" << endl;
cout << " 3. Eliminar Contacto" << endl;
cout << " 4. Consultar lista" << endl;
cout << " 5. Salir" << endl;
cout << endl;
cout << "Seleccione opcion: ";
cin>> opt;

switch (opt){
case 1:
insertarRegistro(lista);
break;
case 2:
modificarRegistro(lista);
break;
case 3:
eliminarRegistro(lista);
break;
case 4:
consultarLista(lista);
break;
case 5:
despedida();
break;
default:
opcionIncorrecta();
break;
} // switch opt
} while (opt !=5);
} // main

psychohub
Navegador Iniciado
Mensajes: 3
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
#7
Re: Error en la aplicacion (Ayuda urgente por favor... Creado el día: 15/03/2011 11:22 Karma: 2
Puedes indicarnos que compilador estás usando?

Eso ayudaría para saber que está pasando, a veces los errores se presentan sólo en ciertos compiladores.
adrianvaca
Administrador
Mensajes: 110
graph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
El conocimiento es una forma de empezar a ser libre
 
#8
Re: Error en la aplicacion (Ayuda urgente por favor... Creado el día: 15/03/2011 13:25 Karma: 0
Muchas gracias por interesarte en este tema, espero que por favor me puedan ayudar, estoy trabajando con el Borland C++ 3.1
muchas gracias.
psychohub
Navegador Iniciado
Mensajes: 3
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
#88
Re: Error en la aplicacion (Ayuda urgente por favor... Creado el día: 02/06/2011 09:43 Karma: 0
Debes asignar memoria al puntero lista antes de usarlo. Dentro de main y antes del bucle do while debes añadir:

lista = (struct registro *) malloc(sizeof(struct registro));
pascualbp
Navegador Iniciado
Mensajes: 1
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
ArribaPágina: 1
obtén los últimos mensajes directamente en tu escritorio