Tarea Arreglos Unidimensionales UNIVERSIDAD PASCUAL BRAVO
Tarea Arreglos Unidimensionales UNIVERSIDAD PASCUAL BRAVO
Tarea Arreglos Unidimensionales UNIVERSIDAD PASCUAL BRAVO
ARREGLOS
UNIDIMENSIONALES
2
TAREA ARREGLOS UNIDIMENSIONALES
Este archivo es una plantilla en la que usted deberá desarrollar lo que se solicita según
sean las instrucciones indicadas.
Solución:
ÍNDICE VALOR
0 PRODUCTO1
1 PRODUCTO2
2 PRODUCTO3
Dimension precio[3]
ÍNDICE VALOR
0 PRECIO1
1 PRECIO2
2 PRECIO3
3
TAREA ARREGLOS UNIDIMENSIONALES
1.2 Algoritmo
Algoritmo Vectores
Var
Entero: vector[ ] ← {5, 2, 7, 3, 5, 4, 1, 8}
Entero: i, min← vector[0], N← 8
Inicio
Para (i← 0 hasta N-1, 1)
Si (vector[i]<=min) entonces
min← vector[i]
Fin si
Fin para
Muestre min
Fin
Nota: asuma que la primera posición del vector es la 0 y la última posición válida es N-1
Solución:
4
• Codificación del algoritmo: utilice el lenguaje de programación C++ a través del
editor OnlineGDB para codificar el algoritmo.
#include <iostream>
using namespace std;
int main() {
int vector[] = {5, 2, 7, 3, 5, 4, 1, 8};
int N = 8;
int min = vector[0];
cout << "Valor mínimo inicial: " << min << endl;
cout << "************** " << endl;
cout << "***** El valor mínimo es: " << min << endl;
return 0;
}
5
TAREA ARREGLOS UNIDIMENSIONALES
● Análisis
● Algoritmo principal y subalgoritmos (aplique procedimientos y/o funciones)
● Prueba de escritorio: Deberá grabar un video donde se vea claramente la hoja
donde aparezca el algoritmo y subalgoritmos y otra hoja con la tabla de variables de
la prueba. Tenga en cuenta: escriba con un color distinto las variables locales de los
procedimientos y funciones en la hoja con la tabla de variables. Muestre muy bien lo
que va ocurriendo instrucción por instrucción.
Asigne un nombre a los videos de esta forma: <Tarea Vectores Problema#>. Luego
súbalo a su unidad de Google Drive. A este archivo deberá crear el enlace para
compartirlo y tenerlo en cuenta para incluirlo en la sección Prueba de Escritorio
Programa en C++: cree el archivo con la codificación en C++ para la solución
algorítmica que usted propuso y asigne el nombre <Vectores_Problema#>. Luego
súbalo a su unidad de Google Drive. A este archivo deberá crearle el enlace para
compartirlo.
Observaciones: al final encuentra las diapositivas para solucionar cada punto de
este tercer problema.
6
TAREA ARREGLOS UNIDIMENSIONALES
Nota: los vectores son paralelos. Observe el siguiente ejemplo; la tercera persona tiene
como documento 8963254, su nombres es Ana y su saldo es 300000.
7
Tercera sección: Problema 1
3.1.1 Enunciado:
Crear y llenar dos arreglos V1 y V2, de tamaño A y B y crear un tercer arreglo que
almacene el resultado de la intersección de los dos arreglos.
3.1.2 Análisis:
Se crea un método encontrarInterseccion que obtiene por referencia a v1(entero)
y a v2 (entero), luego se ordenan en forma ascendente cada arreglo para después
llenar otro arreglo llamado intersección(entero), esto se logra iterando cada
posición de v1 y luego se valida si ese valor está presente en v2, si se cumple la
condición se agrega ese valor a intersección, al finalizar la iteración se devuelve el
arreglo intersección.
8
Tercera sección: Problema 1
3.1.2 Algoritmo:
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> encontrarInterseccion(
const std::vector<int>& v1,
const std::vector<int>& v2
) {
std::vector<int> interseccion;
std::vector<int> temp_v1 = v1;
std::vector<int> temp_v2 = v2;
std::sort(temp_v1.begin(), temp_v1.end());
std::sort(temp_v2.begin(), temp_v2.end());
for (int num : temp_v1) {
if (std::binary_search(temp_v2.begin(),
temp_v2.end(), num))
{ interseccion.push_back(num); }
} return interseccion;
}
int main() {
std::vector<int> v1 = {10, 202, 2, 88, 44, 9, 3};
std::vector<int> v2 = {88, 8, 9, 3, 7, 10, 101, 202};
std::vector<int> interseccion = encontrarInterseccion(v1, v2);
std::cout << "Intersección de v1 y v2: " << std::endl;
for (int num : interseccion) { std::cout << num <<
std::endl; } return 0;
}
9
Tercera sección: Problema 1
10
Tercera sección: Problema Tienda
3.1.2 Análisis:
Problema tienda comercial
Para resolver este problema de forma óptima se decidió crear un objeto clientes
con los atributos int documento, string nombre, double saldo, bool activo
Con la idea de crear un arreglo de tipo clientes para gestionar las distintas
peticiones que se realizan dentro del programa.
Descripción de funciones
consultar:
se itera el arreglo clientes usando clientes.size() para obtener la longitud del
arreglo.
Parámetros:
• clientes: Vector de clientes (const referencia para evitar modificaciones).
• documento: Número de documento del cliente a consultar.
Función:
• Itera sobre el vector de clientes buscando un cliente con el documento
especificado.
• Si encuentra el cliente, imprime su nombre y termina la función.
• Si no lo encuentra, imprime "Cliente no encontrado".
imprimirClientes:
Se imprime la información del cliente
Parámetros:
• clientes: Vector de clientes (const referencia para evitar modificaciones).
Función:
• Itera sobre el vector de clientes y imprime la información de cada cliente
(documento, nombre, saldo y estado de actividad).
11
Tercera sección: Problema Tienda
3.1.2 Análisis:
ordenar:
Parámetros:
• clientes:Vector de clientes (referencia para permitir modificaciones).
Función:
• Imprime el estado del vector de clientes antes de ordenar.
cambiarEstadoInactivo:
Parámetros:
• clientes: Vector de clientes (const referencia para evitar modificaciones).
Función:
• Itera sobre el vector de clientes buscando un cliente con el documento
especificado.
12
Tercera sección: Problema Tienda
3.1.2 Análisis:
ingresar:
Añadir el cliente al arreglo
Parámetros:
Función:
• Itera sobre el vector de clientes para verificar si ya existe un cliente con el
mismo documento.
mostrarMenu:
Función:
13
Tercera sección: Problema Tienda
3.1.2 Análisis:
main:
Añadir el cliente al arreglo
Inicialización:
Menú Interactivo:
• Muestra un menú con opciones y solicita al usuario que seleccione una opción.
• Valida la entrada del usuario para asegurarse de que es un número válido entre
1 y 5.
Bucle:
14
Tercera sección: Problema Tienda
3.1.3 Algoritmo:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <limits> using namespace std;
struct Cliente {
int documento;
string nombre;
double saldo;
bool activo;
};
return;
}
}
cout << "Cliente no encontrado." << endl;
}
}
}
15
Tercera sección: Problema Tienda
void ordenar(vector<Cliente>& clientes) {
cout << "Estado del arreglo antes de ordenar:" << endl;
imprimirClientes(clientes);
16
Tercera sección: Problema Tienda
void mostrarMenu() {
cout << "Seleccione una opción:" << endl;
cout << "1. Consultar" << endl;
cout << "2. Ordenar" << endl;
cout << "3. Cambiar estado a inactivo" << endl;
cout << "4. Ingresar" << endl; cout << "5. Salir" << endl;
}
int main() {
vector<Cliente> clientes = {
{1234, "Juan Perez", 1000.0, true},
{2345, "Ana Gomez", 1500.5, true},
{3456, "Luis Martinez", 2000.75, true}
};
int opcion;
do {
mostrarMenu();
cin >> opcion;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. Por favor, ingrese un número
entre 1 y 5." << endl;
continue;
}
switch (opcion) {
case 1: {
int documento;
cout << "Ingrese el número de documento: ";
cin >> documento;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. El documento debe ser un número
entero." << endl;
17
Tercera sección: Problema Tienda
} else {
consultar(clientes, documento);
}
break;
}
case 2: {
ordenar(clientes);
break;
}
case 3: {
int documento;
cout << "Ingrese el número de documento: ";
cin >> documento;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. El documento debe ser un número
entero." << endl;
} else {
cambiarEstadoInactivo(clientes, documento);
}
break;
}
case 4: {
int documento;
string nombre;
double saldo;
int activoInt;
cout << "Ingrese el número de documento: ";
cin >> documento;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. El documento debe ser un número
entero." << endl;
break;
}
18
Tercera sección: Problema Tienda
cout << "Ingrese el nombre: ";
cin.ignore();
getline(cin, nombre);
if (nombre.empty()) {
cout << "Entrada no válida. El nombre no puede estar vacío." <<
endl;
break;
}
cout << "Ingrese el saldo: ";
cin >> saldo;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. El saldo debe ser un número decimal."
<< endl;
break;
}
cout << "Ingrese si está activo (1 para sí, 0 para no): ";
cin >> activoInt;
if (cin.fail() || (activoInt != 0 && activoInt != 1)) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Entrada no válida. Activo debe ser 1 (sí) o 0 (no)." <<
endl;
break;
}
bool activo = static_cast<bool>(activoInt);
ingresar(clientes, documento, nombre, saldo, activo);
break;
}
case 5:
cout << "Saliendo..." << endl;
break;
default:
cout << "Opción no válida." << endl;
break;
}
}
while (opcion != 5);
return 0;
}
19
Tercera sección: Problema 1
3.1.4 Prueba de escritorio:
https://drive.google.com/file/d/1XB0d_3oh7ssK9zqYsb3VbRw2i8osj9-
M/view?usp=sharing
20