Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sleepy.lito en 12 Diciembre 2018, 23:12 pm



Título: ordenamieno burbuja
Publicado por: sleepy.lito en 12 Diciembre 2018, 23:12 pm
Necesito que mi programa ingrese unos datos a una base y las ordene mediante ordenamiento burbuja, el problema es que no me ordena los libros ingresados, si alguien me pudiese señalar donde tenga el error el prgrama porfavor.

Adjunto mi codigo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <conio.h>
  4.  
  5. #define MAXLIN 80
  6. #define MAXTIT 40
  7. #define MAXAUT 40
  8. #define MAXEDIT 40
  9. #define MAXREV 40
  10.  
  11. #define MAXTXT 100
  12.  
  13. enum {anadir=1, listartodo, listarano, salir};
  14.  
  15.  
  16.  
  17. struct texto {
  18. char titulo[MAXTIT];
  19. char autor[MAXAUT];
  20. char editorial[MAXEDIT];
  21. char revista[MAXREV];
  22. int numref;
  23. int numed;
  24. int auxref;
  25. int anyo;
  26. int clase;
  27. };
  28.  
  29. struct biblioteca {
  30. struct texto txt[MAXTXT];
  31. int cantidad;
  32. };
  33.  
  34. int main (void) {
  35.  
  36. struct biblioteca mistxt;
  37. int opcion, opc, i, j, ano, aux;
  38. char titulo[MAXTIT];
  39. char autor[MAXAUT];
  40. char linea[MAXLIN];
  41.  
  42.     mistxt.cantidad = 0;
  43.  
  44. do{
  45. do{
  46. printf("-------------------------------------\n");
  47. printf("Biblioteca Universidad de Valparaisio\n");
  48. printf("-------------------------------------\n");
  49. printf("1) Anadir Libro/Revista.\n");
  50. printf("2) Listar todos los textos.\n");
  51. printf("3) Listar por ano.\n");
  52. printf("4) Salir.\n");
  53. printf("\n");
  54. printf("Elija una opcion: \n");
  55. gets(linea); sscanf (linea, "%d", &opcion);
  56. if (opcion<1 || opcion>5){
  57. printf("La opcion ingresada es incorrecta, intente otra vez.\n");
  58. }
  59. }   while (opcion <1 || opcion >5);
  60.     printf("\n");
  61. switch (opcion) {
  62. case anadir:
  63. if (mistxt.cantidad == MAXTXT) {
  64. printf("La base de datos esta llena. Lo sentimos.\n");
  65. } else {
  66.  
  67. printf("Ingrese el numero de referencia: \n");
  68. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].numref);
  69. mistxt.txt[mistxt.cantidad].auxref = mistxt.txt[mistxt.cantidad].numref;
  70. printf("Ingrese el titulo: \n");
  71. gets(mistxt.txt[mistxt.cantidad].titulo);
  72. printf("Ingrese el autor: \n");
  73. gets(mistxt.txt[mistxt.cantidad].autor);
  74. printf("Ingrese la editorial: \n");
  75. gets(mistxt.txt[mistxt.cantidad].editorial);
  76. printf("Ingrese ano de publicacion: \n");
  77. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].anyo);
  78. do{
  79. printf("Ingrese la clase de texto que es: \n1) Libro \n2) Revista\n");
  80. printf("Elija la opcion: 1 o 2\n");
  81. gets(linea); sscanf (linea, "%d", &opc);
  82. if (opc<1 || opc>2){
  83. printf("La opcion ingresada es incorrecta, intente otra vez.\n");
  84. }
  85. } while (opcion <1 || opcion >2);
  86. switch (opc) {
  87.  
  88. case 1:
  89. mistxt.txt[mistxt.cantidad].clase= 1;
  90. printf("Ingrese el numero de edicion: \n");
  91. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].numed);
  92. break;
  93.  
  94. case 2:
  95. mistxt.txt[mistxt.cantidad].clase= 2;
  96. printf("Ingrese el nombre de la revista: \n");
  97. gets(mistxt.txt[mistxt.cantidad].revista);
  98. break;
  99. }
  100.  
  101. for(i=0;i<mistxt.cantidad;i++){
  102. for(j=0;j<mistxt.cantidad;j++){
  103. if(mistxt.txt[j].auxref>mistxt.txt[j+1].auxref){
  104. aux = mistxt.txt[j].auxref;
  105. mistxt.txt[j].auxref = mistxt.txt[j+1].auxref;
  106. mistxt.txt[j+1].auxref=aux;
  107. }
  108. }
  109. }
  110. printf("\n\n");
  111. mistxt.cantidad++;
  112. }
  113. break;
  114.  
  115. case listartodo:
  116.  
  117. for (i=0; i<mistxt.cantidad; i++){
  118. printf("---------------------------\n");
  119. printf("%d", i);
  120. printf("Numero de referencia: %d\n", mistxt.txt[i].numref);
  121. printf("Titlulo: %s\n", mistxt.txt[i].titulo);
  122. printf("Autor: %s\n", mistxt.txt[i].autor);
  123. printf("Editorial: %s\n", mistxt.txt[i].editorial);
  124. printf("Año de publicacion; %d\n", mistxt.txt[i].anyo);
  125. if(mistxt.txt[i].clase == 1){
  126. printf("Tipo de texto: Libro\n");
  127. printf("N° de edicion: %d\n", mistxt.txt[i].numed);
  128. }
  129. if(mistxt.txt[i].clase == 2){
  130. printf("Tipo de texto: Revista\n");
  131. printf("Nombre de la revista: %s\n", mistxt.txt[i].revista);
  132. }
  133. printf("---------------------------\n");
  134. }
  135. break;
  136.  
  137. case listarano:
  138. printf("Ingrese el ano a buscar: \n");
  139. scanf("%d", ano);
  140. for (i=0; i<mistxt.cantidad; i++){
  141. if (mistxt.txt[i].anyo==ano){
  142. printf("---------------------------\n");
  143. printf("%d", i);
  144. printf("Numero de referencia: %d\n", mistxt.txt[i].numref);
  145. printf("Titlulo: %s\n", mistxt.txt[i].titulo);
  146. printf("Autor: %s\n", mistxt.txt[i].autor);
  147. printf("Editorial: %s\n", mistxt.txt[i].editorial);
  148. printf("Año de publicacion; %d\n", mistxt.txt[i].anyo);
  149. if(mistxt.txt[i].clase == 1){
  150. printf("Tipo de texto: Libro\n");
  151. printf("N° de edicion: %d\n", mistxt.txt[i].numed);
  152. }
  153. if(mistxt.txt[i].clase == 2){
  154. printf("Tipo de texto: Revista\n");
  155. printf("Nombre de la revista: %s\n", mistxt.txt[i].revista);
  156. }
  157. printf("---------------------------\n");
  158. }
  159. }
  160. break;
  161. }
  162. } while (opcion != salir);
  163. return 0;
  164. }
  165.  


Título: Re: ordenamieno burbuja
Publicado por: K-YreX en 13 Diciembre 2018, 00:12 am
El código entre etiquetas GeSHi. Se seleccionan encima del cuadro de texto que aparece cuando escribes un mensaje, donde pone "Código GeSHi".
Después igual podemos ayudarte... :-X


Título: Re: ordenamieno burbuja
Publicado por: CalgaryCorpus en 13 Diciembre 2018, 16:41 pm
No parece haber codigo que compare y de vuelta libros. Veo un codigo que compara y da vuelta auxref dentro de libros, pero no libros. Siendo asi, los libros no se van a ordenar.