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*)
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario