Foros del Web » Programación para mayores de 30 ;) » C/C++ »

como ordenar alfabeticamente arreglos

Estas en el tema de como ordenar alfabeticamente arreglos en el foro de C/C++ en Foros del Web. hola estaba haciendo un porgrama que me pidiera unos libros y ordenarlos por precio, autor titulo y editorial hasta el precio bien, pero como no ...
  #1 (permalink)  
Antiguo 24/11/2012, 13:48
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 12 años, 2 meses
Puntos: 0
como ordenar alfabeticamente arreglos

hola estaba haciendo un porgrama que me pidiera unos libros y ordenarlos por precio, autor titulo y editorial
hasta el precio bien, pero como no tengo mucha idea de comparar caracteres decidi usar la libreria string, la cual no conosco muy bien asi qeu me pegue a un modelo que vi en internet a partir de ahi me ha salido un monton de errores, en todas las funciones y no entiendo por que si antes compilaba. el caos es la función que esta en el swith. perdon por el codigo es un poco extenso pero como es un TDA crei necesario mostrarlo completo. tal vez estoy cansado y debo ir a dormir


Código C++:
Ver original
  1. #include<iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. struct E_Libro{
  7.        char* titulo;
  8.        char* autor;
  9.        char* editorial;      
  10.        int precio;
  11. };
  12.  
  13. typedef E_Libro* libro;
  14.  
  15. libro crear_libro(){
  16.       libro x=new E_Libro;
  17.       x->titulo=new char[50];
  18.       x->autor=new char[50];
  19.       x->editorial=new char[30];
  20.       return x;
  21. }
  22. void liberar_libro(libro x){
  23.       delete[] x->titulo;
  24.       delete[] x->autor;
  25.       delete[] x->editorial;
  26.       delete[] x;
  27. }
  28.  
  29.  
  30. libro* ordenar_libros(char **libro int cant int caso){
  31. switch(numero)
  32. {
  33.    case 0:
  34. {
  35. int j, i;
  36. char temp[30];
  37.      cout<<"ordenar por titulo";
  38. for(i = 0; i < cant-1; i++)
  39.       for(j = cant-1; j > i; j--)
  40.             if(strcmp(titulo[j-1],titulo[j]) > 0)
  41. {
  42.             strcpy(temp, nombre[j-1]);
  43.             strcpy(titulo[j-1], titulo[j]);
  44.             strcpy(titulo[j], temp);
  45.             break;
  46. }
  47.    case 1:
  48.        
  49. {
  50.  
  51. int j, i, MAX;
  52. char temp[30];
  53.      cout<<"ordenar por autor";
  54.        for(int i=0;i<cant;i++){
  55.            for(int j=i+1;j<cant;j++){
  56.                    
  57.                    valor=strcmp(autor[i],autor[j]);
  58.                    if(valor>0){char temp[MAX];
  59.                    
  60.                    strcpy(temporal,autor[i]);
  61.                    strcpy(autor[i],autor[j]);
  62.                    strcpy(autor[j],temp);
  63.            break;
  64.    case 2:
  65.  
  66. int j, i, MAX;
  67. char temp[30];
  68.      cout<<"ordenar por editorial";
  69.        for(int i=0;i<cant;i++){
  70.            for(int j=i+1;j<cant;d++){
  71.                    
  72.                    valor=strcmp(lista[i],lista[j]);
  73.                    if(valor>0){char tem[MAX];
  74.                    
  75.                    strcpy(editorial,lista[i]);
  76.                    strcpy(editorial[i],editorial[i]);
  77.                    strcpy(editorial[j],temporal);
  78.            break;
  79.    
  80.    default:
  81. }
  82. }
  83.  
  84. libro leer_libro(libro x){
  85.       cout<<"Digite el titulo del libro: ";
  86.       cin.getline(x->titulo,50);
  87.           while(strlen(x->titulo)==0){
  88.                cin.getline(x->titulo,50);
  89.           }
  90.       cout<<"Digite el autor del libro: ";
  91.       cin.getline(x->autor,50);
  92.           while(strlen(x->autor)==0){
  93.                cin.getline(x->autor,50);
  94.           }
  95.       cout<<"Digite la editorial del libro: ";
  96.       cin.getline(x->editorial,30);
  97.           while(strlen(x->editorial)==0){
  98.                cin.getline(x->editorial,50);
  99.           }
  100.       cout<<"Digite el precio del libro: ";
  101.       cin>>x->precio;
  102.           while(x->precio<0){
  103.                cout<<"No valido, digite el precio del libro";
  104.                cin>>x->precio;
  105.           }
  106.       return x;
  107. }
  108.  
  109. void imprimir_libro(libro x){
  110.      cout<<"\nInformacion del libro\n";
  111.      cout<<"-------------------------\n";
  112.      cout<<"Titulo: \t"<<x->titulo;
  113.      cout<<"\nAutor: \t\t"<<x->autor;
  114.      cout<<"\nEditorial: \t"<<x->editorial;
  115.      cout<<"\nPrecio: \t"<<x->precio<<"\n\n";
  116. }
  117.  
  118. libro* leer_conjunto_libros(libro* c, int n){
  119.      for(int i=0;i<n;i++){
  120.              cout<<"\n\nLibro "<<i+1<<":\n\n";
  121.              libro a=crear_libro();
  122.              a=leer_libro(a);
  123.              c[i]=a;
  124.     }  
  125.     return c;
  126. }
  127.  
  128. void imprimir_conjunto_libros(libro* c, int n){
  129.      cout<<"TITULO \t\tAUTOR \t\tEDITORIAL \t\tPRECIO \n";
  130.      for(int i=0;i<n;i++){
  131.              cout<<c[i]->titulo<<"\t\t"<<c[i]->autor<<"\t\t";
  132.              cout<<c[i]->editorial<<"\t\t\t"<<c[i]->precio<<"\n";
  133.      }
  134. }
  135.  
  136. libro* ordenar_por_precio(libro* c, int n){
  137.        libro aux;
  138.        for(int i=0;i<n;i++){
  139.                for(int j=i+1;j<n;j++){
  140.                        if(c[j]->precio<c[i]->precio){
  141.                                 aux=c[i];
  142.                                 c[i]=c[j];
  143.                                 c[j]=aux;
  144.                        }
  145.                }
  146.        }
  147.        return c;
  148. }
  149.  
  150. int main(){
  151.     int n=0;
  152.     cout<<"Cuantos libros desea ingresar? \n";
  153.     cin>>n;
  154.     libro* conjunto=new libro[n];
  155.  
  156.     conjunto=leer_conjunto_libros(conjunto,n);
  157.     cout<<"\n___________________________________\n";
  158.     cout<<"\nLIBROS INGRESADOS POR EL USUARIO\n";
  159.     cout<<"___________________________________\n\n";
  160.     imprimir_conjunto_libros(conjunto,n);
  161.     conjunto=ordenar_por_precio(conjunto,n);
  162.    
  163.     cout<<"\n___________________________________\n";    
  164.     cout<<"\nLIBROS ORDENADOS POR PRECIO\n";
  165.     cout<<"___________________________________\n\n";
  166.     imprimir_conjunto_libros(conjunto,n);
  167.    
  168.     conjunto= ordenar_libros(conjunto,n, caso);
  169.     cout<<"ordenar por";
  170.    
  171.     system("pause");
  172. }
  #2 (permalink)  
Antiguo 24/11/2012, 13:51
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: como ordenar alfabeticamente arreglos

debo decir que usar la librería string no es lo mio no entendí nada. así que aquí esta pero sin usar la podrida librería para ordenar alfabéticamente, solo que al ejecutarlo no me pide el ordenamiento no entiendo por que, creo que estoy llamando la función correctamente.

Código C++:
Ver original
  1. #include<iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6. int strcmp(const char[], const char[]);
  7.  
  8. struct E_Libro{
  9.        char* titulo;
  10.        char* autor;
  11.        char* editorial;      
  12.        int precio;
  13. };
  14.  
  15. typedef E_Libro* libro;
  16.  
  17. libro crear_libro(){
  18.       libro x=new E_Libro;
  19.       x->titulo=new char[50];
  20.       x->autor=new char[50];
  21.       x->editorial=new char[30];
  22.       return x;
  23. }
  24. void liberar_libro(libro x){
  25.       delete[] x->titulo;
  26.       delete[] x->autor;
  27.       delete[] x->editorial;
  28.       delete[] x;
  29. }
  30.  
  31. libro leer_libro(libro x){
  32.       cout<<"Digite el titulo del libro: ";
  33.       cin.getline(x->titulo,50);
  34.           while(strlen(x->titulo)==0){
  35.                cin.getline(x->titulo,50);
  36.           }
  37.       cout<<"Digite el autor del libro: ";
  38.       cin.getline(x->autor,50);
  39.           while(strlen(x->autor)==0){
  40.                cin.getline(x->autor,50);
  41.           }
  42.       cout<<"Digite la editorial del libro: ";
  43.       cin.getline(x->editorial,30);
  44.           while(strlen(x->editorial)==0){
  45.                cin.getline(x->editorial,50);
  46.           }
  47.       cout<<"Digite el precio del libro: ";
  48.       cin>>x->precio;
  49.           while(x->precio<0){
  50.                cout<<"No valido, digite el precio del libro";
  51.                cin>>x->precio;
  52.           }
  53.       return x;
  54. }
  55.  
  56. void imprimir_libro(libro x){
  57.      cout<<"\nInformacion del libro\n";
  58.      cout<<"-------------------------\n";
  59.      cout<<"Titulo: \t"<<x->titulo;
  60.      cout<<"\nAutor: \t\t"<<x->autor;
  61.      cout<<"\nEditorial: \t"<<x->editorial;
  62.      cout<<"\nPrecio: \t"<<x->precio<<"\n\n";
  63. }
  64.  
  65. libro* leer_conjunto_libros(libro* c, int n){
  66.      for(int i=0;i<n;i++){
  67.              cout<<"\n\nLibro "<<i+1<<":\n\n";
  68.              libro a=crear_libro();
  69.              a=leer_libro(a);
  70.              c[i]=a;
  71.     }  
  72.     return c;
  73. }
  74.  
  75. void imprimir_conjunto_libros(libro* c, int n){
  76.      cout<<"TITULO \t\tAUTOR \t\tEDITORIAL \t\tPRECIO \n";
  77.      for(int i=0;i<n;i++){
  78.              cout<<c[i]->titulo<<"\t\t"<<c[i]->autor<<"\t\t";
  79.              cout<<c[i]->editorial<<"\t\t\t"<<c[i]->precio<<"\n";
  80.      }
  81. }
  82.  
  83. libro* ordenar_por_precio(libro* c, int n){
  84.        libro aux;
  85.        for(int i=0;i<n;i++){
  86.                for(int j=i+1;j<n;j++){
  87.                        if(c[j]->precio<c[i]->precio){
  88.                                 aux=c[i];
  89.                                 c[i]=c[j];
  90.                                 c[j]=aux;
  91.                        }
  92.                }
  93.        }
  94.        return c;
  95. }
  96.  
  97. libro* ordenar_por_autor(libro* c, int n){
  98.        libro aux;
  99. //       int m=0;
  100. //       for(int k=0;k<n;i++){
  101. //               if(c[]->autor=)
  102. //               }
  103.        
  104.        for(int i=0;i<n;i++){
  105.                for(int j=i+1;j<n;j++){
  106.                        if((c[j]->autor)[0]<(c[i]->autor)[0]){
  107.                                 aux=c[i];
  108.                                 c[i]=c[j];
  109.                                 c[j]=aux;
  110.                        }
  111. //                       if(c[j]->autor==c[i]->autor){
  112. //                                                   libro* x=new libro[2];
  113. //                                                   x[0]=c[j];
  114. //                                                   x[1]=c[i];
  115. //                                                   ordenar_por_precio(x,2);
  116. //                                                   }
  117.                }
  118.        }
  119.        return c;
  120. }
  121.  
  122. libro* ordenar_por_titulo(libro* c, int n){
  123.         libro aux;
  124.        for(int i=0;i<n;i++){
  125.                for(int j=i+1;j<n;j++){
  126.                        if((c[j]->titulo)[0]<(c[i]->titulo)[0]){
  127.                                 aux=c[i];
  128.                                 c[i]=c[j];
  129.                                 c[j]=aux;
  130.                        }
  131.                }
  132.        }
  133.        return c;
  134. }
  135.  
  136. libro* ordenar_por_editorial(libro* c, int n){
  137.         libro aux;
  138.        for(int i=0;i<n;i++){
  139.                for(int j=i+1;j<n;j++){
  140.                        if((c[j]->editorial)[0]<(c[i]->editorial)[0]){
  141.                                 aux=c[i];
  142.                                 c[i]=c[j];
  143.                                 c[j]=aux;
  144.                        }
  145.                }
  146.        }
  147.        return c;
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. void ordenar(libro* c,int n,int x){
  156.      switch(x){
  157.                case 1:
  158.                     cout<<"\n___________________________________\n";    
  159.                     cout<<"\nLIBROS ORDENADOS POR TITULO\n";
  160.                     cout<<"___________________________________\n\n";
  161.                     c=ordenar_por_titulo(c,n);
  162.                     imprimir_conjunto_libros(c,n);
  163.                break;
  164.                case 2:
  165.                     cout<<"\n___________________________________\n";    
  166.                     cout<<"\nLIBROS ORDENADOS POR AUTOR\n";
  167.                     cout<<"___________________________________\n\n";
  168.                     c=ordenar_por_autor(c,n);
  169.                     imprimir_conjunto_libros(c,n);
  170.                break;
  171.                case 3:
  172.                     cout<<"\n___________________________________\n";    
  173.                     cout<<"\nLIBROS ORDENADOS POR EDITORIAL\n";
  174.                     cout<<"___________________________________\n\n";
  175.                     c=ordenar_por_editorial(c,n);
  176.                     imprimir_conjunto_libros(c,n);
  177.                                    
  178.                break;
  179.                                
  180.                default:
  181.                cout<<"el numero tiene que ser 1, 2 o 3"<<endl;
  182.                    
  183.                }
  184.                  
  185.      
  186.      
  187. }
  188.  
  189. //void comparar_cadenas()
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199. int main(){
  200.     int n=0;
  201.     cout<<"Cuantos libros desea ingresar? \n";
  202.     cin>>n;
  203.     libro* conjunto=new libro[n];
  204.  
  205.     conjunto=leer_conjunto_libros(conjunto,n);
  206.     cout<<"\n___________________________________\n";
  207.     cout<<"\nLIBROS INGRESADOS POR EL USUARIO\n";
  208.     cout<<"___________________________________\n\n";
  209.     imprimir_conjunto_libros(conjunto,n);
  210.     conjunto=ordenar_por_precio(conjunto,n);
  211.    
  212.     cout<<"\n___________________________________\n";    
  213.     cout<<"\nLIBROS ORDENADOS POR PRECIO\n";
  214.     cout<<"___________________________________\n\n";
  215.     imprimir_conjunto_libros(conjunto,n);
  216.     cout<<"\n";
  217.     cout<<"\n";
  218.     cout<<"\n";
  219.     cout<<"presione 1, 2 o 3 si quiere el ordenamiento por titulo,"<<endl<<" autor o editorial respectivamente"<<endl;
  220.     int o;
  221.     cin>>o;
  222. while(0<=o<4){
  223.     ordenar(conjunto,n,o);
  224.     cout<<"\n";
  225.     cout<<"presione 1, 2 o 3 si quiere el ordenamiento por titulo,"<<endl<<" autor o editorial respectivamente"<<endl;
  226.     cin>>o;
  227. }
  228.     system("pause");
  229. }

Última edición por sonrasiel; 26/11/2012 a las 11:27

Etiquetas: alfabeticamente, arreglos, funcion, int, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:04.