![]() |
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 |
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: |
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 |
Re: Taschenrechner Programmieren
Und genau das wollte ich von ihm wissen - wie er es macht. :roll:
|
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] |
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: |
Re: Taschenrechner Programmieren
wenn ichs richtig durchgelesen hab, funzts gleich wie der Windows-Taschenrechner - da gibts kein Punkt vor strich! Da gibts nur klammern!
|
Re: Taschenrechner Programmieren
also wer sich meinen rechner mal anschauen will ich hab mal was angehangen.
![]() 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 |
Re: Taschenrechner Programmieren
Das ist aber ein seltsamer Taschenrechner. :gruebel:
Ich sehe immer nur Folgendes, wenn ich auf den Link klicke: Zitat:
|
Re: Taschenrechner Programmieren
Hi!
Geh auf ![]() 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 |
Re: Taschenrechner Programmieren
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab es nochmal als .zip und .rar angehängt!
|
Re: Taschenrechner Programmieren
ohhh sorry
|
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... |
Re: Taschenrechner Programmieren
Wenn ich einen String(Edit.text) habe (Beispiel=1+6/6*5). Wie kann ich ihn dann ausrechnen lassen?
|
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 |
Re: Taschenrechner Programmieren
Zitat:
|
Re: Taschenrechner Programmieren
Gibt es die Möglichkeit:
(Wenn man vorher / durch div ersetzt?
Code:
Ergebnis := strtoint(edit1.text);
|
Re: Taschenrechner Programmieren
Zitat:
Zitat:
Code:
oder so
'1 div 1 ' ist kein gültiger Integerwert
|
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:
und dann
try zahl1:=strtoint(a[1])
except zeichen1:=a[1]; und so wieter....
Delphi-Quellcode:
wobei das jetzt ne spontene idee war, und wahrscheinlich das umstaädlichste überhaupt ist...
if zeichen1:='*'
then ergebnis:=zahl1 * zahl2 else if zeichen1='/' then ergebnis:=zahl1/zahl2; |
Re: Taschenrechner Programmieren
ich habs so ähnlich gemacht
nur dass ich die Zahlen in einem Array und die Zeichen in einem String habe |
Re: Taschenrechner Programmieren
jo, logische verbesserung :thuimb:
müsst man mal weiterdenken, was es da noch zu verbessern gäbe... :gruebel: |
Re: Taschenrechner Programmieren
Es gibt schon fertige Matheparser Units für Delphi, die solche Formeln auswerten.
|
Re: Taschenrechner Programmieren
Wo gibt es die?
|
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? |
Re: Taschenrechner Programmieren
|
Re: Taschenrechner Programmieren
Einen guten Mathe-Parser gibts in der JCL und nennt sich JclExprEval.pas
![]() |
Re: Taschenrechner Programmieren
schön und gut son taschenrechner für zwischendurch ich muss nur diese punktrechnung vor strichrechnung in meinen rechner implementieren
|
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.
|
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..... )? |
Re: Taschenrechner Programmieren
Kann mir das jemand erklären mit diesen Units?? Was ist das ? Wie baut man sowas in den QT ein?
|
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.
|
Re: Taschenrechner Programmieren
Hallo Jack,
auch hier kann ich folgendes Buch empfehlen: ![]() 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:
Wie man sieht müssen die Operanden vor dem Operator auf dem Stapel erscheinen. Um das zu vereinfachen
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 kann man den Ausdruck 5*(((9+8 )*(4*6)+7) in der ![]()
Code:
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.
598+46**7+*
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. |
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
|
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. |
Re: Taschenrechner Programmieren
Ohh gut zu wissen!!!!
Gibt es nicht irgendeine Möglichkeit mir das einfach nahezubringen |
Re: Taschenrechner Programmieren
@JackRyan "Wie geht das mit den Units?"
ja, du sachst einfach
Delphi-Quellcode:
und um selbst eine zu machen so:
uses deineunit;
Delphi-Quellcode:
und das wars
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. |
Re: Taschenrechner Programmieren
was näherbringen?
punktvorstrichrechnung? das solltest dú können :wink: |
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 ... |
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: )) |
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. |
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