Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/11/2012, 13:51
sonrasiel
 
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