Retorno do valor de um array dentro de uma função

 

Boa tarde, pessoal!

Criei uma função que retorna "0" caso o if for verdadeiro e retorna o valor de dentro de um array caso seja falso.

Como faço para a função que eu criei retornar o valor do último índice de um array que seja maior que 5 ao invés de 0?

Mas o valor retornado tem que coletar não o último índice, mas sim o último índice que atende com as condições exigidas.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Filtro(int a)
{
 double Val[10] = {2,7,4,6,1,3,9,8,5,10};
 if(Val[a] <= 5)
   {
    return 0;
   }
 else
   {
    return Val[a];
   }
/*Se eu printar essa função com os 10 índices, o retorno será o seguinte:

Print(Filtro(0)); //0
Print(Filtro(1)); //7
Print(Filtro(2)); //0
Print(Filtro(3)); //6
Print(Filtro(4)); //0
Print(Filtro(5)); //0
Print(Filtro(6)); //9
Print(Filtro(7)); //8
Print(Filtro(8)); //0
Print(Filtro(9)); //10

Mas eu queria que caso o valor do array fosse menor ou igual a 5, o retorno da função
fosse o valor do último índice cujo o valor é maior que 5. O retorno deveria ser assim:

Print(Filtro(0)); //0 (Primeiro valor da série ser 0 pois não há uma referência anterior)
Print(Filtro(1)); //7
Print(Filtro(2)); //7 (Como o valor dentro deste array é menor ou igual a 5, o retorno será do último array maior que 5)
Print(Filtro(3)); //6
Print(Filtro(4)); //6 (Como o valor dentro deste array é menor ou igual a 5, o retorno será do último array maior que 5)
Print(Filtro(5)); //6 (Como o valor dentro deste array é menor ou igual a 5, o retorno será do último array maior que 5)
Print(Filtro(6)); //9
Print(Filtro(7)); //8
Print(Filtro(8)); //8 (Como o valor dentro deste array é menor ou igual a 5, o retorno será do último array maior que 5)
Print(Filtro(9)); //10
*/
}
 
LKalemba:

Boa tarde, pessoal!

Criei uma função que retorna "0" caso o if for verdadeiro e retorna o valor de dentro de um array caso seja falso.

Como faço para a função que eu criei retornar o valor do último índice de um array que seja maior que 5 ao invés de 0?

Mas o valor retornado tem que coletar não o último índice, mas sim o último índice que atende com as condições exigidas.

Use variável estática pra manter memória entre as calls.

double Filtro(int a) {
  static double current = 0;
  double values[10] = {2,7,4,6,1,3,9,8,5,10};
  if(values[a] > 5)
    current = values[a];
  return current;
}
 
LKalemba:

Boa tarde, pessoal!

Criei uma função que retorna "0" caso o if for verdadeiro e retorna o valor de dentro de um array caso seja falso.

Como faço para a função que eu criei retornar o valor do último índice de um array que seja maior que 5 ao invés de 0?

Mas o valor retornado tem que coletar não o último índice, mas sim o último índice que atende com as condições exigidas.

Você está violando vários princípios elementares de Funções.

  1. O Nome de uma função tem que ter um propósito EXATO e Inteligível, sem gerar dúvidas. "Filtro". Filtro de quê? Para quê?
  2. Jamais se fixa um vetor no interior de uma função, a menos que ele seja REALMENTE único e imutável na longa vida prevista para seu sistema/aplicativo. Do contrário declaramos um vetor fora do escopo da função e o passamos a ela. A função terá que ter a capacidade ler qualquer vetor, não importando seu tamanho.
  3. Você está violando o conceito básico de Lógica Booleana. "0" para Falso e "algo" para verdadeiro??
  4. E para seu dilema final, dadas as sugestões acima, você deve usar um loop FOR... para resolver esse algorítmo.
;)
 
Alexandre Borela #:

Use variável estática pra manter memória entre as calls.

Era bem isso que eu queria. Muito obrigado pela ajuda.

 
Flavio Jarabeck #:

Você está violando vários princípios elementares de Funções.

  1. O Nome de uma função tem que ter um propósito EXATO e Inteligível, sem gerar dúvidas. "Filtro". Filtro de quê? Para quê?
  2. Jamais se fixa um vetor no interior de uma função, a menos que ele seja REALMENTE único e imutável na longa vida prevista para seu sistema/aplicativo. Do contrário declaramos um vetor fora do escopo da função e o passamos a ela. A função terá que ter a capacidade ler qualquer vetor, não importando seu tamanho.
  3. Você está violando o conceito básico de Lógica Booleana. "0" para Falso e "algo" para verdadeiro??
  4. E para seu dilema final, dadas as sugestões acima, você deve usar um loop FOR... para resolver esse algorítmo.
;)

1. O nome da função era apenas para um exemplo.

2. Entendo que não seja a forma mais nobre de se fazer, mas para o objetivo final ela funcionaria bem assim.

3. Ainda estou progredindo, mas até que funciona bem.

4. Vou testar.

Obrigado pela ajuda!

Razão: