Pascal/Turbo Pascal - Matriz aleatoria

 
Vista:

Matriz aleatoria

Publicado por Cristian (2 intervenciones) el 12/12/2007 18:59:26
Buenas tardes,

Estoy haciendo un trabajo para clase de programacion usando FREE PASCAL y en uno de los apartados dice:
Dado un número entro "N" y un caracter cualquiera "X", introduzca de forma aleatoria el caracter "X" n veces en una matriz descrita previamente de 5 filas y 6 columnas, sin repetir posición y sin que se sitúen en el borde de la matriz.

Lo que yo he hecho es crear la matriz general (MATRIZ=ARRAY[1..5,1..6] OF CHAR) y luego una matriz de 12 casillas dentro de la matriz, que serian todas las casillas que no tocan el borde de la siguente forma:

(usando randomize al principio y pidiendo n y x.)
....
For i:=1 to 5 do begin
For j:=2 to 4 do begin

Pero intente lo que intente a continuacion no consiguo rellenar la matriz con "X" n veces. Si alguien me puede ayudar estaria muy agradecido.
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
sin imagen de perfil

RE:Matriz aleatoria

Publicado por Willy (177 intervenciones) el 13/12/2007 06:05:03
Hola Cristian.
Lo ideal sería que mostraces tu código (aunque no haga nada).
Bien. Hice tu programa pero te explico antes para que analices y entiendas el porqué de su funcionamiento.

-----------------------------------------------------------
Esto es para inicializar la Matriz (todos los campos en cero).

For I := 1 to 5 do
For J := 1 to 6 do Matriz[I,J] := '0';

-------------------------------------------------------------

El for de 1 a N para que repita las veces que el usuario quiere que aparezca el caracter.
Random(4)+2 porque poner soloamente Random(4) generaría un número aleatorio de 0 a 4, y queremos que sea de 1 a 6 (No queremos nada situado en el borde de la matriz).

until Matriz[X,Y] <> 'X'; Para que repita hasta que las coordenadas generadas por el Random no conincidan con un campo que ya contenga el caracter X (No queremos que se repitan posiciones)

For I := 1 to N do
begin
Repeat
X := Random(4)+2;
Y := Random(5)+2;
until Matriz[X,Y] <> 'X';
Matriz[X,Y] := 'X';
end;

-----------------------------------------------------------------

For I := 1 to 5 do
For J := 1 to 6 do
begin
GotoXY(I+25,J+5);
Write(Matriz[I,J]);
end;

Este ciclo anidado es para escribir en pantalla el contenido de los campos de nuestra matriz.

GotoXY(I+25,J+5); Sumo 25 a la variable I solamente porque quiero que los caracteres sean mostrados más o menos en el centro de la pantalla.
Lo mismo con J. Si quiero mostrar la matriz más abajo le agrego más valor a J.

-----------------------------------------------------------

Aquí el programa completo.. Un saludo!
-------------------------------------------------------------------------
----------------------------------------------------------------------------------

uses crt;
var
Matriz: ARRAY[1..5,1..6] OF CHAR;
N, I, J, X, Y: Integer;
begin
ClrScr;
WriteLn('Ingrese el n£mero de veces que aparecer  el caracter(max 20): ');
ReadLn(N);

For I := 1 to 5 do
For J := 1 to 6 do Matriz[I,J] := '0';

Randomize;

For I := 1 to N do
begin
Repeat
X := Random(4)+2;
Y := Random(5)+2;
until Matriz[X,Y] <> 'X';
Matriz[X,Y] := 'X';
end;

For I := 1 to 5 do
For J := 1 to 6 do
begin
GotoXY(I+25,J+5);
Write(Matriz[I,J]);
end;

ReadKey
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

RE:Matriz aleatoria

Publicado por Cristian (2 intervenciones) el 15/12/2007 13:48:23
Muchas gracias Willy, tu explicacion ha sido de mucha ayuda.

Un Saludo.

Cristian
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