Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#16

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 1. Jan 2007, 18:24
Hallo und frohes Neues ,
ich habe ma versucht, das Code-Beispiel von AmateurProfi im verlinkten Post zu modifizieren, leider ist da ein Syntax-Fehler drin, mit dem ich nicht wirklich klar komme.
ein weiteres Problem ist, das ich mit Teilmengen des Arrays hantieren muss/will, um nicht alle 7 reihen abtippen zu müssen sondern nur die 2 (E24 und E192).Es muss also eine Schrittweite verwendet werden.

mein Versuch:
Delphi-Quellcode:
const
  e3=0;
  e6=1;
  e12=2;
  e24=3;
  e48=4;
  e96=5;
  e192=6;

function FindValue(reihe:byte; wert:integer):integer;
const
  //r3:array[0..2] of double=(1.0,2.2,4.7); //2^0
  //r6:array[0..5] of double=(1.0,1.5,2.2,3.3,4.7,6.8);//2^1
  //r12:array[0..11] of double=(1.0,1.2,1.5,1.8,2.2,2.7,3.3,3.9,4.7,5.6,6.8,8.2); //2^2
  r24: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);//schrittweite 8 (1,9,...) =>E3 2^3
  r192:array[0..191] of double=(
    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 first,last,actual,step:integer;
begin
   first:=0;
   last:=(3 shl reihe)-1;
   showmessage(IntToStr(last));
   step:=1 shl (7-(reihe+4));
   repeat
      actual:=(first+last) shr 1;//(last div 2)*step;//(first+last) shr 1;
      result:=r24[actual*step];
      if result<>wert then
      begin
        if result>wert then
          last:=actual-1
        else
          last:=actual+1;
      end else exit;
   until first>last;
   if first<=((3 shl reihe)-1) then result:=r24[0];
end;
beim Aufruf
showmessage(IntToStr(findValue(e6,500))); wird die schleife nicht verlassen, es sollte natürlich 680 gefunden werden.
kann die Berechnung (bzw. den Sinn) von actual am anfang der schleife nicht nachvollziehen, da der wert kleiner wird, obwohl er größer werden sollte...

kann mir da jemand helfen?

Gruß Frank
  Mit Zitat antworten Zitat