Plantee e implemente un programa en PASCAL, a base de procedimientos y funciones y gestionado por menú, para insertar las notas de prácticas, seminarios y teoría de los alumnos de un grupo (como máximo 20 alumnos), modificarlas si es necesario, mostrarlas por pantalla y mostrar una estadística de las notas.
PROGRAM tar(input,output);
CONST
alumnos = 3;
TYPE
TaPracticas = ARRAY[1..alumnos] OF real;
TASeminario = ARRAY[1..alumnos] OF real;
TATeoria = ARRAY[1..alumnos] OF real;
TANotaGlobal = ARRAY[1..alumnos] OF real;
Tficha = RECORD
nombre:string(15);
notapracticas:TaPracticas;
notaseminario:TASeminario;
notateoria:TATeoria;
notaglobal:TANotaGlobal;
end;
TAFicha = ARRAY[1..alumnos] OF Tficha;
VAR
ficha:TAFicha;
(*******************************************************************************)
PROCEDURE prac;
VAR
I:integer;
BEGIN
writeln('Introduzca las notas de practicas');
FOR I:=1 TO alumnos DO
BEGIN
write('Introduzca la nota de ',ficha[I].nombre,' :');
read(ficha[I].notapracticas[1]);
END;
END;
(*******************************************************************************)
PROCEDURE sem;
VAR
I:integer;
BEGIN
writeln('Introduzca las notas de seminarios');
FOR I:=1 TO alumnos DO
BEGIN
write('Introduzca la nota de ',ficha[I].nombre,' :');
read(ficha[I].notaseminario[1]);
END;
END;
(*******************************************************************************)
PROCEDURE teo;
VAR
I:integer;
BEGIN
writeln('Introduzca las notas de seminarios');
FOR I:=1 TO alumnos DO
BEGIN
write('Introduzca la nota de ',ficha[I].nombre,' :');
read(ficha[I].notateoria[1]);
END;
END;
(*******************************************************************************)
PROCEDURE maximo;
VAR
I:integer;
maxima,maxima2,maxima3,maxima4:integer;
maximaglobal:real;
BEGIN
maxima:=1;
FOR I:=1 TO alumnos DO
BEGIN
IF (ficha[I].notapracticas[1] > ficha[maxima].notapracticas[1]) THEN maxima:=I;
IF (ficha[I].notateoria[1] > ficha[maxima2].notateoria[1]) THEN maxima2:=I;
IF (ficha[I].notapracticas[1] > ficha[maxima3].notapracticas[1]) THEN maxima3:=I;
END;
maximaglobal:= (ficha[maxima].notapracticas[1]+ficha[maxima2].notateoria[1]+ficha[maxima3].notapracticas[1])/3;
writeln('La mejor nota de todos los alumnos de practicas es: ',ficha[maxima].notapracticas[1]:2:2);
writeln('La mejor nota de todos los alumnos de teoria es: ',ficha[maxima2].notateoria[1]:2:2);
writeln('La mejor nota de todos los alumnos de teoria es: ',ficha[maxima3].notapracticas[1]:2:2);
writeln('La media de las mejores notas es: ',maximaglobal:2:2);
END;
(*******************************************************************************)
PROCEDURE minimo;
VAR
I:integer;
maxima,maxima2,maxima3,maxima4:integer;
maximaglobal:real;
BEGIN
maxima:=1;
FOR I:=1 TO alumnos DO
BEGIN
IF (ficha[I].notapracticas[1] < ficha[maxima].notapracticas[1]) THEN maxima:=I;
IF (ficha[I].notateoria[1] < ficha[maxima2].notateoria[1]) THEN maxima2:=I;
IF (ficha[I].notaseminario[1] < ficha[maxima3].notaseminario[1]) THEN maxima3:=I;
END;
maximaglobal:= (ficha[maxima].notapracticas[1]+ficha[maxima2].notateoria[1]+ficha[maxima3].notaseminario[1])/3;
writeln('La peor nota de todos los alumnos de practicas es: ',ficha[maxima].notapracticas[1]:2:2);
writeln('La peor nota de todos los alumnos de teoria es: ',ficha[maxima2].notateoria[1]:2:2);
writeln('La peor nota de todos los alumnos de seminario es: ',ficha[maxima3].notaseminario[1]:2:2);
writeln('La media de las peores notas es: ',maximaglobal:2:2);
END;
(*******************************************************************************)
PROCEDURE media;
VAR
I:integer;
acumuladorpracticas,mediapracticas,acumuladorteoria,mediateoria,acumuladorseminario,mediaseminario,mediaglobal:real;
BEGIN
FOR I:=1 TO alumnos DO
BEGIN
acumuladorpracticas:=ficha[I].notapracticas[1]+acumuladorpracticas;
acumuladorteoria:=ficha[I].notateoria[1]+acumuladorteoria;
acumuladorseminario:=ficha[I].notaseminario[1]+acumuladorseminario;
END;
mediapracticas:=acumuladorpracticas/alumnos;
mediateoria:=acumuladorteoria/alumnos;
mediaseminario:=acumuladorseminario/alumnos;
mediaglobal:=(mediapracticas+mediateoria+mediaseminario)/3;
writeln('La media de las notas de practicas es: ',mediapracticas:2:2);
writeln('La media de las notas de teoria es: ',mediateoria:2:2);
writeln('La media de las notas de seminario es: ',mediaseminario:2:2);
writeln('La media global de las notas es: ',mediaglobal:2:2);
END;
(*******************************************************************************)
PROCEDURE leer;
VAR
I,a:integer;
b:char;
BEGIN
FOR I:=1 TO alumnos DO
BEGIN
write('Introduzca el nombre del alumno:');
readln(ficha[I].nombre);
END;
writeln('Desea introducir las notas de los alumnos? SI[1] NO[0]');
readln(a);
IF a = 0 THEN writeln('Volviendo al menu principal...')
ELSE
BEGIN
REPEAT
BEGIN
writeln('Seleccione la operacion a realizar');
writeln('----------------------------------');
writeln('[A] Introducir notas de Practicas');
writeln('[B] Introducir notas de Seminario');
writeln('[C] Introducir notas de Teoria');
writeln('[s] Salir al menu principal');
readln(b);
CASE b OF
'A','a' : prac;
'B','b' : sem;
'C','c' : teo;
OTHERWISE writeln('Operacion no valida');
END;
END;
UNTIL b = 's';
END;
END;
(*******************************************************************************)
PROCEDURE modificar;
VAR
b:char;
BEGIN
REPEAT
BEGIN
writeln('Seleccione la operacion a realizar');
writeln('----------------------------------');
writeln('[A] Modificar notas de Practicas');
writeln('[B] Modificar notas de Seminario');
writeln('[C] Modificar notas de Teoria');
writeln('[s] Salir al menu principal');
readln(b);
CASE b OF
'A','a' : prac;
'B','b' : sem;
'C','c' : teo;
OTHERWISE writeln('Operacion no valida');
END;
END;
UNTIL b = 's';
END;
(*******************************************************************************)
PROCEDURE estadistica;
VAR
b:char;
BEGIN
REPEAT
BEGIN
writeln('Seleccione la operacion a realizar');
writeln('----------------------------------');
writeln('[A] Mostrar notas mas altas');
writeln('[B] Mostrar notas mas bajas');
writeln('[C] Mostrar media de las notas');
writeln('[S] Volver al menu principal');
readln(b);
CASE b OF
'A','a' : maximo;
'B','b' : minimo;
'C','c' : media;
OTHERWISE writeln('Operacion no valida');
END;
END;
UNTIL b = 's';
END;
(*******************************************************************************)
PROCEDURE menu;
VAR
a:char;
BEGIN
REPEAT
BEGIN
writeln('[A] Introducir nombres y notas de los alumnos');
writeln('[B] Modificar notas de los alumnos');
writeln('[C] Mostrar menu de estadistica');
writeln('[s] Abandonar el programa');
readln(a);
CASE a OF
'A','a' : leer;
'B','b' : modificar;
'C','c' : estadistica;
OTHERWISE writeln('Error');
END;
END;
UNTIL a = 's'
END;
(*******************************************************************************)
BEGIN
menu;
END.
Suscribirse a:
Enviar comentarios (Atom)
Alumnos debería ser 20
ResponderEliminary hacer un primer procedimiento que fuese preguntar cuantos alumnos hay en la clase
y después hacer todas las i de i=0 hasta número de alumnos, para que sea máximo de alumnos 20 pero puede haber menos y el usuario es el que dice cuantos alumnos hay.
el programa es para el usuario, no para ti! jaja