Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Vergleich eines Wertes mit Werten in einem Array (https://www.delphipraxis.net/124253-vergleich-eines-wertes-mit-werten-einem-array.html)

wasndas 17. Nov 2008 16:00


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:
const werte:array[0..96] of integer=(100,102,105,107  ... 976); //E96 Widerstandsreihe
im Verlauf des Programms wird ein Wert berechnet, diesen möchte ich nun auf einen der im Array vorgegeben Werte "runden".
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

SirThornberry 17. Nov 2008 16:11

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;

Horst_ 17. Nov 2008 16:16

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

wasndas 17. Nov 2008 16:38

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 21:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz