Título: Ordenar una lista alfabeticamente Publicado por: maferavagar en 17 Mayo 2015, 13:10 pm Buenas Noches, alguien que me pudiera ayudar en mi código. Lo estoy haciendo en Dev, y al momento de compilar me manda Done, me aparece la ventana negra y despues me sale otra ventana diciendome , que mi proyecto.exe dejo de funcionar.
// LISTA SIMPLEMENTE ENLAZADA CON MEMORIA DINAMICA // QUE INSERTA ORDENADO LOS DATOS // CON FUNCION QUE DESPLIEGA LOS DATOS Y RETORNA UN PUNTERO // CON FUNCION QUE INVIERTE EL ORDEN DE LA LISTA SIMPLE #include <stdio.h> #include <conio.h> #include <ctype.h> #include <iostream> #include <string.h> #include <stdlib.h> #define n 3 using namespace std; struct nodo_lista { public: char nom[31]; char bol[10]; float cal[n]; float prom; struct nodo_lista *sig; // puntero a estructura nodo_lista(nodo_lista *S=NULL) { prom=0.0; strcpy(bol,S->bol); strcpy(nom,S->nom); for(int i=0;i<n;i++) { cal=S->cal; prom=prom+cal; } prom=prom/n; sig=NULL; } //constructor que inicializa las variables del nodo }; class lista1{ private: class nodo_lista *primero, * final, *nvo, *recorre; public : lista1(){primero=final=recorre=nvo=NULL; } void inserta_nodo_ord(nodo_lista *D); nodo_lista *ver_nodos(); void invertir(nodo_lista *lista); void eliminar_dato(char boleta[10]); }; //funcion que inserta ordenado en la lista void lista1::inserta_nodo_ord(nodo_lista *D) { nvo= new nodo_lista(D); if(nvo==NULL){cout<<"error en asignacion de memoria\n";getch();exit(1);} if(primero == NULL) primero=final=nvo ; // INICIALIZA LA PRIMERA DIRECCION Y LA FINAL else { if(strcmpi(nvo->bol,primero->bol)<=0) { //el dato a insertar es menor al primero nvo->sig=primero; // enlaza el nuevo nodo al inicio primero = nvo; // inicio apunta al nodo nuevo } else { // de otra forma se busca su lugar recorre= primero; // condicion de ubicacion while( (recorre->sig != NULL) && (strcmpi(nvo->bol,recorre->sig->bol)>0) ) { recorre = recorre->sig; } nvo->sig = recorre->sig; //inserta y/o enlaza el nuevo nodo al nodo siguiente recorre->sig= nvo; // inserta y/o enlaza al nuevo nodo al nodo anterior } } } void lista1::invertir(nodo_lista *lista) { recorre=lista; nodo_lista *nva_lista=NULL; while(lista!=NULL) { recorre=lista->sig; lista->sig=nva_lista; nva_lista=lista; lista=recorre; } primero=nva_lista; } // Elimina un numero de la lista void lista1::eliminar_dato(char boleta[10]) { nvo=recorre=primero; if(strcmpi(nvo->bol,boleta) == 0){ primero=nvo->sig; delete(nvo); } while((nvo->sig != NULL) && (primero!=NULL)){ nvo=recorre; recorre=recorre->sig; if(strcmpi(recorre->bol,boleta) == 0){ nvo->sig = recorre->sig; delete(recorre); } } } // MUESTRA EL CONTENIDO DE LA LISTA Y RETORNA UN PUNTERO DE LA LISTA SIMPLE nodo_lista *lista1::ver_nodos() { recorre=primero; cout<<"entra a ver"<<endl; while((recorre != NULL) && (primero != NULL)) { cout<<"\nBOLETA : "<< recorre->bol<<endl; cout<<"NOMBRE : "<< recorre->nom<<endl; for(int i=0;i<n;i++) cout<<"CALIFICACION["<<i<<"] = "<< recorre->cal<<endl; cout<<"PROMEDIO = "<< recorre->prom<<endl; recorre=recorre->sig; } return(primero); } int main() { int i=0;char m,borra[10]; int opc; lista1 Obj1C; // objeto de la clase nodo_lista *Obj2E,*Obj3E; // objeto de la estructura Obj2E=new nodo_lista; if(Obj2E==NULL)exit(1); clrscr(); do { cout<<"\n\nBOLETA : "; cin>>Obj2E->bol; cout<<"\nNOMBRE : "; gets(Obj2E->nom); for(i=0;i<n;i++) { cout<<"\nCALIFICACION["<<i<<"] = "; cin>>Obj2E->cal; } Obj1C.inserta_nodo_ord(Obj2E); // inserta dato cout<<" Salir de Insertar s/n ? "; m=getch();i++; } while(toupper(m) != 'S'); clrscr(); //visualiza la lista y entrega la direccion inicial de la lista simple Obj3E=Obj1C.ver_nodos(); cout<<"\n\nDesea ver invertida la lista? s(1),n(0) ";cin>>opc; if(opc) { //invierte la lista simple Obj1C.invertir(Obj3E); //visualiza la lista y pierde la direccion inicial de la lista simple Obj1C.ver_nodos(); } cout<<"\n\nDesea borrar un registro de la lista? s(1),n(0) ";cin>>opc; if(opc) { cout<<"\nBoleta a borrar? : ";cin>>borra; Obj1C.eliminar_dato(borra); Obj1C.ver_nodos(); } getch(); } Título: Re: Ordenar una lista alfabeticamente Publicado por: ivancea96 en 17 Mayo 2015, 14:56 pm La ventana negra es la consola.
Si hubo un error, y viendo que usas memoria dinámica, intuyo que es por un acceso a memoria mal practicado. Como dato, estás usando librerias de C y de C++ a la vez. Si les quitas el .h y le pones una 'c' al comienzo, la mayoria serán de C++. ("stdio.h" -> "cstdio") Mete el código en etiquetas GeSHi. |