Vectores y Matrices

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

Los arrays, arreglos o vectores forman parte de la amplia variedad de

estructuras de datos que nos ofrece C++, siendo además una de las principales
y más útiles estructuras que podremos tener como herramienta de
programación. Los arrays, arreglos o vectores (como los quieras llamar), son
utilizados para almacenar múltiples valores en una única variable. En un
aspecto más profundo, los arrays, permiten almacenar muchos valores en
posiciones de memoria continuas, lo cual permite acceder a un valor u otro de
manera rápida y sencilla. Estos valores pueden ser números, letras o cualquier
tipo de variable que deseemos incluso tipos de datos propios.

En múltiples ocasiones es necesario almacenar gran cantidad de información


en una variable y a menudo sucede que no conocemos con exactitud la
cantidad de datos que debemos almacenar, pero sabemos que sí sería más de
uno, como por ejemplo almacenar las identificaciones de las personas
ingresadas al sistema. Los arrays, arreglos o vectores son una estructura que
nos permite solucionar este tipo de problemas. Para explicar mejor de lo que
hablo, pongamos un ejemplo:

Ejemplo de Arrays o Vectores en C++


Imaginemos que queremos crear un programa con el cual podamos de algún modo
almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de
suministrar la información de cada libro, así entonces, dado que es el usuario quien lo
hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él ingresar
por medio de nuestro programa. El caso principal es que queremos almacenar
en la memoria el titulo y el autor de TODOS y cada uno de los libros. Entonces
¿cómo crees que podrías hacer esto? Con lo que sabemos hasta hora, se nos
podrían ocurrir un par de cosas. Veamos:

Posible Solución 1: Sin usar vectores (errónea):


Podríamos pensar primero, "listo, está bien, es fácil, declaro una variable
llamada titulo y otra autor, ambas de tipo string y se las pido al usuario", pues
bien, esta solución digamos que nos permite almacenar la información del
primer libro que el usuario ingrese, pero en cuanto desee ingresar otro libro
¿qué vamos a hacer?, si lo hacemos así, cuando el usuario ingrese la
información para un nuevo libro, va a sobrescribir los valores anteriores y
habremos perdido la información del primero, de manera que esta solución no
es válida.

Posible Solución 2: Sin usar vectores o matrices (errónea):


Pensando un poco más en esto, se nos ocurre una forma de almacenar la
información de cada libro, podríamos crear un par de variables distintas para
cada libro. Pero de inmediato nos damos cuenta que si por ejemplo al usuario
se le cruzara por la cabeza ingresa información para 10 libros tendríamos
entonces ¡20 variables distintas!, 2 por cada libro, no es mucho, pero si se le
ocurriera ingresar 1000 libros, ¿estarias dispuesto a declarar 2000 variables?.
De modo que esta alternativa es incluso peor que la anterior y seguimos aún
sin solucionar nuestro problema.

Posible Solución 3: Usando vectores o matrices (correcta):


¡Pues bien!, tal y como mencioné antes, los arrays o los vectores han venido
para ayudarnos en múltiples circunstancia similares a esta. Dado que un array,
arreglo o vector es capaz de almacenar múltiples valores en una misma
variable, tenemos el elemento perfecto para almacenar la información de todos
los libros, podremos crear un vector de un tamaño cualquiera capaz de
contener en sí los nombres de los autores y otro con los títulos de los libros o
alternativamente podríamos crear una matriz de dos columnas que contenga
en la primera columna los autores y en la segunda los títulos; ambas
soluciones son validas y vamos a ver ambas, usando vectores en esta sección
y usando matrices en la sección de matrices.

Nota: En C++, a diferencia de algunos otros lenguajes de programación, los


vectores y las matrices presentan un "inconveniente" con el tamaño. Es decir,
no es posible crear de una manera sencilla un vector capaz de almacenar una
cantidad de información indefinida, es necesario ingresar con antelación la
cantidad de datos (tamaño) que el vector o la matriz tendrá. Este problema se
puede solucionar, pero es algo que no veremos en esta sección. Si buscas
cómo crear vectores de tamaño dinámico o matrices de tamaño dinámico, te
recomiendo ver la sección de Punteros en C++. No te recomiendo ver esa
sección sin antes haber entendido esta.

Muy bien, ahora que sabemos la gran utilidad de los arrays, vectores o arreglos
para nosotros, aprendamos más acerca de estos, veamos como declarar un
vector, array o arreglo, como recorrer un vector y algunos ejemplos de esto.

¿Cómo declarar un Array o Vector en C++?


Para declarar un vector en C++, se deben seguir las mismas normas básicas
que se siguen para declarar una variable cualquiera, con un pequeño cambio
en la sintaxis. Para declarar un vector, arreglo o como lo quieras llamar,
necesitaremos saber el tipo de los datos que irán al interior de este, es decir,
serán número enteros, o numero decimales o cadenas de texto, etc.
necesitamos también, como siempre, un nombre para el vector y un tamaño
máximo. La sintaxis para declarar un vector en C++ es la siguiente:

tipo_de_dato nombre_del_vector[tamanio];

Tenemos entonces, tal como mencioné antes, que para declarar un vector en
C++, debemos definirle un tipo de los datos, sea entero, float, string, etc.,
debemos darle un nombre y al interior de los corchetes "[]" debemos poner el
tamaño máximo que tendrá el vector, es decir la cantidad máxima de datos que
podrá contener (recuerda que en C++ esto es necesario hacerlo). Veamos un
ejemplo en el cual pondré la declaración de varios vectores de diferentes tipos
y tamaños en C++.
Declaración de un Array o Vector en C++

int my_vector1[10];
float my_vector2[25];
string my_vector3[500];
bool my_vector4[1000];
char my_vector5[2];

Veamos rápidamente que representa cada línea del código anterior.

Línea 1
Esta línea contiene la declaración de un vector llamado my_vector1, el cual
contendrá un máximo de 10 elementos de tipo entero.

Línea 2
Esta línea contiene la declaración de un vector llamado my_vector2, el cual
contendrá un máximo de 25 elementos de tipo float.

Línea 3
Esta línea contiene la declaración de un vector llamado my_vector3, el cual
contendrá un máximo de 500 elementos de tipo string.

Línea 4
Esta línea contiene la declaración de un vector llamado my_vector4, el cual
contendrá un máximo de 1000 elementos de tipo booleano.

Línea 5
Esta línea contiene la declaración de un vector llamado my_vector5, el cual
contendrá un máximo de 2 elementos de tipo char.

Ya que está claro cómo se declara un vector, vamos a ver cómo inicializarlo, es
decir inicializar un vector en C++ o en otras palabras darle valores a un vector.

¿Cómo inicializar un Array o Vector en C++?


En cuanto tenemos declarado un vector, es posible asignarle valores,
evidentemente estos valores deben coincidir con el tipo de dato que le
asignamos a dicho vector, no tendría sentido ingresar como valores de un
vector cadenas de caracteres si el tipo de dato de dicho vector es numérico.

Voy a mostrar a continuación formas distintas de inicializar un vector, todas son


validas, ya es cuestión de nuestras necesidades y conocimientos determinar
cuál es útil y en qué momento. Veamos entonces:

Forma 1 de declarar un Array o Vector en C++

string vector[5] = {"5", "hola", "2.7", "8,9", "adios"};


Aquí hemos declarado un vector de tipo string tamaño 5 y lo hemos inicializado
con diferentes valores, es necesario notar que cada valor va entre comillas
dobles "" puesto que son strings. El valor inicial corresponde a la casilla o
índice 0 y tiene el valor de "5", el índice 1 el valor es "hola" y el índice 4 el valor
es "adiós", es importante notar que el primer índice de n array o vector no es el
UNO sino que es el CERO.

Forma 2 de declarar un Array o Vector en C++

int vector2[] = {1,2,3,4,10,9,80,70,19};

Aquí hemos declarado un vector de tipo int y no especificamos su tamaño, si el


tamaño no se especifica entre los corchetes, el vector tendrá como tamaño el
número de elementos incluidos en la llave, para este caso es 9.

Particularidades de los Arrays, arreglos o Vectores en C++


Con C++, existen algunas particularidades, en cuanto a la declaración de
vectores, que me parece importante destacara para que en momento de quizá
caer en ellas comprender como podrían cambiar las cosas o básicamente en
que consiste el error, veamos:

Particularidad 1 al momento de declarar o inicializar un Vector o Array en


C++

int vector2[3];
vector2[3] = {1,5,10};

Dadas las características de C++, es fácil pensar que és factible crear o


declarar un vector de un tamaño cualquiera y posteriormente inicializarlos de
forma habitual como se muestra en este código, sin embargo hacer esto es un
error, si declaramos un vector y no lo inicializamos inmediatamente, no es
posible inicializarlo de la forma que hemos visto, es decir entre llaves cada
valor, como en la línea 2 del código anterior. La única forma de inicializar el
vector, o mejor dicho, darle valores a cada una de sus casillas, es hacerlo uno
por uno, es decir darle un valor a la casilla cero a la uno y a la 2 (para un vector
de tamaño 3). Por defecto, al declarar un vector sin ser inicializado, cada una
de las casillas de este vector toma como valor el valor por defecto del tipo de
variable, para el caso de los enteros (int) es -858993460. Así entonces para
asignar valores a cada casilla lo hacemos así:

int vector2[3];
vector2[0] = 1;
vector2[1] = 3;
vector2[2] = 10;

Es importante notar en este código, que el número que va entre corchetes ya


no indica tamaño (pues vector2 ya está declarado) sino que indica el índice o el
numero de la casilla con la cual estaremos operando (recordemos que el primer
índice es cero y no uno), en el código anterior, habíamos declarado un vector
de tamaño 3, por lo cual debíamos asignar valores a los índices 0, 1 y 2.

Particularidad 2 al momento de declarar o inicializar un Vector o Array en


C++

float vector3[5] = {10.5};

En C++ a la hora de inicializar un array, arreglo o Vector, estamos


acostumbrados a que si inicializamos inmediatamente después de declarar el
vector, debemos poner la misma cantidad de elementos al interior de las llaves
de manera que corresponda con el tamaño del vector, pues bien, estos es lo
más recomendable, sin embargo si ponemos una cantidad de elementos menor
a la del tamaño real del vector, estamos queriendo decir que estos elementos
toman los valores puestos entre las llaves y los demás serian cero, para el caso
del código anterior el primer elemento (el del índice cero) va a tener un valor de
10.5 y los otros 4 elementos van a valer cero.

Ya tenemos claro cómo declarar un array o vector en C++, algunas


características un tanto particulares de estos, sin embargo aun no sabemos
cómo obtener los datos de un array, es decir una vez el array o vector este
lleno con los elementos que queremos, como podemos obtener esa
información y más aun, como obtener un valor específico dentro del array.
Veámoslo:

Obtener el valor de una casilla específica en un array en C++


Es muy común el caso en el que tenemos un vector con una enorme cantidad
de elementos, sin embargo de todos estos, solo nos interesa uno en especial y
corremos con la suerte de saber cuál es su índice, sabiendo el índice de un
elemento en un array es bastante sencillo obtener el valor de este:

float vector4[5] = {10.5, 5.1, 8.9, 10, 95.2}; //Array con 5 elementos
float numero5 = vector4[4]; //Para acceder al elemento 5, se usa el índice 4
float primerNumero = vector4[0]; //Para el primer elemento se usa el índice 0

Como podemos ver, para acceder a un valor específico conociendo el índice


del elemento, solo basta con escribir dicho índice entre los corchetes "[ ]",
recuerda que el índice comienza desde cero, así por lo tanto en un vector de 5
elementos (como el del ejemplo), el último elemento esta en el índice 4 y el
primer elemento del array en el índice 0.

Ya tenemos entonces una forma de acceder de forma individual a un elemento


de un array o vector, vamos a ver ahora como recuperar todos los elementos
de un vector de forma simple

Recorrer un Array o Vector en C++


Para obtener todos los datos que se encuentran al interior de un vector, es
necesario recorrer el array o vector, para recorrerlo, se usa casi siempre un
ciclo for, en algunos casos mas específicos un ciclo while, pero generalmente
el ciclo for es el ideal para esto, dado que conocemos el tamaño del array. La
lógica de este procedimiento es la siguiente, el ciclo for comenzara desde cero
e ira hasta el tamaño del vector, de modo que la variable de control que
generalmente llamamos "i", será la que va a ir variando entre cero y el tamaño
del array, de esta forma al poner la i al interior de los corchetes, estaremos
accediendo al valor de cada casilla del vector y podremos hacer lo que sea
necesario con dicho valor, veamos:

Nota: A veces no es posible determinar con facilidad el tamaño exacto de un


vector, pero en C++ existen varias formas de determinar el tamaño de un array
o vector fácilmente, aquí explicare un método. Cabe notar que este tamaño es
el que ira como tope del ciclo for y sería equivalente a que nosotros mismos, en
caso de saber el tamaño del vector, lo pongamos allí, sin embargo como
veremos en otra sección no siempre es posible saber con certeza el tamaño de
un vector, es por esto que explico cómo hacerlo.

#include "iostream"

using namespace std;

int main()
{
int edades[] = {1,2,9,8,16,32,9,50,36,20,1,87};
int limite = (sizeof(edades)/sizeof(edades[0]));
for (int i = 0; i < limite; i++)
{
cout<<edades[i]<<endl;
}
}

Vamos a ver de forma resumida en qué consiste y que hace cada una de estas
líneas

Línea 1:
Tenemos en la primera línea la declaración de un vector que contiene las
edades de 12 personas, notemos que entre los corchetes no se puso ningún
numero, pues no es necesario, ya que el vector tendrá el tamaño según la
cantidad de elementos que declaremos entre las llaves, evidentemente si
pusiéramos un 12 entre los corchetes, no habría ningún problema.

Línea 2:
En la segunda línea, tenemos la declaración del límite del ciclo o en otras
palabras el tamaño del array. El tamaño de un array se puede calcular de
varias formas, aquí lo obtenemos calculando el tamaño del array entero,
dividido por el tamaño del primer elemento de dicho array, para mas detalles de
esto, verifica la información sobre el operador sizeof.

Línea 3 a 6:
Desde la tercera línea hasta la sexta, tenemos entonces un ciclo for que
comienza en cero y termina en el límite (es importante notar que la condición
usada es estrictamente menor "<" y no menor o igual "<="), al interior de este
ciclo, es donde accedemos a cada uno de los elementos del vector por medio
de la sintaxis explicada anteriormente

Línea 5:
La quinta línea es quizá la más vital aunque sin las demás no tendríamos nada.
En esta línea, estamos accediendo a cada uno de los elementos del array de
edades, un elemento por cada vuelta que da el ciclo, accedemos a cada
elemento poniendo entre los corchetes la variable i, que es la que esta
cambiando a medida que el ciclo va girando, así estaremos accediendo a todos
los elementos e imprimiéndolos por pantalla

Muy bien, llego el momento de afianzar nuestros conocimientos viendo un


ejemplo. Ahora que tenemos claro como declarar un vector en C++, como
recorrerlo y como acceder a sus datos, vamos a ver un ejemplo basado en el
problema que planteé al inicio de esta sección (el de los libros).

Ejemplo 1 de Arrays o Vectores en C++


El problema es simple, queremos crear un programa con el cual podamos
guardar los títulos y los autores de diferentes libros sin perder ninguno de ellos.
El usuario es el encargado de suministrar la información de cada libro. Vamos a
suponer que el usuario solo podrá ingresar un máximo de 5 libros, para así
tener un tamaño de vector fijo. Veamos entonces como se haría esto:

#include "iostream"

using namespace std;

int main()
{
char titulos[5];
char autores[5];
cout << "Por favor ingrese la siguiente información de los Libros: \n";
for(int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 <<"********:\n";
cout << "Titulo: ";
cin >> titulos[i];
cout << "Autor: ";
cin >> autores[i];
}
}

Estoy seguro de que a estas alturas comprendes bien qué hace cada una de
estas líneas. En caso de que no comprendas nada de esto, te recomiendo leer
nuevamente esta sección, la sección de ciclos o la sección de entrada y salida
de datos.
Hay que considerar que el tipo de dato que estamos usando para los vectores
de titulos y autores es char por lo tanto debes ingresar un único caracter
cuando pruebes el algoritmo, pues de lo contrario el comportamiento será un
poco extraño (aunque tiene su explicación). A continuación haremos este
mismo ejemplo pero usando cadenas de texto completas (strings) para poder
ingresar sin problemas más de una letra.

Nota: Recuerda que si no tienes clara alguna cosa, detectas algún error, tienes
alguna sugerencia o simplemente tienes algo que comentarme, puedes hacerlo
con total tranquilidad en la sección de comentarios.

Ejemplo 1 mejorado
Vamos a solucionar el mismo problema, pero esta vez lo haremos bien. Vamos
a utilizar cadenas de texto completas (string) de modo que al ingresar un titulo
o un autor podamos poner textos completos:

#include "iostream"
#include "string"
using namespace std;

int main()
{
string titulos[5];
string autores[5];
cout << "Por favor ingrese la siguiente información de los Libros: \n";
for(int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 << "********:\n";
cout << "Titulo: ";
cin >> titulos[i];
cout << "Autor: ";
cin >> autores[i];
}
}

Muy bien, tal como dije en el ejemplo anterior ahora ya podemos ingresar más
de un caracter para el título y los autores (tal y como debe ser) y nuestro
algoritmo funciona aún mejor. Puedes ver que los unicos cambios necesarios
fueron importar la librería string y poner los tipos de datos como string en vez
de char y eso solucionó por completo nuestro problema. Ten en cuenta que en
versiones antiguas de compiladores usar la funcion cin para leer strings genera
un error así que asegurate de usar una versión reciente o usa entonces la
función getline

Ejemplo perfeccionado
En la versión del ejemplo anterior tenemos un problema un poco delicado
(discubierto gracias a sus comentarios), y es que cuando ingresamos el título
del libro o el autor de este con espacios, es decir, más de una palabra
(habitualmente es así) el objeto cin interpresta esto como un fin de línea y no
nos solicita el siguiente valor. Para solucionar esto haremos uso de la
funciín getline (la que mencioné hace un momento) que nos permite solucionar
este tipo de problemas.Vamos a solucionar el mismo problema, pero esta vez
lo haremos bien. Vamos a utilizar cadenas de texto completas (string) de modo
que al ingresar un titulo o un autor podamos poner textos completos:

#include "iostream"
#include "string"
using namespace std;

int main()
{
string titulos[5];
string autores[5];
cout << "Por favor ingrese la siguiente información de los Libros: \n";
for(int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 << "********:\n";
cout << "Titulo: ";
//cin >> titulos[i]; //No funciona con espacios
getline(cin, titulos[i]);
cout << "Autor: ";
//cin >> autores[i]; //No funciona con espacios
getline(cin, autores[i]);
}
}

Como puedes apreciar, hemos reemplazado las líneas que usaban cin para


leer los datos por la función getline(...) que recibe como primer argumento el
flujo de entrada de cin y como segundo argumento la variable en la que
queremos poner el valor.

Pues bien, creo que es todo de momento con los arrays, arreglos o vectores en
C++ de momento, espero más adelante añadir unos videos tutoriales con más
explicaciones y ejemplos de este tema, además de añadir varios ejemplos más
aquí mismo. De momento, espero que toda esta información haya sido de tu
utilidad.

Las matrices o como algunos las llaman "arreglos multidimensionales" son una
estructura de datos bastante similar a los vectores o arreglos. De hecho, una
matriz no es más que una serie de vectores contenidos uno en el otro (u otros),
es decir, una matriz es un vector cuyas posiciones son otros vectores.
Hablemos con más detalle de esto para quedar más claros.

Nota: Te recomiendo ver y comprender la sección de arrays o vectores, antes


de iniciar con este artículo para poder dominar el tema de éste con más
facilidad.
Primero, dejemos claro qué es una matriz. En términos generales, una matriz
es una estructura conformada por filas y columnas, idealmente más de dos filas
y columnas, de hecho, podemos decir que si una "matriz" tiene una única fila o
una única columna, entonces estamos hablando de un vector y no una matriz
como tal.

La intersección de una fila y una columna de la matriz son las casillas y cada
una de ellas podrá poseer información, simple o compleja (ya dependerá de
nuestras necesidades).

Ahora, tal como dije antes, un vector posee una única fila (o columna, como lo
quieras ver) y de este modo un grupo de vectores unidos conforman una
matriz, es por esto que al comienzo dije que una matriz es un vector
conformado por otra serie de vectores.

Viéndolo desde el punto de vista de la programación, una matriz es un vector


cuyas posiciones (de la cero a la n) son, cada una de ellas, otro vector

Como siempre, la mejor forma de comprender algo es viendo un ejemplo en


acción, así que veamos un buen ejemplo de matrices en C++

Matrices en C++ un buen ejemplo


Muy bien voy a retomar el ejemplo de la sección anterior donde teníamos la
necesidad de almacenar los títulos y los autores de una serie de libros dada.

Tal como mencioné en dicha sección, una solución alternativa al problema,


además de correcta y adecuada; es crear una matriz que almacenará en la
primera columna los títulos, y en la segunda columna los autores; cada fila será
entonces la información completa de un libro.

Para solucionar este problema, aprendamos primero algunas normas básicas


para poder crear y usar matrices en C++.

¿Cómo se crea una Matriz en C++?


Declarar una matriz en C++ es muy similar a la de un vector, se deben seguir
las mismas normas para declarar una variable pero una vez más con un
pequeño cambio en la sintaxis. Primero necesitaremos saber el tipo de los
datos que irán al interior de este (números, decimales o cadenas de texto, etc.)
necesitamos también, como siempre, un nombre para la matriz y un tamaño
máximo tanto para las filas como para las columnas. La sintaxis para declarar
una matriz en C++ es la siguiente:

tipoDato nombreMatriz[filas][columnas];

Nota: Recuerda que en C++, no es posible crear de una manera sencilla un


vector (y por ende una matriz)capaz de almacenar una cantidad de información
indefinida, es necesario ingresar con antelación la cantidad de datos (filas y
columnas) que la matriz tendrá.
Tenemos entonces, como podrás ver, que la sintaxis es casi la misma excepto
que hemos añadido un par de corchetes "[]" más esta vez y al interior de éstos
debemos poner el número de filas y columnas máximas de la matriz,
respectivamente. Veamos un ejemplo en el cual pondré la declaración de
varias matrices de diferentes tipos y tamaños en C++.

Declaración de una matriz en C++

int myMatriz1[10][5];
float myMatriz2[5][10];
string myMatriz3[15][15];
bool myMatriz4[1000][3];

Veamos rápidamente que representa cada línea del código anterior.

Línea 1
Esta línea contiene la declaración de una matriz llamada myMatriz1 que tendrá
10 filas y 5 columnas y cada una de las 50 casillas tendrá datos de tipo entero.

Línea 2
Esta línea contiene la declaración de una matriz llamada myMatriz2 que tendrá
5 filas y 10 columnas y cada una de las 50 casillas tendrá datos de tipo flotante.

Línea 3
Esta línea contiene la declaración de una matriz llamada myMatriz3 que tendrá
15 filas y 15 columnas (una matriz cuadrada) y cada una de las 225 casillas
tendrá datos de tipo string.

Línea 4
Esta línea contiene la declaración de una matriz llamada myMatriz4 que tendrá
1000 filas (sí, leíste bien) y 3 columnas y cada una de las 3000 casillas
(también leíste bien, tres mil casillas) tendrá datos de tipo booleano.

Ya que está claro cómo se declara una matriz, vamos a inicializarla, es decir
darle un valor a cada casilla, según su tipo de dato.

¿Cómo inicializar una matriz en C++?


En cuanto tenemos declarado una matriz, es posible asignarle valores a cada
una de sus casillas, evidentemente estos valores deben coincidir con el tipo de
dato que le asignamos a dicha matriz

Voy a mostrar a continuación formas distintas de inicializar una matriz, todas


son validas, ya es cuestión de nuestras necesidades y conocimientos
determinar cuál es útil y en qué momento. Veamos entonces:

Forma 1 de declarar una matriz

int myMatriz1[2][2] = {{1,2},{3,4}};


Aquí hemos declarado una matriz de tipo int de dos filas y dos columnas y la
hemos inicializado con diferentes valores. El valor inicial corresponde a la
casilla 0,0 (fila cero, columna cero) y tiene el valor de 1, en la fila cero columna
uno tenemos el valor de 2, en la fila uno columna cero el valor de 3 y finalmente
en la fila uno columna uno el valor de 4. Es importante notar que el primer tanto
la fila como la columna comienzan desde cero y no desde uno, por esto la
primer casilla corresponde a la fila y columna cero.

¡Bien! Ya sabemos cómo declarar una matriz en C++, sin embargo, aún no
sabemos cómo acceder a los datos que estas contienen. Veámoslo:

Obtener el valor de una casilla específica


Para acceder al valor de una casilla nuevamente haremos uso de los
corchetes, pero esta vez no para declarar tamaños (porque eso ya lo hicimos)
sino para indicar posiciones (fila y columna).

int myMatriz1[2][2] = {{1,2},{1,1}}; //Matriz con 4 elementos


int fila1Casilla1 = myMatriz[1][1]; //Para acceder a la casilla 1,1 se usan dichos
indices
int primerNumero = myMatriz[0][0]; //La primer casilla siempre será la de la fila
0 columna 0

Como podemos ver, para acceder a un valor específico conociendo el índice de


la casilla, solo basta con escribir dicho índice entre los corchetes "[][]", recuerda
que el índice comienza desde cero, así por lo tanto en una matriz de vector de
2 por 2 (como el ejemplo), el último elemento está en el índice 1 y el primer
elemento en el índice 0.

Recorrer una matriz en C++


Para obtener todos los datos que se encuentran al interior de una matriz,
debemos acceder a cada posición y esto se hace fácilmente con dos ciclos for
(anidados). La lógica de este procedimiento es la siguiente, el primer ciclo for
comenzará desde cero e ira hasta el número de filas, de modo que la variable
de control que generalmente llamamos "i", será la que va a ir variando entre
cero y el tamaño del array, de esta forma al poner la i al interior de los
corchetes, estaremos accediendo al valor de cada fila y el segundo ciclo irá de
cero al número de columnas y normalmente se usa la variable llamada j para
acceder a cada columna, veamos:

Nota: En el siguiente código uso una forma sencilla y rápida de obtener la


cantidad o número de filas de una matriz y también cómo obtener el número o
cantidad de columnas de una matriz. Ten en cuenta que esto es importante,
pues a veces no tenemos la certeza del tamaño de la matriz.

#include

using namespace std;


int main()
{
int edades[3][2] = {{1,2},{9,8},{14,21}};
int filas = (sizeof(edades)/sizeof(edades[0]));
int columnas = (sizeof(edades[0])/sizeof(edades[0][0]));
for (int i = 0; i < filas; i++)
{
for (int j = 0; j < columnas; j++)
{
cout<<edades[i][j]<<endl;
}
}
}

Vamos a ver de forma resumida en qué consiste y que hace cada una de estas
líneas

Línea 1:
Tenemos en la primera línea la declaración de una matriz que contiene las
edades de tres parejas de personas y asignamos cada uno de los valores.

Líneas 2 y 3:
En estas líneas, tenemos la declaración del número de filas y columnas de la
matriz, que serán el límite del primer y segundo ciclo, respectivamente. Para
más detalles de esto, verifica la información sobre el operador sizeof.

Líneas 4 a 7:
Aquí, tenemos entonces un ciclo for que comienza en cero y termina en el
número de filas y luego tenemos otro ciclo for (anidado) que irá de cero hasta el
número de columnas (es importante notar que la condición usada en ambos
ciclos es estrictamente menor "<" y no menor o igual "<="), al interior del
segundo ciclo, es donde accedemos a cada una de las casillas de la matriz
usando los corchetes.

Línea 8:
La octava línea es quizá la más vital aunque sin las demás no tendríamos
nada. En esta línea, estamos accediendo a cada una de las casillas de la
matriz, fila por fila y columna por columna. Accedemos a cada elemento
poniendo entre los corchetes la variable i y j, que son las que están cambiando
a medida que los ciclos van "girando", así estaremos accediendo a todos los
elementos e imprimiéndolos por pantalla por medio de cout.

Muy bien, llegó el momento de afianzar nuestros conocimientos viendo un


ejemplo. Ahora que tenemos claro como declarar un vector en C++, como
recorrerlo y como acceder a sus datos, vamos a ver un ejemplo basado en el
problema que planteé al inicio de esta sección (el de los libros).

Ejemplo de Matrices en C++


El problema es simple, queremos crear un programa con el cual podamos
guardar los títulos y los autores de diferentes libros sin perder ninguno de ellos.
El usuario es el encargado de suministrar la información de cada libro. Vamos a
suponer que el usuario solo podrá ingresar un máximo de 5 libros, para así
tener un tamaño de vector fijo. Veamos entonces cómo se haría esto usando
matrices:

#include "iostream"
#include "stdio.h"
#include "string"

using namespace std;

int main()
{
string libros[5][2];
cout << "Por favor ingrese la siguiente información de los Libros: \n";
string titulo ,autor;
for(int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 << "********:\n";
cout << "Titulo: ";
getline(cin,titulo);
cout << "Autor: ";
getline(cin,autor);
libros[i][0] = titulo;
libros[i][1] = autor;
}

system("pause");

return 0;
}

Notar que en el código anterior, debido a que tenemos la completa certeza de


sólo usar dos columnas, no es necesario usar otro ciclo for (de hecho, eso
complicaría todo) basta con poner de manera explícita que el valor del título va
en la columna cero y el del autor en la columna uno.

Nota: Recuerda que si no comprender alguna cosa, detectas algún error, tienes


alguna sugerencia o simplemente tienes algo que comentarme, puedes hacerlo
con total tranquilidad en la sección de comentarios.

También podría gustarte