Pascal/Turbo Pascal - Uso de filas en una matriz

 
Vista:

Uso de filas en una matriz

Publicado por Juan (2 intervenciones) el 18/10/2014 18:30:28
Buenas, antes que nada gracias de antemano.

Tengo una duda respecto a el uso de filas en una matriz. Se me da una matriz cuadrada llena de numeros, va a haber un enumerado que me va a decir que proceso va a actuar; proceso que reciben una fila y realizan una operacion (lo llamaremos MOVER)
.
Lo que quiero lograr es que al aplicar ese proceso actue sobre todas las filas. Bien, el problema que tengo es que el tablero es un array de arrays, y no puedo pasar las filas direcatmente a el proceso porque como mencione anteriormente MOVER recibe una fila. Estaba pensando alguna manera de pasarle el valor de cada fila del tablero en el lugar X a otra fila.

No esta muy bien redactado porque es dificil de explicar, asi que disculpen. Dejo el codigo para que se pueda entender mejor y un pequeño esquema de como seria.
******************************************************************************************************************
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const
      maximo=4;
     ValorMax = 1000;
 
   Rango = 1 .. Maximo;
   TValor = 0 .. ValoMaxr;
   TFila = array [Rango] of TValor;
   TTablero = array [Rango] of TFila;
   Direccion = (arriba,abajo,derecha,izquierda);
 
procedure MoverTablero(var tablero:TTablero);
 
var i: integer;
var j: integer;
var fila : 	TipoFila;
var columna:TipoFila;
 
begin
	for i:=1 to Maximo do
		begin
			for j:=1 to Maximo do
				begin
					columna[i]:=tablero[i,1];
					fila[j]:= tablero[1,j];
					Mover(fila);
					Mover(columna);
			end;
		end;
******************************************************************************************************************************
Seria asi:

|1 1 1 1|
|1 1 1 1|
|1 1 1 1|
|1 1 1 1|

Supongamos que la funcion Mover suma todos y los deja en el primer lugar, quedaria asi:

|4 0 0 0|
|4 0 0 0|
|4 0 0 0|
|4 0 0 0|

Ese codigo que deje arriba no hace nada, queda igual a la primera.
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

Uso de filas en una matriz

Publicado por ramon (2158 intervenciones) el 19/10/2014 01:15:09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{A ver si esto te hayuda}
 
 program muevematriz;
  uses
    crt;
  const
     max = 4;
     valor = 1000;
  type
     matri = array[1..max,1..max] of integer;
   var
     lamatriz : matri;
     g, m : integer;
 
   procedure rellenamatiz(var mm : matri);
   begin
      randomize;
      for g := 1 to max do
        for m := 1 to max do
        lamatriz[m,g] := random(50) + 1;
   end;
 
   procedure presenta_matriz(pm : matri);
   begin
      for g := 1 to max do
      begin
        for m := 1 to max do
        begin
            write('  ',pm[m,g]);
        end;
          writeln;
          writeln;
     end;
   end;
 
   procedure suma_y_mueve_matriz(var ss : matri);
   var
     c, su : integer;
   begin
      su := 0;
      for g := 1 to max do
      begin
        for m := 1 to max do
        begin
            su := su + ss[m,g];
        end;
          c := 1;
          ss[c,g] := su;
          for c := 2 to max do
          ss[c,g] := 0;
          su := 0;
      end;
   end;
 
  procedure presenta_matrizes;
  begin
     rellenamatiz(lamatriz);
     clrscr;
     presenta_matriz(lamatriz);
     suma_y_mueve_matriz(lamatriz);
     writeln;
     writeln;
     presenta_matriz(lamatriz);
     readkey;
  end;
 
  begin
     presenta_matrizes;
  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

Uso de filas en una matriz

Publicado por Juan (2 intervenciones) el 19/10/2014 01:46:35
Muchas gracias Ramon,me da mejor la idea. Lo que quiero hacer es ejecutar un procedimiento que recibe una fila, la modifica de una cierta forma, y la muestra en la matriz. El problema que tengo ahora es como hago para que lo ejecute en todas las filas a la vez en la direccion que yo elija. La direccion la manejo con un enumerado.
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

Uso de filas en una matriz

Publicado por ramon (2158 intervenciones) el 19/10/2014 18:55:50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{No se esactamente lo que quieres pero mira el programa anterior modificado para sumar solo
la linea que quieras}
 
program muevematriz;
  uses
    crt;
  const
     max = 4;
     valor = 1000;
  type
     matri = array[1..max,1..max] of integer;
   var
     lamatriz : matri;
     g, m : integer;
 
   procedure rellenamatiz(var mm : matri);
   begin
      randomize;
      for g := 1 to max do
        for m := 1 to max do
        lamatriz[m,g] := random(50) + 1;
   end;
 
   procedure presenta_matriz(pm : matri);
   begin
      for g := 1 to max do
      begin
        for m := 1 to max do
        begin
            write('  ',pm[m,g]);
        end;
          writeln;
          writeln;
     end;
   end;
 
   procedure suma_y_mueve_matriz(cual : integer; var ss : matri);
   var
     c, su : integer;
   begin
      su := 0;
        for m := 1 to max do
        begin
            su := su + ss[m,cual];
        end;
          c := 1;
          ss[c,cual] := su;
          for c := 2 to max do
          ss[c,cual] := 0;
     end;
 
  procedure presenta_matrizes;
  var
     fila : integer;
     tec : char;
  begin
     rellenamatiz(lamatriz);
     clrscr;
     presenta_matriz(lamatriz);
     write('  Ente fila A Sumar De [1 A ',max,'] : ');
     repeat
        tec := readkey;
        fila := ord(tec) - 48;
     until fila in[1..max];
     if fila > max then
     fila := max;
     suma_y_mueve_matriz(fila,lamatriz);
     writeln;
     writeln;
     presenta_matriz(lamatriz);
     readkey;
  end;
 
  begin
     presenta_matrizes;
  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