![]() |
Vergleich eines Wertes mit Werten in einem Array
Schönen guten Abend,
nach längerer Zeit als stiller Mitleser :zwinker: hab ich jetzt auch mal ein Problem: ich hab folgendes:
Delphi-Quellcode:
im Verlauf des Programms wird ein Wert berechnet, diesen möchte ich nun auf einen der im Array vorgegeben Werte "runden".
const werte:array[0..96] of integer=(100,102,105,107 ... 976); //E96 Widerstandsreihe
Bloß irgendwie steh ich auf dem Schlauch wie's gehen soll :wall: - Ich hätte es jetzt mit einer Art sukzessiver Approximation versucht, aber vorher wollte ich doch mal nachfragen obs nich ne einfachere Lösung gibt. Danke schonmal Dominik |
Re: Vergleich eines Wertes mit Werten in einem Array
Ich würde den Wert im Array suchen der am nähesten am gegebenen Wert ist.
Zuerst als nähesten Wert den ersten Wert des Arrays nehmen, dann die restlichen durchlaufen zum prüfen:
Delphi-Quellcode:
var
res_index: Integer; i: Integer; diff: Integer; tmp: Integer; begin res_index := 0; diff := abs(array[0] - your_value); for i := 1 to length(array) - 1 do begin tmp := abs(array[i] - your_value); //wenn differenz kleiner bisheriger differenz if (tmp < diff) then begin diff := tmp; res_index := i; //wenn exakter Wert gefunden wurde if (diff = 0) then begin break; end; end; end; showmessage('best value is: ' + inttostr(array[res_index])); end; |
Re: Vergleich eines Wertes mit Werten in einem Array
Hallo,
E_XX ist doch genormt und berechenbar (Stahlwellenabstufungen etc ...): q = Power(10;1/XX) = hier Power(10;1/96) = 1,0242752213815922608073370159966 n = 0..95 um 1 bis 10/q zu erreichen n=96 ergibt ja 10. E_ n = round(q^n). Also kannst Du die Funktion umkehren um n zu erhalten. E_n gegeben -> n = ln(E_n)/q aargh -> EDIT: n = ln(E_n)/ln(q) Das solte schon nah dran sein mittels round zum Beispiel. Gruß Horst |
Re: Vergleich eines Wertes mit Werten in einem Array
Holla danke für die schnellen Antworten.
Ja so wie SirThornberry hätt ichs auch erst gemacht. Werd mich mal mit Horst_'s Vorschlag spielen. Das Array befüll ich eh schon mittels dieser Formel - dass ich da nicht auf die Umkehrung gekommen bin :wall: Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz