¿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().