Problema [RESOLVIDO]

1. Problema [RESOLVIDO]

luiz neto
lbneto

(usa Ubuntu)

Enviado em 29/03/2011 - 11:40h

SAlve galera, to com um problema no meu codigo, mas não sei muito bem o que é o problema. O codigo é pra organizar um array de inteiros então fiz uma função para o array e outra para mostrar o array organizado. Mas no entanto minha função para imrpimir não ta rodando nem a pau.


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

void ordonnerTableau(int tab[], int taille);
void afficher(int tab);

int main()
{
int taille, tab[5] = {12, 3, 62, 26,0};

taille = (sizeof(tab)/sizeof(int)); // aqui a variavel taille tera o tamanho igual a quantidade de elementos do array
ordonnerTableau(tab, taille); //função para ordenar-lo em ordem crescente

afficher(&tab); // função que irá apenas mostrar o array organizado

return 0;
}


// Funções para ordenar o array e mostrar na tela


void ordonnerTableau(int tab[], int taille)
{
int i, j, aux = 0;

for(i=0; i<taille;i++) // para percorrer o meu array varias vezes ate organiza-lo
{
for (j=0; j<taille-1;j++)
{

if(tab[j] > tab[j+1]) //caso o valor atual seja maior que o valor futuro
{
aux = tab[j+1]; // variavel aux recebe o valor j+1
tab[j+1] = tab[j]; // j+1 agora pega o valor de j
tab[j] = aux; // j fica com o valor de aux
}
}
}
}

void afficher(int tab) // função para mostrar o array organizado
{
int i;
for(i=0; i<taille ; i++)
{
printf("%d\n", tab[i]);
}
}


  


2. MELHOR RESPOSTA

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 29/03/2011 - 11:48h

Na funcão de ordenacão, voce está passando o array como cópia, e não como referência.
Logo, ele é ordenado, mas o original não é modificado.

Outro problema é na funcão de impressão.
Acredito que o parametro int deveria ser int*, e quando for usá-lo, use *pointer[pos], por exemplo.

Espero ter ajudado!

3. Re

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 29/03/2011 - 13:48h

Veja esse link: http://www.vivaolinux.com.br/script/Ordenacao-de-dados


4. Salve Fernando

luiz neto
lbneto

(usa Ubuntu)

Enviado em 29/03/2011 - 15:39h

CAra o link é maneiro, mas o codigo ta sem muito comentario e eu vou dar uma sacada com mais calma para ver se assimilo, pois o meu objetivo é aprender o esquema de resolução, e tentar ver também o que ouve de errado com o meu.

Quanto ao Mklein, cara vou ver as modificações que vc me sugeriu e posto aqui qualquer novidade.

Mas de ante-mão gostaria de agradecer a vcs.


5. Salve Mklein

luiz neto
lbneto

(usa Ubuntu)

Enviado em 29/03/2011 - 16:02h

Opa galera, voltando para dizer que rolou tudo certo agora.

Valeu geral pela ajuda Mklein.

Fernandão guardei o link para dar uma consultada aprofundada, valeu brother.

Abraços pra vcs.


6. Peequenas Alteraçoes

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 29/03/2011 - 16:28h

Olá amigo, fiz algumas pequenas alterações no seu codigo, nada de mais!!
Compilei ele com o gcc e funcionou perfeitamente.

Veja:

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

void ordonnerTableau(int tab[5], int taille)
{
int i, j, aux = 0;
for(i=0; i<taille;i++) // para percorrer o meu array varias vezes ate organiza-lo
{
for (j=0; j<taille-1;j++)
{

if(tab[j] > tab[j+1]) //caso o valor atual seja maior que o valor futuro
{
aux = tab[j+1]; // variavel aux recebe o valor j+1
tab[j+1] = tab[j]; // j+1 agora pega o valor de j
tab[j] = aux; // j fica com o valor de aux
}
}
}

for(i=0;i<taille;i++)
{
printf("%d ",tab[i]);
}
}


int main()
{
int taille, tab[5] = {12, 3, 62, 26,0};

taille = (sizeof(tab)/sizeof(int)); // aqui a variavel taille tera o tamanho igual a quantidade de elementos do array
ordonnerTableau(tab, taille); //função para ordenar-lo em ordem crescente

printf("Vetor Ordenado\n\n");

return 0;
}

Nesse seu caso não é preciso fazer a passagem por referencia como voce esta tentando fazer !! Uma dica, se voce esta iniciando em C use por enquanto somente passagem por valor, deixe a passagem por referencia para mais tarde quando voce ja estiver ninja em C e quando realmente precisar. No caso para alterar o valor da varialvel.


Tenho so uma pergunta: Voce ja aprendeu passagem por valor e por referencia???? Sabe a diferença de cada uma delas???? E quando usa-las ??


7. Minhas funções ficaram assim

luiz neto
lbneto

(usa Ubuntu)

Enviado em 29/03/2011 - 16:47h

void ordonnerTableau(int tab[], int taille)
{
int i, j, aux = 0;

for(i=0; i<taille;i++) // para percorrer o meu array varias vezes ate organiza-lo
{
for (j=0; j<taille-1;j++)
{

if(tab[j] > tab[j+1]) //caso o valor atual seja maior que o valor futuro
{
aux = tab[j+1]; // variavel aux recebe o valor j+1
tab[j+1] = tab[j]; // j+1 agora pega o valor de j
tab[j] = aux; // j fica com o valor de aux
}
}
}
}

void afficher(int* tab, int taille)
{
int i;
for(i=0; i<taille ; i++)
{
printf("%d\n", tab[i]);
}
}


8. Iniciando em C

luiz neto
lbneto

(usa Ubuntu)

Enviado em 30/03/2011 - 12:46h

De fato eu estou digamos iniciando, já sei algumas coisas, mas infelizmente na facul o assunto avançou enquanto eu estava com catapora dai eu perdi 2 semanas e foi justamente onde roloou esse lance de passagem por valor e por referencia e estudando sozinho consegui entender algo, mas não completamente e como vc me perguntou. Não sei muito bem quando usalas, ou seja não domino o seu uso.

Eu sei que no caso do meu codigo se eu não passasse por referencia eu iria mudar o array dentro da função mas o valor do meu array depois iria ser destruido e eu não teria o meu array ordenado, então na passagem por referencia eu passo o endereço do meu array.

É mais ou menos o que eu entendi, se vc tiver um tutorial ou artigo que explique melhor isso, lhe agradeço.