Tarea Arreglos Unidimensionales UNIVERSIDAD PASCUAL BRAVO

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 21

TAREA

ARREGLOS
UNIDIMENSIONALES

Edinson Stiben Sinitave


Marín
TAREA ARREGLOS UNIDIMENSIONALES

Saque una copia de este documento, lo


comparte con los integrantes de su grupo y
con el docente, este es el documento en el que
los tres o cuatro integrantes del equipo de
trabajo deberán trabajar colaborativamente
para dar solución a los problemas que se
proponen en esta tarea.

¡Éxitos en el desarrollo de esta


tarea!

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.

1. Primera sección: Identificación de arreglos


Defina los arreglos necesarios para almacenar los datos indicados en cada una de las
siguientes situaciones. En cada caso identifique el tipo de datos y el tamaño del vector.
Nota: use la herramienta Tabla para crear gráficamente los arreglos.

1.1 El nombre de los productos que se venden en un supermercado y el precio por


unidad de cada uno de ellos.

Solución:

definir producto Como Carácter;


definir precio Como real

Dimension carácter productos[3];

ÍNDICE VALOR
0 PRODUCTO1
1 PRODUCTO2
2 PRODUCTO3

Dimension precio[3]

ÍNDICE VALOR
0 PRECIO1
1 PRECIO2
2 PRECIO3

3
TAREA ARREGLOS UNIDIMENSIONALES

2. Segunda sección: Prueba de escritorio.


Realice un video donde grabe la prueba de escritorio del siguiente algoritmo. Suba su video
a Google Drive y lo comparte, como ya se ha indicado anteriormente. Tenga en cuenta este
enlace, pues deberá indicarlo en la solución.

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:

• Descripción de lo que hace el algoritmo: El algoritmo se encarga de asignar


valores al array vector, luego le asigna el valor de la posición cero a min que
comienza valiendo 5, luego en el ciclo itera sobre el array y se hace una validación,
en la cual, si el valor de la posición del vector es menor que va la variable min,
entonces se le asigna dicho valor a min. El algoritmo finaliza mostrando cual es el
número más pequeño dentro del array

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;

for (int i = 0; i < N; ++i) {


cout << "Vuelta " << i << endl;
cout ;
if (vector[i] <= min) {
min = vector[i];
cout << "Dentro del for min vale: " << min << endl;
}
}

cout << "***** El valor mínimo es: " << min << endl;

return 0;
}

• URL del video de la prueba de escritorio:


https://drive.google.com/file/d/1TLEZhYestAzZeiQ6Wr7DLS2J19StK6Q6/view?usp=s
haring

5
TAREA ARREGLOS UNIDIMENSIONALES

3. Tercera sección: Solución de problemas

Para el problema dado, realice lo siguiente:

● 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

3. Tercera sección: Problemas

Problema 1. En una tienda comercial se maneja la información de clientes así:


- Vector Documento: tiene los números de documento de los clientes registrados.
- Vector Nombres: tiene los nombres de los clientes.
- Vector Saldo: tiene los valores de cupo de cada cliente.
- Vector Activo: tiene un valor 0 ó 1 como elementos; de tal manera que coinciden con las
posiciones de los vectores Documento, Nombres, Saldo y Activo.
Diseñe un menú al que un usuario pueda ingresar las veces que desee y donde cada
opción realice la tarea encomendada así:
1. Consultar -> Dado un número de documento ingresado, muestre por pantalla el nombre
de la persona.
2. Ordenar-> Los números de documento de menor a mayor. Considere que finalizada la
ejecución del algoritmo los datos en Nombres, Saldos y Activo deben continuar
relacionados con las mismas posiciones del vector Documento.
3. Eliminar -> Elimine del registro de datos asociado a una persona que fallece o que desea
cerrar su cuenta en la tienda comercial. No debe quedar la posición del vector vacía.
4. Ingresar -> Permita ingresar una nueva persona considerando que debe quedar
posicionada de acuerdo a su número de documento en el vector Documento ya ordenado.
No permitir repetidos. Nota: Cada dato obtenido del cliente se validará e ingresará al vector
respectivo en la misma posición en todos.
9. Terminar.

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.

Finalmente en la clase principal se instancia al arreglo intersección llamando a


encontrarInterseccion, luego se itera sobre intersección para mostrar los elementos
interceptados.

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.

• Ordena el vector de clientes en orden ascendente basado en el número de


documento utilizando std::sort y una función lambda.

• Imprime el estado del vector de clientes después de ordenar.

 cambiarEstadoInactivo:

 Parámetros:
• clientes: Vector de clientes (const referencia para evitar modificaciones).

• Documento: Número de documento del cliente cuyo estado se va a cambiar.

 Función:
• Itera sobre el vector de clientes buscando un cliente con el documento
especificado.

• Si encuentra el cliente, cambia su estado a inactivo (activo = false) y imprime


"Cliente marcado como inactivo".

• Si no lo encuentra, imprime "Cliente no encontrado".

12
Tercera sección: Problema Tienda
3.1.2 Análisis:
 ingresar:
Añadir el cliente al arreglo

 Parámetros:

• clientes: Vector de clientes (referencia para permitir modificaciones).


• documento: Número de documento del nuevo cliente.
• nombre: Nombre del nuevo cliente.
• saldo: Saldo inicial del nuevo cliente.
• activo: Estado de actividad del nuevo cliente.

 Función:
• Itera sobre el vector de clientes para verificar si ya existe un cliente con el
mismo documento.

• Si encuentra un documento duplicado, imprime "Documento ya existe" y termina


la función.

• Si no hay duplicados, crea un nuevo cliente con los datos proporcionados y lo


agrega al vector de clientes. Imprime "Cliente ingresado".

 mostrarMenu:

 Función:

• Imprime las opciones disponibles para el usuario en un menú interactivo.

13
Tercera sección: Problema Tienda
3.1.2 Análisis:
 main:
Añadir el cliente al arreglo

 Inicialización:

• Crea un vector inicial de clientes con algunos datos predefinidos.

 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.

• Opciones del Menú:

• Opción 1: Solicita al usuario un documento y llama a la función consultar para


mostrar la información del cliente.

• Opción 2: Llama a la función ordenar para ordenar la lista de clientes por


documento.

• Opción 3: Solicita al usuario un documento y llama a la función


cambiarEstadoInactivo para marcar al cliente como inactivo.

• Opción 4: Solicita al usuario los datos de un nuevo cliente (documento, nombre,


saldo y estado) y llama a la función ingresar para agregarlo a la lista.

• Opción 5: Imprime un mensaje de salida y termina el bucle.

 Bucle:

• El bucle se repite hasta que el usuario selecciona la opción 5 para salir.

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;
};

void consultar(const vector<Cliente>& clientes, int documento) {


for (size_t i = 0; i < clientes.size(); ++i) {
if (clientes[i].documento == documento) {
cout << "Nombre: " << clientes[i].nombre << endl;

return;
}
}
cout << "Cliente no encontrado." << endl;
}

void imprimirClientes(const vector<Cliente>& clientes) {


for (size_t i = 0; i < clientes.size(); ++i) {
cout << "Documento: " << clientes[i].documento << ",
Nombre: " << clientes[i].nombre << ",
Saldo: " << clientes[i].saldo << ",
Activo: " << (clientes[i].activo ? "Sí" : "No") << endl;

}
}

15
Tercera sección: Problema Tienda
void ordenar(vector<Cliente>& clientes) {
cout << "Estado del arreglo antes de ordenar:" << endl;
imprimirClientes(clientes);

sort(clientes.begin(), clientes.end(), [](const Cliente& a, const


Cliente& b) { return a.documento < b.documento;
});
cout << "Estado del arreglo después de ordenar:" << endl;
imprimirClientes(clientes);
}

void cambiarEstadoInactivo(vector<Cliente>& clientes, int documento)


{
for (size_t i = 0; i < clientes.size(); ++i) {
if (clientes[i].documento == documento)
{ clientes[i].activo = false;
cout << "Cliente marcado como inactivo." << endl;
return;
}
}
cout << "Cliente no encontrado." << endl;
}

void ingresar(vector<Cliente>& clientes, int documento, const


string& nombre, double saldo, bool activo) {
for (size_t i = 0; i < clientes.size(); ++i) {
if (clientes[i].documento == documento) {
cout << "Documento ya existe." << endl;
return;
}
}

Cliente nuevo_cliente = {documento, nombre, saldo, activo};


clientes.push_back(nuevo_cliente);
cout << "Cliente ingresado." << endl;
}

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

También podría gustarte