Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2012, 13:48
sonrasiel
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 7 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. }