Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 1. Jan 2007, 21:31
Hi,

Zitat von _frank_:
dein test ergibt übrigens den falschen Wert (1000).
bei meinem Test kommen die richtigen Werte.

Hier mein Versuch mit verschachtelten Serien:

Delphi-Quellcode:
type
  TSeries = ({e192, e96, e48,} e24, e12, e6, e3);

function Lookup(value: Integer; series: TSeries): Integer;
const
  values: array [0..23] of Integer = (
    100,110,120,130,150,160,180,200,
    220,240,270,300,330,360,390,430,
    470,510,560,620,680,750,820,910
{
    100,101,102,104,105,106,107,109,110,111,113,114,115,117,118,120,
    121,123,124,126,127,129,130,132,133,135,137,138,140,142,143,145,
    147,149,150,152,154,156,158,160,162,164,165,167,169,172,174,176,
    178,180,182,184,187,189,191,193,196,198,200,203,205,208,210,213,
    215,218,221,223,226,229,232,234,237,240,243,246,249,252,255,258,
    261,264,267,271,274,277,280,284,287,291,294,298,301,305,309,312,
    316,320,324,328,332,336,340,344,348,352,357,361,365,370,374,379,
    383,388,392,397,402,407,412,417,422,427,432,437,442,448,453,459,
    464,470,475,481,487,493,499,505,511,517,523,530,536,542,549,556,
    562,569,576,583,590,597,604,612,619,626,634,642,649,657,665,673,
    681,690,698,706,715,723,732,741,750,759,768,777,787,796,806,816,
    825,835,845,856,866,876,887,898,909,920,931,942,953,965,976,988
}

  );
var
  iLow, iHigh, iStep, i: Integer;
begin
  Result := 10 * values[0];
  iStep := 1 shl Ord(series);
  iLow := 0;
  iHigh := Pred(Length(values) div iStep);
  while iLow <= iHigh do
  begin
    i := (iLow + iHigh) shr 1;
    if values[i * iStep] < value
      then iLow := Succ(i)
      else iHigh := Pred(i);
    if values[i * iStep] = value then
      iLow := i;
  end;
  if iLow * iStep < Length(values) then
    Result := values[iLow * iStep];
end;

procedure TDemoForm.Button11Click(Sender: TObject);
var
  s: String;
begin
  s := '';
  while InputQuery('E6 search', 'value', s) do
    s := IntToStr(Lookup(StrToInt(s), E6));
end;
Du wirst erkennen, wie du es umbauen kannst, damit es mit E192 arbeitet.

Gute Nacht
  Mit Zitat antworten Zitat