• Jueves 28 de Marzo de 2024, 18:30

Autor Tema:  Insercio Directa  (Leído 1412 veces)

*** u S @ g U i ***

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Insercio Directa
« en: Domingo 3 de Abril de 2005, 19:27 »
0
Hola, buenos días, quisiera ver la posibilidad de que alguien me ayude a resolver el problema que tengo con este programa, que viene aqui adjunto, ya intente arreglarlo y no se donde esta el error, el lenguaje utilizado es de c++,  de ante mano gracias por su ayuda. :D
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Insercio Directa
« Respuesta #1 en: Lunes 4 de Abril de 2005, 01:05 »
0
Checa esto:

Código: Text
  1. #include<math.h>
  2. #include<ctype.h>
  3. #include<dos.h>
  4. #include<conio.h>
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7. #include<time.h>
  8.  
  9. enum boolean{false,true};
  10. struct {
  11.      boolean flag;
  12.      int k;
  13.      } D[5000];
  14. void main()
  15.   {
  16.     clrscr();
  17.      clock_t start,end;
  18.      char flag;
  19.      int x,aux,j,n;
  20.      textcolor(11);
  21.      printf("\n\t\t\tMETODO DE INSERCION\n");
  22.      printf("\n\n\t\tNUMERO DE ELEMENTOS A ORDENAR: ");
  23.      scanf("%d",&n);
  24.      randomize();
  25.      printf("\n\n\t\t\t*** VECTOR DESORDENADO ***\n\n");
  26.      for(int l=1;l<=n;l++)
  27.      {
  28.   x=random(9999);
  29.   D[l].k=x;
  30.   printf("\t\t\t      D[%d]= %d\n",l,D[l].k);
  31.       if(j==22){
  32.        j=0;
  33.       }
  34.      j++;
  35.     }
  36.     getch();
  37.  
  38.     {for(int i=1;i<=n;i++)
  39.      {
  40.        start=clock();
  41.        D[aux]=D[i];
  42.        j=j-1;
  43.        flag=false;
  44.      }
  45.      /*
  46.   Primeros errores:
  47.   1. j para que te sirve?
  48.   2. tomas el tiempo cada ke da una vuelta, quiero entender
  49.      que quieres saber cu nto tarda ordenar los elementos
  50.      deber¡a de ir cuando inicias a ordenar...
  51.   3. Aux no inicia en cero ya que es una variable local, si fuera global
  52.        tendría valor de cero
  53.   4. Aux no la mueves y D[aux] es una posici¢n que ira  tomando
  54.      los valores de D[i] pero nunca se afectara, es decir
  55.      Este ciclo es inservible...
  56.      */
  57.      do
  58.      {if (D[aux].k<D[j].k)
  59.   {
  60.    D[j+1]=D[j];
  61.    j=j-1;
  62.   }
  63.   else
  64.    flag=true;
  65.   }while (j==0||flag==true);
  66.  
  67.    D[j+1]=D[aux];
  68.  
  69.        }
  70.        /*
  71.        Por todo lo anterior D[aux].k nunca va a ser menor ke
  72.        D[j].k por lo tanto flag siempre tomar  true, y nunca
  73.        saldr  del ciclo
  74.        */
  75.  
  76.        clrscr();
  77.        printf("\n\n\n\t\t\t *** VECTOR ORDENADO ***\n\n");
  78.        int p=0;
  79.   for (int i=1;i<=n;i++)
  80.     {
  81.      printf("\t\t\t\tD[%d]= %d\n",i,D[i].k);
  82.        if(p==22)
  83.          {
  84.         p=0;
  85.          }
  86.       p=p+1;
  87.     }
  88.   end=clock();
  89.   printf("\n\n\t\t\tEl tiempo es:%f",(end-start)/CLK_TCK);
  90.   getch();
  91.      /*
  92.     Esto no es C++, es 'C ANSI'
  93.        */
  94.   }
  95.  
  96. /*
  97.    ALGORITMO INSERCION DIRECTA
  98.  
  99.    //Antes de llamar a esta funci¢n tomas el tiempo
  100.    // y luego despues de llamarla. Haces la resta y listo
  101.    void insercion_directa(int a[],int n)
  102.    {
  103.      cout<<"Inserción directa"<<endl<<endl;
  104.      int i,aux,k;
  105.      for (i=1;i<n;i++)
  106.       { aux=a[i];
  107.       for(k=i-1;(k>=0)&&(aux<a[k]);k--)
  108.           a[k+1]=a[k];
  109.       a[k+1]=aux;
  110.       }
  111.  
  112.    }
  113.  
  114. */
  115.  

*** u S @ g U i ***

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Insercio Directa
« Respuesta #2 en: Lunes 4 de Abril de 2005, 05:05 »
0
Gracias por haberme dicho los errores que tenia.  :D