elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA Problema con dos listas ordenadas C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA Problema con dos listas ordenadas C++  (Leído 2,624 veces)
Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
AYUDA Problema con dos listas ordenadas C++
« en: 21 Abril 2017, 16:56 pm »

Buenas, tengo un problema, teniendo dos listas ordenadas, correspondientes al siguietne codigo:
Código
  1. const int MAX_M = 20;
  2.  
  3. const int MAX_V = 100;
  4.  
  5. typedef struct {
  6. int codigo;
  7. string nombre;
  8. }tMueble;
  9.  
  10. typedef tMueble losMuebles[MAX_M];
  11.  
  12. typedef struct {
  13. losMuebles muebles;
  14. int tamLM;
  15. }tListaM;
  16.  
  17. typedef struct {
  18. int anyo;
  19. int mes;
  20. int dia;
  21. }tFecha;
  22.  
  23. typedef struct {
  24. int codigo;
  25. tFecha fecha;
  26. int unidades;
  27. }tVenta;
  28.  
  29. typedef tVenta lasVentas[MAX_V];
  30.  
  31. typedef struct {
  32. lasVentas ventas;
  33. int tamLV;
  34. }tListaV;
  35.  

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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #1 en: 21 Abril 2017, 21:27 pm »

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 Desconectado

Mensajes: 53


Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #2 en: 22 Abril 2017, 00:38 am »

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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #3 en: 22 Abril 2017, 01:02 am »

¿Y que tienes hasta ahora?
En línea

Kougami

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #4 en: 22 Abril 2017, 14:31 pm »

Mira, este es todo el codigo que llevo escrito:

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cmath>
  5. #include <iomanip>
  6. using namespace std;
  7.  
  8. /**CONSTANTES Y TYPEDEFS**/
  9.  
  10. const int MAX_M = 20;
  11.  
  12. const int MAX_V = 100;
  13.  
  14. typedef struct {
  15. int codigo;
  16. string nombre;
  17. }tMueble;
  18.  
  19. typedef tMueble losMuebles[MAX_M];
  20.  
  21. typedef struct {
  22. losMuebles muebles;
  23. int tamLM;
  24. }tListaM;
  25.  
  26. typedef struct {
  27. int anyo;
  28. int mes;
  29. int dia;
  30. }tFecha;
  31.  
  32. typedef struct {
  33. int codigo;
  34. tFecha fecha;
  35. int unidades;
  36. }tVenta;
  37.  
  38. typedef tVenta lasVentas[MAX_V];
  39.  
  40. typedef struct {
  41. lasVentas ventas;
  42. int tamLV;
  43. }tListaV;
  44.  
  45. /**DESARROLLO DE LAS FUNCIONES**/
  46.  
  47. void inicializarListaM(tListaM& listaM) {
  48. listaM.tamLM = 0;
  49. }
  50.  
  51. void inicializarListaV(tListaV& listaV) {
  52. listaV.tamLV = 0;
  53. }
  54.  
  55. void anyadirMueble(tListaM& listaM, const tMueble& elMueble) {
  56. listaM.muebles[listaM.tamLM] = elMueble;
  57. listaM.tamLM++;
  58. }
  59.  
  60. void anyadirVenta(tListaV& listaV, const tVenta& laVenta) {
  61. listaV.ventas[listaV.tamLV] = laVenta;
  62. listaV.tamLV++;
  63. }
  64.  
  65.  
  66. void leerFecha(ifstream& fichV, tFecha& laFecha) {
  67. char sepa;
  68. fichV >> laFecha.anyo;
  69. fichV.get(sepa);
  70. fichV >> laFecha.mes;
  71. fichV.get(sepa);
  72. fichV>> laFecha.dia;
  73. }
  74.  
  75. void leerMueble(ifstream& fichM, tMueble& elMueble) {
  76. string nombre;
  77. char aux;
  78. fichM >> elMueble.codigo;
  79. fichM.get(aux);
  80. getline(fichM, elMueble.nombre);
  81. }
  82.  
  83. void leerVenta(ifstream& fichV, tVenta& laVenta) {
  84. char aux;
  85. fichV >> laVenta.codigo;
  86. leerFecha(fichV, laVenta.fecha);
  87. fichV >> laVenta.unidades;
  88. }
  89.  
  90. void leerMuebles(ifstream& fichM, tListaM& listaM) {
  91. tMueble elMueble;
  92. leerMueble(fichM, elMueble);
  93. while (elMueble.codigo != -1) {
  94. anyadirMueble(listaM, elMueble);
  95. leerMueble(fichM, elMueble);
  96. }
  97. fichM.close();
  98. }
  99.  
  100. void leerVentas(ifstream& fichV, tListaV& listaV) {
  101. tVenta laVenta;
  102. leerVenta(fichV, laVenta);
  103. while (laVenta.codigo != -1) {
  104. anyadirVenta(listaV, laVenta);
  105. leerVenta(fichV, laVenta);
  106. }
  107. fichV.close();
  108. }
  109.  
  110. void mostrarMuebles(const tListaM& listaM) {
  111. for (int i = 0; i < listaM.tamLM; i++) {
  112. cout << listaM.muebles[i].codigo  <<" "<< listaM.muebles[i].nombre << endl;
  113. }
  114. }
  115.  
  116. void mostrarFecha(const tListaV& listaV) {
  117. int i;
  118. i = 0;
  119. cout << listaV.ventas[i].fecha.anyo << "/"<< listaV.ventas[i].fecha.mes << "/" << listaV.ventas[i].fecha.dia;
  120. }
  121.  
  122. void mostrarVentas(const tListaV& listaV) {
  123. for (int i = 0; i < listaV.tamLV; i++) {
  124. mostrarFecha(listaV);
  125. cout << setw(5) << listaV.ventas[i].codigo << setw(5) << listaV.ventas[i].unidades << endl;
  126. }
  127. }
  128.  
  129. void mezcla(tListaM& listaM, tListaV& listaV) {
  130. int posM;
  131. int posV;
  132. posM = 0;
  133. posV = 0;
  134. while (posV < listaV.tamLV) {
  135. if (listaM.muebles[posM].codigo != listaV.ventas[posV].codigo) {
  136. cout << "ERROR" << endl;
  137. posM++;
  138. }
  139. else {
  140. cout << listaM.muebles[posM].nombre << " " << listaV.ventas[posV].unidades << " unidades" << endl;
  141. posV++;
  142. }
  143. }
  144. }
  145.  
  146. int main(int argc, char** args) {
  147. setlocale(LC_ALL, "spanish");
  148. ifstream fichM;
  149. fichM.open("muebles.txt");
  150. ifstream fichV;
  151. fichV.open("ventas.txt");
  152. tListaV listaV;
  153. tListaM listaM;
  154. inicializarListaM(listaM);
  155. leerMuebles(fichM, listaM);
  156. inicializarListaV(listaV);
  157. leerVentas(fichV, listaV);
  158. mostrarMuebles(listaM);
  159. mostrarVentas(listaV);
  160. mezcla(listaM, listaV);
  161. system("pause");
  162. return 0;
  163. }
  164.  
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #5 en: 23 Abril 2017, 01:02 am »

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
Citar
17/02/01 7737 5
17/01/22 1325 2
15/12/23 2176 6
pero tu código lee primero el código
Código
  1. void leerVenta(ifstream& fichV, tVenta& laVenta) {
  2. char aux;
  3. fichV >> laVenta.codigo;
  4. leerFecha(fichV, laVenta.fecha);
  5. fichV >> laVenta.unidades;
  6. }
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 Desconectado

Mensajes: 53


Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #6 en: 24 Abril 2017, 09:41 am »

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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Problema con dos listas ordenadas C++
« Respuesta #7 en: 24 Abril 2017, 15:41 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Listas
Java
HadesDark 2 2,371 Último mensaje 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,097 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Problema con listas enlazadas.
Programación C/C++
samur88 9 4,895 Último mensaje 4 Diciembre 2010, 19:18 pm
por EddyC
Combinaciones ordenadas sin repeticiones en c++
Programación C/C++
luis456 0 7,993 Último mensaje 8 Diciembre 2012, 14:13 pm
por luis456
Leer archivo y separar por listas ordenadas.
Scripting
riderz44 7 3,172 Último mensaje 16 Noviembre 2016, 17:48 pm
por Once
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines