gracias por ahora llevo esto y toy atrancado.....voy bien??
que cambio??
with Ada.Text_Io, ada.Integer_Text_IO, ada.Sequential_IO;
use ada.Text_IO, ada.Integer_Text_IO,ada.sequential_io;
procedure practicas is
pract_mayor_numero_aprobados:integer;
max_numero_alumno:integer:=10;
maximo_practicas:integer;
numero_practicas:integer:=1;
subtype t_lista_alumno is array (1..max_numero_alumnos) of integer;
type t_practica is record
num_practica:integer;
objetivo:character;
puntuacion_maxima:integer;
borrado:boolean;
numero_alumnos:integer;
alumnos:t_lista_alumno;
end record;
practica:t_practica;
type t_array_practicas is array (1..numero_practicas) of integer;
array_practicas_aprobados:t_array_practicas;
array_practicas_supmedia:t_array_practicas;
package fich_practicas is new Ada.Sequential_Io (t_practica);
use fich_practicas;
type t_lista_practicas is array (1..maximo_practicas) of t_practica;
lista_practicas:t_lista_practicas;
cuantas_practicas:integer:=0;
----------procedimientos para rellenar y guardar las practicas
procedure rellenar_practica (practica:in out t_practica;max_numero_alumno:integer) is
contador_alumnos:integer;
continue:character:='n';
begin
put ("introduzca numero de practica");
get (practica.num_practica);
put ("introduzca el objetivo de la practica");
get (practica.objetivo);
put ("introduzca la máxima puntuacion que se pueda obtener");
get (practica.puntuacion_maxima);
put ("cuantos alumnos hay matriculados en esta asignatura");
get (practica.numero_alumnos);
loop
put ("introduzca nota del alumno:");
get (practica.alumnos);
contador_alumnos:=contador_alumnos+1;
put("desea continuar rellenando alumnos en esta practica s´´ or n)");
new_line;
get(continue);
exit when (continue='n')or (contador_alumno= practica.numero_alumnos);
end loop;
end rellenar_practica;
--guardar todas las practicas leidas al archivo
procedure guardar_practicas(practicas:in t_lista_practicas; cuantas:integer) is
file:File_Type;
i:integer;
begin
i:=1;
Open(file, out_File, "practicas.txt");
loop
if practica.borrado=false then
guardar_practica (practicas(i), file);
end if;
i:=i+1;
exit when (i=cuantas);
end loop;
close(file);
end guardar_practicas;
procedure guardar_practica (practica:in t_practica; file:File_Type) is
i:integer;
begin
put (file, practica.num_practica);
put (file, practica.objetivo);
put (file, practica.puntuacion_maxima);
put (file, practica.cuantos_alumnos);
put (file, practica.borrado);
put (file, practica.numero_alumnos);
i:=1;
loop
put (practica.lista_alumno(i));
exit when (i=practica.cuantos_alumnos);
i:=i+1;
end loop;
end guardar_practica;
procedure mostrar_practica (practica:in t_practica);
--el parametro File indica un archivo ya abierto para escritura
----------procedimientos para mostrar practicas por pantalla
--lee todas las practicas leidas al archivo y las muestra por pantalla,el parametro cuantas
--es para actualizar la variable global cuantas_practicas.
procedure listar_practicas (practicas:in t_lista_practicas; cuantas:out integer) is
file:File_Type;
i:integer;
begin
i:=1;
Open (file, in_File, "practicas.txt");
loop
cargar_practica (practica(i), file);
mostrar_practica (practica(i));
i:=i+1;
exit when (end_of_file(file));
end loop;
--actualizar cuantas practicas se leyeron del archivo
cuantas := i-1;
close (file);
end listar_practicas;
--lee del archivo file una practica
procedure cargar_practica (practica:out t_practica; file:File_Type) is
i:integer;
begin
get (file, practica.num_practica);
get (file, practica.objetivo);
get (file, practica.puntuacion_maxima);
get (file, practica.cuantos_alumnos);
get (file, practica.borrado);
get (file, practica.numero_alumnos);
i:=1;
loop
get(practica.lista_alumno(i));
exit when i=practica.numero_alumnos;
i:=i+1;
end loop;
end cargar_practica;
--muestra los datos por pantalla de un solo alumno
procedure mostrar_practica (practica:in t_practica) is
i:integer;
begin
if (practica.borrado=true)then
return;
end if;
put (practica.num_practica);
put (practica.objetivo);
put (practica.puntuacion_maxima);
put (practica.numero_alumnos);
i:=1;
loop
put(practica.lista_alumno(i));
exit when (i=practica.numero_alumnos);
i:=i+1;
end loop;
end mostrar_practica;
procedure mayor_num_aprobados (practica: in t_practica;pract_mayor_numero_aprobados:in out integer;array_practicas:in out t_array_practicas;numero_practicas:integer) is
contador_aprobados:integer;
contador_alumno:integer;
i,j:integer;
begin
put("cuantas practicas hay:");
get(numero_practicas);
put("el numero de aprobados de la practica");
put(practica.numero);
put("es: ");
loop
loop
if practica.alumno(i)>= 5 then
contador_aprobados:=contador_aprobados+1;
i:=i+1;
put("desea continuar rellenando alumnos en esta practica s or n)");
new_line;
get(continue);
end if;
exit when (continue='n')or (contador_alumno= max_numero_alumno);
contador_practicas:=contador_practicas+1;
array_practicas(i):=contador_aprobados;
exit when (contador_practicas=numero_practicas);
end loop;
end loop;
loop
practica_mayor_num_aprobados:=array_practicas(0);
j:=j+1;
if array_practicas(j) > practica_mayor_num_aprobados then
practica_mayor_num_aprobados:=array_practicas(j);
end if;
exit when j=numero_practicas;
end loop;
put(practica_mayor_num_aprobados);
end mayor_num_aprobados;
procedure superior_media (practica:in t_practica;array_practicas_aprobados:in t_array_practicas;numero_practicas:integer;array_practicas_supmedia:in out t_array_practicas) is
media_aprobados:integer;
sumador_aprobados:integer;
i:integer;
begin
loop
sumador_aprobados:=sumador_aprobados+array_practicas_aprobados(i);
exit when i=numero_practicas;
media_aprobados:=sumador_aprobados/numero_practicas;
if array_practicas_aprobados(i)>media_aprobados then
array_practicas_supmedia(i):=array_practicas_aprobados (i);
i:=i+1;
else
i:=i+1;
end if;
put(array_practicas_supmedia(i));
end loop;
end superior_media;
--------------------------------------------------------------------------
continue:character:='n';
--PROCEDIMIENTO PRINCIPAL
begin
loop
--rellenamos las practicas de una en una junto con sus alumnos
rellenar_practica (listar_practicas(cuantas_practicas+1),max_numero_alumno );
put ("desea continuar rellenando Practicas. s or n)");
new_line;
get (continue);
exit when (continue='n');
cuantas_practicas:=cuantas_practicas+1;
end loop;
--guardar todas las practicas leidas al archivo
guardar_practicas (lista_practicas, maximo_practicas);
mayor_num_aprobados (practica,pract_mayor_numero_aprobados);
end practicas;