En éste artículo veremos: cómo crear arreglos, cómo asignar valores a un arreglo, cómo mostrar el contenido de un arreglo, cómo sumar todos los datos de un arreglo, cómo obtener los valores máximo y mínimo pertenecientes a un arreglo, y como ejemplo veremos cómo calcular la desviación estándar de un conjunto de números.
Para empezar
Los arreglos son parte imprescindible para la realización de programas en cualquier lenguaje y para la resolución de casi todo tipo de problemas. Saber utilizarlos adecuadamente es necesario para aprender a programar.
Para poder utilizar arreglos en lenguaje C, primero debes conocer otros temas del lenguaje como es la declaración de variables, el uso de ciclos for, e instrucciones de entrada y salida de datos.
Qué son los arreglos
Un arreglo es una colección de posiciones de almacenamiento de datos, donde cada una tiene el mismo tipo de dato y el mismo nombre. Cada posición de almacenamiento en un arreglo es llamada un elemento del arreglo. (Aitken & Jones, 1994).
Crear un arreglo
Para declarar o crear un arreglo utilizaremos la siguiente forma:
- Escribe el tipo de dato que almacenará el arreglo
- Escribe el nombre del arreglo
- Entre corchetes, escribe la cantidad de elementos de ese tipo que se almacenarán
Por ejemplo, para crear un arreglo que almacene las calificaciones de un grupo de 10 estudiantes, podemos escribir:
//Crear un arreglo float grupo[10]; int i;
Hemos declarado también una variable i, porque para manejar arreglos utilizaremos ciclos, y se necesita la variable i como contadora.
Asignar valores a una ubicación
Los arreglos nos sirven para almacenar datos. Si deseamos guardar datos en un arreglo podemos escribir la ubicación exacta donde deseamos almacenarlos.
Por ejemplo: para guardar un dato -en este caso, un cero- en las ubicaciones 0,1 y 2 del arreglo grupo, podemos escribir:
//Asignar valores directamente a cada ubicación grupo[0] = 0; grupo[1] = 0; grupo[2] = 0;
Obsérvese que la primera ubicación de un arreglo es la celda 0.
Asignar un mismo valor a todo el arreglo
Por lo general es más práctico asignar valores al arreglo utilizando un ciclo for. Esto es útil si deseamos poner todo el arreglo en ceros o en algún otro valor inicial.
Por ejemplo: para asignar un cero a cada ubicación del arreglo, podemos escribir un ciclo que vaya desde la primera hasta la última posición del arreglo, y dentro del ciclo escribir una instrucción que asigne el valor al arreglo.
// Poner todas las ubicaciones en cero for (i=0; i<=9; i++){ grupo[i] = 0; }
Aquí consideramos que el arreglo se llama grupo y que tiene capacidad para 10 elementos. Entonces el primer elemento está en la ubicación 0 y el último elemento en la ubicación 9. Cuando la instrucción dice grupo[i] , se toma como valor para i, 0,1,2,3,4,5,6,7,8,9.
Guardar en el arreglo los valores que el usuario introduce
Hasta ahora hemos explicado cómo asignar valores al arreglo. Ahora veamos cómo introducir valores que se hayan tecleado.
En el siguiente ejemplo se muestra el mensaje “Escriba el valor 0”. El usuario tecleará el valor y éste se guardará en la ubicación 0. Pasará lo mismo con las siguientes ubicaciones del arreglo.
//Leer datos y guardarlos en el arreglo for(i=0; i<=9; i++){ printf("\nEscriba el valor %d", i); scanf("%f", &grupo[i]); }
Se utiliza %f porque previamente el arreglo había sido declarado como float.
Mostrar todo el contenido de un arreglo
Vamos a mostrar el contenido de todo el arreglo, un valor en su propia línea. Para esto utilizaremos de nuevo un ciclo for, imprimiendo dos datos: la ubicación dentro del arreglo y el valor del dato.
for (i=0; i<10; i++){ printf("En posicion %d el valor es %f\n", i, grupo[i]); }
En éste ejemplo notará que utilizamos i<10. Esta expresión es equivalente a i<=9, por lo que podemos utilizar cualquiera de las dos.
Sumar todos los valores de un arreglo
Por lo general necesitaremos utilizar los valores del arreglo en operaciones. Por ejemplo, si deseamos el promedio de los valores de un arreglo, primero tendríamos que sumar todos los valores.
En el siguiente ejemplo se utiliza una variable llamada suma que se inicializa en 0 antes de ejecutar el ciclo y que se irá incrementando con los valores de cada posición del arreglo.
// Sumar todos los datos de un arreglo float suma =0; for(i=0; i<10; i++){ suma+=grupo[i]; } float media = suma / 10; printf("La media es %.2f", media);
La instrucción suma+=grupo[i] implica que el valor presente de suma se verá incrementado por el valor de grupo en la posición i, donde i toma valores desde 0 hasta 9.
Fuera del ciclo, se utiliza el valor de suma para calcular el promedio.
Obtener el valor máximo y mínimo de un arreglo
Podemos utilizar instrucciones condicionales utilizando los valores de un arreglo. Por ejemplo, para obtener el valor máximo del arreglo hacemos lo siguiente:
- Guardamos el valor de la primera celda
- Recorremos todo el arreglo utilizando un ciclo for
- Comparamos -usando un if– si el valor de la posición actual del arreglo es mayor que el valor guardado. Si así fuese, guardamos el valor actual.
//Obtener el valor máximo de un arreglo float max=grupo[0]; for(i=0; i<10; i++){ if (grupo[i] > max){ max=grupo[i]; } } printf("El valor máximo es %.2f", max);
Para obtener el valor más pequeño se sigue un procedimiento similar, sólo que en vez de comparar si es mayor, comparamos si es menor.
float min=grupo[0]; for(i=0; i<10; i++){ if (grupo[i] < min){ min=grupo[i]; } } printf("El valor minimo es %.2f", min);
Ejemplo de uso de arreglos: Calcular la desviación estándar de un conjunto de números.
El cálculo de la desviación estándar es un ejemplo del uso de arreglos. Se necesita acceder a los datos 2 veces: la primera para obtener la media. La segunda para obtener la suma de los cuadrados de las diferencias.
La fórmula para calcular la desviación estándar de un conjunto de números es:
S=\sqrt{\frac{\sum\limits_{i=1}^n(Xi-\overline{X})^2}{n}}En uno de los ejemplos anteriores hemos visto cómo calcular la media.
Teniendo ese dato listo, lo siguiente es crear un for que recorra los diez elementos del arreglo. Guardará la diferencia entre cada dato grupo[i] y su media (media). Esa diferencia se eleva al cuadrado. Y en una variable acumuladora llamada total se van guardando esos cuadrados.
Después de cerrar ese ciclo, dividimos el total entre 10 (el número de elementos). Y a ese resultado se le calcula la raíz cuadrada.
El código que realiza esto es el siguiente:
// Ejemplo: obtener la desviación estándar float diferencia, cuadrado, total, varianza, devest; for (i=0; i<10; i++){ diferencia = grupo[i]-media; cuadrado = diferencia * diferencia; total+=cuadrado; } varianza = total/10; devest = sqrt(varianza); printf("La desviacion estándar es: %.4f", devest);
Te dejo el código completo de todos los ejemplos anteriormente vistos ahora en un solo programa:
#include "stdio.h" #include "stdlib.h" #include "math.h" int main(){ //Crear un arreglo float grupo[10]; int i; //Asignar valores directamente a cada ubicación grupo[0] = 0; grupo[1] = 0; grupo[2] = 0; // Poner todas las ubicaciones en cero for (i=0; i<10; i++){ grupo[i] = 0; } //float personas[] = {70,80,100}; // Mostrar el contenido de cada ubicación for (i=0; i<10; i++){ printf("En posicion %d el valor es %f\n", i, grupo[i]); } grupo[0] = 70; grupo[1] = 90; grupo[2] = 100; for (i=0; i<10; i++){ printf("En posicion %d el valor es %f\n", i, grupo[i]); } //Leer datos y guardarlos en el arreglo for(i=0; i<10; i++){ printf("\nEscriba el valor %d", i); scanf("%f", &grupo[i]); } system("clear"); // reemplace clear por cls si usas windows for (i=0; i<10; i++){ printf("En posicion %d el valor es %f\n", i, grupo[i]); } // Sumar todos los datos de un arreglo float suma =0; for(i=0; i<10; i++){ suma+=grupo[i]; } float media = suma / 10; printf("La media es %.2f", media); //Obtener el valor máximo y mínimo de un arreglo float max=grupo[0]; for(i=0; i<10; i++){ if (grupo[i] > max){ max=grupo[i]; } } printf("El valor máximo es %.2f", max); float min=grupo[0]; for(i=0; i<10; i++){ if (grupo[i] < min){ min=grupo[i]; } } printf("El valor minimo es %.2f", min); /* A cada numero se le resta la media El resultado se eleva al cuadrado Se suman todos los cuadrados Se dividen entre n Se saca la raiz cuadrada */ // Ejemplo: obtener la desviación estándar float diferencia, cuadrado, total, varianza, devest; for (i=0; i<10; i++){ diferencia = grupo[i]-media; cuadrado = diferencia * diferencia; total+=cuadrado; } varianza = total/10; devest = sqrt(varianza); printf("La desviacion estándar es: %.4f", devest); }
No dudes en dejar tus comentarios.
Referencias
- Aitken, P. G., & Jones, B. (1994). Aprendiendo C en 21 días. Prentice Hall Hispanoamericana.
Web recomendada
Tu comentario
opiniones