3. Arreglos
#estructuraDeDatos #universidad
a. Características de los arreglos unidimensionales
Un arreglo unidimensional es una colección de elementos del mismo tipo, almacenados en ubicaciones de memoria contiguas. Se accede a los elementos mediante índices.
Características:
- Indexación: Los elementos se acceden mediante índices que comienzan generalmente en 0.
- Tamaño fijo: El tamaño del arreglo debe ser conocido y definido en tiempo de compilación (para arreglos estáticos).
- Homogeneidad: Todos los elementos deben ser del mismo tipo de dato.
Ejemplo:
int numeros[5] = {10, 20, 30, 40, 50};
// Acceder al tercer elemento
printf("El tercer número es: %d\n", numeros[2]); // Imprime 30
b. Arreglos de cadenas de caracteres
Las cadenas de caracteres en muchos lenguajes, como C, son implementadas como arreglos de caracteres terminados con un carácter nulo \0
.
Características:
- Permiten almacenar secuencias de caracteres.
- Se pueden manipular utilizando funciones específicas (por ejemplo,
strlen
,strcpy
en C).
Ejemplo:
char saludo[] = "Hola, Mundo!";
// Acceder al primer carácter
printf("Primer carácter: %c\n", saludo[0]); // Imprime 'H'
// Imprimir la cadena completa
printf("Saludo completo: %s\n", saludo); // Imprime "Hola, Mundo!"
c. Características de los arreglos bidimensionales
Un arreglo bidimensional es una matriz que puede ser visualizada como una tabla de filas y columnas.
Características:
- Acceso mediante dos índices: uno para la fila y otro para la columna.
- Memoria contigua, pero conceptualizada en dos dimensiones.
- Útil para representar tablas, matrices, tableros de juegos, etc.
Ejemplo:
int matriz[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// Acceder al elemento de la segunda fila, tercera columna
printf("Elemento: %d\n", matriz[1][2]); // Imprime 7
d. Arreglos multidimensionales
Los arreglos multidimensionales tienen más de dos dimensiones y se utilizan para representar estructuras más complejas, como cubos, hipercubos, etc.
Características:
- Acceso mediante múltiples índices.
- Aumentan la complejidad de acceso y gestión.
- Son extensiones naturales de arreglos unidimensionales y bidimensionales.
Ejemplo:
// Arreglo tridimensional
int cubo[2][3][4];
// Asignación de un valor
cubo[1][2][3] = 25;
// Acceso al valor
printf("Valor en cubo[1][2][3]: %d\n", cubo[1][2][3]); // Imprime 25
Ejemplos Prácticos
Ejemplo 5: Suma de elementos en un arreglo unidimensional
#include <stdio.h>
int main() {
int numeros[5] = {2, 4, 6, 8, 10};
int suma = 0;
for(int i = 0; i < 5; i++) {
suma += numeros[i];
}
printf("La suma es: %d\n", suma); // Imprime 30
return 0;
}
Ejemplo 6: Transposición de una matriz bidimensional
#include <stdio.h>
#define FILAS 2
#define COLUMNAS 3
int main() {
int matriz[FILAS][COLUMNAS] = {
{1, 2, 3},
{4, 5, 6}
};
int transpuesta[COLUMNAS][FILAS];
// Calcular la transpuesta
for(int i = 0; i < FILAS; i++) {
for(int j = 0; j < COLUMNAS; j++) {
transpuesta[j][i] = matriz[i][j];
}
}
// Imprimir la matriz transpuesta
printf("Matriz Transpuesta:\n");
for(int i = 0; i < COLUMNAS; i++) {
for(int j = 0; j < FILAS; j++) {
printf("%d ", transpuesta[i][j]);
}
printf("\n");
}
return 0;
}
Salida:
Matriz Transpuesta:
1 4
2 5
3 6
Ejercicios
-
Arreglo unidimensional:
- Crea un programa que lea
n
números enteros desde el usuario, los almacene en un arreglo y luego encuentre y muestre el número más grande y el más pequeño.
- Crea un programa que lea
-
Arreglo de cadenas:
- Implementa un programa que almacene una lista de 5 nombres de estudiantes en un arreglo de cadenas y luego los imprima en orden inverso.
-
Matriz bidimensional:
- Escribe una función que reciba una matriz de
3x3
y determine si es una matriz identidad (es decir, tiene 1s en la diagonal principal y 0s en el resto).
- Escribe una función que reciba una matriz de
-
Arreglos multidimensionales:
- Crea un programa que maneje un arreglo tridimensional que represente un tablero de 2 juegos de 3x3 (como dos tableros de Tic-Tac-Toe). Permite al usuario ingresar los movimientos para cada tablero y muestra el estado final de ambos.