elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [AYUDA] Punteros y Nodos!!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Punteros y Nodos!!!!  (Leído 5,303 veces)
dixson

Desconectado Desconectado

Mensajes: 3


Ver Perfil
[AYUDA] Punteros y Nodos!!!!
« en: 24 Enero 2011, 21:14 pm »

Hola como estan buenos amigos espero que me ayuden..

me mandaron hacer un proyecto en la Uni..

sobre un sistema que tome la consultas de los pacientes en unca clinica..

el problema es que cuando elimino un paciente que esta de primero  no me muestra un segundo

ejemplo:

1er paciente
nombre: dixson
cedula: 19750xxx
edad: 19
fecha de la cita 18/01/11


2do paciente
nombre: jose
cedula: 19750xxx
edad: 20
fecha de la cita 18/01/11


elimino al 1er paciente y el segundo no me lo muestra cuando lo pido.. asumo yo que es porque no vuelve a enlazar el nodo o nose

gracias aqui esta el codigo..

Código:
#include<stdio.h> //declaracion de librerias basicas
#include<stdlib.h>
struct nodo //declaracion del nodo con su campos
{
char nombre[30], fecha[15];
int cedula,edad;
struct nodo *siguiente;
};
 
typedef nodo lista;  //typedef de cada nodo, que se convierte en la lista
lista *primero, *segundo, *tercero, *cuarto, *quinto;

void crear_nodo() //creacion e incializacion del nodo
{
primero=new(nodo); //creacion del primer nodo
primero->nombre[30]= NULL;  //NULL para dejar vacio el arreglo de caracteres
primero->fecha[30]= NULL;
primero->cedula=0;
primero->edad=0;
primero->siguiente=0;

segundo=new(nodo); //creacion del segundo
segundo->nombre[30]= NULL;
segundo->fecha[30]= NULL;
segundo->cedula=0;
segundo->edad=0;
segundo->siguiente=0;

tercero=new(nodo); //creacion del tercero
tercero->nombre[30]= NULL;
tercero->fecha[30]= NULL;
tercero->cedula=0;
tercero->edad=0;
tercero->siguiente=0;

cuarto=new(nodo); //creacion del cuarto
cuarto->nombre[30]= NULL;
cuarto->fecha[30]= NULL;
cuarto->cedula=0;
cuarto->edad=0;
cuarto->siguiente=0;

quinto=new(nodo); //creacion del quinto
quinto->nombre[30]= NULL;
quinto->fecha[30]= NULL;
quinto->cedula=0;
quinto->edad=0;
quinto->siguiente=0;

}

void enlazar_nodos() //enlazar los nodos con el siguiente
{
primero->siguiente=segundo;
segundo->siguiente=tercero;
tercero->siguiente=cuarto;
cuarto->siguiente=quinto;
}

void leerdatos() //funcion que lee los datos de las personas y los agrega a la lista de citas
{
lista *temp; //declaro variable temp
temp=primero;
char extra[20]; //variable adicional para recibir el nombre con los espacios
int x=0,y=0; //variables que se usaran para comparar durante el while
printf("Cuantas personas desea agregar?");
scanf("%i",&x); //obtenemos el valor de X
while ((x!=0) && (x<5) && (x!=y)) //mientras x no sea 0 y x sea menor que 5 y X y Y sean diferentes;
{
if (temp->cedula == 0) //verifica que el nodo este vacio para agregar la infomacion
{
printf("\nIntroduzca La cedula: "); //pide los datos
scanf("%i",&temp->cedula);
printf("\nIntroduzca El Nombre: ");
gets(extra);
gets(temp->nombre);
printf("\nIntroduzca Edad: ");
scanf("%i",&temp->edad);
printf("\nIntroduzca Fecha de Proxima Cita: ");
scanf("%s",&temp->fecha);
temp=temp->siguiente; //mueve el puntero temporal al siguiente nodo
x=x-1; //cuenta las veces que se hace el proceso dependiendo del valor deseado
}
else //si el nodo no esta vacio
{
temp=temp->siguiente; //mueve el puntero hacia el siguiente nodo
}
}
}


void imprimir() //mostrar datos almacenados
{
lista *tempo; //puntero temporal
tempo=primero;
while(tempo->cedula!=0) //mientras la parte cedula de lo que apunta el puntero no sea 0, verificando que no este vacio
{
if (tempo->cedula==0) //si la parte cedula del punterp tempo es igual a 0
{
tempo=tempo->siguiente; //mueve el puntero al siguiente
}
else //sino
{
printf("El Nombre: %s \n",tempo->nombre); //imprime los datos almacenados
printf("La Edad: %i \n",tempo->edad);
printf("Cedula: %i \n",tempo->cedula);
printf("Fecha: %s \n",tempo->fecha);
tempo=tempo->siguiente;
}
}
printf("\nNo Hay Mas Citas Pendientes\n");  //al final imprime esto.
system("pause");
}



void buscar() //para buscar al paciente por numero de cedula
{
bool bandera; //un bool que usamos para la busqueda
lista *aux; //puntero auxiliar que se movera por la lista
int ced; //variable que se comparara con la cedula
bandera=false; //bandera=false para que siempre entre a la busqueda
printf("\nIntroduzca la cedula a buscarr: ");
scanf("%i",&ced); //obtenemos el valor de la cedula a buscar
aux=primero;
while((bandera == false) && (aux!=0)) //comenzamos la busqueda mientras bandera sea false y lo que apunta aux no sea 0
{
if (aux->cedula == ced) //si la parte cedula del auxiliar es igual a la cedula solicitada entonces,
{
bandera = true; //hace bandera = true para que al proximo intento no entre en la busqueda
printf("\nPaciente Encontrado:\n  "); //muestra los datos almacenados del paciente encontrado.
printf("\nEl Nombre: %s ",aux->nombre);
printf("\nLa Edad: %i ",aux->edad);
printf("\nCedula: %i ",aux->cedula);
printf("\nFecha: %s ",aux->fecha);
}
else aux=aux->siguiente; // en caso de que las cedulas sean diferentes solo mueve el puntero al siguiente nodo
}
if (aux == 0) printf("\nNo Tiene Citas"); //si aux es igual a 0, osea que no hay valores en los nodos entonces muestra esto.
system("pause");
}


void eliminar() // funcion que elimina los datos de un paciente de la lista //revisar
{
bool busqueda; // busqueda para que realice la busqueda de la cedula
lista *borrar; // puntero adicional que se movera por los nodos
int ce; // ce es para comparar la cedula a buscar con esta
busqueda=false;
printf("\nIntroduzca el Numero de cedula: \n");
scanf("%i",&ce);  // obtenemos ce para comparar con la cedula en el nodo
borrar=primero;  //hacemos que el puntero apunte al primer nodo
while (busqueda == false) //y comenzamos la busqueda
{
if (borrar->cedula == ce)  //si la parte cedeula de lo que apunta borrar es igual a la cedula pedida
{
busqueda= true; //hace bandera = true para que al proximo intento se salga de la lista
borrar->cedula=0; //e inicializa todos los campos en 0
borrar->nombre[30]= NULL;
borrar->edad=0;
borrar->fecha[15]= NULL;
printf("Paciente Eliminado \n");
borrar=borrar->siguiente;  //y mueve el puntero al siguiente
}
else //si las cedulas no son iguales
{
borrar=borrar->siguiente; //mueve el puntero al siguiente y vuelve a comparar
}
}
if (borrar == 0) printf("\nNo Existen Datos"); //si la cedula no se consigue muestra esto
system("pause");
}

void menu()     //menu principal
{
int op;    //variable que determina la opcion sugerida por el usuario
system("cls");
printf(" \n\nControl De Citas.");
printf(" \n1.- Nueva Cita. ");
printf(" \n2.- Ver Citas Pendientes. ");
printf(" \n3.- Buscar Paciente.");
printf(" \n4.- Eliminar Citas.");
printf(" \n5.- Salir.");
printf(" \nseleccionar opcion: ");
scanf("%i",&op);  //obtenemos el valor de la opcion

switch (op) //hacemos el switch con las llamadas a las respectivas funciones segun sea el caso
{
case 1: system("cls");
leerdatos();
menu();
    break;
case 2: system("cls");
    imprimir();
menu();
break;
case 3: system("cls");
    buscar();
menu();
break;
case 4: system("cls");
eliminar();
menu();
break;
case 5: exit(0);
}
}

void main()  //void principal, que llama a las funciones basicas
{
crear_nodo();  //llamado a crear nodo
enlazar_nodos();  //lamado para enlazar los nodos creados
menu();  //y muestra el menu
} //fin


En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: [AYUDA] Punteros y Nodos!!!!
« Respuesta #1 en: 24 Enero 2011, 21:24 pm »

Ahora mismo no tengo mucho tiempo para leer el codigo, asique le heche un vistacillo por encima, los errores mas basicos que veo es declarar main() como void, el standart dice (no hay por que cumplirlo pero se recomienda) que este debe ser dclarado como int, y obviamente devolvr un valor, por lo general 0

Y luego, mezclas C con C++, usas librerias de C y funciones de C++ como new, cierto es que puede que resulte mas facil usar new que malloc(), pero es como mezclar ingles y español.... (por poner algun parecido  :xD )

Cuando tenga mas tiempo miro el codigo, ahora ando liado con examenes xD


En línea

dixson

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [AYUDA] Punteros y Nodos!!!!
« Respuesta #2 en: 24 Enero 2011, 21:59 pm »

perdon pero asi me enseñaron en la universidad...

y porfavor espero me ayuden lo mas pronto posible
En línea

negux

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: [AYUDA] Punteros y Nodos!!!!
« Respuesta #3 en: 24 Enero 2011, 22:54 pm »

por que no en tu funcion de imprimir haces el recorrido pero comprobando que no sea null
Código
  1. while(tempo!=NULL)
  2.       if(tempo->sig==NULL)
  3.  
  4.  
espero no equivocarme, no tengo con que compilarlo ahorita ;D
En línea

dixson

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [AYUDA] Punteros y Nodos!!!!
« Respuesta #4 en: 24 Enero 2011, 23:10 pm »

ya lo probe me sale este error y noc que hacer..

me salen todos los nodos ahora

http://img121.imageshack.us/i/dedas.jpg
« Última modificación: 24 Enero 2011, 23:11 pm por dixson » En línea

negux

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: [AYUDA] Punteros y Nodos!!!!
« Respuesta #5 en: 25 Enero 2011, 00:47 am »

no se porke usas 5 listas, creo que con una es suficiente  :P
a lo mejor cuando enlazas el primero con el segundo etc... pues a ellos no vi que les asignaras algo solo los inicializas, ademas de algunos errores que ya te mencionaron
Código
  1. void imprimir()
  2. {
  3. lista *tempo;
  4. tempo=primero;
  5. if(tempo!=NULL)
  6. {
  7. while(tempo->sig!=NULL)
  8. {
  9.  
  10. printf("El Nombre: %s \n",tempo->nombre);
  11. printf("La Edad: %i \n",tempo->edad);
  12. printf("Cedula: %i \n",tempo->cedula);
  13. printf("Fecha: %s \n",tempo->fecha);
  14. tempo=tempo->siguiente;
  15. }
  16. }else{
  17.        printf("Lista vacia\n");
  18.  
  19. system("pause");
  20. }
  21.  

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con ramas de jtree, alargar lineas de nodos
Java
EdD_ 1 3,354 Último mensaje 9 Febrero 2011, 19:05 pm
por wilfo
Nodos y punteros, ayuda C++
Programación C/C++
freakfreckles 2 1,876 Último mensaje 10 Diciembre 2014, 17:14 pm
por freakfreckles
Ayuda con nodos
Programación C/C++
robertoesimez 1 756 Último mensaje 6 Marzo 2017, 00:31 am
por integeroverflow
Nodos de una lista simple encadenada y dos punteros
Programación C/C++
MC.cover 4 1,472 Último mensaje 23 Abril 2018, 05:10 am
por MC.cover
Ayuda a encolar Nodos
Java
Ghio97 2 740 Último mensaje 20 Noviembre 2019, 02:43 am
por Ghio97
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines