muchísimas gracias a los 2 lo he solucionado..!
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: Ferno en 24 Mayo 2012, 14:04 PM
Con el primero no funciona ya que, el puntero que debes cambiar es pIni en tu code. Lo que tu haces es cambiar un puntero que apunta a cada nodo de la lista, y en teoría está bien! Pero recordá que hay un puntero especial "pIni" que apunta al primer nodo de tu lista, y esa referencia no la estás cambiando cuando debes eliminar el primer nodo. Supongo que por eso no funciona.
La solución más rápida es agregar un if en la parte de eliminado, que pregunte si el nodo a cambiar es igual a pIni. Si eso es cierto, cambias pIni además de p.
Saludos
void borrarNodo()
{
system("cls");
p = pIni;
if(p != NULL)
{
nodo *aux = NULL, *ant = NULL;
ant = new nodo;
aux = new nodo;
cout<<"INTRODUZCA EL ID A ELIMINAR\n";
cin>>aux->id;
while(aux->id != p->id)
{
ant = p;
p = p->siguiente;
}
if(ant == pIni)
{
pIni = pIni->siguiente;
free(ant);
free(aux);
cout<<"ELEMENTO 1 ELIMINADO";
cont--;
}else if(aux->id == p->id)
{
ant = p;
p = p->siguiente;
free(ant);
free(aux);
cout<<"ELEMENTO x ELIMINADO";
cont--;
}
}else
cout<<"ELEMENTO NO ENCONTRADO";
VOLVER_MENU
}
#include <iostream>
using namespace std;
#define VOLVER_MENU cout<<"\n\nPRESIONE ENTER PARA VOLVER AL MENU"; setbuf(stdin, NULL); cin.get();
struct nodo
{
string nombre;
int id;
int edad;
nodo *siguiente;
};
nodo *pIni = NULL;
nodo *pFin;
nodo *p;
char op = 'n';
int cont = 0;
int i = 0;
int enc =0;
void cargar();
void mostrarlista();
void cargarnodo(nodo *x);
void consultar();
void eliminar();
void borrarNodo();
int main()
{
do{
system("cls");
cout<<"Insertar elemento --- (I) (Personas ingresadas) "<<cont<<endl;
cout<<"Mostrar elementos --- (M)\n";
cout<<"Consultar elemento -- (C)\n";
cout<<"Eliminar elementos ---(E)\n";
cout<<"Eliminar por id ------(N)\n";
cout<<"Salir --- (S)\n";
cin.get(op);
if(toupper(op) == 'I')
{
cargar();
}
else if(toupper(op) == 'M')
mostrarlista();
else if(toupper(op) == 'C')
consultar();
else if(toupper(op) == 'E')
eliminar();
else if(toupper(op) == 'N')
borrarNodo();
}while(toupper(op) != 'S');
p = pIni;
if(p != NULL)
{
nodo *aux;
while(p!=NULL)
{
aux = new nodo;
aux = pIni;
pIni = pIni->siguiente;
free(aux);
p = p->siguiente;
}
}
return 0;
}
void mostrarlista()
{
system("cls");
if(pIni != NULL)
{
p = pIni;
i = 0;
while (p->siguiente != NULL)
{
i++;
cout<<i<<"Direccion : "<<int(p)<<endl;
cout<<i<<".1) Nombre: "<<p->nombre<<endl;
cout<<i<<".2) Id: "<<p->id<<endl;
cout<<i<<".3) Edad: "<<p->edad<<endl<<endl;
p = p->siguiente;
}
}else
cout<<"NO HAY ELEMENTOS PARA MOSTAR";
VOLVER_MENU
}
void cargar()
{
if(pIni == NULL)
{
pIni = new nodo;
pFin = new nodo;
pIni->siguiente = pFin;
pFin->siguiente = NULL;
cargarnodo(pIni);
}
else
{
cargarnodo(pFin);
pFin->siguiente = new nodo;
pFin = pFin->siguiente;
pFin->siguiente = NULL;
}
cont++;
p = pIni;
}
void cargarnodo(nodo *x)
{
system("cls");
cout<<"introduzca el nombre: ";
cin>>x->nombre;
cout<<"introduzca el id: ";
cin>>x->id;
cout<<"introduzca la edad: ";
cin>>x->edad;
}
void consultar()
{
system("cls");
p = pIni;
if(p != NULL)
{
nodo *c = NULL;
c = new nodo;
cout<<"INGRESE ID A CONSULTAR\n";
cin>>c->id;
enc = 0;
while(p != NULL)
{
if(c->id == p->id)
{
enc = 1;
cout<<"\n\nNombre: "<<p->nombre<<endl;
cout<<"id: "<<p->id<<endl;
cout<<"Edad: "<<p->edad<<endl;
}
p = p->siguiente;
}
if(enc == 0)
{
cout<<"\n\nELEMENTO NO ENCONTRADO";
}
free(c);
}else
cout<<"NO HAY ELEMENTOS PARA CONSULTAR";
VOLVER_MENU
}
void eliminar()
{
system("cls");
p = pIni;
if(p!=NULL)
{
nodo *aux;
aux = new nodo;
while(p->siguiente != NULL)
{
aux = pIni;
pIni = pIni->siguiente;
free(aux);
p = p->siguiente;
}
cout<<"ELEMENTOS ELIMINADOS";
cont = 0;
}else
cout<<"NO HAY ELEMENTOS PARA ELIMINAR";
VOLVER_MENU
}
void borrarNodo()
{
system("cls");
p = pIni;
if(p)
{
nodo *aux = NULL, *ant = NULL;
ant = new nodo;
aux = new nodo;
cout<<"INTRODUZCA EL ID A ELIMINAR\n";
cin>>aux->id;
while(aux->id != p->id)
{
ant = p;
p = p->siguiente;
}
if(aux->id == p->id)
{
ant = p;
p = p->siguiente;
free(ant);
free(aux);
cout<<"ELEMENTO ELIMINADO";
cont--;
}
}else
cout<<"ELEMENTO NO ENCONTRADO";
VOLVER_MENU
}
Cita de: Aberroncho en 20 Mayo 2012, 18:45 PMsi de verdad muchísimas gracias lo he entendido perfectamente, lo de los enlaces y la explicación excelente como dije!! cualquier duda estaré molestando nuevamente por aca jaja
Espero que además de dejarlo así hayas entendido porqué es así. Ese era el objetivo
En cuanto a los formatos para la entrada de datos:
#include <iostream>
using namespace std;
struct nodo
{
string nombre;
int edad;
nodo *siguiente;
};
int main(void)
{
nodo *persona;
char resp;
do
{
persona = new nodo;
cout<<"introduzca el nombre: ";
cin>>persona->nombre;
cout<<"introduzca la edad: ";
cin>>persona->edad;
cout<<"Salir? S/N ";
cin>>resp;
}while(resp!='s');
p = persona;
while (p->siguiente != NULL)
{
cout<<p->nombre<<endl;
cout<<p->edad<<endl;
p=p->siguiente;
}
system("pause");
}
Cita de: FrankBlack en 23 Marzo 2012, 00:49 AM
Hola,
Yo tenia ese problema al instalar Windows 7 a una HP Evo 530, reemplaze el disco duro cables, memoria, lectoras, discos de instalacion y nada, lo que realizamos fue instalar Windows XP y actualizarlo a Win 7, se que suena absurdo pero solo asi nos quedo .
Saludos y suerte
Cita de: Songoku en 22 Marzo 2012, 13:22 PM
Casi seguro que el disco que usas para la instalacion esta mal. O eso o el lector de dvd tampoco esta bien del todo. Tambien suele pasar eso cuando la memoria ram del equipo no anda bien.
Saludos...
Songoku