Professional Documents
Culture Documents
Arreglos
Conjunto de elementos, todos del mismo tipo, que se almacenan en zonas de memoria contiguas y que son referenciados por un mismo nombre o identificador (variable).
+=======================================+ | elem1 | elem2 | elem3 | elem4 | +=======================================+
Si se declara un arreglo que almacene 4 valores de tipo float (4 bytes) el tamao total reservado es de 16 bytes.
Los elementos se referencian por medio de un ndice que se aplica al nombre. El ndice siempre comienza en cero. De modo que si el arreglo se llama nums, los elementos del mismo sern: nums[0], nums[1], nums[2], ... nums[n]
Se declara un arreglo nums que almacena 4 valores de tipo float (4 bytes c/u) cada uno de los cuales se indexa del 0 al 3.
+=======================================+ | 3.8 | 9.2 | 15.28 | 32.0 | +=======================================+ nums[0] nums[1] nums[2] nums[3]
Se imprime el arreglo nums. El utilizar un ndice permite manipularlo fcilmente con una estructura repetitiva.
Una variante que muestra cmo los arreglos se pueden manipular fcilmente, tanto e instrucciones de entrada (por ejemplo: scanf), como en instrucciones de salida (printf); con la ayuda de estructuras repetitivas (while, do while, for ...).
for(x=0;x<4;x++){ printf("Elemento %d del arreglo: ",x); scanf("%f%*c",&nums[x]); } for(x=0;x<4;x++) printf("El elemento %d:%f\n", x, nums[x]); return 0; }
Declarndolo as se reserva en la memoria un espacio para 4 elementos. Es responsabilidad del programador no salirse de ese lmite. Con suerte no pasa nada, pero se pudiera invadir zonas de memoria reservadas para otras variables, como sucede abajo:
Esto pas porque el usuario ingres ms de 5 caracteres, que era el tamao asignado a ambos arreglos.
El tamao mostrado en la salida es el total reservado, aunque el uso del arreglo sea menor.
Inicializando Arreglos
#include <stdio.h> int main(void) { float arreglo1[4]={3.8, 9.2, 15.28, 32.0}; float arreglo2[]={3.8, 9.2, 15.28, 32.0}; float arreglo3[4]={3.8}; int x;
Se inicializan los 4 elementos de arreglo1 Se reserva el tamao justo para los elementos dados (4).
for(x=0;x<4;x++) printf("El elemento %d:%f\n", x, arreglo1[x]); for(x=0;x<4;x++) printf("El elemento %d:%f\n", x, arreglo1[x]); for(x=0;x<4;x++) printf("El elemento %d:%f\n", x, arreglo1[x]); return 0; }
for(x=0; x<4; x++){ for(y=0; y<4; y++){ printf("Ingresa matriz[%d][%d]=", x, y); scanf("%f%*c", &matriz[x][y]); } Otros dos ciclos }
for(x=0; x<4; x++) for(y=0; y<4; y++) printf("matriz[%d][%d]=%f\n",x,y,matriz[x][y]); }
Los arreglos bidimensionales se pueden manipular usando dos ciclos for anidados. Aqu el ingreso. El contador x controla las filas, mientras que y las columnas. En este caso leer fila por fila.
for(x=1; x<=4; x++){ for(y=1; y<=4; y++){ printf("Ingresa matriz[%d][%d]=", x, y); scanf("%f%*c", &matriz[x][y]); } }
Si quieres manejar los ndices desde uno, porqu en la escuela aprendiste a utilizarlos de esa forma (empezando por matriz[1][1]), puedes hacerlo. Cuando mucho desperdiciars la primera fila y la primera columna.
Arreglos Tridimensionales?
Se pueden manejar arreglos de cualquier dimensin (bueno hasta 255). En el caso de un arreglo de 3 dimensiones imagina el tercer libro en la segunda fila de libros, en el primer estante de una sala que tiene 10 estantes. Podramos ubicarlo as:
libro[2][1][0]
#include <stdio.h> int main(void){ float nums[10][10][10]; nums[3][3][3] = 45.8; (libro[posicion][fila][estante])
Suponiendo que las primeras posiciones se indexaran como cero Fragmento que muestra como se manejara un arreglo de 3 dimensiones.
...
}
3 4 7 9
9 5 8 3
8 7 2 6
7 9 4 5
8 3 3 4
2 6 1 6
Este es el tratamiento que esperamos, sabiendo que la matriz es de 4 filas por 3 columnas
Pero se puede manejar como si fuera de 3 filas por 4 columnas !!!
a1
7 9 4 5 8 3 3 4 2 6 1 6
a2
4 2 5 8
+
3 1 7 2 9 2 2 9
a3
11 11 9 13
=
11 4 10 6 11 8 3 15
Para sumar 2 matrices ambas deben ser compatibles, es decir, tener las mismas dimensiones.
a2
11 11 9 13 11 4 10 6 11 8 3 15
a1
7 9 4 5
=
8 3 3 4 2 6 1 6
a2
4 2 5 8
+
3 1 7 2 9 2 2 9
Ahora solicitamos los valores de las matrices a1 y a2 desde el teclado y guardamos la suma en a3, para posteriormente imprimirla.
for(x=0; x<i; x++){ for(y=0; y<j; y++){ printf("a1[%d][%d]=", x, y); scanf("%d%*c", &a1[x][y]); printf("a2[%d][%d]=", x, y); scanf("%d%*c", &a2[x][y]); a3[x][y] = a1[x][y] + a2[x][y]; } } ... ...
11 11 9 13
for(x=0; x<i; x++){ for(y=0; y<j; y++){ printf("Ingresa matrizA[%d][%d]=",x,y); scanf("%f%*c",&matrizA[x][y]); } } ...
11 11 9
11
11
4 10
8 3
6
15
que a cada elemento de matrizB se le asigna otro de la matrizB pero con los ndices invertidos, ejemplo: matrizB[3][5]=matrizA[5][3]
Preguntas:
cucei@outlook.com