Ir ao conteúdo
  • Cadastre-se

Funcao que recebe funcao como argumento


reuter_rjort

Posts recomendados

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);
}

 

Link para o comentário
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

Link para o comentário
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()
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...