Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mihina en 22 Febrero 2011, 00:51 am



Título: Ayuda con ordenación plis!
Publicado por: mihina en 22 Febrero 2011, 00:51 am
Hola y de antemano gracias!

Mi duda es la siguiente: Tengo que ordenar alfabeticamente una lista, el problema que tengo es que la tengo que ir ordenando mientra va leyendo las palabras. No puedo guardarlas todas en una lista y posteriormente ordenarlas. Se deben de ir ordenando segun se va leyendo.

Lo maximo que podio hacer es que me ordene una pequeña parte pero luego la mitad de las palabras no me las ordena y en pantalla solo salen 0.

Aqui os dejo el código:
Código
  1.  
  2. #include <iostream>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. const int MAX_PARAULES=2500;
  8. const string M_FI="#";
  9.  
  10. struct Paraula
  11. {
  12. string paraula;
  13. int llarg;
  14. int rep;
  15. };
  16.  
  17. typedef Paraula TaulaParaula[MAX_PARAULES];
  18.  
  19. void mostrarParaules(TaulaParaula t, int n)
  20. {
  21. for(int i=0; i<n; i++)
  22. {
  23. cout<<t[i].paraula<<" "<<t[i].llarg<<" "<<t[i].rep<<endl;
  24. }
  25. }
  26.  
  27. void introduirParaules(TaulaParaula t, int&n)
  28. {
  29. string c;
  30. cin>>c;
  31. Paraula temp;
  32. int rep;
  33.  
  34. while(c != M_FI)
  35. {
  36. rep=0;
  37. if(n>0){
  38. for (int i=0; i<n; i++){
  39. if(c.compare(t[i].paraula)<0){
  40. temp=t[i];
  41. t[i].paraula=c;
  42. t[i].llarg=c.length();
  43. t[i].rep=1;
  44.  
  45. for(int x=n; x>i; x--){
  46. t[x+1]=t[x];
  47. }
  48. t[i+1]=temp;
  49. rep=1;
  50. }
  51. }
  52. if(rep==0) {
  53. t[n].paraula=c;
  54. t[n].llarg=c.length();
  55. t[n].rep=1;
  56. }
  57.  
  58. } else {
  59. t[n].paraula=c;
  60. t[n].llarg=c.length();
  61. t[n].rep=1;
  62. }
  63. n++;
  64. cin>>c;
  65. }
  66. }
  67.  
  68. int main()
  69. {
  70. TaulaParaula paraules;
  71. int n=0;
  72.  
  73. cout << "ENTRA EL TEXT A ANALITZAR" << endl;
  74. introduirParaules(paraules,n);
  75.  
  76. cout << "PARAULES LLEGIDES PER ORDRE ALFABETIC" << endl;
  77. mostrarParaules(paraules,n);
  78.  
  79. return 0;
  80. }
  81.  

Perdonen si es un fallo tonto pero llevo ya tantas horas mirando haber como lo hago que ya no se como hacerlo. Gracias


Título: Re: Ayuda con ordenación plis! resuelto
Publicado por: mihina en 22 Febrero 2011, 13:25 pm
Al final lo he conseguido el código es el siguiente por si a alguien le interesa:

Código
  1. while(c != M_FI)
  2.    {
  3.        ordenado = false;
  4.        i = 0;
  5.        while ((!ordenado) && (i<n))
  6.        {
  7.            if(c.compare(t[i].paraula)<=0)
  8.            {
  9.                for (j = n-1; j>=i; j--)
  10.                {
  11.                    t[j+1] = t[j];
  12.                }
  13.  
  14.                t[i].paraula=c;
  15.                t[i].llarg=c.length();
  16.                t[i].rep=1;
  17.  
  18.                ordenado = true;
  19.             }
  20.             i++;
  21.        }
  22.        if (!ordenado)
  23.        {
  24.            t[n].paraula=c;
  25.            t[n].llarg=c.length();
  26.            t[n].rep=1;
  27.        }
  28.        n++;
  29.        cin>>c;
  30.    }
  31.  
  32.