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

problema con un programa

Estas en el tema de problema con un programa en el foro de C/C++ en Foros del Web. saludos tengo unproblema de tarea que es una agenda el y no me sale me aparese la pantalla del menu cuando elijo una obcion no ...
  #1 (permalink)  
Antiguo 13/07/2010, 15:57
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 13 años, 9 meses
Puntos: 0
problema con un programa

saludos tengo unproblema de tarea que es una agenda el y no me sale me aparese la pantalla del menu cuando elijo una obcion no ase nada el problema es lo de negro con la fucion insertar y el menu me dise que tengo que yamarla pero ya la llame y me pasa lo mismo si me pudieran ayudar gracias

este es el codigo fuente lo cree en c y con dev c++

/* Proyecto No.1 */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
/* Se define la estructura Nodo lista que contiene, una cadena de caracteres,
y 2 apuntadores del tipo NodoLista, uno que apunta al siguiente y otro apunta
al elemento anterior*/
typedef struct nodo
{
char*dato;
char*name;
char*tel;
struct nodo*siguiente;
struct nodo*anterior;
}NodoLista;
/* definir la estructura lista que contiene un apuntador al inicio de la misma */
typedef struct lista
{
NodoLista*inicio;
}Lista;
/* funcion que inicializa la lista colocando el apuntador de inicio en Nulo*/
void inicializalista(Lista*lista)
{
lista->inicio=NULL;
}
/* funcion que regresa un valor de 0 si la lista esta vacia, en caso contrario regresa un 1 */
int listavacia(Lista*lista)
{
if(lista->inicio==NULL)
return 0;
return 1;
}
/* funcion que inserta un elemento a la lista, los argumentos de la funcion son
el nombre de la lista, la cadena que contendra y la cadena que se encuentra antes de donde
se desea introducir el nuevo elemento*/
int insertar(Lista*lista,char*c,char*d,char*e)
{
/* esta primera parte declara variables y reserva memoria, igualmente se copian
los datos introducidos (cadena) al nuevo nodo */
NodoLista*nuevo;
NodoLista *aux;
if((nuevo=(NodoLista*)malloc(sizeof(NodoLista)))== NULL)
return -1;
if((nuevo->dato=(char*)malloc(30*sizeof(char)))==NULL)
return -1;
if((nuevo->name=(char*)malloc(30*sizeof(char)))==NULL)
return -1;
if((nuevo->tel=(char*)malloc(30*sizeof(char)))==NULL)
return -1;
strcpy(nuevo->dato,d);
strcpy(nuevo->name,c);
strcpy(nuevo->tel,e);
/* si la lista esta vacia, se coloca el nodo al inicio */
if(listavacia(lista)==0)
{
lista->inicio=nuevo;
nuevo->siguiente=NULL;
}
/* en caso contrario se inicia la busqueda del elemento anterior*/
else
{
/*ciclo para hubicar al elemento anterior al espacio donde se desea agregar el nodo*/
aux=lista->inicio;
if(strcmp(d,aux->dato)<=0)
{
nuevo->siguiente=aux;
aux->anterior=nuevo;

lista->inicio=nuevo;
return 1;
}
else
{
while(aux->siguiente!=NULL&&strcmp(aux->siguiente->dato,d)<=0)
{
aux=aux->siguiente;
}
}
/* si se llego al final y no se encontro la cadena, se manda un mensaje*/
/* si la cadena se encontro al final de la lista, se hace la siguiente reasignacion de apuntadores*/
if(aux==lista->inicio)
{
nuevo->siguiente=aux->siguiente;
aux->siguiente=nuevo;
nuevo->anterior=aux;
}
else
/* si la cadena que se busco resulto estar al inicio de la lista, la reasignacion de apuntadores es asi: */
if(aux->siguiente==NULL)
{
aux->siguiente=nuevo;
nuevo->anterior=aux;
nuevo->siguiente=NULL;
}
/* Finalmente si la cadena se encontraba "en medio" de la lista, la reasignación de apuntadores es así: */
else
{
nuevo->siguiente=aux->siguiente;
nuevo->anterior=aux;
aux->siguiente=nuevo;
}
}
return 1;
}
/* Función que elimina un elemento, como parametros de la fución se encuentra
el nombre de la lista y la cadena que contiene el elemento a liminar */
int borrar(lista*lista,char*antes)
{
/* declaración del nodo que nos ayudará a recorrer la lista */
NodoLista*aux;
/* si la lista está vacía, se envía un mensaje */
if(listavacia(lista)==0)
{
printf("\n\nLa lista esta vacia, no se puede eliminar nada\n\n");
return -1;
}
/*en caso contrario se inicia el ciclo por medio del cual se busca la cadena */
else
{
/* ciclo para recorrer la lista y buscar la cadena */
aux=lista->inicio;
while(aux!=NULL&&strcmp(aux->dato,antes)!=0)
{
aux=aux->siguiente;
}
/* si la lista se terminó de recorrer y nó encontró el elemento */
if(aux==NULL)
{
printf("\n\nLa lista no contiene dicho elemento\n\n");
return -1;
}
else
{
/* si el elemento a eliminar se encuentra al final de la lista, los apuntadores se reasignan así: */
if(aux->siguiente==NULL)
{
/* si hay mas de 2 elementos */
if(aux!=lista->inicio)
aux->anterior->siguiente=NULL;
/* caso en el que el primer elemento es el último */
else
{
lista->inicio=NULL;
free(aux->dato);
free(aux->name);
free(aux->tel);
free(aux);
return 1;
}
}
else
{
/* si el elemento a eliminar es el primero de la lista, los operadores se reasignan de la siguiente manera: */
if(aux==lista->inicio)
{
lista->inicio=aux->siguiente;
aux->siguiente->anterior=NULL;
}
/* si el elemento a eliminar está a mitad de la lista, los operadores se reasignan así: */
else
{
aux->anterior->siguiente=aux->siguiente;
aux->siguiente->anterior=aux->anterior;
}
}
}
}
/* al final sólo se libera el espacio de memoria */
free(aux->dato);
free(aux->name);
free(aux->tel);
free(aux);
return 1;
}
/* función que borra la lista por completo, sólo se requiere de el nombre de la lista*/
void borrarc(Lista *lista)
{
/* atravez de un ciclo se recorre la lista y se van eliminando los elementos */
while(lista->inicio!=NULL)
{
NodoLista *actual;
actual=lista->inicio;
lista->inicio=lista->inicio->siguiente;
free(actual->dato);
free(actual->name);
free(actual->tel);
free(actual);
}
}
/* función que muestra el contenido de una lista, se requiere el nombre de la lista */
void mostrar(Lista *lista)
{
/* se declara e inicializa el vector que recorrerá la lista */
NodoLista *actual;
actual=lista->inicio;
/* si la lista está vacía se envía un mensaje */
if(listavacia(lista)==0)
printf("\n\nLa agenda esta vacia\n");
/* en caso contrario inicia el recorridode la lista*/
else
{
/* la lista se recorre de principio a fín por medio del ciclo */
printf("\n\nLa agenda contiene: \n\n");
while(actual!=NULL)
{
printf("\n\nNombre: %s\n",actual->name);
printf("Apellido: %s\n",actual->dato);
printf("Telefono: %s",actual->tel);
actual=actual->siguiente;
}
}
}
void mostrar2(Lista*lista,char*posi)
{
NodoLista*actual,*nuevo;
actual=lista->inicio;
while(strcmp(actual->dato,posi)!=0&&actual!=NULL)
{
actual=actual->siguiente;
}
if(actual==NULL)
{
printf("\n\nNo se encontro el elemento\n\n");
}
else
{ [

printf("\nLa agenda contiene en esa posicion: \n\n");
printf("\n\nNombre: %s\n",actual->name);
printf("Apellido: %s\n",actual->dato);
printf("Telefono: %s\n",actual->tel);
}
}
/* función principal */
int main()
{
/* Declaración e inicialización de variables y de la lista a utilizar*/
lista milista;
inicializalista(&milista);
int m=0;
int P;
char nombre[30]="0";
char apellido[30]="0";
char telefono[30]="0";
char posi[30]="0";
/* ciclo del programa donde se muestra el menú y se realizan operaciones*/
while(m!=6)
{
/* desplegado del menú y captura de la opción elegida*/
/**** Aquí tenemos que implementar esta parte para formar la agenda como se desee****/
/*EN CASO DE AGREGAR UN ELEMENTO SE VERIFICA SI SERÁ EL PRIMERO DE LA LISTA O SI YA HAY OTRO ELEMENTO Y
SE MANDA A LLAMAR LA FUNCIÓN INSERTAR*/

printf(" AGENDA\n");
printf("Escoje tu Opcion\n");
printf("1.- Agregar Nuevo Contacto a la Agenda\n");
printf("2.- Eliminar Contacto\n");
printf("3.- Mostrar Contactos\n");
printf("4.- Borrar Agenda\n");
printf("5.- Ver contacto\n");


getchar();
}
if(m==1)
{
/*****SE INTRODUCEN LOS ENUNCIADOS QUE SE NECESITAN*****/


printf("nombre: \n");
scanf("%s",nombre);
printf("apellido: \n");
scanf("%s",apellido);
printf("telefono: \n");
scanf("%S",telefono);
insertar(&milista,nombre,apellido,telefono);

getchar();
}
/* Para quitar un elemento se captura la cadena que contiene el nodo y se manda a llamar a la función borrar */
if(m==2)
{
{
printf("\n\nIntroduce el apellido de la persona a eliminar: ");
scanf("%s",nombre);
borrar(&milista,nombre);
getchar();
}
/* en caso de mostrar la lista, sólo se manda a llamar a la función mostrar */
if(m==3)
{
mostrar(&milista);
getchar();
}
/* Para borrar por completo la lista, se llama a la función borrarc */
if(m==4)
{
printf("\n\nLa agenda ha sido borrada\n\n");
borrarc(&milista);
getchar();
}
if(m==5)
{
printf("\n\nQue elemento quiere visualizar: \n");
scanf("%s",posi);
mostrar2(&milista,posi);
getchar();
}
}

}

Etiquetas: programa
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 08:52.