1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda no programa de vectores (C)

Discussão em 'Programação' iniciada por n0ob, 22 de Maio de 2012. (Respostas: 2; Visualizações: 598)

  1. Boas...

    Não percebo poruqe razão isto não me ordena bem os valores, dando numeros estranhos no final...

    Preciso mesmo de ajuda =S

    cumps

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

    int n,i,j,aux;

    void recebe_valores()
    { int vet[n];

    printf("Indique o valor de numeros desejados : ");
    scanf(" %d",&n);

    for(i=0;i<n;i++)
    { printf("Coloque o valor desejado %d: \n ",i+1);
    scanf(" %d", &vet);
    }
    }
    void ordenavector()
    { int vet[n];
    int aux, i=0, j=0;
    for(i=0; i<n; i++)
    { for(j=0; j<n; j++)
    { if(vet<vet[j])
    { aux=vet;
    vet=vet[j];
    vet[j]=aux;
    }
    }
    }
    }


    void imprimir()
    {
    int vet[n];

    for(i=0;i<n;i++)
    {
    printf(" %d ",vet);
    }

    }
    main()
    {
    int vet[n];
    recebe_valores();
    ordenavector();
    imprimir();

    system("pause");
    }
     
  2. dagas46

    dagas46 Power Member

    Assim à 1ª vista, tu defines um array de inteiros em todas as funções porquê?

    Assim ao receberes os valores e ao guarda-los num array na função recebe_valores, os valores só estão nessa função.

    Ou seja, apesar de a varíavel vet[n] ter o mesmo nome em todas as funções, só vai ter os valores que queres no recebe_valores. Para teres nas outras funções ou tornas a variável global (apenas uma) ou vais passando o array como atributo sempre que chamares um função

    Assim sendo, na função ordenavector vais estar a ordenar lixo que esteja no vector e na função imprimir vais imprimir o lixo e atenção que não é o mesmo lixo, apesar de as variáveis terem o mesmo nome o conteúdo é diferente.

    Experimenta colocar o ciclo que tens no imprimir no recebe_valores e vais ver como te imprime os valores correctos mas não ordenados
     
    Última edição: 22 de Maio de 2012
  3. mauro1855

    mauro1855 I'm cool cuz I Fold

    O primeiro erro ÓBVIO logo à partida é que estás a declarar um vector de tamanho n mas só mais tarde é que vais buscar o valor do n.

    Não é assim que funciona, o código é executado de forma sequencial, portanto quando declaras o vector, já tens de saber o seu tamanho, não podes declará-lo com tamanho n e só depois ir buscar o valor n.

    Depois, aquilo que o dagas46 disse é o segundo erro óbvio: o vector[n] que estás a usar em cada uma das funções, estás a declará-lo dentro das próprias funções, isso significa que esse vector só existirá dentro dessa função. A partir do momento que uma função termina, perdes essa variável. O facto de declarares uma variável com o mesmo nome/tamanho nas funções seguintes não faz a variável miracuolsamente ressuscitar.

    Terceiro erro óbvio: Não se devem usar variáveis globais. É má prática. No entanto, neste programa até se poderia entender que usasses o vector de inteiros como variável global, de forma que o seu valor estivesse disponível em todas as funções. No entanto, tu fazes exactamente o contrário, estás a declarar o n, i, j e aux como global quando essas variáveis são apenas variáveis auxiliares que devem ser declaraste em cada uma das funções. Isto não é uma questão de "repetir código", mas sim de usar os recursos da máquina de forma apropriada. Ao declarares estas variáveis em cada uma das funções, estás a utilizar a memória do PC apenas quando é de facto necessária. Já o vector[n] é sempre necessário, portanto até se compreende que declares essa variáveis, e apenas essa, como global, embora existem outras formas mais correctas de o fazer.

    De qualquer forma não te eskeças: só podes declarar uma variável do tipo vector[n] se já souberes o n.
    Isso pode ser um problema para a tua implementação.

    Cumps
     

Partilhar esta Página