domingo, 11 de diciembre de 2011

Ejercicio17(Arrays)

Plantee e implemente un programa en PASCAL que mediante un menú apropiado permita al usuario introducir dos matrices NxN de números enteros (0<N<10) y seleccionar la operación (suma, resta o producto) que desea realizar con ellas. Muestre los resultados de la operación seleccionada por pantalla en formato matricial.


PROGRAM operaciones(input,output);
(*Programa que permita introducir matrices hasta de orden 10 por pantalla y haga la suma resta y multiplicacion de matrices*)
CONST
     maximofilas = 10;
     maximocolumnas = 10;
TYPE
    Tabla = ARRAY[1..maximofilas, 1..maximocolumnas] OF integer;
VAR
   matriz1,matriz2,matrizsuma,matrizresta,matrizmul:Tabla;
   filas,columnas:integer;
   filas2,columnas2:integer;
   a:integer;

(******************************************************************************************************************************)
PROCEDURE leer1;
VAR
   I,L:integer;
BEGIN
     write('Introduzca el maximo de filas que tiene que contener la matriz 1: ');
     read(filas);
     write('Introduzca el maximo de columnas que tiene que contener la matriz 1: ');
     read(columnas);
     FOR I:=1 TO filas DO
     BEGIN
         FOR L:=1 TO columnas DO
         BEGIN
         write('Escriba el elemento que se situa en la fila: ',I:2,' ,columna: ',L:2,':');
         read(matriz1[I,L]);
         END;
      END;
      writeln;
END;
(*******************************************************************************************************************************)
PROCEDURE leer2;
VAR
   I,L:integer;
BEGIN
     write('Introduzca el maximo de filas que tiene que contener la matriz 2: ');
     read(filas2);
     write('Introduzca el maximo de columnas que tiene que contener la matriz 2: ');
     read(columnas2);
     FOR I:=1 TO filas2 DO
     BEGIN
         FOR L:=1 TO columnas2 DO
         BEGIN
         write('Escriba el elemento que se situa en la fila: ',I:2,' ,columna: ',L:2,':');
         read(matriz2[I,L]);
         END;
      END;
      writeln;
END;
(*******************************************************************************************************************************)
PROCEDURE escribir1;
VAR
   I,L:integer;
BEGIN
FOR I:=1 TO filas DO
     BEGIN
         FOR L:=1 TO columnas DO
         BEGIN
         write(matriz1[I,L]:5);
         END;
         writeln;
         writeln;
      END;
END;
(*******************************************************************************************************************************)
PROCEDURE escribir2;
VAR
   I,L:integer;
BEGIN
FOR I:=1 TO filas2 DO
     BEGIN
         FOR L:=1 TO columnas2 DO
         BEGIN
         write(matriz2[I,L]:5);
         END;
         writeln;
         writeln;
      END;
END;
(*******************************************************************************************************************************)
PROCEDURE sumar;
VAR
   I,L:integer;
BEGIN
     IF ((columnas*filas)=(columnas2*filas2)) THEN
        BEGIN
        writeln('Si se pueden sumar');
        FOR I:=1 TO filas DO
            BEGIN
            FOR L:=1 TO columnas DO
                BEGIN
                matrizsuma[I,L]:= matriz1[I,L]+matriz2[I,L];
                END;
            END;
        FOR I:=1 TO filas DO
            BEGIN
            FOR L:=1 TO columnas DO
                BEGIN
                write(matrizsuma[I,L]:5);
                END;
                writeln;
                writeln;
             END;
        END



     ELSE writeln('Error, no se pueden sumar matrices de orden distinto') ;
END;
(*******************************************************************************************************************************)
PROCEDURE restar;
VAR
   I,L:integer;
BEGIN
     IF ((columnas*filas)=(columnas2*filas2)) THEN
        BEGIN
        writeln('Si se pueden restar');
        FOR I:=1 TO filas DO
            BEGIN
            FOR L:=1 TO columnas DO
                BEGIN
                matrizresta[I,L]:= matriz1[I,L]-matriz2[I,L];
                END;
            END;
        FOR I:=1 TO filas DO
            BEGIN
            FOR L:=1 TO columnas DO
                BEGIN
                write(matrizresta[I,L]:5);
                END;
                writeln;
                writeln;
             END;
        END



     ELSE writeln('Error, no se pueden restar matrices de orden distinto') ;
END;
(******************************************************************************************************************************)
PROCEDURE multiplicar;  (*Falla el proceso de multiplicar*)
VAR
   I,L:integer;
BEGIN
      IF (columnas = filas2) THEN
         BEGIN
         writeln('Si se pueden multiplicar');
         FOR I:=1 TO filas DO
            BEGIN
            L:=1;
            matrizmul[I,L]:=(matriz1[I,L]*matriz2[I,L])+(matriz1[I,L+1]*matriz2[I+1,L])+(matriz1[I,L+2]*matriz2[I+2,L]);
            matrizmul[I,L+1]:=(matriz1[I,L]*matriz2[I,L+1])+(matriz1[I,L+1]*matriz2[I+1,L+1])+(matriz1[I,L+2]*matriz2[I+2,L+1]);
            matrizmul[I,L+1]:=(matriz1[I,L]*matriz2[I,L+2])+(matriz1[I,L+1]*matriz2[I+1,L+2])+(matriz1[I,L+2]*matriz2[I+2,L+2]);
            END;
            FOR I:=1 TO filas DO
            BEGIN
            FOR L:=1 TO columnas DO
                BEGIN
                write(matrizmul[I,L]:5);
                END;
                writeln;
                writeln;
             END;
         END
END;
(******************************************************************************************************************************)
PROCEDURE menu;
VAR
   a:integer;
BEGIN
     REPEAT
           BEGIN
           writeln('--------------------------------------------------------------------------------');
           writeln('Seleccione una operacion para realizar');
           writeln('[1] sumar');
           writeln('[2] resta');
           writeln('[3] multiplicar');
           writeln('[0] salir');
           read(a);
           CASE a OF
           1 : sumar;
           2 : restar;
           3 : multiplicar;
           END;
           END;
      UNTIL a = 0;
END;
(******************************************************************************************************)

BEGIN
writeln('Bienvenido al programa para realizar operaciones con matrices');
leer1;
leer2;
escribir1;
writeln;
escribir2;
menu;
END.

Ejemplo de ejecucion




(*Nota: Falla el procedimiento multiplicar*)

No hay comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More

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