Arreglos
1. Introducción
1.1. Inicialización de un arreglo
Los arrays pueden ser inicializados junto con la declaración.
Por ejemplo:
-
float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
-
float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
-
int N[] = {1, 2, 3, 6};
-
int M[][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21};
-
char Mensaje[] = "Error de lectura";
-
char Saludo[] = {'H', 'o', 'l', 'a', 0};
-
int y[5] = {1,2,3};
- int z [5] = { };
En estos casos no es obligatorio especificar el tamaño para la primera dimensión, como ocurre en los ejemplos de las líneas 2, 3, 4, 5 y 6.
En estos casos la dimensión que queda indefinida se calcula a partir del número de elementos en la lista de
valores iniciales.
En el caso 2, el número de elementos es 10, ya que hay diez valores en la lista.
En el caso 3, será 4.
En el caso 4, será 3, ya que hay 9 valores, y la segunda dimensión es 3: 9/3=3.
En el caso 5, el número de elementos
es 17, 16 caracteres más el cero de fin de cadena.
En el ejemplo 6 el último elemento suministrado no es el carácter cero, sino que es el carácter nulo.
Si se suministran menos datos que el tamaño del arreglo, se comenzará a asignar desde el
índice 0 (1er elemento), las posiciones restantes se inicializan en 0. Por ello el ejemplo 7 contendrá: 1,2,3,0,0.
Y el caso 8 será un arreglo inicializado con todos sus elementos en 0.
Esta forma de inicializar utilizando llaves {} solo es válida al momento de declarar el arreglo. Posteriormente solo será posible asignar valores de a una posición por vez.
Veamos unos ejemplos de declaración de arreglos.
#include <iostream>
using namespace std;
int main(int argc, char **argv){
float arreglo_uno[]; //esto acusa error: NO hay dimensión ni valores
float arreglo_dos[5]; // esto define un arreglo de dimensión 5 pero NO está inicializado
cout<<arreglo_dos[3]; //muestra "basura" porque no está inicializado
float arreglo_tres[]={1.0,2.0,3.0}; //Define e inicializa un arreglo.
//La dimensión surge de la cantidad de elementos
float arreglo_cuatro[6]={} //define un arreglo de dimensión 6 e inicializa todos los elementos en 0
char texto[]="esta forma es ideal cuando no sé la cantidad de elementos";
return 0;
}
Si intentamos compilar este código la línea 4 tiraría el siguiente error:
Si comentamos la línea 4 y corremos el código, veremos que el valor que se muestra como resultado de la ejecución de la línea 7 sería incoherente.. o lo que conocemos como BASURA.
Se pide al alumno razonar y justificar que sucedería se agrego antes de la línea 12 la siguiente línea:
Veamos como definir y cargar una matriz de 2 x 2:
#include <iostream>
using namespace std;
int main(int argc, char **argv){
float matriz[2][2]; //esto define un arreglo bidimensional de 2x2 que NO está inicializado
cout<<"ingrese elemento fila 1 columna 1: ";
cin>>matriz[0][0];
cout<<"ingrese elemento fila 1 columna 2: ";
cin>>matriz[0][1];
cout<<"ingrese elemento fila 2 columna 1: ";
cin>>matriz[1][0];
cout<<"ingrese elemento fila 2 columna 2: ";
cin>>matriz[1][1];
//cout<<matriz;
//cout<<matriz[];
return 0;
}
Se pide al alumno:
- Descomentar la línea 13 y compilar y ver que sucede. Ver si puede justificar
- Descomentar la línea 14 y compilar y ver que sucede. Ver si puede justificar
- ¿Como se puede mostrar la matriz?