Los arrays te llevarán lejos, te sacarán de aquí…
¿Cómo va el fin de mes? ¿Preparando toalla, bañador y operación pérdida de peso express? ¿O te ves acechado por las lluvias y el frío repentinos? Sea como fuere, aunque sea con temperaturas frías, el verano se acerca y eso es siempre motivo de fiesta y jolgorio.
Bueno, no sé a qué venía esto. Hoy estoy de concentración relajada y no soy capaz de centrarme en nada más de cinco minutos. Pero lo voy a intentar por ti y voy a escribir sobre algo de programación, que parece que sea algo en lo que me pueda centrar un poco más.
La idea es ver qué es eso de las matrices, vectores, arrays y nombres varios de esta manera de ordenar datos en programación. Prometido que hoy será corto 😛
Arrays, vectores… ¡Qué más da!
Sabes lo que es una variable, es un lugar dónde guardamos un dato. Se le pone el tipo y el nombre, por ejemplo:
int numero = 0;
Sería una variable llamada numero. Cada vez que la llamásemos se traduciría por el número cero. Esto es útil cuando vamos a utilizar muchas veces un valor ya que desde el inicio del programa lo podemos modificar sin tener que cambiar el código línea a línea.
Bueno, pues a veces nos interesa tener estas variables reunidas. Por ejemplo, tenemos todas las notas de una clase, imaginemos que son 20 alumnos y alumnas. Con ello queremos un programa que calcule la nota media de esa clase. La primera opción sería ir sumando una a una las notas y dividir entre 20 pero la verdad es que para eso no hace falta ningún programa, se hace con la calculadora directamente.
Otra opción tentadora sería la de crear 20 variables, cada una con la nota de un alumno. El problema sería que el orden se perdería y que la programación se haría densa y cansina.
Así que el modo que se utiliza es utilizando vectores. Los vectores son conjuntos de variables que se guardan como en una gran caja. Esta gran caja tiene subapartados donde se pone cada una de las variables ordenadas. Cuando digo ordenadas es que siguen un orden que va desde el 0 hasta el tamaño del vector menos 1. En este caso sería de 0 a 19.
Para programar un vector se hace así:
int notas_clase[20]; float media = 0; void setup() {} void loop() { for (int i = 0; i < 20; i++) { media = media + notas_clase[i]; } media = media/20; }
Como ves, para declarar se pone el tipo de cosas que habrán en el cajón (int, float, …) y se le da entre corchetes el tamaño del cajón. En este caso el tamaño es de 20 por tener 20 alumnos. Luego lo que se hace es darle valores a cada una de las notas y sumarlas. Como ves, se accede por la posición, que es el número del alumno en concreto que estamos mirando menos 1. En este caso no resto uno porque el bucle empieza desde cero.
Pero si te fijas la suma se hace con un bucle, de manera que la cosa va muy muy rápida… Eso sí, no intentes correr este programa porque al no tener notas en el vector no harías nada. Para definir lo que hay dentro del vector se haría así:
int notas_clase[5]={1,5,10,6,4};
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Matrix en estado puro
Estos vectores también son llamados arrays. Y si unimos varios arrays se llaman matrices. Ahora tenemos el caso de que no queremos la media de una clase, sino la de todo el colegio. El colegio está formado por 3 clases de 20 alumnos cada una. ¿Y ahora qué?
Pues aquí entran las matrices. Una matriz está formada por filas y columnas. Las filas contendrán las notas de cada uno de los alumnos al igual que antes. Habrá tres filas por tener tres clases. Si lo piensas, en la primera columna tendremos las notas del primer alumno de cada clase, en la segunda las del segundo… De manera que podríamos ordenar estas notas de mayor a menor en cada clase para comparar qué clase tiene mejores notas o peores notas en general e intentar solucionar este problema.
Así, declararíamos la matriz de esta manera:
int notas_clases[3][20]; float media = 0; void setup() {} void loop() { for (int j = 0; j < 3; j++){ for (int i = 0; i < 20; i++) { media = media + notas_clases[j][i]; } } media = media/60; }
Como ves, ahora hay dos corchetes, uno que marca la longitud del vector y el otro que marca cuántos vectores forman la matriz. Para acceder a un elemento concreto es igual que con los vectores pero teniendo en cuenta también a qué clase pertenece el alumno. Se elige primero la clase menos 1 (la 0, la 1 o la 2). Luego se elige el alumno, que será su número en la lista menos 1. Así, se tienen organizados todos los alumnos.
Aquí tampoco he declarado los valores de las notas, pero se haría (con un ejemplo más pequeño) así:
int notas_clases[2][2]={{5,6},{10,8}};
Que en este caso son alumnos pero que podría ser cualquier cosa. De hecho, se podrían guardar hasta letras.
Que los Strings te lleven lejos…
Para manejar arrays (vectores) de letras se declaran como algo llamado ‘String’. El String es una clase como lo es int o float y por lo tanto no se utiliza como los arrays o las matrices, pero cuando se manejan frases tampoco las podemos manejar igual.
Es por eso que los String tienen funciones especiales para concatenar (unir) diversos String o cadenas, para copiarlas en un array, para comparar las cadenas y ver si son iguales…
Entonces, si estás más focalizado en cadenas de letras tal vez no sea lo mejor utilizar matrices o vectores. Pero la verdad es que para guardar variables relacionadas entre ellas y mantener su orden, lo mejor es utilizar estos tipos de variables capaces de almacenar a más variables.
Te dejo la canción de la semana, algo sosegado, casi invernal, para una primavera que no sabe lo que es.
¿Nos vemos en los comentarios? 😛