En todos nuestros sketches aparecen variables con palabras que las preceden y que indica el tipo de datos de las mismas. También hemos visto estas palabras delante de los nombres de todas las funciones, indicando el tipo de dato que devuelven. Además, cuando hablamos de las variables, recomendábamos ajustar nuestras variables a los tipos de datos necesarios, sin pecar de demasiado pequeños ni demasiado grandes. A continuación tenéis el listado de los distintos tipos de datos primitivos que vamos a manejar en nuestros sketches de Arduino.
Hay unas cuantas cosas peculiares, que a los que han programado alguna vez les resultará curioso, como que float y double hagan referencia al mismo tipo de datos, por ejemplo. Expliquemos un poco los intervalos de valores de cada uno:
– Los tipos de datos int, byte, unsigned char, char, word, unsigned int, long y unsigned long representan números sin parte decimal.
– Por su parte, los tipos de datos float y double representan números en punto flotante, es decir, tienen parte decimal.
– Un array es un conjunto de variables que se almacenan en posiciones sucesivas, determinadas por índices numéricos. El primer índice de un array es 0, por lo que un array con 5 elementos, tendrá como posiciones inicial y final 0 y 4, respectivamente.
Para acceder a las distintas posiciones de un array se utilizan los corchetes [ ], incluyendo en su interior el índice que queremos alcanzar. La declaración de un array y su inicialización lo podemos ver en el siguiente código de ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//No podemos declarar un array sin indicar su tamaño int coleccion[]; //Provocará un error de compilación //Podemos declarar un array indicando su tamaño int coleccion1[5]; //Almacenamos valores coleccion1[0] = 1; coleccion1[1] = 45; //... //Podemos hacerlo todo de golpe int coleccion2[3] = {2, 23, 53}; //De esta forma nos evitamos indicar el índice porque ya detecta que su //tamaño es dos. int coleccion3[] = {2, 3}; //Lectura de una posición y asignación de su valor a x int x = coleccion1[0]; |
También es posible recurrir a arrays de más de una dimensión (2,3,…). Su uso se resume en el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//Declaramos e inicializamos el array de dos dimensiones int matriz[2][5] = {{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}; /* Valor del array de dos dimensiones |---------| |1-2-3-4-5| |5-4-3-2-1| |---------| */ //Podemos asignar valores por separado matriz[0][2] = 9; matriz[1][1] = 8; /* Nuevo valor del array de dos dimensiones |---------| |1-2-9-4-5| |5-8-3-2-1| |---------| */ //En estos arrays multidimensionales sólo se puede omitir la dimensión del //primer índice, el resto hay que indicarlos int matriz[][5] = {{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}; |
– Los datos string no son más que un caso particular de arrays, dedicados al almacenamiento de caracteres (char). Veremos cómo operar con strings en otro artículo.
– Por último hay que tener en cuenta el tipo de datos void, que se usa en funciones que no devuelven ningún valor.
Hola, lo que pasa es que no me quedo claro esto despues de leer la entrada de operadores matematicos… ahi habla del overflow y underflow, lo que no me queda claro es que por ejemplo si tenemos algo asi como «int suma = 30000 + 2768» significa que la variable suma es igual a -32767? una alternativa que se me ocurrio fue pensar que -32767 y 32767 hacen referencia a la «longitud» del numero… es decir que si tengo un numero de 32767 cifras y le sumo 10 por ejemplo eso dara como resultado -32767….
Porfavor saquenme de esta duda 😀
Hola Francisko, en primer lugar gracias por el comentario.
En efecto estás en lo cierto con la suma, es decir, 32768 + 1 = -32768. Hablamos de ambos problemas (underflow y overflow) en el artículo Operadores Matemáticos I.
Si tienes cualquier otra duda estaremos encantados de ayudarte.
Hola, no logro que funcione en mi codigo un array con 31 datos del tipo: » float travel_m1[31] = {0, -1.3, -1.4, -1.3, -1.4, -1.3, -1.4, -1.3, -1.4, -1.3, -1.4, -1.3, -1.4, -1.4, -1.3, -1.4, -1.3, -1.4, -1.3, -1.4, -1.3, 2, 4, 4, 4, 4, 4, 3, 1, 1, 0};» . Estoy llamandolo dentro de un «for» que es: «for (int i=0; i <= 31; i++){ » y llamando el dato de este modo: «traveled_m1 = travel_m1 – error_m1 ;» y me contesta: «invalid types ‘int[int]’ for array subscript»
A) Podrían informarme si es valido un array con datos que tienen una decimal?
B) Logran identificar que estoy haciendo mal?
Saludos
Oscar
Hola Óscar. A priori veo dos problemas, uno en el bucle for y otro en la forma de operar.
Con respecto a la forma de operar, si estás dentro de un array, para operar con cada uno de los elementos, hay que hacerlo accediendo a través de su índice. Por ejemplo, para acceder al primer elemento del array «travel_m1» hay que utiliar el código travel_m1[0], y así sucesivamente. Recuerda comprobar que los tipos de datos son compatibles entre sí.
Con respecto al bucle for, recuerda que los arrays empiezan en la posición 0. Por tanto, un array de 10 elementos, tendrá su primera posición en el índice 0 «nombre_array[0]» y su última posición en el índice 9 «nombre_array[9]». Así, en el bucle for para recorrer todos los elementos, el enunciado ha de ser «for(int i=0; i < tamaño_array; i++)". Un saludo.
Hola CIDsTAR.
He estado leyendo con interes tu tutorial y quesiera, si no te importa, preguntarte una duda. Teniendo ya una matriz (char nombre[20], por ejemplo) definida por cualquiera de los metodos que has expuesto, si quisieramon poner otro dato en la misma matriz, ¿como se haria?: nombre=”Diego”, nombre[]=”Diego” o nombre[20]=”Diego”. ¿O no se puede poner de una vez y hay que ponerlo elemento por elemento (nombre[0]=”D”, nombre[1]=”i”, etc.
Gracias por la paciencia. Saludos.