1. Introducción a los Vectores Definición Un vector es una estructura de datos que puede almacenar una colección de elementos. Aquí, implementaremos vectores utilizando arreglos estáticos. Esto significa que debemos conocer de antemano el tamaño máximo que necesitaremos. Los vectores permiten realizar operaciones como: • Agregar y eliminar elementos. • Acceder a elementos por índice. • Redimensionar el vector si es necesario (en implementaciones dinámicas). Tipos de Vectores • • Vectores estáticos: El tamaño del vector se define en tiempo de compilación y no puede cambiarse. Vectores dinámicos: El tamaño del vector puede cambiarse durante la ejecución del programa. 2. Vectores Estáticos en C++ Características • Tamaño fijo: El tamaño del vector debe ser conocido y declarado en tiempo de compilación. • • Eficiencia: No hay sobrecarga por redimensionamiento dinámico, lo que puede hacer que los vectores estáticos sean más rápidos en algunas situaciones. Limitaciones: No se pueden redimensionar. Si se necesita un tamaño diferente, es necesario declarar un nuevo arreglo. Declaración e Inicialización En C++, los vectores estáticos se declaran utilizando arreglos. El tamaño del arreglo debe ser una constante o una expresión constante en tiempo de compilación. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; // Tamaño fijo del vector int vector[MAX_SIZE]; // Declaración del vector int size = 0; // Tamaño actual del vector // Inicializar los primeros elementos del vector vector[0] = 1; vector[1] = 2; vector[2] = 3; size = 3; // Actualizar el tamaño // Imprimir los elementos del vector for (int i = 0; i < size; ++i) { cout << vector[i] << " "; } cout << endl; return 0; } 3. Operaciones Básicas con Vectores Estáticos Agregar Elementos Para agregar un elemento a un vector estático, es necesario asegurarse de que no se exceda la capacidad del arreglo #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE]; int size = 0; // Agregar elementos al vector if (size < MAX_SIZE) { vector[size++] = 10; // Agregar elemento 10 } else { cout << "Error: Vector lleno." << endl; } return 0; } Acceso a Elementos Para acceder a los elementos de un vector, se puede usar el índice del arreglo. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 3}; int size = 3; // Acceder a elementos del vector for (int i = 0; i < size; ++i) { cout << "Elemento en posición " << i << ": " << vector[i] << endl; } return 0; } Ejemplo: Rellenar un Vector mediante Entrada del Teclado Este programa permitirá al usuario ingresar elementos en un vector hasta alcanzar un tamaño máximo predefinido. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; // Tamaño máximo del vector int vector[MAX_SIZE]; int size = 0; // Declaración del vector // Tamaño actual del vector cout << "Introduce el número de elementos que deseas agregar (máximo " << MAX_SIZE << "): "; int numElements; cin >> numElements; if (numElements > MAX_SIZE) { cerr << "Error: El número de elementos excede el tamaño máximo permitido." << endl; return 1; } cout << "Introduce los " << numElements << " elementos del vector:" << endl; for (int i = 0; i < numElements; ++i) { cout << "Elemento " << i + 1 << ": "; cin >> vector[i]; ++size; } cout << "Los elementos del vector son: "; for (int i = 0; i < size; ++i) { cout << vector[i] << " "; } cout << endl; return 0; } 4. Ejercicios de Práctica Ejercicio 1: Suma de Elementos Escribe un programa que calcule la suma de todos los elementos de un vector. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 3, 4, 5}; int size = 5; int sum = 0; for (int i = 0; i < size; ++i) { sum += vector[i]; } cout << "Suma de elementos: " << sum << endl; return 0; } Ejercicio 2: Producto Escalar Escribe un programa que calcule el producto escalar de dos vectores del mismo tamaño. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector1[MAX_SIZE] = {1, 2, 3}; int vector2[MAX_SIZE] = {4, 5, 6}; int size = 3; int product = 0; for (int i = 0; i < size; ++i) { product += vector1[i] * vector2[i]; } cout << "Producto escalar: " << product << endl; return 0; } Ejercicio 3: Vector de Números Primos Escribe un programa que genere un vector de los primeros n números primos. #include <iostream> #include <cmath> using namespace std; bool esPrimo(int n) { if (n <= 1) return false; if (n <= 3) return true; if (n % 2 == 0 || n % 3 == 0) return false; for (int i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) return false; } return true; } int main() { const int MAX_SIZE = 100; int primos[MAX_SIZE]; int size = 0; int n = 10; // Número de primos que queremos encontrar int numero = 2; while (size < n) { if (esPrimo(numero)) { primos[size++] = numero; } numero++; } cout << "Primeros " << n << " números primos: "; for (int i = 0; i < size; ++i) { cout << primos[i] << " "; } cout << endl; return 0; } Ejercicio 4: Media de los Elementos Escribe un programa que calcule la media de los elementos en un vector. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 3, 4, 5}; int size = 5; double media = 0; for (int i = 0; i < size; ++i) { media += vector[i]; } media /= size; cout << "Media de los elementos: " << media << endl; return 0; } Ejercicio 5: Buscar un Elemento Escribe un programa que busque un elemento específico en un vector y muestre su posición si se encuentra. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 3, 4, 5}; int size = 5; int elementoBuscado = 3; int posicion = -1; for (int i = 0; i < size; ++i) { if (vector[i] == elementoBuscado) { posicion = i; break; } } if (posicion != -1) { cout << "El elemento " << elementoBuscado << " se encuentra en la posición " << posicion << endl; } else { cout << "El elemento " << elementoBuscado << " no se encuentra en el vector." << endl; } return 0; } Ejercicio 6: Ordenar Vector Escribe un programa que ordene los elementos de un vector en orden ascendente o descendente. #include <iostream> using namespace std; void bubbleSort(int vector[], int size) { for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - i - 1; ++j) { if (vector[j] > vector[j + 1]) { int temp = vector[j]; vector[j] = vector[j + 1]; vector[j + 1] = temp; } } } } int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {5, 2, 8, 3, 1}; int size = 5; bubbleSort(vector, size); cout << "Vector ordenado: "; for (int i = 0; i < size; ++i) { cout << vector[i] << " "; } cout << endl; return 0; } Ejercicio 7: Eliminar Elemento Duplicado Escribe un programa que elimine los elementos duplicados de un vector. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 2, 3, 4, 4, 5}; int size = 7; int newSize = 0; for (int i = 0; i < size; ++i) { bool duplicado = false; for (int j = 0; j < newSize; ++j) { if (vector[i] == vector[j]) { duplicado = true; break; } } if (!duplicado) { vector[newSize++] = vector[i]; } } cout << "Vector sin elementos duplicados: "; for (int i = 0; i < newSize; ++i) { cout << vector[i] << " "; } cout << endl; return 0; } Ejercicio 8: Invertir Vector Escribe un programa que invierta los elementos de un vector. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {1, 2, 3, 4, 5}; int size = 5; for (int i = 0; i < size / 2; ++i) { int temp = vector[i]; vector[i] = vector[size - i - 1]; vector[size - i - 1] = temp; } cout << "Vector invertido: "; for (int i = 0; i < size; ++i) { cout << vector[i] << " "; } cout << endl; return 0; } Ejercicio 9: Unión de Vectores Escribe un programa que tome dos vectores como entrada y devuelva un tercer vector que sea la unión de ambos. #include <iostream> using namespace std; int main() { const int MAX_SIZE = 100; int vector1[MAX_SIZE] = {1, 2, 3}; int vector2[MAX_SIZE] = {3, 4, 5}; int size1 = 3; int size2 = 3; int unionVector[MAX_SIZE]; int sizeUnion = 0; for (int i = 0; i < size1; ++i) { unionVector[sizeUnion++] = vector1[i]; } for (int i = 0; i < size2; ++i) { bool duplicado = false; for (int j = 0; j < sizeUnion; ++j) { if (vector2[i] == unionVector[j]) { duplicado = true; break; } } if (!duplicado) { unionVector[sizeUnion++] = vector2[i]; } } cout << "Unión de vectores: "; for (int i = 0; i < sizeUnion; ++i) { cout << unionVector[i] << " "; } cout << endl; return 0; } Ejercicio 10: Subsecuencia de Suma Máxima Escribe un programa que encuentre la subsecuencia de suma máxima en un vector. #include <iostream> using namespace std; int maxSubsequenceSum(int vector[], int size) { int maxSum = vector[0]; int currentSum = vector[0]; for (int i = 1; i < size; ++i) { if (currentSum < 0) { currentSum = vector[i]; } else { currentSum += vector[i]; } if (currentSum > maxSum) { maxSum = currentSum; } } return maxSum; } int main() { const int MAX_SIZE = 100; int vector[MAX_SIZE] = {-2, 1, -3, 4, -1, 2, 1, -5, 4}; int size = 9; int maxSum = maxSubsequenceSum(vector, size); cout << "Suma máxima de la subsecuencia: " << maxSum << endl; return 0; } Ejercicios de practica 1. Rotación de Vector: Rota los elementos de un vector hacia la izquierda o hacia la derecha en k posiciones. 2. Vector de Frecuencia: Crea un vector que almacene la frecuencia de cada elemento en otro vector. 3. Vector Palíndromo: Comprueba si un vector es un palíndromo o no. 4. Intersección de Vectores: Encuentra la intersección de dos vectores. 5. Mínimos y Máximos: Encuentra el valor mínimo y máximo en un vector. 6. Subsecuencia Ordenada más Larga: Encuentra la longitud de la subsecuencia ordenada más larga en un vector. 7. Conteo de Elementos Únicos: Cuenta el número de elementos únicos en un vector. 8. Operaciones Matemáticas: Realiza operaciones matemáticas (suma, resta, multiplicación, etc.) en vectores. 9. Combinaciones de Suma: Encuentra todas las combinaciones únicas de elementos en un vector que sumen un valor específico.