• Sábado 16 de Noviembre de 2024, 02:31

Autor Tema:  Programa De Ada  (Leído 3560 veces)

sem182

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Programa De Ada
« en: Domingo 6 de Abril de 2008, 18:16 »
0
Hola!
necesito hacer un progrma que haga esto:

Diseñar y desarrollar un programa que permita mantener actualizada la información de las prácticas realizadas en la asignatura y las calificaciones de los alumnos que cursan la asignatura.
Para ello se disponen de los siguientes datos:
•   Número de práctica
•   Descripción de objetivos de cada práctica
•   Puntuación de cada práctica
•   Puntuación obtenida por los alumnos

Consideraciones:
1.- La información de cada práctica debe estar almacenada en un archivo plano. El programa debe permitir:
a. leer los datos almacenados para consultar las prácticas ya actualizadas
b. borrar prácticas almacenadas
c. incluir nuevas prácticas al archivo
2.- Por cada práctica se deben almacenar las calificaciones de los alumnos, según la lista de alumnos matriculados.
3.- La interfaz debe permitir ingresar los datos de las prácticas y para cada práctica las calificaciones de los alumnos.
4.- Se podrán realizar las siguientes preguntas:
a. estadísticas por prácticas, donde se podrá solicitar (1) práctica con mayor número de aprobados, (2) práctica con número de aprobados superior a la media.
b. estadística por cada práctica, donde se podrá solicitar (1) máxima nota obtenida, (2) media de las calificaciones de los alumnos para esa práctica.


no tengo ni idea de por donde cogerlo...si alguien me pudiese hechar un cable estaria muy agradecido.

Gracias!

sem182

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Programa De Ada
« Respuesta #1 en: Lunes 7 de Abril de 2008, 09:37 »
0
No quiero que me hagan el programa si no que me ayuden a empezarlo diciendome como deberia empezar

Gracias

Itimag

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Programa De Ada
« Respuesta #2 en: Lunes 7 de Abril de 2008, 22:09 »
0
Siento no poder alargarme en la explicación (tengo cosas que hacer).

Se trata de introducir cada práctica en un fichero de texto. Para crear un fichero que va a contener texto se utiliza el package ada.text_io y ada.integer_text_io, el cual incluye las funcionalidades para tratar con estos.

Pues bien, lo que debes hacer es crear un fichero de texto que contenga por ejemplo practica1.txt dónde el numero debe cambiar para cada práctica. Esto se puede hacer mediante el uso de la concatenación.

Así se crearía:

create(f,out_file,"practica" & num_practica & ".txt");

Lo que hacemos es crear un fichero f (declarado como f: file_type;) que va a ser de escritura (modalidad out_file) y que va a tener como nombre "practica" seguido del numero de ésta (pedido al usuario por consola) seguido del string ".txt" que es la extensión del fichero.

Una vez creado el fichero debes pedirle al usuario que te introduzca datos en la consola y tu los introduces en el fichero de texto.

Para introducir datos se utiliza el put(f,car);. Al igual que antes de introducir los datos que va a introducir el usuario puedes añadir un Put(f,"Número de práctica:");

Así tu introduces esto último en el fichero, le pides al usuario el usuario y lo introduces en el fichero de texto.

Así para todos los datos que se piden.


Luego tendrás que hacer otras funcionalidades, ej: "práctica con mayor número de aprobados" en la que tendrás que abrir el fichero en modalidad de lectura (in_file); y buscar la posición donde hayas introducido "Puntuación obtenida por los alumnos:" . A partir de ahí, vas recorriendo el fichero buscando las puntuaciones y las aprovadas las vas metiendo en un contador.

Piensa que tendrás que comparar todos los ficheros que se han creado y por lo tanto, hacer un bucle e ir guardando todos los resultados para cada fichero (en un array por ejemplo) para luego poder comparar los datos obtenidos y saber que resultado tienes que dar.


Esto es todo lo que te voy a decir por hoy. Suerte y un saludo.

sem182

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Programa De Ada
« Respuesta #3 en: Miércoles 7 de Mayo de 2008, 00:36 »
0
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;