¿Que es una matriz?
Una matriz (array) es una colección de variables que tienen todas el mismo y único nombre, pero que pueden distinguirse entre sí por un número de índice. Es decir: en vez de tener diferentes variables – por ejemplo de tipo “char” – cada una independiente de las demás (varChar1, varChar2,varChar3…) podemos tener una única matriz que las agrupe todas bajo un mismo nombre (por ejemplo, varChar), y que permita que cada variable pueda manipularse por separado gracias a que dentro de la matriz cada una está identificada mediante un índice numérico, escrito entre corchetes (varChar[0], varChar[1], varChar[2]…).
Las matrices sirven para ganar claridad y simplicidad en el código, además de facilitar la programación.
Al utilizar matrices debemos tener presente que para consultar o asignar valores, debemos comenzar indexando el primer elemento por el número cero, que será el primer elemento de la matriz.
Ejemplo 1 – Como declarar las matrices
int misEnteros[6]; //declara una matriz de 6 variables de tipo int
int misPines[] = {2, 4, 8, 3, 6}; //declara una matriz de 5 variables tipo int
float misSensores[5] = {2, 4, -8, 3.8, 2.1}; //declara una matriz de 5 variables tipo float
char mensaje[5] = "Hola"; //declara una matriz de 5 elementos tipo char
char mensaje [] = "Hola"; //declara una matriz de 5 elementos tipo char
char mensaje [5] = {'h','o','l','a'}; //declara una matriz de 5 elementos tipo char
Las matrices tipo char necesitan un carácter adicional para saber cuál es el fin de la matriz, esto debemos tenerlo en cuenta para el tamaño de la matriz.
Asignar y tomar valores de una matriz
Para asignar y consultar los valores de una matriz se usa el operador de asignación (=).
misSensores[0] = 10; //asigna 10 al primer elemento de la matriz x = misSensores[4]; //guarda el valor del quinto elemento de la matriz en la variable x
Ejemplo 2 – Encender en secuencia un conjunto de Leds
int pines[] = {2, 3, 4, 5, 6, 7}; //declaro una matriz con los numeros de pines a usar
int contador = 0; //Una variable contador
int tiempo = 100; //Una variable guarda el tiempo de activacion de los pines
void setup(){
for (contador=0; contador<6; contador++) { //Uso un for para declarar todos los pines
pinMode(pines[contador], OUTPUT); }
}
void loop() {
for (contador =0; contador <6; contador ++) { //Uso un for para encender leds conectados
digitalWrite(pines [contador], HIGH); //a los pines, y uso una matriz para acceder
delay(tiempo); //a ellos secuencialmente
digitalWrite(pines [contador], LOW);
delay(tiempo);
}
for (contador =5; contador >=0; contador --) {
digitalWrite(pines [contador], HIGH);
delay(tiempo);
digitalWrite(pines [contador], LOW);
delay(tiempo);
}
}
Ejemplo 3 – Modificar una matriz de caracteres
char mensaje [] = "Hola";
void setup() {
Serial.begin(9600);
Serial.println(mensaje);
mensaje[2]='j'; //modifico el elemento numero 2 de la matriz
Serial.println(mensaje);
}
void loop() {}
En este ejemplo usamos un algoritmo para encontrar el valor mínimo y máximo de una matriz de cierto numero de elementos. Primero creo una matriz y le asigno valores aleatorios a todos sus elementos, luego uso el algoritmo que funciona comparando cada valor de la matriz con un mínimo y un máximo predeterminado y actualiza el resultado en unas variables para ser visualizados en el monitor serie.
Ejemplo 4 – Algoritmo para determinar el valor mínimo y máximo de una matriz
int matrizEnteros[20]; //Declaro una matriz de 20 elementos
int valorMaximo = 0; //inicio con el valor minimo que pueden tener los elementos de la matriz
int valorMinimo = 100; //inicio con el valor maximo que pueden tener los elementos de la matriz
int elementoMinimo,elementoMaximo; // para almacenar los indices
void setup() {
Serial.begin(9600); //Inicio el monitor serie a 9600 baudios
Serial.println("Los valores de la matriz son:");
for (int z=0;z<20;z++){ //Asigno valores aleatorios a los elementos de la matriz
matrizEnteros[z]=random(0,100); // solo para ilustrar como funciona el algoritmo
Serial.print(z); //imprimo el contenido de cada elemento de la matriz
Serial.print(" Valor: ");
Serial.println(matrizEnteros[z]);
}
// Este el algoritmo de minimos y maximos
for(int i=0;i<20;i++){ //se evalua cada elemento de la matriz
// Guarda el valor maximo en matriz
if (matrizEnteros[i] > valorMaximo) {
valorMaximo = matrizEnteros[i]; // si es mayor guardo el valor y el indice del elemento de la matriz
elementoMaximo = i;
}
// Guarda el valor minimo en matriz
if (matrizEnteros[i] < valorMinimo) {
valorMinimo = matrizEnteros[i]; // si es menor guardo el valor y el indice del elemento de la matriz
elementoMinimo = i;
}
}
// Imprimo el resultado para el maximo
Serial.print("El valor maximo es: ");
Serial.print(valorMaximo);
Serial.print(" y es el elemento: ");
Serial.print(elementoMaximo);
Serial.println(" de la matriz");
// Imprimo el resultado para el minimo
Serial.print("El valor minimo es: ");
Serial.print(valorMinimo);
Serial.print(" y es el elemento: ");
Serial.print(elementoMinimo);
Serial.println(" de la matriz");
}
void loop() {}
Matrices de cadenas de texto
Es posibles hacer matrices de cadenas de texto, este es un ejemplo de matrices de dos dimensiones, en el ejemplo siguiente el asterisco después del tipo de dato “char*“ indica que esta es una matriz de punteros. Sin entrar en detalles que son los punteros podemos ver como se usan.
Ejemplo 5 – Matrices de cadenas de texto
char* miscadenas[] = {" Esta es la cadena 1", " Esta es la cadena 2", " Esta es la cadena 3",
" Esta es la cadena 4"}; //declaro una matriz de cadenas de texto
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 4; i++) { //imprimo todas las cadenas de la matriz
Serial.println(miscadenas [i]);
delay(500);
}
}
Ejercicios
Ejercicio 1: Consultar una matriz de números
Crear una matriz de 6 variables tipo int, asignarle los valores 10, 20, 30, 40, 50 y 60. Y luego imprimir estos valores en el monitor serie usando un lazo “for”.
Ejercicio 2: Consultar una matriz de caracteres
Crear una matriz de caracteres que contenga el mensaje “Hola mundo”, e imprimir está en el monitor serie.
Ejercicio 3: Guardar y consultar valores
Hacer un programa que capture 6 valores enteros desde el pin A0, los guarde en una matriz, y luego imprima los valores de la matriz en el monitor serie.
Ejercicio 4: Juego de luces
Probar el sketch del ejemplo 2. Podemos hacer alguna variación? Probemos algunas.
Ejercicio 5: Adivinador
Crear matriz con seis o mas mensajes diferentes que sirvan para responder una pregunta (por ejemplo: Si, No, Quizás, Nunca, Siempre, algunas veces, etc). Conectaremos también un pulsador a la entrada digital 2. Cada vez que presionemos el pulsador aparecerá en el monitor serie uno de los mensajes de forma aleatoria. Y de esta forma habremos creado un adivinador, haremos una pregunta y al pulsar el botón este nos dará una respuesta. Para generar el numero aleatorio usar la función random().
