Autor
|
Tema: AYUDA Problema con dos listas ordenadas C++ (Leído 2,662 veces)
|
Kougami
Desconectado
Mensajes: 53
|
Buenas, tengo un problema, teniendo dos listas ordenadas, correspondientes al siguietne codigo: const int MAX_M = 20; const int MAX_V = 100; typedef struct { int codigo; string nombre; }tMueble; typedef tMueble losMuebles[MAX_M]; typedef struct { losMuebles muebles; int tamLM; }tListaM; typedef struct { int anyo; int mes; int dia; }tFecha; typedef struct { int codigo; tFecha fecha; int unidades; }tVenta; typedef tVenta lasVentas[MAX_V]; typedef struct { lasVentas ventas; int tamLV; }tListaV;
Cada lista lee un archivo distinto: La primera lista, tListaM, lee un archivo que contiene solamente un codigo de 4 digitos y una cadena de caracter que es el nombre. La segunda lista, tListaV, lee un archivo que contiene una fecha en formato aa/mm/dd, un codigo de 4 digitos, que puede corresponder o no, a algun codigo de la lista anterior; y por ultimo un numero entero. Lo lee correctamente y todo, pero ahora tengo que hacer que se muestre la lista de las ventas, pero de otro modo: tiene que mostrar primero las fechas, luego en vez del codigo de 4 digitos, tiene que buscar en la lista tListaM, si el codigo está o no, y si esta mostrar el nombre asociado a dicho codigo, y sino esta, mostrar ERROR, y luego mostrar el numero de unidades asociado al codigo. Los archivos podrian ser: lista1.txt 1325 Mesita de Cama 2176 Cama de Matrimonio -1 lista2.txt 17/02/01 7737 5 17/01/22 1325 2 15/12/23 2176 6 -1 Ambos archivos tienen el -1 como centinela Muchas gracias de antemano
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Vaya, veo que complicas mucho el sistema de datos. Es mala práctica ocultar punteros y arrays detrás de typedefs
|
|
|
En línea
|
|
|
|
Kougami
Desconectado
Mensajes: 53
|
Bueno, es lo que me piden hacer, y en mi caso, o sigo el formato que me dicen o suspenso jajajajajaj
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
¿Y que tienes hasta ahora?
|
|
|
En línea
|
|
|
|
Kougami
Desconectado
Mensajes: 53
|
Mira, este es todo el codigo que llevo escrito: #include <iostream> #include <fstream> #include <string> #include <cmath> #include <iomanip> using namespace std; /**CONSTANTES Y TYPEDEFS**/ const int MAX_M = 20; const int MAX_V = 100; typedef struct { int codigo; string nombre; }tMueble; typedef tMueble losMuebles[MAX_M]; typedef struct { losMuebles muebles; int tamLM; }tListaM; typedef struct { int anyo; int mes; int dia; }tFecha; typedef struct { int codigo; tFecha fecha; int unidades; }tVenta; typedef tVenta lasVentas[MAX_V]; typedef struct { lasVentas ventas; int tamLV; }tListaV; /**DESARROLLO DE LAS FUNCIONES**/ void inicializarListaM(tListaM& listaM) { listaM.tamLM = 0; } void inicializarListaV(tListaV& listaV) { listaV.tamLV = 0; } void anyadirMueble(tListaM& listaM, const tMueble& elMueble) { listaM.muebles[listaM.tamLM] = elMueble; listaM.tamLM++; } void anyadirVenta(tListaV& listaV, const tVenta& laVenta) { listaV.ventas[listaV.tamLV] = laVenta; listaV.tamLV++; } void leerFecha(ifstream& fichV, tFecha& laFecha) { char sepa; fichV >> laFecha.anyo; fichV.get(sepa); fichV >> laFecha.mes; fichV.get(sepa); fichV>> laFecha.dia; } void leerMueble(ifstream& fichM, tMueble& elMueble) { string nombre; char aux; fichM >> elMueble.codigo; fichM.get(aux); getline(fichM, elMueble.nombre); } void leerVenta(ifstream& fichV, tVenta& laVenta) { char aux; fichV >> laVenta.codigo; leerFecha(fichV, laVenta.fecha); fichV >> laVenta.unidades; } void leerMuebles(ifstream& fichM, tListaM& listaM) { tMueble elMueble; leerMueble(fichM, elMueble); while (elMueble.codigo != -1) { anyadirMueble(listaM, elMueble); leerMueble(fichM, elMueble); } fichM.close(); } void leerVentas(ifstream& fichV, tListaV& listaV) { tVenta laVenta; leerVenta(fichV, laVenta); while (laVenta.codigo != -1) { anyadirVenta(listaV, laVenta); leerVenta(fichV, laVenta); } fichV.close(); } void mostrarMuebles(const tListaM& listaM) { for (int i = 0; i < listaM.tamLM; i++) { cout << listaM.muebles[i].codigo <<" "<< listaM.muebles[i].nombre << endl; } } void mostrarFecha(const tListaV& listaV) { int i; i = 0; cout << listaV.ventas[i].fecha.anyo << "/"<< listaV.ventas[i].fecha.mes << "/" << listaV.ventas[i].fecha.dia; } void mostrarVentas(const tListaV& listaV) { for (int i = 0; i < listaV.tamLV; i++) { mostrarFecha(listaV); cout << setw(5) << listaV.ventas[i].codigo << setw(5) << listaV.ventas[i].unidades << endl; } } void mezcla(tListaM& listaM, tListaV& listaV) { int posM; int posV; posM = 0; posV = 0; while (posV < listaV.tamLV) { if (listaM.muebles[posM].codigo != listaV.ventas[posV].codigo) { cout << "ERROR" << endl; posM++; } else { cout << listaM.muebles[posM].nombre << " " << listaV.ventas[posV].unidades << " unidades" << endl; posV++; } } } int main(int argc, char** args) { setlocale(LC_ALL, "spanish"); ifstream fichM; fichM.open("muebles.txt"); ifstream fichV; fichV.open("ventas.txt"); tListaV listaV; tListaM listaM; inicializarListaM(listaM); leerMuebles(fichM, listaM); inicializarListaV(listaV); leerVentas(fichV, listaV); mostrarMuebles(listaM); mostrarVentas(listaV); mezcla(listaM, listaV); system("pause"); return 0; }
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
El programa, tal y como está, a mi no me lee bien. leerMuebles me da fallo de segmento.
Haciendo el ejercicio para mí y adaptando el código al C he dado con estos errores: Tú dices que lista2.txt tiene este formato 17/02/01 7737 5 17/01/22 1325 2 15/12/23 2176 6 pero tu código lee primero el código void leerVenta(ifstream& fichV, tVenta& laVenta) { char aux; fichV >> laVenta.codigo; leerFecha(fichV, laVenta.fecha); fichV >> laVenta.unidades; }
por lo tanto el orden de los datos difiere del archivo con los de tu programa. Sea como sea cuándo leas del archivo y al encontrarte con el marcador -1 no debes leer más allá, sin embargo en el código de las funciones leerVenta y leerMueble aunque leas dicho marcador sigues leyendo datos del archivo aunque estos no existan.
|
|
« Última modificación: 23 Abril 2017, 01:23 am por MAFUS »
|
En línea
|
|
|
|
Kougami
Desconectado
Mensajes: 53
|
El leerVenta, unicamente lee una venta, y si, la leer en orden distinto a como aparece en el archivo, luego en el leerVentas, es el que lee todas las ventas, y para al leer -1 por la condicion de while(venta.codigo != -1)
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Pues todo ese planteamiento está mal. El archivo debe leerse en el orden en que está configurado y no debes leer más allá de su final.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con Listas
Java
|
HadesDark
|
2
|
2,398
|
9 Noviembre 2007, 22:00 pm
por Ragnarok
|
|
|
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
|
Gerik
|
0
|
5,177
|
12 Septiembre 2010, 01:49 am
por Gerik
|
|
|
Problema con listas enlazadas.
Programación C/C++
|
samur88
|
9
|
4,934
|
4 Diciembre 2010, 19:18 pm
por EddyC
|
|
|
Combinaciones ordenadas sin repeticiones en c++
Programación C/C++
|
luis456
|
0
|
8,021
|
8 Diciembre 2012, 14:13 pm
por luis456
|
|
|
Leer archivo y separar por listas ordenadas.
Scripting
|
riderz44
|
7
|
3,210
|
16 Noviembre 2016, 17:48 pm
por Once
|
|