Pascal/Turbo Pascal - Voltear matriz

 
Vista:

Voltear matriz

Publicado por Vero (9 intervenciones) el 18/01/2010 12:58:11
Hola a todos. Me gustaría solicitar ayuda para un problema de voltear matrices. No pretendo que lo hagan por mí, tengo planteada lo que sería la estructura del programa pero por más que lo pienso ya me veo saturada e impotente.

Se trata de escribir un procedimiento (voltearMatriz) de 3 parámetros: el 1º, matriz, será una matriz de caracteres (char), el 2º, volteoHorizontal, de tipo boolean para ver si la queremos voltear horizontalmente, y el 3º, volteoVertical, será tambien un boolean para ver si queremos que la matriz se voltee verticalmente.

La estructura que he pensado sería la siguiente:

program Matriz;
uses crt;
type
matrizDeChar = array of array of char;
procedure mostrarMatriz(matriz: matrizDeChar);
{Aqui iría el resto del procedimiento que muestra la matriz por pantalla}
{Aqui el procedimiento que voltea la matriz}
var
matriz: matrizDeChar;
begin
clrscr;
{Redimensionamos la matriz con un procedimiento setlength que tendrá como 1er parámetro la matriz a redimensionar, como 2º el número de filas y como 3º el número de columnas}
{Aqui se inicializaría la matriz}
{Aqui llamamos al procedimiento que voltea la matriz}
{Aqui llamamos al procedimiento que muestra la matriz}
writeln;
writeln('Pulse una tecla para finalizar...');
readkey;
end.

¿Podrían echarme una mano? Muchas gracias de antemano por leerme y por su tiempo
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

RE:Voltear matriz

Publicado por Diego Romero (996 intervenciones) el 19/01/2010 02:13:21
Depende de cómo entiendas voltear una matriz en sentido horizontal o vertical. Si nos dices eso quizá podamos prestar más ayuda.
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

RE:Voltear matriz

Publicado por Vero (9 intervenciones) el 19/01/2010 03:20:27
Sí, perdón por no haberlo puesto más claro antes. Me refiero a que si tenemos esta matriz de caracteres inicial:

*******************
***a***************
***b***************
*******************
*******************

Al voltearla horizontalmente quedaría así (como si juntásemos dos páginas de un libro y una cara se calcase en la otra) :

*******************
***************a***
***************b***
*******************
*******************

Y al voltear verticalmente quedaría así (como si juntaras la cara de arriba de un papel con la de abajo):

*******************
*******************
***b***************
***a***************
*******************

Espero haberme explicado algo mejor, es uno de los ejemplos más fáciles de representar visualmente para entender esto de los volteos. Gracias de antemano por haber intentado entenderme pese a mi falta de explicación.
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

RE:Voltear matriz

Publicado por Diego Romero (996 intervenciones) el 19/01/2010 13:56:36
Una matriz no es más que una colección de vectores. Si puedes dar vuelta un vector, puedes hacer esto que pides aquí:

Suponiendo que TMatriz es la matriz de enteros de MaxW por MaxH y suponiendo que es ancho por alto entonces, para voltear horizontalmente sería:

procedure VoltearHoriz(var M: TMatriz);
var
I, J, K, Aux: integer;
begin

for j:=1 to MaxH do
begin
k:=MaxW;
for i:=1 to (MaxW div 2) do
begin
Aux:=M[i,j];
M[i,j]:=M[k,j];
M[k,j]:=Aux;
dec(k);
end; { for i }
end; { for j }
end;

Con esto ya puedes deducir cómo será VoltearVert().
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

RE:Voltear matriz

Publicado por Vero (9 intervenciones) el 19/01/2010 14:11:49
Sí, con esto ya me es suficiente para deducir el resto. A veces con una pista ya ves el camino. Muchas gracias por la ayuda Diego :)
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