Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: Repeat-Until Schleife X^n

  Alt 7. Apr 2011, 23:08
Generell muss man sagen, dass für diese Lösung repeat until ungeschickt ist (schönen Gruß an den Lehrer) und while do erheblich besser geeignet ist.
Weiterhin ist x^n auch für n<0 definiert.

Und generell gesehen sollte man dafür eine function definieren und diese dann benutzen.
EVA (die Frau des Programmierers)
Delphi-Quellcode:
var
  x, e : Extended;
  n : Integer;
begin

  // Eingabe

  x := StrToFloatDef( EditX.Text, 0 );
  n := StrToIntDef( EditN.Text, 0 );

  // Verarbeitung

  e := Hoch( x, n ); // Aufruf der eigentlichen Funktion

  // Ausgabe

  EditE.Text := FloatToStr( e );
end;
Delphi-Referenz durchsuchenStrToFloatDef
Delphi-Referenz durchsuchenStrToIntDef

Hier mal die Realisierung mit einer While-Schleife:
Delphi-Quellcode:
function Hoch( x : Extended; n : integer ) : Extended;
var
  nidx : integer;
begin
  Result := 1; // x^0 ist 1
  nidx := 0; // Zähler initialisieren

  // Zähler mit dem Absolutwert von n vergleichen
  while nidx < Abs( n ) do
    begin
      Inc( nidx ); // Zähler um 1 erhöhen

      // Fallunterscheidung für positive/negative n
      if n > 0 then
        Result := Result * x
      else
        Result := Result / x;
    end;
end;
Hier noch ein kleiner Exkurs um ein for to in ein while do und dann in ein repeat until zu überführen:
Delphi-Quellcode:
for i := 0 to 9 do
  foo;

// geht mit "while do" so

i := 0;
while i <= 9 do
  begin

    foo;

    Inc( i );
  end;

// und mit "repeat until"

i := 0;
if ( i <= 9 ) then
  repeat

    foo;

    Inc( i );
  until not ( i <= 9 );
und hier eine generische Umwandlung von while do nach repeat until
Delphi-Quellcode:
while EinLogischerAusdruck do
  foo;

// mit "repeat unitl"

if EinLogischerAusdruck then
  repeat

    foo;

  until not EinLogischerAusdruck;
Andersherum von repeat until nach while do ist es komplizierter
Delphi-Quellcode:
repeat

  foo;

until EinLogischerAusdruck;

// mit "while do"

FirstGoFlag := True;

while FirstGoFlag or not EinLogischerAusdruck do
  begin
    FirstGoFlag := False;

    foo;

  end;
Das sollte eigentlich reichen, damit du das obige Konstrukt mit einem repeat until umschreiben kannst
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Apr 2011 um 08:09 Uhr)
  Mit Zitat antworten Zitat