Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 20 Septiembre 2013, 06:01 am



Título: imprimir basura
Publicado por: m@o_614 en 20 Septiembre 2013, 06:01 am
Saludos tengo el siguiente arreglo de 11 elementos

74,14,21,44,38,97,11,78,65,88,30  y quiero que me imprima el primer elemento (74), el quinto (97) y el 30 que es el ultimo, todo esto porque estoy empezando un metodo de ordenamiento pero no lo he terminado, el problema es que aunque si me imprime el primero y el quinto en el ultimo me imprime basura, en vez de imprimir el 30 me imprime 31 y no se por que

Código
  1. void  arreglo(int v[],int n)
  2. {
  3.    int i,j,k;
  4.    k = n/2;
  5.    for(j=0;j <= k;j+=k)
  6.    {
  7.        if(v[j] < v[j+k])
  8.        {
  9.            printf("[%d]",v[j]);
  10.            printf("[%d]",v[j+k]);
  11.        }
  12.        else
  13.        {
  14.            printf("[%d]",v[j]);
  15.            printf("[%d]",v[j+k]);
  16.        }
  17.    }
  18. }

de antemano gracias

 


Título: Re: imprimir basura
Publicado por: eferion en 20 Septiembre 2013, 08:46 am
Con solo este código es complicado decirte qué está mal... ya que esto son únicamente accesos a memoria... solo con eso no se puede saber si los accesos son correctos o no.


Título: Re: imprimir basura
Publicado por: m@o_614 en 20 Septiembre 2013, 16:38 pm
el codigo es el siguiente:

Código
  1. void ordenamiento(int v[],int n)
  2. {
  3.    int i,j,k;
  4.    k = n/2;
  5.    for(i=0;i < 1;i++)
  6.    {
  7.        for(j=i+k;j < n;j=j+k)
  8.        {
  9.            printf("%d\t",v[i]);
  10.            printf("%d\t",v[j]);/*
  11.             if(v[i] > v[j])
  12.             {
  13.                 aux = v[i];
  14.                 v[i] = v[j];
  15.                 v[j] = aux;
  16.             }*/
  17.        }
  18.    }
  19. }



Título: Re: imprimir basura
Publicado por: eferion en 20 Septiembre 2013, 17:37 pm
te sigo diciendo lo mismo... es código lo más que te puedo decir es que es extraño... tener un bucle (el de i) que solo va a tener una iteración... imagino que será por las pruebas que estás haciendo... pero no ayuda en absoluto.

El código que tienes ahí, por sí solo, no es dañino ni falla... otra cosa es el contenido de v y de n... y para eso dependerá de cómo se haya creado v y de cómo estés guardando los datos... además de cómo estás calculando n.


Título: Re: imprimir basura
Publicado por: m@o_614 en 21 Septiembre 2013, 00:07 am
Saludos eferion ya pude por fin descubrir cual era el error, y es uno bien tonto porque cuando declare el vector lo declare como v[10] cuando en realidad le estaba diciendo que queria un vector con 11 elementos, que idiota!!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void Shell_Sort(int v[],int n);
  5.  
  6. int main()
  7. {
  8.    int v[11],i,n;
  9.    printf("Dame el numero de elementos del vector: ");
  10.    scanf("%d",&n);
  11.    for(i=0;i < n;i++)
  12.    {
  13.        printf("Dame el elemento %d\n",i+1);
  14.        scanf("%d",&v[i]);
  15.        system("cls");
  16.    }
  17.    Shell_Sort(v,n);
  18.    for(i=0;i < n;i++)
  19.       printf("[%d]",v[i]);
  20.    return 0;
  21. }
  22.  
  23. void Shell_Sort(int v[],int n)
  24. {
  25.    int i,j,k,aux,m;
  26.    k = n/2;
  27.    for(i=0;i < k;i++)
  28.    {
  29.        for(j=i+k;j < n;j+=k)
  30.        {
  31.            m = j;
  32.            while(m > i)
  33.            {
  34.                if(v[m] < v[m-k])
  35.                {
  36.                    aux = v[m];
  37.                    v[m] = v[m-k];
  38.                    v[m-k] = aux;
  39.                }
  40.                m-=k;
  41.            }
  42.        }
  43.    }
  44.  
  45. }
  46.  

gracias de todos modos


Título: Re: imprimir basura
Publicado por: eferion en 22 Septiembre 2013, 08:54 am
Saludos eferion ya pude por fin descubrir cual era el error, y es uno bien tonto porque cuando declare el vector lo declare como v[10] cuando en realidad le estaba diciendo que queria un vector con 11 elementos, que idiota!!

Como te dije... el código que ponías, por si solo, no provocaba fallos.

Me alegro de que hayas encontrado el fallo.

Un saludo.