Autor Beitrag
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 25.05.06 18:05 
Hallo

Ich möchte euch meinen CasiusRechner vorstellen. Eine dokumentation hab ich leider noch nicht gemacht, weil ich dieses Programm wo bei delphi dabei ist noch nicht beherrsche aber die ausgefallenen Funktionen braucht ihr sowieso nicht (wahrscheinlich).

Er besteht haupsächlich aus einer eingabezeile.

Die wichtigsten funktionen und rechenzeichen sind:
mod
div
/
^
*
+
-
shl
shr

radtodeg
...
cos
...
<Die ganzen funktionen von delphi mit nur einem real oder int parameter, die als rückgabewert real ode int haben> (siehe delphi dokumentation)

Alle möglichen Winkelfunktionen, Round...
Einloggen, um Attachments anzusehen!
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 25.05.06 19:06 
hab nur vergessen ein infofenster zu machen:
trotzdem (c) 2006 by Jakob Schöttl

Und wie gefällts euch?
Felux
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 57

WinXP Home + Sp1
D6 Pers(eng), D2005 Prof(de), Webocton Scriptly, C# (VS 2005 Express), Eclipse
BeitragVerfasst: Fr 26.05.06 17:17 
Hi,

irgendwie rechnet der bei folgendem Term das aus:


5-6+3*5 = -16 :shock:

Wie war das nochmal in der Schule gewesen? Achja, Punkt vor Strichrechnung, macht als bei mir: 5-6+3*5 = 14


Auch funktioniert bei mir der Schliessen-Buttton im Mainmenü nicht. :o
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Sa 27.05.06 15:05 
Oh nein,
Ich dachte er funktioniert wirklich...

Das mit dem Schliessen hab ich einfach vergessen.

Der Rechenfehler hat mit punkt vor strich nichts zu tun, (5-6+15 = -16) sondern damit, dass ich irgendwie dachte es wäre egal, ob er zuerst minus und dann plus ausrechnet. Aber in vielen Fällen kommt dann was falsches heraus.
Ein wirkliches Problem. Ich habs so gemacht, dass er mit den Rechenzeichen (und Funktionen) immer die gleiche Rangfolge einhält. Er sucht zuerst nach + und dann nach -.

Wie könnte ich das ändern, ohne dass ich ihn komplett umschreiben muss?
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 27.05.06 15:14 
Da PLus und Minus in dem fall gleichbedeutent sind - Term von vorne nach hinten nach rechenzeichen druchsuchen...
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: So 28.05.06 11:37 
Und das ist bei (* und /) und bei (+ und -) so!
Naja Vielleicht kann ich das noch ohne größere probleme ändern *hoff*
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Di 20.06.06 14:30 
Hoi,

wenn ich bei "Wet für x eingeben" auf Abrrechen klicke kommt immer '' ist kein gültiger real Wert.
Egal was ich da für x eingebe..

Vielleicht sollte ich da noch dazu sagen dass meine Term-Zeile noch komplett unangetastet war.

mfg
50
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Di 20.06.06 14:34 
mist das das ist noch ein fehler, aber der ist wenigstens leicht zu beheben. Sozusagen nur ein Leichtsinnsfehler...
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 25.06.06 08:06 
Auserdem steht da Gleichung, aber eine Gleichung besteht aus 2x+1=2x-1 oder so und was dein Rechner rechnen kann ist ein Term so wie 2x+1+4+2. Bei uns in der Schule haben Terme immer Variablen ohne genaue Werte.
Dann wäre 2x+12y-3+4*2x so gerechnet werden.
ausblenden Quelltext
1:
2:
3:
2x+12y-3+4*2x
2x+12y-3+8x
[u]10x+12y-3[/u]

Terme haben immer min. eine Variable. :roll:
Terme kann man nur Vereinfachen.
Gleichungen bestehen aus zwei Termen.
Dieser Rechner hat in moment so viele Fehler...
Naja das schaffst du schon das er es so rechnet wie er soll.
Ich bin ja selber an einem Gleichungsrechner dran.
Der Erstmal ohne Brüche rechnen soll ;)

MfG
hui1991
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: So 25.06.06 11:00 
Du hast schon recht, Gleichung ist eigentlich das falsche wort.
Aber bei einem anderen Programm von mir, das diese Engine benutzt, ist das schon eine gleichung in der Form: y = <und dann der teil, den der benutzereingeben darf, nur mit der variable x>;

Der Benutzer muss die gleichung davor halt mit der hand nach y umstellen. Und bei diesem Prog, ist x auch wirklich eine Variable, die automatisch die Werte der Definitionsmenge annimmt...
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 25.06.06 11:56 
Nicht schlecht, der Taschenrechner wertet auch kompliziertere Terme aus :zustimm: :) Folgendes ist mir noch aufgefallen:

- "1e2" ist eine gültige Notation für "10". Wenn man "10000000000000000000000000000000000000000+0" eingibt erhält man als Resultst "1,0E+0040", was wiederum als 42,72 ausgewertet wird.
- "x100" wird interpretiert als x*100
- "," ohne eine Zahl vorne oder hinten wird akzeptiert: ", = 0"
- Whitespace ist nicht erlaubt
- "2^3^4" = (2^3)^4. Das machen zwar einige Taschenrechner auch so, ist aber etwas umstritten.
- 2 div -2 (bzw. "2div-2") wird nicht akzeptiert
- Klammertests wären evtl. Hilfreich beim Fehler finden: "((1)" wird genau so akzeptiert wie "(1))"
- "((" ergibt die Fehlermeldung: Klammern sind zu tief verschachtelt; "(" die Fehlermeldung: Fehler beim Konvertieren.
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Fr 30.06.06 16:19 
danke delphifan!
Endlich auch mal was gutes :dance2:

Zu 1: ich weiß schon, das <Zahl>E<Zahl> eine gültige Notation ist. Aber bei meinem rechner geht das nicht, weil es dann eventuell komplikationen gibt mit der konstante "e" (eulerische Zahl, basis des natürlichen logarithmus). Deshalb, kann man diese Notation nicht eingeben.
Aber den Bug, den du geschildert hast versteh ich nciht ganz..

Zu 2: x100 wird als x*100 interpretiert. Ist das mathematisch falsch? Ich dachte man kann das schreiben z. B. 2x23 für 2*x*23. Naja, auch wenns math falsch ist, soll ich es wirklich ändern, so dass ein syntaxfehler kommt?

Zu3: das stimmt. Ich habs aber extra so gemacht, dass wenn ein "," gefunden wird, und keine zahl davor oder danach, dass dann eine 0 drangehängt wird oder davor eingefügt wird. Wieder die Frage: soll ich es wirklich ändern, so dass ein syntaxfehler kommt? Ich fand das ganz praktisch, denn beim normalen taschenrechner kann man ja auch nur ein komma eingeben und eine zahl, dann hat man 0,<zahl>

Zu4: Whitespace nicht erlaubt. das stört mich eben nur beim parsen. ich könnte natürlich auch alles richtigstellen, bevor ich parse und alle ' ' löschen.
Soll ich das noch machen?

Zu 4: wie könnte man es denn sonst machen? 2^(3^4). An dieser "Logik" kann ich in meinem Programm jedenfalls definitiv nichts ändern! Da könnte ich das ganze Programm neu schreiben...

Zu 5: du musst hald 2div(-2) schreiben. du kannst ja auch nicht einfach 2/-2 schreiben um zu teilen. Bei delphi gehts vllt, aber ich finds eigentlich so ganz logisch.

Zu 6: Ich habs eigentlich extra so gemacht, Fehlertolleranz! Die klammern werden automatisch am Ende geschlossen bzw am anfang geöffnet. Es wäre nicht schwer einen solchen test zu machen, einfach alle klammern auf, und alle klammern zu zählen und vergleichen, oder? Ich find das ganz praktisch, weil der benutzer so irgendwie entlastet wird, wenn ers weiß. Und eben kein Fehler kommt, wenn ers vergessen hat.

Zu 7: :oops: Den ersten fehler '((' kann ich mir selber nicht erklären. Den zweiten Fehler schon eher: Das programm denkt sich: aha, da ist eine klammer, also auch ein term. Dann meint es, es kann eine zahl zu einem real konvertieren, und da kommt dann eben der fehler.


Was ich aber noch sagen muss:
Ich find meinen CasiusRechner übrigens trotz allen Fehler immer noch praktisch, weil man damit viele funktionen, und rechenzeichen hat, die man sonst nicht zur verfügung hat. Man muss nur wissen wie man ihn bedient...

Viele Grüße
Opfer15
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Windows Xp, Vista, 2k, Suse Linux 9
C#, Delphi
BeitragVerfasst: Mo 10.07.06 19:26 
nur mal so als Frage nebenbei. Wie machst du das, dass du die Eingabe im Edit-Feld berechnest. Soweit ich gemerkt habe hast du die Eingabe von Zahlen nicht limitiert. Arbeite auch gerade an sowas und habe schon viel versucht mit arrays etc. Wäre cool wenn du nen stück quelltext zeigen kannst oder wenn du das nicht willst einfach mal nen Tipp geben.

Naja da bisl offtopic will ich net mehr nerven und hoffe du lässt von dir hören

greets Opfer15

//edit1 Danke an delphifans parser und an Allesquarks schnelle und gute Hilfe
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mo 10.07.06 20:28 
Ich glaub ich versteh dich nicht ganz, die Eingabe von Zahlen im Edit ist natürlich auf 256 Zeichen Limitiert. Mehr geht da nicht, aber mehr braucht man ja eigentlich auch nie.

Den Quelltext kann ich dir gern geben, aber er ist sicher nicht der schönste: 800 Zeilen, ich kenn mich zwar darin aus, aber ich bezweifle, dass du damit was anfange kannst. Aber du kannst es gern mal versuchen.

Viele Grüße, Jakob
Einloggen, um Attachments anzusehen!
Opfer15
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Windows Xp, Vista, 2k, Suse Linux 9
C#, Delphi
BeitragVerfasst: Mo 10.07.06 20:46 
Das mit der limitierung hab ich net gemerkt. Ich schreib gerade einen TR der einfach die Edit Zeile längs gehen soll und +,-,*,/ operatoren gescheit und mathematisch Korrekt erkennen soll. Die Eingabe wollte ich nicht limitieren. Doch dafür erscheint es mir etwas zu übertrieben mir da nen 800 Zeilen starken parser einzubauen da ich ihn auch nicht ganz verstehe und Code in einem Prog zu haben den man net versteht sollte ja klar sein, ist bad.
Ich werde mich auf jedenfall aber nochmal mit den Themen Rekursion und mathe-parser beschäftigen.