jueves, 12 de enero de 2012

Ejercicio 24 Estructuras Simples de Datos

24. Plantee e implemente un programa en PASCAL que permita calcular la superficie de un cuadrado, de un círculo y de un triángulo, según seleccione el usuario, almacenando los datos sobre las figuras en un registro variante.


PROGRAM ejercicio_24 (input,output);
(*Ejercicio número 24 dl boletín de Estructuras simples de Datos*)
CONST
     pi = 3.1415;
TYPE
     TCadena = string (20);
     TRAreas = RECORD
                     Figura:TCadena;
                     Lado:real;
                     Altura:real;
                     Radio:real;
                     Area:real;
               END;
     TAAreas = ARRAY [1..3] OF TRAreas;
(************************************************************************)    
PROCEDURE menu;
          VAR
             Opcion:char;
             Areas:TAAreas;
          (**************************************************************)
          PROCEDURE cuadrado;
                    BEGIN
                         WITH Areas[1] DO
                              BEGIN
                              Write('Escribe el lado: ');
                              Readln(Lado);
                              Figura:='CUADRADO';
                              Area:=Lado*Lado;
                              END;
                    END;
          (**************************************************************)
          PROCEDURE triangulo;
                    BEGIN
                         WITH Areas[2] DO
                              BEGIN
                              Write('Escribe la base: ');
                              Readln(lado);
                              Write('Escribe la altura: ');
                              Readln(Altura);
                              Figura:='TRIANGULO';
                              Area:=(Lado*Altura)/2;
                              END;
                    END;
          (****************************************************************)        
          PROCEDURE circulo;
                    BEGIN
                         WITH Areas[3] DO
                              BEGIN
                              Write('Escribe el radio: ');
                              Readln(Radio);
                              Figura:='CIRCULO';
                              Area:=Radio*Radio*pi;
                              END;
                    END;
          (******************************************************************)        
          PROCEDURE menu2;
                    VAR
                       Opcion2:char;
                    BEGIN
                         REPEAT
                         Writeln('[C] Cuadrado ');
                         Writeln('[T] Triangulo');
                         Writeln('[O] Circulo  ');
                         Writeln('[V] Volver   ');
                         Readln(Opcion2);
                         Writeln;
                         CASE Opcion2 OF
                              'C','c': cuadrado;
                              'T','t': triangulo;
                              'O','o': circulo;
                              'V','v': Writeln('Volviendo al menu anterior...');
                         OTHERWISE
                              Writeln('Opcion no valida, por favor elija otra...');
                         END;
                         UNTIL (Opcion2='v') OR (Opcion2='V');
                         END;
          (*****************************************************************)              
          PROCEDURE mostrar_c;
                    BEGIN
                         WITH Areas[1] DO
                              BEGIN
                              Writeln('Figura: ',Figura);
                              Writeln('Lado: ',Lado:8:4);
                              Writeln('Area: ',Area:8:4);
                              END;
                    END;
          (*******************************************************************)
          PROCEDURE mostrar_o;
                    BEGIN
                         WITH Areas[3] DO
                              BEGIN
                              Writeln('Figura: ',Figura);
                              Writeln('Radio: ',Radio:8:4);
                              Writeln('Area: ',Area:8:4);
                              END;
                    END;
          (*******************************************************************)
          PROCEDURE mostrar_t;
                    BEGIN
                         WITH Areas[2] DO
                              BEGIN
                              Writeln('Figura: ',Figura);
                              Writeln('Lado: ',Lado:8:4);
                              Writeln('Altura: ',Altura:8:4);
                              Writeln('Area: ',Area:8:4);
                              END;
                    END;        
          (******************************************************************)
          PROCEDURE menu3;
                    VAR
                       Opcion3:char;
                    BEGIN
                         REPEAT
                         Writeln('[C] Mostrar datos del cuadrado ');
                         Writeln('[O] Mostrar datos del circulo  ');
                         Writeln('[T] Mostrar datos del triangulo');
                         Writeln('[M] Mostrar todos los datos    ');
                         Writeln('[V] Volver al menu anterior    ');
                         Readln(Opcion3);
                         CASE Opcion3 OF
                              'C','c': mostrar_c;
                              'O','o': mostrar_o;
                              'T','t': mostrar_t;
                              'M','m': BEGIN
                                       mostrar_c;
                                       mostrar_t;
                                       mostrar_o;
                                       END;
                              'V','v': Writeln('Volviendo al menu anterior...');
                         OTHERWISE
                                  Writeln('Opcion no valida, por favor elija otra...');
                         END;
                         UNTIL (Opcion3 = 'V') OR (Opcion3 = 'v');
                    END;
          (****************************************************************)
          BEGIN
               REPEAT
               Writeln('[I] insertar datos desde teclado');
               Writeln('[M] Mostrar datos por pantalla'  );
               Writeln('[S] Salir del programa');
               Readln(Opcion);
               CASE Opcion OF
                    'I','i':menu2;
                    'M','m':menu3;
                    'S','s':Writeln('Saliendo del programa...');
               OTHERWISE
                    Writeln('Opcion no valida, por favor elija otra...');
               END;
               UNTIL (Opcion = 'S') OR (Opcion = 's');
          END;
(****************************************************************************)
BEGIN
      menu;
END.

Ejemplo de ejecucion:

2 comentarios:

Twitter Delicious Facebook Digg Stumbleupon Favorites More

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