miércoles, 14 de diciembre de 2011

Ejercicio 23(Arrays)

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.

1 comentario:

  1. Alumnos debería ser 20
    y 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

    ResponderEliminar

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | GreenGeeks Review