diff options
Diffstat (limited to '2023-2/E1/mitsuo/p2')
| -rw-r--r-- | 2023-2/E1/mitsuo/p2/PruebaProductos.txt | 168 | ||||
| -rw-r--r-- | 2023-2/E1/mitsuo/p2/fun.cpp | 186 | ||||
| -rw-r--r-- | 2023-2/E1/mitsuo/p2/fun.hpp | 16 | ||||
| -rw-r--r-- | 2023-2/E1/mitsuo/p2/main.cpp | 3 |
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; |
