• Domingo 22 de Diciembre de 2024, 06:10

Autor Tema:  Recorrer Arreglo  (Leído 2317 veces)

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Recorrer Arreglo
« en: Jueves 11 de Mayo de 2006, 04:00 »
0
Holas, Tengo problemas al tratar de recorrer un arreglo de forma diagonal, horizontal y vertical, es decir, especifico la posicion en la que quiero empezar (debe de ser en donde este a), luego desde esa posicion eliminar todas las x que se encuentran entre las a, por ejemplo:

Inicial:

a x a o o
x x o o o
x o x o o
x o o a o
a o o o o

Para i=1y j=1, se tendria:

a o a o o
o o o o o
o o o o o
o o o a o
a o o o o

O para I=4 y j=4 se tendria

a x a o o
x o o o o
x o o o o
x o o a o
a o o o o

no se como ir tomando las x, solo se como tomar las x que estan a los costados de la a, pero no se como tomar la siguiente, entodo caso ese seria todo el problema que tengo, como tomar la x que sigue en la direccion de la otra a, ya que el resto de la validacion seria sencillo, weno espero me puedan ayudar.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Recorrer Arreglo
« Respuesta #1 en: Jueves 11 de Mayo de 2006, 15:19 »
0
Código: Text
  1.  
  2. a x a o o
  3. x x o o o
  4. x o x o o
  5. x o o a o
  6. a o o o o
  7.  
  8.  
La cosa es que un for no te va servir;

Horizontalmente
Código: Text
  1.  
  2. i:=1;
  3. j:=1;
  4. while i<max do
  5. begin
  6.   if matriz[i,j] = 'x' then matriz[i,j] := '0';
  7.   if matriz[i,j] = 'a' then break; {sale del ciclo}
  8.   i := i + 1;
  9. end;
  10.  
  11.  
Verticalemnte
Código: Text
  1.  
  2. i:=1;
  3. j:=1;
  4. while j<max do
  5. begin
  6.   if matriz[i,j] = 'x' then matriz[i,j] := '0';
  7.   if matriz[i,j] = 'a' then break; {sale del ciclo}
  8.   j := j + 1;
  9. end;
  10.  
  11.  
Diagonalmente
Código: Text
  1.  
  2. i:=1;
  3. j:=1;
  4. while j<max do
  5. begin
  6.   if matriz[i,j] = 'x' then matriz[i,j] := '0';
  7.   if matriz[i,j] = 'a' then break; {sale del ciclo}
  8.   j := j + 1;
  9.   i := i+1;
  10. end;
  11.  
  12.  

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Re: Recorrer Arreglo
« Respuesta #2 en: Jueves 11 de Mayo de 2006, 17:08 »
0
Estuve checando el codigo y loq ue veo es que solo me deja recorrerlos en una sola direccion, es decir, en vertical de arriba hacia abajo, en horizobtal de izquierda a derecha y en diagocal de una posicion hacia derecha abajo. Entonces tendria q hacer cosigo para cada una de las direcciones que tendria que recorrer y eso seria muy engorroso, lo unico que yo pude hacer es obtener cualquier x que este a su costado de esta manera:

Código: Text
  1.  
  2.  
  3. For fil:=-1 to 1 do
  4.   For j:=-1 to 1 do
  5.       If not ((fil=0) and (col=0)) then  {No tiene que ser el centro}
  6.         If ((fil+ i) in [1..5]) and ((j+col) in [1..5]) then  {Para no salirme del rango
  7.                                                                               por si estoy en una esquina}
  8.            If (Tablero[i+fil,j+col]=x) then {Analizo su vecino}
  9.               {Ya no se que iria aqui}
  10.  
  11.  

Lo que estoy haciendo con ese codigo (ya sabiendo la posicion escogida i,j)de esa posicion saco un cuadro de 3 por 3 donde (0,0) es el centro del cuadrado, algo asi:
________________________
|_(-1,1 )_|_( 0,1 )_|_( 1,1)_|
|_(-1,0 )_|_( 0,0 )_|_( 1,0)_|
|_(-1,-1)_|_(0,-1)_|_(1,-1)_|

De tal manera que la posicion que elija, siempre va hacer (0,0) y voy cotejando los valores que estan alrededor del (0,0), pero al tomar un valor vecino tendria que analizar su vecino que apunta a la direccion de a (indiferente si esta arriba o abajo), bueno ojala me puedan ayudar con sugerencias, ya que no deseo hacer codigo para cada direccion, sino un codigo para todas las direcciones...   :hola:

juancpalmajr

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
    • http://www.linuxcommunity.com.ar
Re: Recorrer Arreglo
« Respuesta #3 en: Miércoles 24 de Mayo de 2006, 03:53 »
0
pero que queres hacer un juego monocromatico?
a base de caracteres, en modo texto.