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 Taschenrechner Programmieren (https://www.delphipraxis.net/20361-taschenrechner-programmieren.html)

Jack Ryan 16. Apr 2004 15:22


Taschenrechner Programmieren
 
Hallo ich muss ein Taschenrechner programmieren soweit geht auch alles. Jetzt habe ich nur das problem das mein Taschenrechner keine Punkt vor Strichrechnung beherrt. ich hoffe ihr könnt mir helfen. W

Wenn der Quelltext benötigt wir poste ich ihn gerne

Luckie 16. Apr 2004 15:25

Re: Taschenrechner Programmieren
 
Etwas mehr Infoa wäeen schon nicht schlecht, wenn du wirklich willst, dass dir geholfen wird.

Aber zu deinem Problem: Woher soll der Taschenrechner denn wissen, dass wenn du "5 + 7" ein tippst, du da nach noch "* 2" eintippst? :roll:

lorenz 16. Apr 2004 15:44

Re: Taschenrechner Programmieren
 
Hi!

Vielleicht speichert man erstmal den ganzen Term und rechnet ihn danach zusammen.

Also:

Der Benutzer tippt 7+5. Die Variable wird '7+5'.

Der Benutzer tippt *8. Die Variable wird '7+5*8'.

Der Benutzer tippt /2. Die Variable wird '7+5*8/2'.

Der Benutzer tippt =. Die Variable wird aufgelöst und es steht 27 da.

MfG

Lorenz

Luckie 16. Apr 2004 15:48

Re: Taschenrechner Programmieren
 
Und genau das wollte ich von ihm wissen - wie er es macht. :roll:

Jack Ryan 16. Apr 2004 16:01

Re: Taschenrechner Programmieren
 
Ja also zu dem Thema mehr info poste ich jetzt mal den QT.



[edit=Luckie]Quelltextmonster und Bild entfernt. Mfg, Luckie[/edit]
[edit=Luckie]Nachtrag: Bitte mal eben in die Foren eigene Mailbox kucken. Danke. Mfg, Luckie[/edit]

himitsu 16. Apr 2004 16:05

Re: Taschenrechner Programmieren
 
Also für QT's machen sich die Delphi-Tags besser, als die für'n Zitat.
Und bei der Größe wäre es besser den QT als Anhang dranzuhängen und nicht direkt in einem Beitrag zu schreiben :wink:

Skiron 16. Apr 2004 16:06

Re: Taschenrechner Programmieren
 
wenn ichs richtig durchgelesen hab, funzts gleich wie der Windows-Taschenrechner - da gibts kein Punkt vor strich! Da gibts nur klammern!

Jack Ryan 16. Apr 2004 16:23

Re: Taschenrechner Programmieren
 
also wer sich meinen rechner mal anschauen will ich hab mal was angehangen.

Taschenrechner

Bei meinem Taschenrechner gebe ich die vollständige Rechnung ein und möchte dann das Endergebnis erhalten(ohne Zwischenergebnis)




@Skiron

Meinetwwegen mach ich auch as mit Klammern wenn ich das irgendwie hinbekomme das der richtig rechnet aber ich weiss nicht wie

Matze 16. Apr 2004 16:41

Re: Taschenrechner Programmieren
 
Das ist aber ein seltsamer Taschenrechner. :gruebel:

Ich sehe immer nur Folgendes, wenn ich auf den Link klicke:

Zitat:

Rar!Ïs מt`€-OîôÇGˆ^R05 pro 1\div.bmp§BMjËÆóÓ;ÁV"FuA¼ƒ<ó…"³—d3L">~SÓ#Ú –eRo¤¥²ÌMÃè½ãćòµ¹HήòP®ªï¿ˆgö©ÿÔ(t`€-hî7džÉC^R05 pro 1\mal.bmp§BMjËÆóÓ;ÁV"FuA¼ƒ<ó…"³—d3L">~SÓ#Ú –eRo¤¥²ÌMÃèœÑ…TdÕ,J bC¸µ§™Ñtʬ¥yÿ_# ƒÂô © ¦q¿ˆgö©ÿÔ–t`€-Kî¢.TlÁ^R05 pro 1\min.bmp§BMjËÆóÓ;ÁV"FuA¼ƒ<ó…"³—d3L">~SÓ#Ú –eRo¤¥²ÌMÃèE•×A{ Ѩ”¿ˆgö©ÿÔªÔt`€,Sî?µWbq05 pro 1\PI.bmp§BMjËÆóÓ;ÁV"FuA¼ƒ<ó…"³—d3L">~SÓ#Ú –eRo¤¥²ÌMÃèjß³]Z;|¹m©ƒ/=#ğÇ4†î¿ˆgö©ÿÔøt`€-NêÔ^R05 pro 1\plu.bmp§BMjËÆóÓ;ÁV"FuA¼ƒ<ó…"³—d3L">~SÓ#Ú –eRo¤¥²ÌMÃè½ã·À«z<¿c‹XåÚM¿ˆgö©ÿÔşìt`€2Ãz©Ñ R©i05 pro 1\Project1.cfg§,öž*Ş; úS,'œù?l±EH ã‘#âòû&«×¿ïû+Ÿ#µ(QCÒú»rÒyzY8ü^$DÛž'O™µüK?
usw... ;)

fkerber 16. Apr 2004 16:50

Re: Taschenrechner Programmieren
 
Hi!

Geh auf
http://members.aol.com/bergmann87/

Mach bei Taschenrechner Ziel Speichern unter, lass ihn runterladen und ändere die Dateiendung von HTM auf Rar. Dann geht es.

(Übrigens, die ersten 3 Zeichen des "Quatsch-Codes" sind RAR :wink: )


Ciao fkerber

Nicolai1234 16. Apr 2004 16:57

Re: Taschenrechner Programmieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab es nochmal als .zip und .rar angehängt!

Jack Ryan 16. Apr 2004 17:15

Re: Taschenrechner Programmieren
 
ohhh sorry

Skiron 16. Apr 2004 17:19

Re: Taschenrechner Programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab mal ein beispiel geschrieben, wie mans machen könnt...
is scho fast ein kleiner parser...
mängel: eine zahl kann einige kommas haben...

Nicolai1234 16. Apr 2004 17:26

Re: Taschenrechner Programmieren
 
Wenn ich einen String(Edit.text) habe (Beispiel=1+6/6*5). Wie kann ich ihn dann ausrechnen lassen?

Skiron 16. Apr 2004 17:30

Re: Taschenrechner Programmieren
 
1+6/6*5
-suche zuerst alle / und *:
-finde das 6/6 und ersetze es durch das ergebnis (6/6 = 1)
1+1*5
-finde das 1*5 und ersetze es durch das ergebnis (1*5 = 1)
1+1
nichts mehr gefunden, also
-suche alle + und -
-finde 1+1 und ersetze es durch das ergebnis (1+1 = 2)
2
nichts mehr gefunden, also
Ergebnis = 2

himitsu 16. Apr 2004 17:32

Re: Taschenrechner Programmieren
 
Zitat:

Zitat von Skiron
finde das 1*5 und ersetze es durch das ergebnis (1*5 = 1)

:gruebel:

Nicolai1234 16. Apr 2004 17:32

Re: Taschenrechner Programmieren
 
Gibt es die Möglichkeit:
(Wenn man vorher / durch div ersetzt?

Code:
Ergebnis := strtoint(edit1.text);

Skiron 16. Apr 2004 17:35

Re: Taschenrechner Programmieren
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Skiron
finde das 1*5 und ersetze es durch das ergebnis (1*5 = 1)

:gruebel:

:oops: :oops: jetzt weiß ich warum mich mein mathelehrer nicht so richtig mag *g*

Zitat:

Zitat von Nicolai1605
Gibt es die Möglichkeit:
(Wenn man vorher / durch div ersetzt?
Code:
Ergebnis := strtoint(edit1.text);

geht nicht, dann sagt delphi z.B.
Code:
'1 div 1 ' ist kein gültiger Integerwert
oder so

glkgereon 16. Apr 2004 19:18

Re: Taschenrechner Programmieren
 
man brauch wirklich nen parser!

man muss den ganzen "scheiss" in nen array klotzen

(so etwa:
'2+7*123+34'
wird zu
a[1]:='2';
a[2]:='+';
a[3]:='7';
a[4]:='*';
a[5]:='123';
a[6]:='+';
a[7]='34'; )

dan muss man sagen

Delphi-Quellcode:
try zahl1:=strtoint(a[1])
except zeichen1:=a[1];
und so wieter....
und dann

Delphi-Quellcode:
if zeichen1:='*'
then ergebnis:=zahl1 * zahl2
else if zeichen1='/'
then ergebnis:=zahl1/zahl2;
wobei das jetzt ne spontene idee war, und wahrscheinlich das umstaädlichste überhaupt ist...

Skiron 16. Apr 2004 19:34

Re: Taschenrechner Programmieren
 
ich habs so ähnlich gemacht
nur dass ich die Zahlen in einem Array und die Zeichen in einem String habe

glkgereon 16. Apr 2004 19:59

Re: Taschenrechner Programmieren
 
jo, logische verbesserung :thuimb:

müsst man mal weiterdenken, was es da noch zu verbessern gäbe... :gruebel:

Luckie 16. Apr 2004 20:29

Re: Taschenrechner Programmieren
 
Es gibt schon fertige Matheparser Units für Delphi, die solche Formeln auswerten.

Nicolai1234 16. Apr 2004 20:54

Re: Taschenrechner Programmieren
 
Wo gibt es die?

Jack Ryan 16. Apr 2004 21:21

Re: Taschenrechner Programmieren
 
also jetzt versteh ich nur noch Bahnhof??!?! :pale: :pale: :wall:

Ich höre heute zum ersten mal von dem Wort array in Delphi??
Könnt ihr mir das ganze bitte verständlich erklären?

Nicolai1234 16. Apr 2004 21:31

Re: Taschenrechner Programmieren
 
KLICK

notam 16. Apr 2004 23:54

Re: Taschenrechner Programmieren
 
Einen guten Mathe-Parser gibts in der JCL und nennt sich JclExprEval.pas
Guckst du hier Punkt-Vor-Strich-Regel, Klammern... Alles was der kleine Taschenrechner für zwischendurch so braucht. :wink:

Jack Ryan 17. Apr 2004 09:16

Re: Taschenrechner Programmieren
 
schön und gut son taschenrechner für zwischendurch ich muss nur diese punktrechnung vor strichrechnung in meinen rechner implementieren

Luckie 17. Apr 2004 09:20

Re: Taschenrechner Programmieren
 
Wenn du jeweils die Zwischenergebnisse ausrechnest geht das eben nicht. Sieh dazu auch den Rechner von Windows. Willst du Punkt-vor-Strich-Rechnung realisieren, musst du dem Benutzer die ganze Rechnung eingeben lassen und dann die Rechnung zerlegen und analysieren und das geht mit diesen Matheparser-Units eben.

glkgereon 17. Apr 2004 21:00

Re: Taschenrechner Programmieren
 
wie gut ist das denn in den units, hat das mal wer (ausführlich) getestet?
haben die ne begrenzung in sachen länge der formel...
was ist mir spezial rechnunge (wie zb wurzel/potenz/sin/cos..... )?

Jack Ryan 18. Apr 2004 10:05

Re: Taschenrechner Programmieren
 
Kann mir das jemand erklären mit diesen Units?? Was ist das ? Wie baut man sowas in den QT ein?

Luckie 18. Apr 2004 11:41

Re: Taschenrechner Programmieren
 
Das wird wohl von Unit zu Unit anders sein. genauso, was den Funktionsumfang betriift, hängt eben davon ab, wie viel Mühe sich derjenige gemacht hat.

Jens Schumann 18. Apr 2004 12:24

Re: Taschenrechner Programmieren
 
Hallo Jack,
auch hier kann ich folgendes Buch empfehlen:
Sedgewick

In diesem Buch beschreibt Herr Sedgewick in Pascalnotation verschiedene Algorithmen.
Unteranderem auch einen Algorithmus für einen Taschenrechner. Na ja nicht direkt. Es werden
Algorithmen für Staple erklärt. Ein Beispiel beschäftigt sich genau mit der Deiner Fragestellung.

D.h. für Lösung Deines Problems solltest Du mit einem Stapel arbeiten.
Im folgenden muss vorausgesetzt werden dass Du weißt was ein Stapel ist.
Push holt einen Wert vom Stapel, Pop packt einen Wert auf den Stapel.
Damit ließe sich folgender Ausdruck wie folgt berechenen:
Code:
5*(((9+8)*(4*6)+7)
Code:
push(5)
push(9)
push(8)
push(pop+pop)
push(4)
push(6)
push(pop*pop)
push(pop*pop)
push(7)
push(pop+pop)
push(pop+pop)
Result:=pop
Wie man sieht müssen die Operanden vor dem Operator auf dem Stapel erscheinen. Um das zu vereinfachen
kann man den Ausdruck 5*(((9+8 )*(4*6)+7) in der umgekehrten polnischen Notation darstellen. Dann würde unser Ausdruck wie folgt aussehen:
Code:
598+46**7+*
Man kann hier sehr deutlich einen Zusammenhang zwischen der Notation und den Stapeloperationen sehen. Der Ausdruck 5*(((9+8 )*(4*6)+7) entspricht der Notation wie wir sie in der Schule gelernt haben. Diese Notation nennt man auch InFix-Notation. Die umgekehrte polnische Notation nennt man auch PostFix-Notation. Interessant ist auch das die PostFix-Notation ohne Klammern auskommt.

Deine geistige Leistung muss es jetzt sein einen Stapel zu entwicklen, einen Algorithmus schreiben, der die InFix-Notation in die PostFix-Notation umwandelt und auf den Stapel packt und berechnet.

Jack Ryan 18. Apr 2004 13:24

Re: Taschenrechner Programmieren
 
Sei nicht böse es ist sicher gut erklärt aber ich bin ein Delphi Anfänger und kann mit diesen Begriffen irgendwie nichts anfangen

Jens Schumann 18. Apr 2004 18:11

Re: Taschenrechner Programmieren
 
Hallo Jack,
ich weiß ja nicht warum Du einen Taschenrechner programmieren musst.
Aber ein Taschenrechner der Punkt vor Strichrechnung können muss ist für
einen Anfänger der absolute Overkill.

Jack Ryan 18. Apr 2004 19:46

Re: Taschenrechner Programmieren
 
Ohh gut zu wissen!!!!

Gibt es nicht irgendeine Möglichkeit mir das einfach nahezubringen

glkgereon 20. Apr 2004 12:49

Re: Taschenrechner Programmieren
 
@JackRyan "Wie geht das mit den Units?"


ja, du sachst einfach
Delphi-Quellcode:
uses deineunit;
und um selbst eine zu machen so:

Delphi-Quellcode:
unit deineunit;

uses ...;

interface

   //typen

   //functionen und procedures headers
   //zB:

   procedure ichbintoll(a:string);

   //variablendeklarationen
   var
   a, b, c:integer;

implementation

   //function und procedure quelltexte
   
   procedure ichbintoll(a:string);
   begin
   Form1.Label1.Caption:='Ich Bin Ganz doll toll!!!';
   end;

end.
und das wars

glkgereon 20. Apr 2004 12:52

Re: Taschenrechner Programmieren
 
was näherbringen?

punktvorstrichrechnung?
das solltest dú können :wink:

himitsu 20. Apr 2004 12:55

Re: Taschenrechner Programmieren
 
@glkbkk
bei denem Codebeispiel fängt jetzt der Compiler an zu mekern, weil er Fotm1 nicht findet :warn:

Code:
...
implementation
[color=red]  //die Unit, wo Form1 & Form1.Label1 drin sind
   uses unit1;[/color]

   //function und procedure quelltexte
...

glkgereon 20. Apr 2004 13:00

Re: Taschenrechner Programmieren
 
das mit form1.label war nurn beispiel

da werden ja normalerweise algemeine functions drin sein (so mathe oder so) die sich nicht direkt auf irgendwelche d-komponenten beziehen

(die sollte man direkt in den record des jeweiligen typs schreiben, kann mir da aber mal wer per pn sagen wie das geht (damit kein mod kommt und sagt:"ihr kommt vom thema ab" :wink: ))

Jack Ryan 22. Apr 2004 14:56

Re: Taschenrechner Programmieren
 
so hab das jetzt hinbekommen *freu*.

Nur noch das problem.
Wie kann ich eine Fakultät berechnen???
also wenn ich 4 eingeben dann soll er 1*2*3*4
oder bei 7 1*2*3*4*5*6*7
rechnen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 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