Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 06 de Mayo de 2003, 09:52:04 AM

Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: J_F_NASH en 06 de Mayo de 2003, 09:52:04 AM
                                El asunto es que estoy siguiendo un libro "Cómo programar en C/C++ (Deitel)" y he llegado al tema de los arrays.
Todo parece sencillo pero llego a un punto que ¡no entiendo EN ABSOLUTO!. Me refiero a los ARRAYS CON MULTIPLES SUBINDICES.

Si por favor podeis darme algunos consejillos, sugerencias, trucos,... Entiendo como funciona un ARRAY pero con multiples subindices ya no se pa donde tirar.




Gracias de antemano.

S2.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: rrc2soft en 06 de Mayo de 2003, 10:43:35 AM
                                ¿Arrays con multiples subindices?. ¿Que es, lo de hola
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: J_F_NASH en 06 de Mayo de 2003, 12:05:53 PM
                                Arrays multidimensionales es exactamente lo que no entiendo.

Por ejemplo:

a [2] [3] = {{1, 2} {3, 4}}


¿Cual sería el valor de 2 y 3?




S2.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: sés en 06 de Mayo de 2003, 03:41:04 PM
                                No son más que tablas de dos dimensiones, donde un índice es la columna y otro la fila (X e Y).

Ejemplo:
int t[3][2];



Esto daría algo como:
+-+-+-+

|0|0|0|

+-+-+-+

|0|0|0|

+-+-+-+



Si hacemos:
t[2][1] = 4;  // Columna 2, fila 1



Tenemos:
+-+-+-+

|0|0|0|

+-+-+-+

|0|0|4|

+-+-+-+

                               
Título: ....
Publicado por: Grugnorr en 06 de Mayo de 2003, 07:43:31 PM
                                Nunca me ha gustado inicializar así los arrays, pero..



a [2] [3] = {{1, 2} {3, 4}}



Eso es una warrería ;), inicializa 2 de los 3 pares, quedando
a [2] [3] = {{1, 2} ,{3, 4},{basura,basura}}

Citar¿Cual sería el valor de 2 y 3?

:?: , me temo que andas confundido(será la noche ;))  :I .  la sentencia esa declara el array, rellenando algunos de sus contenidos. Pero ni existe a[2][3], porque los arrays se indexan empezando por 0 hasta dimensión -1, ni a[][2] o algo así es posible.

El post de sés te ayudará a comprenderlo...                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: J_F_NASH en 07 de Mayo de 2003, 09:28:34 AM
                                A ver, comienzo a entender pero os pido que tengais paciencia, no tengo ni idea de programación (soy grafista) y hay cosas que no me cuadran.  

En el ejemplo sés:
t[2][1] = 4
Entiendo lo que sigue:

0  1  2  (columna 0, columna 1, columna 2)
---------
0  0  0 (fila 0)
0  0  4 (fila 2)
El tema es, por lo que veo en el ejemplo, que comienzo a contar filas y columnas empezando con cero, uno, dos, ...

Pero el otro ejemplo no parece seguir esa lógica:
int t[3][2]

0  1  2  3 (¿NO DEBERAMOS INDICAR COLUMNA 3 Y FILA 2?)
------------
0  0  0   ?
0  0  0   ?
?  ?  ?   ?

¿Que es lo que planteo mal?

No se si me explico.




S2.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: rrc2soft en 07 de Mayo de 2003, 10:47:01 AM
                                A ver si lo he cogido...
Citar
Pero el otro ejemplo no parece seguir esa lógica:  
int t[3][2]  

0 1 2 3 (¿NO DEBERAMOS INDICAR COLUMNA 3 Y FILA 2?)  
------------  
0 0 0 ?  
0 0 0 ?  
? ? ? ?  
Cuando dices int t[3][2], estas declarando un array bidimensional de 3 columnas y 2 filas.


0 1 2

-------

0 0 0  | 0

0 0 0  | 1

(como puedes ver aqui hay 3 columnas y 2 filas. Pero mira los indices...)


...pero si llegaste a ver los array unidimensionales (char str[n]), te acordaras de que en C los array empiezan en 0, y acaban en n-1. Lo mismo pasa con los multidimensionales.
Cuando declaras un array
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: fiero en 07 de Mayo de 2003, 11:03:46 AM
                                No es por liar, pero yo siempre pienso en los arrays bidimensionales al revés que como ha explicado rrc2soft, o sea, declarados como array[y]
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: sés en 07 de Mayo de 2003, 04:16:40 PM
                               
CitarNo es por liar, pero yo siempre pienso en los arrays bidimensionales al revés que como ha explicado rrc2soft, o sea, declarados como array[y]
  • . Con lo cual, un array[3][2] estaría representado así:
     0  1

    --------

     X  X    0

     X  X    1

     X  X    2



    Así, si recorremos todas las posiciones del array una a una, se leen de izquierda a derecha y de arriba a abajo, tal y como se almacena en la memoria.

    un saludo
Realmenteo NO existen ni filas ni columnas, eso es sólo un criterio de cada uno. Lo que sí está claro es que si llenas la memoria que ocupa esa tabla, usando un contador:

int t[3][2];

int x, y;

int *p = (int *)t;



for( int x=0; x<3*2; x++ ) p[x] = x;



for( y=0; y<2; y++ ) {

 for( x=0; x<3; x++ ) {

   printf( "%d,", t[x][y] );

 }

 printf( "n" );

}



el resultado sería:

0,2,4,

1,3,5,



¿Por qué?

t[3][2] es lo mismo que decir TRES tablas de DOS elementos:

t[0] contiene una tabla tal que: t0[2]
t[1] contiene una tabla tal que: t1[2]
t[2] contiene una tabla tal que: t2[2]

y en memoria, t0, t1 y t2 están consecutivas:

 t0     t1     t2  

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

[0][1] [2][3] [4][5]

                               
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: fiero en 07 de Mayo de 2003, 05:12:44 PM
                               
Citar
Realmenteo NO existen ni filas ni columnas, eso es sólo un criterio de cada uno.

En eso tienes toda la razón, lo de filas y columnas es solo un artificio humano.

Y ya que computacionalmente da lo mismo de las dos maneras. Lo que yo digo es que es más "natural" aprenderse los arrays multiples en el otro sentido: array[y]
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: J_F_NASH en 07 de Mayo de 2003, 05:46:58 PM
                                Vale, ya lo entiendo.




Gracias peña.





S2.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: MaSteR en 14 de Mayo de 2003, 11:36:35 PM
                                :D


.......................................







Q yo sepa los arrays no empienzan desde 0, sino 1 2 3 4.... :P no se si lo habeis contestado y nuse pa q m meto yo aki si ya se ha enterao :D lol                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: fiero en 15 de Mayo de 2003, 12:03:34 AM
                               
Citar
Q yo sepa los arrays no empienzan desde 0, sino 1 2 3 4....  

pues entonces sabes mal.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: J_F_NASH en 15 de Mayo de 2003, 09:40:56 AM
                                "MaSteR escribió:

Q yo sepa los arrays no empienzan desde 0, sino 1 2 3 4.... "



Vale, no lo entiendo.
Un ARRAY empieza con 0. Si esto es así todo me cuadra. Sino... volvamos a empezar.



S2.                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: synchrnzr en 15 de Mayo de 2003, 11:06:58 AM
                                Tranquilo, empiezan por 0 como bien te han dicho, almenos en la mayoría de lenguajes ^_^'

sync                                
Título: Enorme desánimo (ARRAYS multiples subindices)
Publicado por: ShAq en 15 de Mayo de 2003, 11:07:20 AM
                                Bueno esto ya se ha dicho antes
pero veo que todavia hay dudas  :o

si declaras en C/C++

int array[3];

declaras un array de 3 enteros y puedes
acceder a ellos por

array[0];
array[1];
array[2];

no le deis mas vueltas a la tuerca,

un saludo!


EDIT: vaya se me adelanto sync,  :oops: