Ir ao conteúdo
  • Cadastre-se
rjort_nine

Funcao que recebe funcao como argumento

Recommended Posts

Ola galera, eu tenho esse codigo http://pastebin.com/nM9Xmbck

ele na linha 21. chamo a função 'analise' e essa mesma função recebe a função 'retorno' e essa função (retorno) recebe dois argumentos 1 array e um inteiro. O problema esta na leitura da função 'analise' que acaba imprimindo a condição do 'else'... Eu suspeito que isso seja devido ao recebimento do valor do array que a função 'retorno' recebe e acaba imprimindo a condição de 'else'... Esse codigo eu ja fiz ele corretamente mas estou testando o uso de chamada de função e tal em 'main'... alguem saberia me dizer se ha algum jeito de corrigir isso ou é gambiarra? Obrigado desde já =)

Codigo:

//Codigo do exercicio 2 da pagina 161 (livro Luis Damas)
#include <stdio.h>
#include <stdlib.h>
#define N 10
 
int retorno (float[], int);
int main (void){
  int analise (int);
 
  float vetor[N];
  int numLim;
 
  printf("Digite 10 valores:\n");
  for(int i=0;i<N;i++){
    scanf("%f", &vetor[i]);
  }
 
  printf("\nLimitacao de verificao(1~10):");
  scanf("%d", &numLim);
 
  analise(retorno(vetor, numLim)); //<---- 'analise' recebe outra função que recebe dois argumentos
  return 0;
}
 
int analise (int lim){
/*
**o problema é que possivelmente essa função tambem lê o valor do array e imprime o argumento de 'else'
*/
  if ((lim>=1) && (lim<=10)){
    system ("clear");
  }
  else
    printf("Limitacao excedida!\n");    
}
 
int retorno (float v[N], int n){
  float max;
  max = v[0];
 
  for(int i=0;i<n;i++){
    if(v[i] > max)
      max = v[i];
  }
    printf("Maior Valor dos numeros digitados:[%.1f]\nLimitacao usada:[%d]", max, n);
}

 

Editado por rjort_nine

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o código aqui para ficar mais fácil.

 

Mas o que eu vi aí é que a função retorno() na verdade está sem retorno quando na verdade deveria retornar um int.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi direito o que o programa tem que fazer, mas acredito que o erro seja só a falta do retorno na função returno().

A declaração é

Citação

int retorno (float v[N], int n)

Então deve ter o 

Citação

return variavel;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MassakiMsk é um programa simple só de exercicio para treinar o aprendido mesmo... tipo, a pessoa digita X numeros e depois desses X numero usa um limitador para ver quais daqueles é o maior... Ex: 3.23,4.12,5.43,2.21,5.44,9.12. depois ele limita a "verificação" para apenas X casa dos vetor. Se digitar 3, ele só ira ver qual desses ->3.23, 4.12, 5.43 <- é o maior. Mas ai eu usei uma função que recebe outra função como argumento, chamei primeiro a função limita as casas do vetor para serem vistas e como argumento da chamada eu usei a outra função que recebe o array e o inteiro... entende?? -.-' acho que não tô sabendo explicar... enfim... é só um codigo pra testar as paradas mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citação

void analise (float lim){  //Aqui pode ser void porque você não precisa retornar nenhum valor na main.
  							//No parametro também deve ser float para receber o retorno da função retorno()
  if ((lim>=1) && (lim<=10)){
    system ("clear");
    printf("O maior valor foi %f\n", lim); //Aqui ele só imprime o valor máximo detectado se for entre 0 e 10
  }
  else
    printf("Limitacao excedida!\n");    
}

 

 

 

float retorno (float v[N], int n){ //aqui tem que ser float para poder retornar o maior valor digitado
  float max;
  max = v[0];
 
  for(int i=0;i<n;i++){
    if(v[i] > max)
      max = v[i];
  }
    printf("Maior Valor dos numeros digitados:[%.1f]\nLimitacao usada:[%d]", max, n);
  return max; //Aqui ele retorna o valor máximo que vai ser usado como parametro para a função analisa()
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×