summaryrefslogtreecommitdiffstats
path: root/2023-2/E1/mitsuo/p2
diff options
context:
space:
mode:
Diffstat (limited to '2023-2/E1/mitsuo/p2')
-rw-r--r--2023-2/E1/mitsuo/p2/PruebaProductos.txt168
-rw-r--r--2023-2/E1/mitsuo/p2/fun.cpp186
-rw-r--r--2023-2/E1/mitsuo/p2/fun.hpp16
-rw-r--r--2023-2/E1/mitsuo/p2/main.cpp3
4 files changed, 260 insertions, 113 deletions
diff --git a/2023-2/E1/mitsuo/p2/PruebaProductos.txt b/2023-2/E1/mitsuo/p2/PruebaProductos.txt
new file mode 100644
index 0000000..3d18c6b
--- /dev/null
+++ b/2023-2/E1/mitsuo/p2/PruebaProductos.txt
@@ -0,0 +1,168 @@
+Codigo Descripcion Precio Stock
+ADX-669 Refrigeradora cap. 220 litros 1239.38 15
+AFL-718 Vinera 1664.97 17
+AHB-459 Reproductor DVD Portatil TV 7 685.50 9
+AQS-362 Teclado Inalambrico USB 233.05 7
+ARS-231 Audifonos Stereos 327.62 13
+AVM-258 Cocina a gas Toscana 2831.23 20
+AWB-345 Deshumedecedor DM-189H 800.37 6
+AWT-354 Galaxy Gear 3409.22 22
+BCK-361 Tablets 10.1 1872.53 9
+BCN-855 Cocina a gas Bahia Can 4015.92 14
+BIT-434 Campana Extractora modelo Glass 375.09 10
+BMJ-772 Refrigeradora Side by Side 936.32 13
+BRD-969 Centro de Lavado Electrico 2579.72 18
+BTO-226 Friobar 863.19 25
+BWD-036 Cocina Empotrable Klimatica 1086.34 5
+BXY-119 Cocina Empotrable Klimatica 2716.11 12
+BZS-261 Cocina a gas Trento 3087.87 8
+CIM-038 Cocina Empotrable Petra 2544.64 16
+CJE-310 Mini componente GPX33 3643.39 16
+CNN-411 Congeladora Side by Side 2296.29 24
+CNQ-172 Congeladora Horizontal 364 Lts. 3689.62 15
+CRU-009 Lavavajilla 2655.78 5
+CSZ-863 Video Filmadora 1713.57 17
+DEN-125 Rack Fijo 26/32 562.46 25
+DEV-433 Parlantes portatiles SHOQBOX 2698.74 13
+DFF-034 Grabadora de voz digital port�til con USB integrado 259.25 24
+DFJ-952 Cocina a gas Prestige 60 INOX 3342.77 18
+DIQ-718 Horno Microondas de Conveccion Cello 390.80 3
+DON-719 Secadora de Cabello SG-3035 360.69 12
+DOV-560 Impresora Laser Mutifuncion Monocromatica 1203.14 3
+DUG-251 Cocina a gas FFG3047SL 1597.96 7
+EBI-299 Cocina a gas Fridare 2287.57 15
+EJW-346 Campana Extractora 359.70 11
+EQY-018 Radio AM/FM stereo RMU-51C 301.73 7
+EUZ-452 Impresora Mutifuncional Led Color 3623.88 11
+EVN-510 Cocina a gas FFG3011LB 2672.30 15
+FCN-617 Televisor Plasma 60 4121.05 6
+FEG-454 Sillon masajeador 1695.70 8
+FLJ-040 Parlantes portatiles SOUNDSHOOTER 3703.37 19
+FLW-631 Radio Reloj Despertador 819.04 7
+FQG-293 Rapiducha Premiun 2784.31 23
+FVB-607 Cocina a gas Essenza BL 2953.07 13
+FVQ-662 Cocina a gas Pro 6300 INOX 1060.68 13
+FYF-898 Proyector a color 1160.46 15
+GBD-525 Refrigeradora Puertas M�gicas 2700.95 14
+GBJ-693 Radio CD 314.20 8
+GKG-558 Horno Microondas MS2042D 1674.24 23
+GLC-370 Video Proyector Power Lite 95 552.24 19
+GXF-122 Televisor Ultra HDTV 1110.16 15
+HFC-845 Televisor Serie LED R555A 3736.75 22
+HFM-021 Horno Electrico 726.91 26
+HLR-109 Parlantes inalambricos 439.47 25
+HTY-123 Refrigeradora GM-S604ULV 1173.33 1
+ICX-503 Cocina a gas Roma 1221.02 15
+IDO-503 Laptop GamerVictus de 15.6 3935.17 23
+IHG-413 Parlant Y pedestal PAM-83 317.70 13
+III-576 Campana Extractora Venus Plus 1077.65 29
+ISB-205 Camara fotografica 16MP 2976.43 3
+ISU-815 Audifonos 619.89 16
+JCW-489 Conservadora Exibidora CMVE-250 2064.97 11
+JDC-028 Puntero Laser 30.48 19
+JDQ-505 Lavadora Modelo Aquamatic 1572.31 24
+JFC-432 DVD DVM-L79 307.67 24
+JJN-837 Lavadora Tecnologia Wobbie 1979.92 15
+JXD-139 Terma Evolucion Soltu 586.02 28
+JYQ-045 Horno Microondas 1.2 p3 267.15 20
+KBY-991 Home Theater E4100 1101.08 24
+KCO-488 Ventilador de pared 679.60 22
+KDA-627 Cocina a gas Ijasmin 1424.46 7
+KJX-387 Ventilador de techo 613.19 9
+KQA-580 Cocina Empotrable Glassy Plus 2907.92 17
+KQQ-136 Impresora Laser EPSON 1139.56 17
+KSO-608 Secadora Modelo Italica 914.17 21
+KWP-672 Televisor UHD TV 1625.30 24
+LDR-510 Mini componente ESX9 2701.87 25
+LWG-915 Cocina a gas Murano 1101.47 15
+LYZ-614 Impresore Mutifuncional Expression XP-211 3510.84 13
+LZK-729 Cocina a gas Kristel 2850.91 3
+MLE-193 Cocina a gas Ingenious 2779.41 10
+MMA-577 Congeladora Horizontal 252 Lts. 1780.30 14
+MQR-442 Reloj Digital RMM-29 271.66 25
+MTF-868 Impresora Monocromatica WorkForce M205 971.59 12
+MYC-756 Cocina a gas Leganza INOX 1506.80 21
+NMV-644 Lavadora Automatica 3272.48 5
+NSM-283 Cocina a gas FFG3053SL 936.81 13
+NSR-955 Cocina a gas Blogna 2591.44 14
+OBI-353 Terma Milenium 2960.56 16
+OFS-384 Parlantes Bluetooth 805.22 8
+ONB-903 Reproductor BLU-RAY 3D 653.67 16
+OPJ-039 Secadora de Ropa 2765.64 12
+OPT-996 Mini componente GPX88 1367.48 14
+OQI-373 Cocina Empotrable Premio Plus 906.16 20
+OTH-462 Lavadora Semi-Automatica 531.04 20
+OTS-581 Galaxy Note 8.0 2653.10 24
+OTW-288 Cavba de Vinos GE cap. 34 botellas 1119.18 14
+OWN-701 Olla arrocera 220.82 21
+OXP-732 Televisor OLED 4K UHD Google TV Smart 77 XR-77A80L LA8 16504.47 8
+PFD-286 Refrigeradora cap. 415 litros 2776.02 8
+PJG-338 Impresora Mutifuncional Inalambricar 1067.80 21
+PPX-620 Aire acondicionado tipo split 2873.42 8
+PQH-935 Rack Giratorio 26/32 94.45 12
+PVZ-181 Ventilador circular 309.77 8
+QFP-254 Calentador electrico instantaneo 180.65 25
+QFR-958 Cocina a gas Bavaro 1607.46 6
+QHC-492 Terma Solucion 1907.23 17
+QIL-029 Mini componente Shake-5 2990.55 16
+QJO-060 Televisor LED FULL HD 2704.14 23
+QRC-609 Camara de video EOS 1806.66 17
+QTK-083 Congeladora Conservador Vertical 476 Lts. 2682.73 16
+QUU-384 Lavavajilla Blue Touch 2545.54 1
+QVJ-982 Horno Microondas 0.7 p3 1352.76 12
+RAH-420 Cocina a gas Pro 6550 INOX 157.01 5
+RBE-789 Televisor SMART TV 3303.07 17
+RDT-761 Horno Microondas con dorador 904.95 21
+RSE-049 Radio CD/DVD - TV 4037.51 21
+SAM-013 Cocina a gas FFG3047SL 2275.18 1
+SJD-818 Refrigeradora CoolStyle 281A Steel 3387.75 23
+SJQ-827 Reproductor Multimedia Touch Screen 1719.56 21
+SNY-500 Cocina a gas Praga Quarzo 3297.09 12
+SPR-580 Dispensador de Agua 404.35 15
+SSD-176 Refrigeradora Linea Gallery 567.71 23
+SSE-115 Refrigeradora CoolStyle 311N Steel 3243.58 23
+TKM-141 Cocina a gas Marsella 402.24 24
+TMJ-043 Lavadora EcoBubble 2400.79 23
+TMN-884 Secadora de mano 310.65 10
+TXM-139 Televisor LED FULL HD 3D 1092.95 5
+TYF-885 Videojuego TW 4 794.14 7
+TZY-323 Terma a gas 2341.01 31
+UCX-285 Galaxy Tab 3 3290.93 11
+UDR-957 Refrigeradora ECOTT 423 IXL 861.70 19
+UJV-290 Cocina a gas Fassina Plus 2423.26 10
+UOD-420 Mini componente ESX6 828.94 10
+UTN-601 Autoradio XAV-601 BT 562.51 4
+UWA-476 Autoradio MEX BT3150U 1191.39 29
+UXG-019 Terma de acumulacion 934.91 16
+VCL-867 Cocina a gas Rubi 2 699.07 9
+VDD-853 Deshumedecedor FAD30D7TSSW 3.4L 25-30m2 1095.67 16
+VJI-529 Horno Empotrable Electrico 1102.67 16
+VRR-793 Rack Giratorio 32/60 241.71 26
+VTV-269 Extractor de aire 854.48 9
+VVS-017 Tablets MW 0731 2599.72 14
+VXS-438 Mouse Blue Tooth 60.11 17
+VZV-827 Refrigeradora Top Mount 1784.27 2
+WLL-607 Cocina Electronica Convencion 1525.04 1
+WZD-331 Refrigeradora ECOTT 465 IX 1213.79 7
+XBD-314 Cocina a gas Fassina 1444.90 8
+XLF-273 Centro de Lavado a Gas 2371.95 20
+XOA-735 Congeladora Vertical 392 Lts. 2708.07 12
+XSD-310 Refrigeradora No frost 2259.93 17
+XTE-383 Rack Fijo 32/60 261.01 10
+XZG-521 Secadora Electrica FAQE7001LW 704.27 22
+XZR-640 Lavadora-Secadora FWD 2390.58 14
+YEZ-591 Lavadora WA 1320.03 9
+YGV-332 Impresora Led Color 2517.66 18
+YJD-279 Cocina a gas Florencia 1028.43 23
+YMU-875 Cocina a gas Plermo Quarzo 3232.10 9
+YOT-530 Deshumedecedor DM-190H 941.73 13
+YUQ-590 Refrigeradora CoolStyle 395N Steel 1979.07 19
+YYK-309 Refrigeradora Door in Door 4079.44 25
+YYU-726 Reproductor DVD Portatil 767.82 14
+YZD-580 Mini componente ESX8 1582.29 4
+ZAF-449 Tablet Cardle 816.43 16
+ZEX-027 Tablet Xperia Z 3843.75 23
+ZVA-180 Refrigeradora 322 litros 2903.13 13
+ZWF-661 Impresora Led 2731.61 1
+ZXK-295 Cocina Empotrable Electrica 3679.43 9
+QQB-968 Refrigeradora 484 litros 1452.92 9
diff --git a/2023-2/E1/mitsuo/p2/fun.cpp b/2023-2/E1/mitsuo/p2/fun.cpp
index 9e61144..7521998 100644
--- a/2023-2/E1/mitsuo/p2/fun.cpp
+++ b/2023-2/E1/mitsuo/p2/fun.cpp
@@ -1,126 +1,110 @@
-#include <iostream>
+#include <cstring>
+#include <cstdlib>
#include <fstream>
#include <iomanip>
-
-#include <cstdlib>
-#include <cstring>
+#include <iostream>
#include "fun.hpp"
using namespace std;
-enum Reg {COD, NOM, PRECIO, STOCK};
-
-void cargarProductos(void *&prod, const char *nombArch){
- ifstream in(nombArch);
- if(!in) {
- cerr << "Error: no se pudo abrir archivo\n";
+void cargarProductos(void *& productos, const char * archivo) {
+ ifstream in(archivo);
+ if (!in) {
+ cout << "Error: no se pudo abrir archivo\n";
exit(1);
}
- void **productos=nullptr;
- char *cod;
- int nd=0, cap=0;
- while(1){
- cod = leeCad(in,',');
- if(in.eof()) break;
- if(nd==cap) aumentaEspacios(productos,nd,cap);
- guardaProd(in, productos[nd-1], cod);
- nd++;
- }
- prod = productos;
- qsort(prod, nd-1, sizeof(void *), cmpProducto);
-}
+ void ** ps = NULL;
+ size_t size = 0;
-void aumentaEspacios(void**&productos, int &nd, int &cap){
- void **aux;
- cap += INCREMENTO;
- if(productos==nullptr){
- productos = new void * [cap]{};
- nd=1;
- }
- else{
- aux = new void * [cap]{};
- for(int i=0;i<nd;i++){
- aux[i] = productos[i];
+ char code[MAXLEN];
+ char desc[MAXLEN];
+ double price;
+ int stock;
+
+ int i;
+ for (i = 0; true; i++) {
+ in.getline(code, MAXLEN, ',');
+ in.getline(desc, MAXLEN, ',');
+ in >> price; in.get();
+ in >> stock; in.get();
+ if (!in) {
+ break;
+ }
+
+ if (i + 1 >= size) {
+ increase_size_productos(ps, size);
}
- delete productos;
- productos = aux;
+
+ char * code_mem = new char [strlen(code) + 1]; strcpy(code_mem, code);
+ char * desc_mem = new char [strlen(desc) + 1]; strcpy(desc_mem, desc);
+
+ void ** p1 = new void * [4] {code_mem, desc_mem, new double {price}, new int {stock}};
+ void ** p2 = new void * [2] {p1, NULL};
+
+ ps[i] = p2;
+ ps[i + 1] = NULL;
}
+
+// at the end of the iteration ps[i] == NULL
+ qsort(ps, i - 1, sizeof(void *), cmp_productos);
+ productos = ps;
}
-char *leeCad(istream &arch, char delim){
- char *cad, buff[80];
- arch.getline(buff,80,delim);
- if(arch.eof()) return nullptr;
- cad = new char [strlen(buff)+1];
- strcpy(cad,buff);
- return cad;
+int cmp_productos(const void *lhs, const void *rhs) {
+ // (nasty)
+ char * s1 = (char *)(*(void ****) lhs)[0][0];
+ char * s2 = (char *)(*(void ****) rhs)[0][0];
+ return strcmp(s1, s2);
}
-void guardaProd(istream &arch, void *&prod, char *cod){
- void **producto = new void *[2]{};
- producto[0] = creaRegProd(arch, cod);
- producto[1] = nullptr;
- prod = producto;
-}
+void increase_size_productos(void **& ps, size_t &size) {
+ if (!ps) {
+ // init
+ size = INCREMENTO;
+ ps = new void * [size];
-void *creaRegProd(istream &arch, char *cod){
- char *nomb;
- double precio;
- int stock;
- void **reg;
- nomb = leeCad(arch,',');
- arch>>precio;
- arch.get();
- arch>>stock;
- arch>>ws;
- reg = new void * [4] {};
- reg[COD] = cod;
- reg[NOM] = nomb;
- reg[PRECIO] = new double (precio);
- reg[STOCK] = new int (stock);
- return reg;
-}
+ ps[0] = NULL;
+ return;
+ }
-int cmpProducto(const void *a, const void *b){
- void **ai = (void**)a, **bi = (void**)b;
- void **duplaA = (void**)(*ai), **duplaB = (void**)(*bi);
- void **regA = (void**)(duplaA[0]), **regB = (void**)(duplaB[0]);
- char *codA = (char *)(regA[0]), *codB = (char*)(regB[0]);
- return strcmp(codA, codB);
+ // this has O(n^2) time complexity (not good)
+ size += INCREMENTO;
+ void ** ps_tmp = new void * [size];
+
+ int i;
+ for (i = 0; i < size && ps[i]; i++) {
+ ps_tmp[i] = ps[i];
+ }
+ ps_tmp[i] = NULL;
+
+ delete [] ps;
+ ps = ps_tmp;
}
-void pruebaDeCargaDeProductos(void *prod){
- void **productos = (void**)prod;
+void pruebaDeCargaDeProductos(void * productos) {
ofstream out("PruebaProductos.txt");
- if(!out){
- cout<<"error al abrir archivo PruebaProductos.txt"<<endl;
+ if (!out) {
+ cout << "Error: no se pudo abrir archivo\n";
exit(1);
}
- out.precision(2);
- out<<fixed;
- out<<setw(70)<<"REPORTE DE PRUEBA DE PRODUCTOS"<<endl;
- imprimeLinea(out,'=');
- out<<left<<setw(10)<<"CODIGO"<<setw(70)<<"NOMBRE"<<right<<setw(10)<<"PRECIO"
- <<setw(10)<<"STOCK"<<endl;
- for(int i=0;productos[i];i++){
- imprimeProducto(out,productos[i]);
- }
-}
-void imprimeLinea(ostream &arch,char c){
- for(int i=0;i<110;i++) arch<<c;
- arch<<endl;
-}
+ void ** ps = (void **) productos;
-void imprimeProducto(ostream &arch,void *prod){
- void **producto = (void**)prod;
- imprimeRegistroProducto(arch,producto[0]);
-}
+ out << "Codigo Descripcion Precio Stock\n";
+ for (int i = 0; ps[i]; i++) {
+ void ** p2 = (void **) ps[i];
+ void ** p1 = (void **) p2[0];
+ char * code = (char *) p1[0];
+ char * desc = (char *) p1[1];
+ double * price = (double *) p1[2];
+ int * stock = (int *) p1[3];
-void imprimeRegistroProducto(ostream &arch,void *prod){
- void **producto = (void**)prod;
- char *cod = (char*)producto[COD],*nom = (char*)producto[NOM];
- double *precio = (double*)producto[PRECIO];
- int *stock = (int*)producto[STOCK];
- arch<<left<<setw(10)<<cod<<setw(70)<<nom<<right<<setw(10)<<*precio<<setw(9)<<*stock<<endl;
-}
+ out << left;
+ out << setw(12) << code;
+ out << setw(64) << desc;
+ out << right << fixed << setprecision(2);
+ out << setw(12) << *price;
+ out << setw(12) << *stock;
+ out << '\n';
+ }
+} \ No newline at end of file
diff --git a/2023-2/E1/mitsuo/p2/fun.hpp b/2023-2/E1/mitsuo/p2/fun.hpp
index 70f4b3f..c1ea51a 100644
--- a/2023-2/E1/mitsuo/p2/fun.hpp
+++ b/2023-2/E1/mitsuo/p2/fun.hpp
@@ -3,19 +3,13 @@
#include <iostream>
-#define MAX 1000
#define MAXLEN 100
#define INCREMENTO 5
-void cargarProductos(void *&prod, const char *nombArch);
-void aumentaEspacios(void**&productos, int &nd, int &cap);
-char *leeCad(std::istream &arch, char delim);
-void guardaProd(std::istream &arch, void *&prod, char *cod);
-void *creaRegProd(std::istream &arch, char *cod);
-int cmpProducto(const void *a, const void *b);
-void pruebaDeCargaDeProductos(void *prod);
-void imprimeLinea(std::ostream &arch,char c);
-void imprimeProducto(std::ostream &arch,void *prod);
-void imprimeRegistroProducto(std::ostream &arch,void *prod);
+void cargarProductos(void *& productos, const char * archivo);
+void pruebaDeCargaDeProductos(void * productos);
+
+int cmp_productos(const void *lhs, const void *rhs);
+void increase_size_productos(void **& ps, size_t &size);
#endif /* FUN_HPP */ \ No newline at end of file
diff --git a/2023-2/E1/mitsuo/p2/main.cpp b/2023-2/E1/mitsuo/p2/main.cpp
index caf1fe7..aafff14 100644
--- a/2023-2/E1/mitsuo/p2/main.cpp
+++ b/2023-2/E1/mitsuo/p2/main.cpp
@@ -1,7 +1,8 @@
#include "fun.hpp"
int main(int argc, char** argv) {
- void *productos;
+ void * productos;
+
cargarProductos(productos, "../../Productos.csv");
pruebaDeCargaDeProductos(productos);
return 0;