-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpractica_40.cpp
115 lines (95 loc) · 3.48 KB
/
practica_40.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <string>
using namespace std;
struct Producto {
string NomProduct;
int codigo;
string marca;
int precio;
};
void InsertarProducto(Producto producto[], int SIZE) {
for (int i = 0; i < SIZE; i++) {
//insertar datos
cout << "nombre del producto: ";
getline(cin, producto[i].NomProduct);
cout << "marca: ";
getline(cin, producto[i].marca);
cout << "precio: ";
cin >> producto[i].precio;
cin.ignore(); // Ignorar el salto de línea después de leer el entero
//organizar codigo
if (producto[i].NomProduct == "martillo" || producto[i].NomProduct == "Martillo") {
producto[i].codigo = 100;
} else if (producto[i].NomProduct == "destornillador" || producto[i].NomProduct == "Destornillador") {
producto[i].codigo = 200;
} else {
// Si no se reconoce el nombre del producto, asignar un código por defecto
producto[i].codigo = 0;
}
}
}
//algoritmo de ordenamiento burbuja
void OrdenarLista(Producto array[], int SIZE) {
for (int i = 0; i < SIZE - 1; i++) {
for (int j = 0; j < SIZE - i - 1; j++) {
if (array[j].codigo > array[j + 1].codigo ||
(array[j].codigo == array[j + 1].codigo && array[j].NomProduct > array[j + 1].NomProduct)) {
// Intercambio de elementos
Producto temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
//algoritmo de busqueda binaria
int BuscarProducto(const Producto array[], int SIZE, const string& nombre, const string& marca) {
int izq = 0;
int der = SIZE - 1;
while (izq <= der) {
int mid = izq + (der - izq) / 2;
// Comparar el nombre y marca del producto en la posición "mid" con el nombre y marca buscados
if (array[mid].NomProduct == nombre && array[mid].marca == marca) {
return mid; // Se encontró el producto, devolver su índice
} else if (array[mid].NomProduct < nombre || (array[mid].NomProduct == nombre && array[mid].marca < marca)) {
izq = mid + 1; // El producto buscado está en la mitad derecha del subarray
} else {
der = mid - 1; // El producto buscado está en la mitad izquierda del subarray
}
}
return -1; // No se encontró el producto
}
int main() {
//array
Producto lista[4];
//variables
string nombre;
string marca;
//insertar productos
InsertarProducto(lista, 4);
//ordenar productos
OrdenarLista(lista, 4);
cout << "-------------------------" << endl;
//buscar productos
int indice = BuscarProducto(lista, 4, nombre, marca);
cout << "nombre del producto a buscar: ";
getline(cin, nombre);
cout << "marca del producto a buscar: ";
getline(cin, marca);
if (indice != -1) {
cout << "El producto se encuentra en la posición " << indice << endl;
} else {
cout << "El producto no fue encontrado" << endl;
}
cout << "-------------------------" << endl;
//imprimir lista de productos
for (int i = 0; i < 4; i++) {
cout << "Producto " << i + 1 << ":" << endl;
cout << "Nombre: " << lista[i].NomProduct << endl;
cout << "Marca: " << lista[i].marca << endl;
cout << "Precio: " << lista[i].precio << endl;
cout << "Código: " << lista[i].codigo << endl;
cout << endl;
}
return 0;
}