lunes 11 de diciembre de 2006

Operaciones con matrices

Suma resta y multiplicación de matrices en pascal.

Para el uso de estos procedimientos es necesario declarar el tipo
tMatriz. Este tipo es un registro en el que f y c son las filas y columnas
de la matriz y datos es una matriz de numeros reales.

const
N = 10;

type
tMatriz= record
datos: array [1..N,1..N] of real;
f,c: 0..N;
end;



Tarea: Suma de dos matrices
El procedimiento recibe dos matrices y devuelve la matriz sumada.


procedure Sumar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.c) and (m1.f = m2.f) then begin
resul.c:=m1.c; { Crear Matriz resul del mismo rango que m1 y m2 }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:= m1.datos[i,j] + m2.datos[i,j];
end;
end
else writeln('No se pueden sumar matrices de diferente dimension');
end;



Tarea: Resta de dos matrices
El procedimiento recibe dos matrices y devuelve la matriz restada.


procedure Restar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.c) and (m1.f = m2.f) then begin
resul.c:=m1.c; { Crear Matriz resul del mismo rango que m1 y m2 }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:= m1.datos[i,j] - m2.datos[i,j];
end;
end
else writeln('No se pueden restar matrices de diferente dimension');
end;


Tarea: Multiplicación dos matrices
El procedimiento recibe dos matrices y devuelve la matriz multiplicada.


procedure Multiplicar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.f) then begin
resul.c:=m1.f; { Crear Matriz resul de rango apropiado para multiplicar }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:=resul.datos[i,j] + m1.datos[i,j] *
m2.datos[i,columna];
end;
end
else writeln('No se pueden multiplicar matrices de esta dimension');
end;

10 comentarios:

Buzz-chan dijo...

Sabes cómo hacer la divisón entre dos matrices...? Es que hacer la inversa me está resultando muy complicado, y no sé por dónde empezar. Gracias ;)

Silver dijo...

Sinceramente es un blog muy currado sobre Pascal, te mereces un premio compañero/a (si me permites llamarte asi).

Tambien destacar que esta realizado para gente iniciada en el lenguaje, lo has hecho muy intuitivo y explicativo.

Sólo un pequeñísimo error, algo sin mucha importancia mas solamente para que sigas "impoluto", en el procedimiento Restar al final el "writeln" ¿no deberia contener escrito "resta" en vez de suma?

PD:Cuidado con el copy&paste jeje, un saludo desde A Coruña y muchas gracias.

Ping dijo...

Silver muchas gracias por tu aclaración. Ya está corregido ese pequeño error.

Haber si para el fin de semana puedo subir algo más al blog.

Saludos también desde Coruña, y suerte con la practica.xD

Ana dijo...

Hola:
No se si sabras contestarme... pero,
¿como se podria reservar dinamicamente memoria ajustandose a las dimensiones de la matriz?
Muchas gracias,

Ping dijo...

Ana. Tienes que crear las matrices en tiempo de ejecución. Justo cuando sabes cual es la dimensión de la matriz creas el puntero a esa matriz, diciéndole las filas y columnas de la matriz.

Ricardo dijo...

ola
resul.datos[i,j]:=resul.datos[i,j] + m1.datos[i,j] *m2.datos[i,columna];

en esa parte...donde declaras [i,columna] ===> columna??..no seria j??

*Cristalito* dijo...

Ya que cogi prestado tu procedimiento... que menos que darte las gracias por este blog!!! =)

Te añado a favoritos, que seguramente te siga visitando!!! =)

Anónimo dijo...

necesito hacer una matriz para crear el juego tetris tenes idea como puedo hacerlo??es para un trabajo de la facultad.
muchas gracias!

Anónimo dijo...

I found this site using [url=http://google.com]google.com[/url] And i want to thank you for your work. You have done really very good site. Great work, great site! Thank you!

Sorry for offtopic

Anónimo dijo...

quien me podria ayudar con una matriz de 3 x 3 en turbo pascal