Pascal/Turbo Pascal - Matrices pascal

 
Vista:

Matrices pascal

Publicado por Gonzalo (5 intervenciones) el 08/01/2012 12:37:39
Dadas 2 matrices cuadrada de hasta 10×10 (M1 y M2):
• Mostrar las matrices por pantalla.
• Sumar ambas matrices empleando función suma.
• Restar ambas matrices empleando función suma.
• Visualizar el mayor y el menor de sus elementos.
• Intercambiar los elementos de la matriz

Lo que he podido hacer hasta ahora es sacar una matriz de 10x10, con randomize. pero lo que no se es como visualizar dos y hacer las demas funciones con ellas.

PROGRAM Generarmatrices;

{$mode objfpc}{$H+}

uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads, crt
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };

CONST m=10;
n=10;
TYPE TMatriz=ARRAY[1..m,1..n] OF INTEGER;
VAR i,j:WORD;
matriz:TMatriz;
PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz:TMatriz);
VAR i,j:WORD;
begin
RANDOMIZE;
for i:=1 TO m DO
for j:=1 TO n DO
begin
matriz[i,j]:=RANDOM(10);
end;
end;
PROCEDURE Escribir_Matriz(matriz:TMatriz);
VAR i,j:WORD;
begin
for i:=1 TO m DO
begin
for j:=1 TO n-1 DO
begin
write(matriz[i,j],' ');
end;
writeln(matriz[i,n]);
end;
end;
begin
CLRSCR;
Rellenar_Matriz_RANDOM(matriz);
Escribir_Matriz(matriz);
readln;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Matrices pascal

Publicado por ramon (2158 intervenciones) el 09/01/2012 15:08:30
{A ver si acerté con lo que quieres}

PROGRAM Generarmatrices;
uses
crt;
CONST
m = 10;
n = 10;
TYPE
TMatriz = ARRAY[1..m,1..n] OF INTEGER;
VAR
i, j : WORD;
matriz1, matriz2 : TMatriz;


PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz1, matriz2 : TMatriz);
VAR
i,j : WORD;
num : integer;
begin
RANDOMIZE;
for i := 1 TO m DO
for j := 1 TO n DO
begin
num := RANDOM(10);
matriz1[i,j] := num;
end;
RANDOMIZE;
for i := 1 TO m DO
for j := 1 TO n DO
begin
num := RANDOM(20);
matriz2[i,j] := num;
end;
end;

PROCEDURE Escribir_Matriz(matr1, matr2:TMatriz);
VAR
i,j : WORD;
begin
gotoxy(2,3);write(' Matriz 1 matriz 2');
for i := 1 TO m DO
for j:=1 TO n DO
begin
gotoxy(2 + (j * 3),3 + i);write(matr1[i,j]);
gotoxy(40 + (j * 3),3 + i);write(matr2[i,j]);
end;
end;

procedure sumamatriz1_2(mat1, mat2 : tmatriz);
var
matrizsuma : tmatriz;
i, t : integer;
begin
for i := 1 to m do
for t := 1 to n do
begin
matrizsuma[i,t] := mat1[i,t] + mat2[i,t];
end;
gotoxy(5,14);write('Suma Matrizes 1 + 2');
for i := 1 to m do
for t := 1 to n do
begin
gotoxy(2 + (t * 3),14 + i);write(matrizsuma[i,t]);
end;
end;

procedure restamatriz1_2(matr1, matr2 : tmatriz);
var
matrizresta : tmatriz;
ii, tt : integer;
begin
for ii := 1 to m do
for tt := 1 to n do
begin
matrizresta[ii,tt] := matr1[ii,tt] - matr2[ii,tt];
end;
gotoxy(44,14);write('Resta Matrizes 1 - 2');
for ii := 1 to m do
for tt := 1 to n do
begin
gotoxy(40 + (tt * 3),14 + ii);write(matrizresta[ii,tt]);
end;
end;

procedure mayorelementp(mat1, mat2 : tmatriz);
var
h1, l1, h2, l2, may1, may2 : integer;
meno1, meno2 : integer;
begin
may1 := 0;
meno1 := 10;
meno2 := 10;
for h1 := 1 to m do
for l1 := 1 to n do
begin
if may1 < mat1[l1,h1] then
may1 := mat1[l1,h1];
if meno1 > mat1[l1,h1] then
meno1 := mat1[l1,h1];
end;
may2 := 0;
for h2 := 1 to m do
for l2 := 1 to n do
begin
if may2 < mat2[l2,h2] then
may2 := mat2[l2,h2];
if meno2 > mat2[l2,h2] then
meno2 := mat2[l2,h2];
end;
gotoxy(2,2);write(' Mayor De 1 : ',may1,' / Menor De 1 : ',meno1,
' Mayor De 2 : ',may2,' / Menor De 2 : ',meno2);
end;

procedure intercambio_matrizes(mt1, mt2 : tmatriz);
var
it1, it2 : integer;
dat1, dat2 : integer;
begin
for it1 := 1 to m do
for it2 := 1 to n do
begin
dat1 := mt1[it2,it1];
dat2 := mt2[it2,it1];
mt2[it2,it1] := dat1;
mt1[it2,it1] := dat2;
end;
for it1 := 1 to m do
for it2 := 1 to n do
begin
gotoxy(2 + (it2 * 3),14 + it1);write(mt1[it1,it2]);
gotoxy(40 + (it2 * 3),14 + it1);write(mt2[it1,it2]);
end;
end;


begin
CLRSCR;
Rellenar_Matriz_RANDOM(matriz1, matriz2);
Escribir_Matriz(matriz1, matriz2);
sumamatriz1_2(matriz1, matriz2);
restamatriz1_2(matriz1, matriz2);
mayorelementp(matriz1, matriz2);
readln;
clrscr;
gotoxy(2,1);write('<<<< Intercambio Matrizsa >>>>');
Escribir_Matriz(matriz1, matriz2);
gotoxy(2,14);write(' Matriz 1 matriz 2');
intercambio_matrizes(matriz1, matriz2);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por Gonzalo (5 intervenciones) el 09/01/2012 15:14:27
Muchas gracias. Funciona a la perfeccion. Ahora solo me quedan unas modificaciones menus y tal.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por Gonzalo (5 intervenciones) el 09/01/2012 15:23:59
tengo un problema. No puedo utilizar la funcion definida goto. Maldita sea xD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por ramon (2158 intervenciones) el 09/01/2012 20:47:33
Que pascal estas usando si es free pascal usa la unidad crt, y wincrt síes otro sustituye los gotoxy
por write y al final de for writeln para pasar de linea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por ramon (2158 intervenciones) el 09/01/2012 21:18:45
{también puedes emplear esto el procedimiento en ensamblador}

program posicxy;
uses
crt;
procedure gotoxyp(x, y : byte);
begin
asm
mov dh,y
mov dl,x
dec dh
dec dl
mov bh,0
mov ah,2
int 10h
end;
end;

begin
clrscr;
gotoxyp(33,12);write('Posicion Cursos');
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por Gonzalo (5 intervenciones) el 09/01/2012 22:06:23
muchas gracias ramon de verdad. Pero el problema no es ese. Si el programa que me pusiste antes me va de lujo. Pero en clase dijo la profesora que no podemos utilizar la funcion goto. Pero muchas gracias. No te molestes que me da apuro ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por Gemma (7 intervenciones) el 15/01/2012 17:30:51
Hola, yo también tengo que hacer esa práctica, de hecho estoy muy liada con lo de el elemento mayor y menor de la matriz y lo de intercambiarlos. Tengo hechos los prcedimientos por si quieres echarles un vistazo Gonzalo, no utilizo el gotoxy, pero no me funciona bien, compila perfectamente pero no saca el elemento mayor ni el menor, y no los intercambia. Probablemente sea algun fallo tonto, pero puedes utilizarlo como plantilla para tu práctica.

procedure mayor_menor_matriz(var n_mayor,n_menor:integer);
var
mat:matriz;
begin
leer_matriz(lado_i,lado_j,mat);
FOR i:=1 TO mm DO
n_mayor:=mat[1,1];
n_menor:=mat[1,1];
FOR i:=1 TO mm DO
FOR j:=1 TO max DO
IF mat[i,j]>n_mayor THEN
begin
n_mayor:=mat[i,j];
p_mayor[2]:=j;
p_mayor[1]:=i;
end;
IF mat[i,j]<n_menor THEN
begin
n_menor:=mat[i,j];
p_menor[2]:=j;
p_menor[1]:=i;
end;
writeln ('El menor elemento es ',n_menor);
writeln ('El mayor es ',n_mayor);
readln;
end;

procedure intercambio_matriz(var n_mayor,n_menor:integer;mat:matriz);
var
nmenor,nmayor:integer;
i,j:integer;
mat_inter:matriz;
begin
mat_inter:=mat;
mayor_menor_matriz(n_mayor,n_menor);
nmenor:=n_menor;
nmayor:=n_mayor;
FOR i:=1 TO lado_i DO
FOR j:=1 TO lado_j DO
begin
IF nmenor=mat[i,j] THEN mat_inter[i,j]:=nmayor;
IF nmayor=mat[i,j] THEN mat_inter[i,j]:=nmenor;
end;
Mostrar_matriz (mat_inter,lado_i,lado_j);
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por ramon (2158 intervenciones) el 15/01/2012 20:28:34
{Hay la tenéis sin gotoxy pero no es lo mismo emplear goto que gotoxy son diferentes total mente
gotoxy es posicionamiento en pantalla y goto es con etiqueta label transfiere la ejecución del
programa a la sentencia marcada por la etiqueta label.}

PROGRAM Generarmatrices;
uses
crt;
CONST
m = 10;
n = 10;
TYPE
TMatriz = ARRAY[1..m,1..n] OF INTEGER;
VAR
i, j : WORD;
matriz1, matriz2 : TMatriz;


PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz1, matriz2 : TMatriz);
VAR
i,j : WORD;
num : integer;
begin
RANDOMIZE;
for i := 1 TO m DO
for j := 1 TO n DO
begin
num := RANDOM(10);
matriz1[i,j] := num;
end;
RANDOMIZE;
for i := 1 TO m DO
for j := 1 TO n DO
begin
num := RANDOM(20);
matriz2[i,j] := num;
end;
end;

PROCEDURE Escribir_Matriz(matr1, matr2:TMatriz);
VAR
i,j : WORD;
begin
writeln(' Matriz 1');
for i := 1 TO m DO
begin
for j := 1 TO n DO
begin
write(' ',matr1[i,j]);
end;
writeln;
end;
writeln(' Matriz 2');
for i := 1 TO m DO
begin
for j := 1 TO n DO
begin
write(' ',matr2[i,j]);
end;
writeln;
end;
end;

procedure sumamatriz1_2(mat1, mat2 : tmatriz);
var
matrizsuma : tmatriz;
i, t : integer;
begin
for i := 1 to m do
for t := 1 to n do
begin
matrizsuma[i,t] := mat1[i,t] + mat2[i,t];
end;
writeln('Suma Matrizes 1 + 2');
for i := 1 to m do
begin
for t := 1 to n do
begin
write(' ',matrizsuma[i,t]);
end;
writeln;
end;
end;

procedure restamatriz1_2(matr1, matr2 : tmatriz);
var
matrizresta : tmatriz;
ii, tt : integer;
begin
for ii := 1 to m do
for tt := 1 to n do
begin
matrizresta[ii,tt] := matr1[ii,tt] - matr2[ii,tt];
end;
writeln('Resta Matrizes 1 - 2');
for ii := 1 to m do
begin
for tt := 1 to n do
begin
write(' ',matrizresta[ii,tt]);
end;
writeln;
end;
end;

procedure mayorelementp(mat1, mat2 : tmatriz);
var
h1, l1, h2, l2, may1, may2 : integer;
meno1, meno2 : integer;
begin
may1 := 0;
meno1 := 10;
meno2 := 10;
for h1 := 1 to m do
for l1 := 1 to n do
begin
if may1 < mat1[l1,h1] then
may1 := mat1[l1,h1];
if meno1 > mat1[l1,h1] then
meno1 := mat1[l1,h1];
end;
may2 := 0;
for h2 := 1 to m do
for l2 := 1 to n do
begin
if may2 < mat2[l2,h2] then
may2 := mat2[l2,h2];
if meno2 > mat2[l2,h2] then
meno2 := mat2[l2,h2];
end;
writeln(' Mayor De Matriz 1 : ',may1,' / Menor De Matriz 1 : ',meno1);
writeln(' Mayor De Matriz 2 : ',may2,' / Menor De Matriz 2 : ',meno2);
end;

procedure intercambio_matrizes(mt1, mt2 : tmatriz);
var
it1, it2 : integer;
dat1, dat2 : integer;
begin
for it1 := 1 to m do
for it2 := 1 to n do
begin
dat1 := mt1[it2,it1];
dat2 := mt2[it2,it1];
mt2[it2,it1] := dat1;
mt1[it2,it1] := dat2;
end;
writeln(' Matriz 1');
for it1 := 1 to m do
begin
for it2 := 1 to n do
begin
write(' ',mt1[it1,it2]);
end;
writeln;
end;
writeln(' Matriz 2');
for it1 := 1 to m do
begin
for it2 := 1 to n do
begin
write(' ',mt2[it1,it2]);
end;
writeln;
end;
end;


begin
CLRSCR;
Rellenar_Matriz_RANDOM(matriz1, matriz2);
Escribir_Matriz(matriz1, matriz2);
writeln;
writeln('Pulsa Enter');
readln;
clrscr;
sumamatriz1_2(matriz1, matriz2);
restamatriz1_2(matriz1, matriz2);
writeln;
writeln('Pulsa Enter');
readln;
clrscr;
mayorelementp(matriz1, matriz2);
readln;
clrscr;
writeln('<<<< Intercambio Matrizsa >>>>');
intercambio_matrizes(matriz1, matriz2);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matrices pascal

Publicado por Gonzalo (5 intervenciones) el 16/01/2012 00:00:46
Muchas gracias, pero ya la tengo casi, despues de estar horas con ella. Muchas gracias a todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar