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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts