Delphi-PRAXiS
Seite 7 von 8   « Erste     567 8      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner Ausgabe (https://www.delphipraxis.net/135126-taschenrechner-ausgabe.html)

DeddyH 8. Jun 2009 09:24

Re: Taschenrechner Ausgabe
 
Unter interface gibt es eine Zeile, die mit uses beginnt. An die darauffolgende Liste hängst Du StrUtils mit Komma getrennt hinten dran.

Blup 8. Jun 2009 09:35

Re: Taschenrechner Ausgabe
 
Das mindeste wäre gewesen erst einmal die Delphi-Hilfe aufzurufen.
Wenn du nach "uses" suchst, erhältst du als erstes Ergebnis "Programme und Units".
Und da steht wirklich alles sehr gut erklärt, was man du zu diesem Thema wissen musst.

Satty67 8. Jun 2009 09:44

Re: Taschenrechner Ausgabe
 
Safak67, welche Delphi Version verwendest Du eigentlich? (Sorry wenn es schonmal irgendwo geschrieben wurde)

PosEx gibt z.B. bei Delphi 5 noch nicht.

jaenicke 8. Jun 2009 09:45

Re: Taschenrechner Ausgabe
 
Zitat:

Zitat von safak67
Zitat:

Zitat von jaenicke
Zitat:

Zitat von safak67
[DCC Fehler] Calculator_Main.PAS(36): E2065 Ungenügende Forward- oder External-Deklaration: 'TFormTR.spResultClick'

Hast du denn spResultClick unter implementation definiert?

Unter implementation ist garnichts..

Wenn unterhalb von implementation bis zum Ende der Unit kein Quelltext zu TFormTR.spResultClick folgt, dann stimmt die Fehlermeldung, dann fehlt die Definition zu der Deklaration oben...

safak67 8. Jun 2009 09:48

Re: Taschenrechner Ausgabe
 
danke blup habe es gelesen.. eine letzte frage habe ich noch.. kann mir einer ausführlich erklären am besten kommentieren was hier gemacht wird...
Delphi-Quellcode:
{ermittelt aus einer Reihe von Operatoren den,
der am weitesten Rechts im Term auftaucht} 
function FindOperator(const ATerm, AOperatoren: string;
  out AOp: Char; out APos: Integer): Boolean;
var
  i, iPos: Integer;
  Op: Char;
begin
  AOp   := #0;
  APos  := 0;
  Result := False;
  for i := 1 to Length(AOperatoren) do
  begin
    Op := AOperatoren[i];
    iPos := APos;
    repeat
      iPos := PosEx(Op, ATerm, iPos + 1);
      if iPos > APos then
      begin
        AOp   := Op;
        APos  := iPos;
        Result := True;
      end;
    until (iPos = 0);
  end;
end;

function BerechneTerm(ATerm: string): Double;
const
  OperatorLevel: array[0..1] of string = ('+-', '*/');
var
  Op: Char;
  i, iPos: Integer;
  Value1, Value2: Double;
begin
  for i := Low(OperatorLevel) to High(OperatorLevel) do
  begin
    if FindOperator(ATerm, OperatorLevel[i], Op, iPos) then
    begin
      Value1 := BerechneTerm(Copy(ATerm, 1, iPos - 1));
      Value2 := BerechneTerm(Copy(ATerm, iPos + 1, Length(ATerm)));
      case Op of
        '+': Result := Value1 + Value2;
        '-': Result := Value1 - Value2;
        '*': Result := Value1 * Value2;
        '/': Result := Value1 / Value2;
      else
        raise Exception.Create(Format('undefinierter Operator ''%s''', [Op]));
      end;
      Exit;
    end;
  end;
  Result := StrToFloat(ATerm);
end;

jaenicke 8. Jun 2009 10:00

Re: Taschenrechner Ausgabe
 
Die Frage ist doch eher was du daran nicht verstehst...
Ich meine, wenn du den Quelltext durchgehst, dann musst du doch sehen was du nicht verstehst, und dann kannst du das doch konkret fragen.

safak67 8. Jun 2009 10:21

Re: Taschenrechner Ausgabe
 
Delphi-Quellcode:
function FindOperator(const ATerm, AOperatoren: string;
  out AOp: Char; out APos: Integer): Boolean;
was hat das mit out´s an sich..?

Delphi-Quellcode:
AOp   := #0;
wieso #0?

Delphi-Quellcode:
 OperatorLevel: array[0..1] of string = ('+-', '*/');
was bedeutet die Zeile?

[delphi]raise Exception.Create(Format('undefinierter Operator ''%s''', [Op]));
wann kommt die Fehlermeldung?

jaenicke 8. Jun 2009 10:27

Re: Taschenrechner Ausgabe
 
Zitat:

Zitat von safak67
was hat das mit out´s an sich..?

Das bedeutet, das in diese Variable ein Wert in der aufgerufenen Funktion hineingelegt wird. Also quasi ein zusätzlicher Rückgabewert statt eines Wertes, den die Funktion bekommt.

Zitat:

Zitat von safak67
Delphi-Quellcode:
AOp   := #0;
wieso #0?

Das ist das Nullzeichen, also "kein Zeichen". Das steht da, da sonst der Inhalt der übergebenen Variable nach dem Aufruf von FindOperator undefiniert sein könnte.

Zitat:

Zitat von safak67
[delphi]raise Exception.Create(Format('undefinierter Operator ''%s''', [Op]));
wann kommt die Fehlermeldung?

Die Exception wird sofort ausgelöst und rückwärts durch die Aufrufkette zurückgereicht. Das heißt zuerst dahin wo BerechneTerm aufgerufen wurde, wenn da kein try..except/finally steht, dass die Exception abfängt, wird sie weiter gereicht an die Prozedur, die wiederum die aufgerufen hat, die BerechneTerm aufgerufen hat.
Und so weiter. Sollte nirgends der Fehler abgefangen werden, kommt von Windows die Meldung, dass das Programm beendet werden muss.

safak67 8. Jun 2009 10:47

Re: Taschenrechner Ausgabe
 
wieso berechnet die funktion nicht mit negativen?

jaenicke 8. Jun 2009 11:13

Re: Taschenrechner Ausgabe
 
Vielleicht weil das Minuszeichen als Operator benutzt wird? Denn ob das hinter einem anderen Operator kommt, wird ja nicht abgeprüft. Das solltest du aber im Debugger auch sehen was da passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Seite 7 von 8   « Erste     567 8      

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