Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rechner vereinfachen... (https://www.delphipraxis.net/42577-rechner-vereinfachen.html)

maximi 21. Mär 2005 09:32


Rechner vereinfachen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe einen Rechner programmiert, der die Punkt-vor-Strich Regel beherrscht. Und ich wollte gerne noch weietere Funktionen einbauen, wie z.b. Klammern, Sinus etc. Ich habe nur bemerkt, dass ich meinen Code zu kompliziert aufgebaut habe und da wollte ich euch fragen, ob ihr mir vielleicht helfen könnt ihn "leichter" zu machen, damit man ihn leichter editieren kann.

Max

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ed_eingabe: TEdit;
    bt_rechne: TButton;
    procedure bt_rechneClick(Sender: TObject);
  private
    eingabe:String;
    erg:Real;
    zwischen_erg:Real;
    procedure rechnen(i:Integer);
    { Private-Deklarationen }
  public
    function ausdruck:String;
    function summand:String;
    function faktor:String;

    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.faktor;
var i,outa:Integer;
begin
  for i := 0 to length(eingabe) do
  begin
    if(TryStrToInt(copy(eingabe,0,length(eingabe)),outa) = true) then
    begin
      faktor := eingabe;
      delete(eingabe,1,length(eingabe));
    end;
    if(TryStrToInt(copy(eingabe,i,1),outa) = false) and (copy(eingabe,i,1) <> '') then
     begin
       faktor := copy(eingabe,0,i-1);
       delete(eingabe,1,i-1);
       break;
     end;
  end;
end;

procedure TForm1.rechnen;
begin
  if(copy(eingabe,i,1) = '*') Then
  begin
    delete(eingabe,i+1,1);
    zwischen_erg := zwischen_erg * StrToFloat(faktor)
  end
  else
  begin
    delete(eingabe,i+1,1);
    zwischen_erg := zwischen_erg / StrToFloat(faktor);
  end;

  if(copy(eingabe,i,1) = '*') or (copy(eingabe,i,1) = '/') Then
    rechnen(i);
  inc(i);
end;


function TForm1.summand;
var i:Integer;
begin
  for i := 0 to length(eingabe) do
  begin
    eingabe := copy(eingabe,i,length(eingabe));
    zwischen_erg := StrToInt(faktor);
    summand := FloatToStr(zwischen_erg);
    if(copy(eingabe,i,1) = '*') or (copy(eingabe,i,1) = '/') Then
    begin
      rechnen(i);
      summand := FloatToStr(zwischen_erg);
      break;
    end
    else
      exit;
  end;
end;



function TForm1.ausdruck;
var i,fall:Integer;
begin
  i := 0;
  repeat
    fall := 0;
    if(copy(eingabe,0,1) = '+') then
      fall := 1
    else
      if(copy(eingabe,0,1) = '-') Then
        fall := 2;
    if(fall <> 0) then
      delete(eingabe,1,1);
    eingabe := copy(eingabe,i,length(eingabe));

    if(fall = 1) then
      erg := erg + StrToFloat(summand)
    else
      if(fall = 2) then
        erg := erg - StrToFloat(summand)
      else
        erg := StrToFloat(summand);
    i := 0;
  until
    eingabe = '';
  showMessage(FloattoStr(erg));
end;


procedure TForm1.bt_rechneClick(Sender: TObject);
begin
  eingabe := ed_eingabe.Text;
  ausdruck;
end;

end.

DP-Maintenance 21. Mär 2005 17:28

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit der Windows-API zu tun.

Binärbaum 21. Mär 2005 20:04

Re: Rechner vereinfachen...
 
Also bist du dir sicher, dass du den von dir geposteten Code verwendet hast? Ich glaube nicht.
Mir sind nämlich solche Sachen wie
Delphi-Quellcode:
function TForm1.faktor;
aufgefallen. Da würde man beim Kompilieren eine Fehlermeldung erhalten, da bei Funktionen immer ein Rückgabetyp angegeben werden muss. Z.B. folgendermaßen
Delphi-Quellcode:
function TForm1.faktor: string;
MfG
Binärbaum

maximi 21. Mär 2005 20:24

Re: Rechner vereinfachen...
 
bei meiner delphi-version muss ich nicht
Delphi-Quellcode:
 function TForm1.faktor: string;
schreiben. Der Code geht doch, schau dir doch die .exe-datei an! Der Code ist nur zu kompliziert.

Max

Boombuler 22. Mär 2005 07:50

Re: Rechner vereinfachen...
 
Hi

Und was für ne Delphi Version hast du wenn man fragen darf?? höhrt sich nämlich intressant an. Ich programmier seit delphi 4 mit delphi und bis jetzt wollte noch jede Version n rückgabewert von Funktionen haben...

Greetz
Boombuler

jim_raynor 22. Mär 2005 08:10

Re: Rechner vereinfachen...
 
Meines Erachtens liegt es daran, dass der komplette Funktionskopf im Interface teil bereits bekannt gemacht wurde. Hatte schon mal ein ähnliches Phänomän bei Paramatern. Im Interface teil alles korrekt angegeben und in Implentation keine oder unvollständig (kann mich nicht mehr dran erinnern). War Delphi auf jeden Fall egal. Benutze Delphi 5.
Also kann mir durchaus vorstellen, dass der Code funktioniert, nur sieht es natürlich nicht schön aus.

Binärbaum 22. Mär 2005 17:08

Re: Rechner vereinfachen...
 
Also ich glaube nicht, dass diese unvollständigen Funktionsköpfe so einfach vom Compiler geschluckt werden. Ich arbeite zur Zeit mit Delphi7, und der Compiler meckert immer, wenn die Deklaration im implementation- und im interface-Teil unterscheidlich sind.

MfG
Binärbaum

Khabarakh 22. Mär 2005 17:30

Re: Rechner vereinfachen...
 
Wenn man die Parameter im implementation-Teil weglassen kann, warum dann nicht auch den Rückgabewert?

Und ja, es geht wirklich :zwinker: .

himitsu 22. Mär 2005 17:34

Re: Rechner vereinfachen...
 
Entweder alles, oder nichts ... wenn nur Teile vorhanden sind, dann wird gemeckert, weil diese Deklarationen ja dann unterschiedlich sind, :zwinker:

was aber bedeutet, dass sowas

Delphi-Quellcode:
function TForm1.faktor;
möglich ist.



Ich persönlich gebe aber lieber immer alles an, da man dadurch auch schnell mal Deklarationsfehler entdeckt und wann auch immer die aktuelle Deklaration im Blickfeld hat, wenn man innerhalb der Prozedur/Funktion etwas rumspielt.

Binärbaum 22. Mär 2005 17:49

Re: Rechner vereinfachen...
 
So, nachdem das nun geklärt ist, kann man ja zum eigentlichen Thema des Threads zurückkehrern.

Wenn der Rechner noch weitere Rechenarten/ Funktionen beherrschen soll, dann wird man auf Dauer wohl nicht um einen eigenen Parser herumkommen. Mit deinem Quelltext sind zwar die Grundrechenarten schon implementiert, aber wenn man auch kompliziertere Sachen wie trigonometrische und hyperbolische Funktionen berechenen will, ist der jetztige Quelltext nicht gut geeignet.
Letztlich läuft es darauf hinaus, dass du den eingegebenen String, der die Berechnung enthält, in seine einzelnen Teile zerlegst und dann analysierst und entsprechend berechnest.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Seite 1 von 2  1 2      

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