![]() |
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
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit der Windows-API zu tun. |
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:
aufgefallen. Da würde man beim Kompilieren eine Fehlermeldung erhalten, da bei Funktionen immer ein Rückgabetyp angegeben werden muss. Z.B. folgendermaßen
function TForm1.faktor;
Delphi-Quellcode:
MfG
function TForm1.faktor: string;
Binärbaum |
Re: Rechner vereinfachen...
bei meiner delphi-version muss ich nicht
Delphi-Quellcode:
schreiben. Der Code geht doch, schau dir doch die .exe-datei an! Der Code ist nur zu kompliziert.
function TForm1.faktor: string;
Max |
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 |
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. |
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 |
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: . |
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:
möglich ist.
function TForm1.faktor;
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. |
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. |
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