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();
}