Matricula

Hola yo tengo que realizar este ejercicio pero tengo problemas con algo:
Realizar un programa que capture por teclado N asignaturas de un estudiante. Los datos a capturar son: la clave de la asignatura, los créditos, el cuatrimestre y la nota alfanumérica. El programa debe desplegar todas las asignaturas previamente digitadas, acompañadas del valor correspondiente a los puntos de la misma (los puntos se obtienen de multiplicar los créditos y el equivalente numérico de la nota alfanumérica. Asimismo, el programa debe presentar los totales de créditos, puntos y el índice académico de cada cuatrimestre. Finalmente, el programa debe desplegar el total general de créditos, puntos y el índice académico general.
Mi problema es con el despliegue de las matriculas que no se como ponerlas a que el programa las valla guardando para luego desplegarlas y cuando l o intento hacer cuando no es un error que se cierra es que me despligua tantas matriculas como quería pero la ultima que digite odas esas veces.

1 Respuesta

Respuesta
1
Eso te pasa porque estás usando 1 sola variable de tipo registro para todas las veces que insertas 1 asignatura; es por ello que necesitas usar memoria dinámica para insertar un nuevo registro cada vez. La estructura que debes de usar es algo así:
TYPE
pNodo=^tNodo;
RECORD tNodo
ClaveAsig:integer;
Creditos:integer;
Cuatrimestre:integer;
Nota:integer;
Siguiente:pNodo;
END;
Una vez declarada esta estructura de datos (que va a ser 1 lista de elementos), tienes que tener en cuenta que la vas a utilizar para introducir los nuevos datos que recojas por pantalla en ella, es decir, deberás hacer 1 bucle de duración las N asignaturas que vas a recibir por pantalla de la siguiente forma:
VAR
ListaDatos,Aux,Ultimo:pNodo;
i:integer;
BEGIN (*programa principal*)
ListaDatos=NIL;
Ultimo:=ListaDatos;
for i:=1 to N do
begin (*N=numero asignat*)
Aux:=new(pNodo);
Aux^.siguiente:=NIL;
Write("Escribe el Codigo de asignatura: ");
Readln(Aux^.ClaveAsig);
Write("Escribe el Numero de Creditos: ");
Readln(Aux^.Creditos);
Write("Escribe el Cuatrimestre: ");
Readln(Aux^.Cuatrimestre);
Write("Escribe la Nota: ");
Readln(Aux^.Nota);
Ultimo:=Aux;
Ultimo:=Ultimo^.siguiente;
END;(*bucle for*)
END;(*programa principal*)
Al final del bucle for tendrás una lista que empezará en el puntero ListaDatos que contendrá todas las asignaturas que metiste por pantalla. Para recuperar esas asignaturas no deberás más que recorrer toda la lista enlazada de datos para ir recuperando lo que quieras sacar por pantalla. Eso te lo dejo a ti, porque no es cuestión de que te haga toda la práctica, ¿no? Je je. Si te diré que lo tienes que hacer poniendo otro bucle for a continuación del bucle que te he puesto en el programa anterior. Saludos y suerte. Espero haber sido de ayuda. Si tienes más dudas, dame otro toque que pa eso estamos!
-Villalvilla-

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas