Ir ao conteúdo

ponteiro para função- colocar n numeros em ordem crescente .


maxis

Posts recomendados

Postado

galera,fiz o programa abaixo para colocar os numeros em ordem crescente(utilizando obrigatoriamente ponteiro para funções), porém ele imprimi os numeros e não coloca em ordem crescente, onde está o erro?:confused:

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

float crescente(const void * a,const void * {
return(*(float*)a - *(float*);
}

float (*funcao)(float,float);

int main(void)
{

int n,aux,a;
float *y;


srand(time(NULL));
printf("informe a quantidade de elemnetos desejados \n");
scanf("%d",&n);

y = (float*) malloc(n*sizeof(float));



for(aux=0;aux<n;aux++){
a = rand()%10;
y[aux] = a / 1.75;
printf("original %.1f\n",y[aux]);
}

printf("\n\n");
funcao = &crescente;


qsort (y, n, sizeof(float), funcao);
for(aux=0;aux< n;aux++){
printf("ordem crescente%.1f\n",y[aux]);
}

free(y);

system("PAUSE");
return 0;
}

Postado

Olá Maxis,

Seja bem-vindo! ;)

Algumas observações sobre o seu código acima:

1) A função qsort() espera receber uma função de comparação que retorne um inteiro. A sua função estaria correta se estivesse lidando com números inteiros diretamente. Para o caso de número reais, é necessário comparar os valores usando operadores lógicos e fazer os retornos de acordo com as comparações.

2) O segundo ponto é o protótipo do ponteiro para função funcao que precisou ser modificado para refletir os parâmetros da função apontada.

3) Essa é menos importante, mas muito comum de se ver. Em C, não é necessário fazer aquele cast no retorno de malloc() (inclusive é contraindicado, conforme Ritchie aborda em seu livro).

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

int crescente(const void *a, const void *
{
if ( *(float*)a < *(float*)b )
return -1;
else if ( *(float*)a > *(float*)b )
return 1;
else
return 0;
}

int (*funcao)(const void *, const void *);

int main(void)
{
int n, aux, a;
float *y;

srand(time(NULL));

printf("Informe a quantidade de elementos desejados: ");
scanf("%d", &n);

y = malloc(n * sizeof(float));

for (aux = 0; aux < n; aux++) {
a = rand()%10;
y[aux] = a / 1.75;
printf("Original = %.1f\n", y[aux]);
}

printf("\n\n");
funcao = &crescente;

qsort (y, n, sizeof(float), funcao);

for (aux = 0; aux < n; aux++) {
printf("Ordem Crescente = %.1f\n", y[aux]);
}

free(y);

system("PAUSE");
return 0;
}

Abs.

LNW

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!