Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

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

jaenicke 3. Jun 2009 21:41

Re: taschenrechner (erweiterung)
 
Ich würde mal vermuten das liegt genau dadran:
Zitat:

Zitat von jaenicke
// EDIT:
Zudem ist Result auch keine gute Idee, weil so der Rückgabewert einer Funktion heißt...
Warum nicht ein richtiger Name wie EvaluateTerm oder so...


safak67 3. Jun 2009 21:46

Re: taschenrechner (erweiterung)
 
also soll ich alle result ein anderen namen geben

jaenicke 3. Jun 2009 21:53

Re: taschenrechner (erweiterung)
 
Das wäre sinnvoll die Funktion umzubenennen, und wenn dann immer noch ein Fehler kommt, musst du den eben noch einmal posten.

Aber das "Result := " darfst du natürlich nicht ändern...

safak67 3. Jun 2009 21:58

Re: taschenrechner (erweiterung)
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich habe immer noch die gleiche fehlermeldung, ich poste mal alles rein..

edit: also ich hab die funktion umbenannt danach auch result hat beides nicht funktioniert,, immer noch die gleiche fehlermeldung

Delphi-Quellcode:
unit Calculator_Main;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Buttons, StdCtrls;

type
  TFormTR = class(TForm)
    Sp7: TSpeedButton;
    Sp8: TSpeedButton;
    Sp9: TSpeedButton;
    Sp4: TSpeedButton;
    Sp5: TSpeedButton;
    Sp6: TSpeedButton;
    Sp1: TSpeedButton;
    Sp2: TSpeedButton;
    Sp3: TSpeedButton;
    Sp0: TSpeedButton;
    DecimalSep: TSpeedButton;
    spResult: TSpeedButton;
    SpPlus: TSpeedButton;
    SpMinus: TSpeedButton;
    SpMal: TSpeedButton;
    SpDurch: TSpeedButton;
    LabelAnzeige: TLabel;
    SpeedButton1: TSpeedButton;
    procedure SpZahlClick(Sender: TObject);
    procedure SpZeichenClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    function TFormTR.BerechneTerm(ATerm: string): Double;
  private
    { Private-Deklarationen }
    op : char;
  public
    { Public-Deklarationen }
  end;

var
  FormTR: TFormTR;

implementation

{$R *.DFM}

procedure TFormTR.SpeedButton1Click(Sender: TObject);
begin
LabelAnzeige.Caption := '0';
end;

function TFormTR.BerechneTerm(ATerm: string): Double;
var
  Op: string;
  iPos, i: Integer;
  Value1, Value2: Double;
begin
  for i := 0 to 3 do
  begin
    case i of
      0: Op := '+';
      1: Op := '-';
      2: Op := '*';
      3: Op := '/';
    end;
    iPos := Pos(Op, ATerm);
    if iPos > 0 then
    begin
      Value1 := BerechneTerm(Copy(ATerm, 1, iPos - 1));
      Value2 := BerechneTerm(Copy(ATerm, iPos + 1, Length(ATerm)));
      case i of
        0: EvaluateTerm := Value1 + Value2;
        1: EvaluateTerm := Value1 - Value2;
        2: EvaluateTerm := Value1 * Value2;
        3: EvaluateTerm := Value1 / Value2;
      end;
      Exit;
    end;
  end;
  EvaluateTerm := StrToFloat(ATerm);
end;

procedure TFormTR.SpZahlClick(Sender: TObject);
begin
   if LabelAnzeige.caption='0' then LabelAnzeige.caption:='';
   if LabelAnzeige.caption='Error' then LabelAnzeige.caption:='';

   LabelAnzeige.caption := LabelAnzeige.caption + TSpeedButton(Sender).Caption;

end;

procedure TFormTR.SPZeichenClick(Sender: TObject);
begin

  if LabelAnzeige.caption='Error' then LabelAnzeige.caption:='0';
  if sender = spPlus then
    begin
      op:='+'
    end;
  if sender = spMinus then
    begin
      op:='-'
    end;
  if sender = spMal then
    begin
      op:='x'
    end;
  if sender = spDurch then
    begin
      op:='/'
    end;

  LabelAnzeige.caption := LabelAnzeige.caption + op;

end;

end.

jaenicke 3. Jun 2009 22:01

Re: taschenrechner (erweiterung)
 
:wall: :wall: :wall:
Zitat:

Zitat von jaenicke
Du hast unten in der Implementierung das TFormTR. vor dem Namen der Funktion vergessen. ;-)

Das hatte ich geschrieben...
Du hast es aber oben bei der Deklaration auch dazu geschrieben und nicht nur unten... :roll:

Oben in der Zeile vor private muss das TFormTR. weg.

Und außerdem darfst du das Result unten nicht auch da ersetzen, wo gar nicht der Funktionsaufruf gemeint ist...
Delphi-Quellcode:
      Value1 := BerechneTerm(Copy(ATerm, 1, iPos - 1));
      Value2 := BerechneTerm(Copy(ATerm, iPos + 1, Length(ATerm)));
      case i of
        0: Result := Value1 + Value2;
        1: Result := Value1 - Value2;
        2: Result := Value1 * Value2;
        3: Result := Value1 / Value2;
      end;
Ach ja: Und Zeile 80 muss weg...
Den ganzen Term kannst du nicht in eine Zahl umwandeln.

safak67 3. Jun 2009 22:10

Re: taschenrechner (erweiterung)
 
wie mache ich das dann mit der Ausgabe?

jaenicke 3. Jun 2009 22:16

Re: taschenrechner (erweiterung)
 
Naja, ein Beispiel zur Ausgabe als ShowMessage habe ich ja schon geschrieben...
Da wo du BerechneTerm aufrufst musst du halt auch die Ausgabe des Rückgabewerts machen...

Blup 4. Jun 2009 07:20

Re: taschenrechner (erweiterung)
 
Zitat:

Zitat von jaenicke
Ach ja: Und Zeile 80 muss weg...
Den ganzen Term kannst du nicht in eine Zahl umwandeln.

Doch kann er, falls die Funktion tatsächlich Zeile 80 ereicht, enthält der Term nur eine Zahl.

safak67 4. Jun 2009 07:25

Re: taschenrechner (erweiterung)
 
also ich habe paar sachen versucht, aber das mit der ausgabe kriege ich immer noch nicht hin.. hat einer ne idee..?

bin am verzweifeln, hääte nicht gedacht das parsen so schwer sein kann.

safak67 4. Jun 2009 09:22

Re: taschenrechner (erweiterung)
 
hat denn keiner ne idee wie ich das mit der ausgabe mache


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.
Seite 4 von 6   « Erste     234 56      

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