[ Foro de Pascal ]

lectura matriz

09-Feb-2014 22:32
Invitado (eduardo95)
6 Respuestas

hola profesor nacho
tengo una duda inmensa espero me la puedas ayudar a resolver.
es que hago porejemplo

 
 for j:=6 downto 1 do
    begin
     for i:=1 to 6 do
       bueno y sigue
 


mi pregunta es biendo en ejecusion  es como si me estuviera tomando la matriz como las j como filas y las columnas como i? porque puede ser esto?

      6
      5
      4
      3
      2
      1
           1   2   3   4   5   6

y si inbierto porejemplo:

 
  for i:=6 downto 1 do
    begin
     for j:=1 to 6 do
        y sigue
 


el comportamiento es:

    1
    2
    3
    4
    5
    6
        1    2    3   4   5   6
osea en este caso me toma las i como filas y j como columnas

no entiendo en el primer caso por que hace ese comportamiento, espero puedas sacarme de esta gran duda , estoy confundido.


10-Feb-2014 14:37
Nacho Cabanes (+30)

Las variables son "mudas": da igual cómo se llamen, lo importante es su misión dentro del programa.

Por eso, cuando hay un doble "for" anidado que representa filas y columnas, es mejor que las variables no se llamen "i" y "j" sino "fila" y "columna":

 
 for fila:=6 downto 1 do
    begin
     for columna:=1 to 6 do
       ...
 

10-Feb-2014 22:16
Invitado (eduardo95)

ok, profesor nacho sin embargo aun quedo con la duda, respecto a lo siguiente:

 
si tengo:
 for fila:=6 downto 1 do
    begin
     for columna:=1 to 6 do
       M[i,j]:='$';
 


que diferencia existe en la impresion y por que si tuviera ahora:

 
 for columna:=6 downto 1 do
    begin
     for fila:=1 to 6 do
       M[i,j]:='$';
 


en que cambia en ambos casos la impresion en pantalla?
gracias y disculpa si te puede resultar algo evidente pero para mi es una gran duda, gracias


10-Feb-2014 22:33
Nacho Cabanes (+30)

Tú lo has dicho: si cambia la lógica al rellenarlo, la forma de dibujarlo también cambiará, pero con sólo ese fragmento de programa no hay suficiente para ver los cambios.

Lo habitual es dibujar fila tras fila (a no ser que uses "gotoXY"), por lo que lo natural es que el "for" exterior recorra las filas y el "for" interior recorra todas las columnas que forman cada fila.


11-Feb-2014 11:45
Invitado (eduardo95)

hola profesor, gracias por responderme
profesor ok lo que me dices lo comprendo, lo que no entiendo es porque si hago

 
for fila:=6 downto 1 do
    begin
     for columna:=1 to 6 do
       M[i,j]:='$';
 


el inicia en la impresion por pantalla como si la primara fila para el fuera la 6,

fila6
fila5
fila4
..
fila1
      col1  col2 ... col6

y si hago:

 
for fila:=1 to 6 do
    begin
     for columna:=1 to 6 do
       M[i,j]:='$';
 


el inicia en la impresion por pantalla iniciando por fila 1


fila1
fila2
fila3
...

fila6
       col1 col2 ...    col6


es decir lo que no entiendo es la forma en que pascal invierte para impresion los lugares de las filas y columnas segun sea incremental o decremental el recorrido,pues cuando hago un for con downto la  impresion se toma como si la primera fila en impresion fuera la 6 acaso esa fila para pascal no deberia ser siempre la fila1 y la fila 6 quedar abajo? disculpame si te pido me hagas comprender mejor esto y muchas gracias.


12-Feb-2014 23:02
Nacho Cabanes (+30)

No es que Pascal invierta la impresión. Es que hace caso a tu "for". Si tú haces

 
for fila:=6 downto 1 do
 


La variable "fila" empieza en el valor 6 y va disminuyendo hasta 1. Así es como funciona un "for" con un "downto", mientras que si haces

 
for fila:=1 to 6 do
 


la variable "fila" empieza en 1 y aumenta ("to") hasta llegar a 6.

Tienes el uso de "for" aquí:
http://www.aprendeaprogramar.com//mod/resource/view.php?id=116


14-Feb-2014 00:27
Nacho Cabanes (+30)

Te he preparado un par de ejemplos básicos del uso de "for" para recorrer un array de forma creciente aquí:
http://www.aprendeaprogramar.com/fuentes/view.php?t=1
y de forma decreciente aquí:
http://www.aprendeaprogramar.com/fuentes/view.php?t=2






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)