AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechner vereinfachen...

Ein Thema von maximi · begonnen am 21. Mär 2005 · letzter Beitrag vom 14. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
maximi

Registriert seit: 9. Jun 2003
217 Beiträge
 
Delphi 7 Personal
 
#1

Rechner vereinfachen...

  Alt 21. Mär 2005, 10:32
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.
Angehängte Dateien
Dateityp: exe project1_154.exe (394,5 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
21. Mär 2005, 18:28
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit der Windows-API zu tun.
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Rechner vereinfachen...

  Alt 21. Mär 2005, 21:04
Also bist du dir sicher, dass du den von dir geposteten Code verwendet hast? Ich glaube nicht.
Mir sind nämlich solche Sachen wie
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
function TForm1.faktor: string; MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
maximi

Registriert seit: 9. Jun 2003
217 Beiträge
 
Delphi 7 Personal
 
#4

Re: Rechner vereinfachen...

  Alt 21. Mär 2005, 21:24
bei meiner delphi-version muss ich nicht
 function TForm1.faktor: string; schreiben. Der Code geht doch, schau dir doch die .exe-datei an! Der Code ist nur zu kompliziert.

Max
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 08:50
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
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 09:10
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 18:08
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 18:30
Wenn man die Parameter im implementation-Teil weglassen kann, warum dann nicht auch den Rückgabewert?

Und ja, es geht wirklich .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#9

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 18:34
Entweder alles, oder nichts ... wenn nur Teile vorhanden sind, dann wird gemeckert, weil diese Deklarationen ja dann unterschiedlich sind,

was aber bedeutet, dass sowas

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Rechner vereinfachen...

  Alt 22. Mär 2005, 18:49
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.
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