C/Visual C - Ayuuudaaa!! (C++) Multilistas

 
Vista:

Ayuuudaaa!! (C++) Multilistas

Publicado por Cecilia (3 intervenciones) el 27/02/2011 23:51:18
Hola!!
Estoy tratando de realizar un programa simple de multilistas...
Es una lista principal con nodos que incluyen datos de un alumno, donde uno de los datos es otra lista con las materias aprobadas por ese alumno.

El tema es que cuando lo ejecuto con BorlandC++, me salen errores similares donde me dice que no puede convertir de nodoAlumno a nodoAlumno, no reconoce cada vez que hago new nodoAlumno y tampoco me reconoce los campos del nodoAlumno.
Supongo que hay algo mal definido en los struct, pero no se...

Si me podrían orientar un poco....estaría muy agradecida...

Adjunto el codigo:

------------------------------------
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>

typedef struct materia
{
int codigo;
char nombre[20];
}materia;

typedef struct nodoMaterias*puntMaterias;

typedef struct nodoMaterias
{
materia mat;
int nota;
puntMaterias sig;
}nodoMaterias;

typedef struct alumno
{
char nombre[20];
int matricula;
int anio;
puntMaterias entMat;
}alumno;

typedef struct nodoAlummo*puntAlumno;

typedef struct nodoAlumno
{
alumno alu;
puntAlumno sigNombre;
puntAlumno sigMatricula;
puntAlumno sigAnio;
}nodoAlumno;


void agregaAlumno(puntAlumno&,puntAlumno&,puntAlumno&,alumno);
void sacarAlumno(puntAlumno&,puntAlumno&,puntAlumno&,int);
void listar(puntAlumno,char); //en char va a ir la inicial de como se lo quiere listar: n=nombre,m=matricula,a=año
void buscar(puntAlumno&,puntAlumno&,int); //va a recibir lista de ordenamiento por matricula,puntero que
//señala a eliminar y int de la matricula.

//subfunciones(agregar por cada metodo de ordenamiento)

void agregaAluNom(puntAlumno&,alumno);
void agregaAluMatri(puntAlumno&,alumno);
void agregaAluAnio(puntAlumno&,alumno);

//subfunciones (sacar por cada metodo de ordenamiento)
void sacarAluNom(puntAlumno&,puntAlumno&); //recibe lista de ordenamiento de nombre, mas nodo a eliminar previamente
//encontrado el nodo con la funcion buscar
void sacarAluMatri(puntAlumno&,puntAlumno&); //Idem
void sacarAluAnio(puntAlumno&,puntAlumno&);//Idem

//sacar la sublista
void sacarMaterias(puntMaterias&);//solo se pasa la entrada a la lista de materias del nodo que se elimina con las funciones
//de sacar previamente.
void listarMateApro(puntMaterias); //solo se pasa la entrada da la lista de materias del nodo previamente seleccionado

void main()
{
puntAlumno nombre,matricula,anio;
nombre=NULL;
matricula=NULL;
anio=NULL;

}

void agregaAlumno(puntAlumno&n,puntAlumno&m,puntAlumno&a,alumno dato)
{
puntAlumno nuevo= new nodoAlumno;
nuevo->alu=dato;
nuevo->sigNombre=NULL;
nuevo->sigMatricula=NULL;
nuevo->sigAnio=NULL;

if((n!=NULL)&&(m!=NULL)&&(a!=NULL))
{
agregaAluNom(n,dato);
agregaAluMatri(m,dato);
agregaAluAnio(a,dato);
}
else
{
n=nuevo;
m=nuevo;
a=nuevo;
}
}

void sacarAlumno(puntAlumno&n,puntAlumno&m,puntAlumno&a,int matri)
{
puntAlumno q;

buscar(m,q,matri);

if(q!=NULL)
{
sacarAluNom(n,q);
sacarAluMatri(m,q);
sacarAluAnio(a,q);

sacarMaterias(q->alu.aprobadas);

delete q;
}
else
cout<<"No se encontro la matricula"<<endl;
}

void listar(puntAlumno&lisGral,char orden)
{
puntAlumno r=lisGral;

while(r!=NULL)
{
cout<<"Nombre: "<<r->alu.nombre<<" matricula: "<<r->alu.matricula<<" año que cursa: "<<r->alu.anio<<endl;
cout<<"Materias aprobadas del alumno: "<<endl;
listarMateApro(r->alu.aprobadas);

switch(orden)
{
case 'n':
{
r=r->sigNombre;
break;
}
case 'm':
{
r=r->sigMatricula;
break;
}
case 'a':
{
r=r->sigAnio;
break;
}
}
}
}

void buscar(puntAlumno&m,puntAlumno&q,int matri)
{
puntAlumno r=m;

while((r!=NULL)&&(r->alu.matricula!=matri))
r=r->sigMatricula;

if(r->alu.matricula==matri)
q=r;
}

void agregarAluNom(puntAlumno&n,alumno dato)
{
puntAlumno r,ant,nuevo;
ant=NULL;
r=n;

if(n==NULL)
{
nuevo=new nodoAlumno;
nuevo->alu=dato;
nuevo->sigNombre=NULL;
n=nuevo;
}
else
{
int compara=strcmp(r->alu.nombre,dato.nombre); //menor a 0,en el dicc 1ero esta r->.... y mayor a 0, aparece 1ero
//dato.nombre

while((r!=NULL)&&(compara<0))
{
ant=r;
r=r->sigNombre;
compara=strcmp(r->alu.nombre,dato.nombre);
}

nuevo=new nodoAlumno;
nuevo->alu=dato;

if(r==n)
{
nuevo->sigNombre=n;
n=nuevo;
}
else
{
ant->sigNombre=nuevo;
nuevo->sigNombre=r;
}
}
}

void agregarAluMatri(puntAlumno&m,alumno dato)
{
puntAlumno r,ant,nuevo;
ant=NULL;
r=m;

if(m==NULL)
{
nuevo=new nodoAlumno;
nuevo->alu=dato;
nuevo->sigNombre=NULL;
m=nuevo;
}
else
{
while((r!=NULL)&&(r->alu.matricula<dato.matricula))
{
ant=r;
r=r->sigMatricula;
}

nuevo=new nodoAlumno;
nuevo->alu=dato;

if(r==n)
{
nuevo->sigNombre=m;
m=nuevo;
}
else
{
ant->sigMatricula=nuevo;
nuevo->sigMatricula=r;
}
}
}

void agregarAluAnio(puntAlumno&a,alumno dato)
{
puntAlumno r,ant,nuevo;
ant=NULL;
r=a;

if(a==NULL)
{
nuevo=new nodoAlumno;
nuevo->alu=dato;
nuevo->sigNombre=NULL;
a=nuevo;
}
else
{
while((r!=NULL)&&(r->alu.anio<dato.anio))
{
ant=r;
r=r->sigAnio;
}

nuevo=new nodoAlumno;
nuevo->alu=dato;

if(r==n)
{
nuevo->sigNombre=a;
a=nuevo;
}
else
{
ant->sigAnio=nuevo;
nuevo->sigAnio=r;
}
}
}

void sacarAluNom(puntAlumno&n,puntAlumno&q)
{
puntAlumno r,ant;
r=n;
ant=NULL;

while((r!=NULL)&&(r!=q))
{
ant=r;
r=r->sigNombre;
}
if(r!=NULL)
{
if(r==n)
n=r->sigNombre;
else
ant->sigNombre=r->sigNombre;
}
}

void sacarAluMatri(puntAlumno&m,puntAlumno&q)
{
puntAlumno r,ant;
r=m;
ant=NULL;

while((r!=NULL)&&(r!=q))
{
ant=r;
r=r->sigMatricula;
}
if(r!=NULL)
{
if(r==m)
n=r->sigMatricula;
else
ant->sigMatricula=r->sigMatricula;
}
}

void sacarAluAnio(puntAlumno&a,puntAlumno&q)
{
puntAlumno r,ant;
r=a;
ant=NULL;

while((r!=NULL)&&(r!=q))
{
ant=r;
r=r->sigAnio;
}
if(r!=NULL)
{
if(r==a)
n=r->sigAnio;
else
ant->sigAnio=r->sigAnio;
}
}

void sacarMaterias(puntMaterias&entMat)
{
puntMaterias p;

while(entMat!=NULL)
{
p=entMat;
entMat=entMat->sig;
delete p;
}
}

void listarMateApro(puntMaterias&entMat)
{
puntMaterias r;
r=entMat;

while(r!=NULL)
{
cout<<"Codigo de materia"<<r->mat.codigo<<" nombre: "<<r->mat.nombre<<" Nota: "<<r->nota<<endl;
r=r->sig;
}
}

-------------------------------------------------------------------

Muchisimas gracias!!!

Cecilia
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuuudaaa!! (C ) Multilistas

Publicado por caleb (2 intervenciones) el 15/03/2011 21:18:55
bueno,

puntAlumno nuevo= new nodoAlumno;
son dos tipos de datos diferentes.

para que funcione correctamente deberia ser.

nodoAlumno *nuevo= new nodoAlumno;
pero esto ya ocacionaria, cambiar algunas lineas de codigo...

para que tengas un buen concepto de Estructura De Datos(EDD)...
te recomiendo.. bajarte un buen curso de...

te descargas "Curso EDD" está en pdf.
http://c.conclase.net/?id=descargas

o bien EDD online.
http://c.conclase.net/edd/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar