Vai al contenuto
PLC Forum


Ricerca Valore In Un Intervallo


Messaggi consigliati

Inserito:

Buongiorno Forum!!!!!!!!!!!!!!!!

Il mio problema consiste:

Ho un numero real che può variare tra un limite minimo e massimo esempio +0.0 e +100.0.

Ho una serie di quote esempio :

0 - 9 = quota1

10 - 19 = quota2

20 - 29 = quota3

30 - 39 = quota4

40 - 49 = quota5

50 - 59 = quota6

60 - 69 = quota7

70 - 79 = quota8

80 - 89 = quota9

90 - 99 = quota10

>100 = fuori quota

Io avendo in ingresso il valore +17.5 devo trovare a che quota appartiene.

Chiedevo se esiste qualche funzione più semplificata che fare una serie di doppi "compare". Anche perchè le quote potrebbero essere 10 oppure 20, quindi divnterebbe lunga.

Grazie anticipatamente.


Inserita: (modificato)

Ma così su due piedi, proverei se esiste una relazione tra i valori limite trasformati in bit, e poi faccio solo un confronto a bit, tipo faccio un esempio tipo il 9 in bit è 1001 il 19 è 10011 il 29 è 11101 così potrei creare un confronto a scalare dal bit +significativo sino al bit meno significativo.

N.B. ho solo buttato li un'idea non l'ho sviluppata sino in fondo, pertanto non so se sia più complicata o fattibile con le tue quote.

Oppure divido il valore per il limite superiore della quota se il risultato è maggiore di 1 continuo finche il risultato è minore di 1, il numero di divisioni è il numero della quota:

es.

17.7 / 9 = 1.94 prima divisione quota 1 risultato > 1 continuo

17.7 / 19 = 0.92 seconda divisione quota 2 risultato < 1 ok è la mia quota 2

A te il controllo se funziona con tutte le quote

:thumb_yello:

Modificato: da TravelMen
Inserita:

Mah, secondo me fai sempre prima a fare i compare utilizzando magari un FC parametrizzato.

Cioa da Stefano

  • 2 weeks later...
emanuele.croci
Inserita:

Ciao,

SE nella tua serie di quote c'è una qualche regola, puoi trovare una formula matematica che faccia il conto.

Ad es. nel caso che citi tu sarebbe

Quota X = INT((NUMERO +10)/10)

SE non c'è una regola fissa, ma le quote sono sempre "una maggiore dell'altra", puoi provare con l'algoritmo "indovina il numero" : supponiamo ad es. che io abbia un array con 512 quote e devo identificare il numero 183.5

- provo con la quota 128 => trovo 765.2 => devo scendere

- provo con la quota 64 => trovo 70.3 => devo salire

- provo con la quota 96...

in questo modo ad es. identifico 511 quote in max 9 passaggi (2 ^ 9 -1 =511)

Questo riduce il tempo totale di elaborazione... non devo scorrerle tutte.

Se non ti interessa il tempo di elaborazione, ti fai un semplice puntatore che viene incrementato di 1 ad ogni ciclo di programma (o con un FOR-NEXT): provi una per una tutte le quote fino a trovare quella giusta...

Metodi più semplici purtroppo non credo ce ne siano.

Saluti, Emanuele

P.S. Sei il Di Lauro che conosco io? Nel caso... CIAO!!

  • 2 weeks later...
Inserita:

Prova dare un'occhiata al mio post http://www.plcforum.it/forums/index.php?showtopic=61920

In quell'esempio viene fatta una ricerca binaria tra vari valori e viene ritornato il valore collegato a quello trovato , altrimenti se il valore è in mezzo ai due un valore in proporzione ai due.

Potresti modificarla per effettuare una ricerca veloce , ritornando il valore interessato

Ciao :)

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...