imprimir basura

Iniciado por m@o_614, 20 Septiembre 2013, 06:01 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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

void  arreglo(int v[],int n)
{
    int i,j,k;
    k = n/2;
    for(j=0;j <= k;j+=k)
    {
        if(v[j] < v[j+k])
        {
            printf("[%d]",v[j]);
            printf("[%d]",v[j+k]);
        }
        else
        {
            printf("[%d]",v[j]);
            printf("[%d]",v[j+k]);
        }
    }
}


de antemano gracias


eferion

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.

m@o_614

el codigo es el siguiente:

void ordenamiento(int v[],int n)
{
    int i,j,k;
    k = n/2;
    for(i=0;i < 1;i++)
    {
        for(j=i+k;j < n;j=j+k)
        {
            printf("%d\t",v[i]);
            printf("%d\t",v[j]);/*
            if(v[i] > v[j])
            {
                aux = v[i];
                v[i] = v[j];
                v[j] = aux;
            }*/
        }
    }
}



eferion

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.

m@o_614

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!!

#include <stdio.h>
#include <stdlib.h>

void Shell_Sort(int v[],int n);

int main()
{
    int v[11],i,n;
    printf("Dame el numero de elementos del vector: ");
    scanf("%d",&n);
    for(i=0;i < n;i++)
    {
        printf("Dame el elemento %d\n",i+1);
        scanf("%d",&v[i]);
        system("cls");
    }
    Shell_Sort(v,n);
    for(i=0;i < n;i++)
       printf("[%d]",v[i]);
    return 0;
}

void Shell_Sort(int v[],int n)
{
    int i,j,k,aux,m;
    k = n/2;
    for(i=0;i < k;i++)
    {
        for(j=i+k;j < n;j+=k)
        {
            m = j;
            while(m > i)
            {
                if(v[m] < v[m-k])
                {
                    aux = v[m];
                    v[m] = v[m-k];
                    v[m-k] = aux;
                }
                m-=k;
            }
        }
    }

}


gracias de todos modos

eferion

Cita de: 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!!

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.