Hab einen Taschenrechner programmiert, aber mein Problem ist, das Delphi beim Test des Programms ab und zu Fehlermeldungen bringt, wenn man zB zu viele Kommas eingegeben hat.. Weiß einer, wie man das Programm so schreiben kann, dass solche Fehler nicht auftreten sondern stattdessen halt eine andere Anweisung befolgt werden kann??
Packe das ganze in eine try-except-Umgebung. Du wirst wohl irgendwo etwas wie StringToFloat() benutzen: var value: real; try value = StringToFloat(...); Anweisung1; except Anweisung 2; end;
Klar benutze ich da StrToFloat etc aba was hat das jetzt mit diesem try-except bla zu tun?? (11. klasse info...kein peil von dem, was du da sagst!!!) kannst dus mir (bitte)was genauer erklären?? Danke für deine Hilfe!
try-except dient dazu, ein Ausnahmefehler (eine Exception) abzufangen um geordnet darauf zu reagieren. Ohne try-except werden von deinem Programm Standardfunktionen benutzt, was sich in der von dir erwähnten Fehlermeldung äußert. Wenn du nun z. B. in dein Edit-Feld "2,,665" eingibst, kommt es bei der Anwendung von StrToFloat() zu einer Exception, weil "2,,665" eben kein gültiger Ausdruck für die Umwandlung in einen Float-Wert darstellt. Ein Float-Wert darf ja nur ein Komma enthalten :) try-except dient eigentlich nur dazu, um dein Programm sicher zu gestalten. Würde die Exception nicht kommen und StrToFloat() ausgeführt werden, so kann alles mögliche passieren bis hin zum kompletten Programmabsturz bzw. bei alten Windowsversionen eben zum Systemabsturz. Ich würde übrigens die oben erwähnte 2. Anweisung einfach weglassen. Wenn die eingegebene Zahl das richtige Format hat, wird der try-Block ausgeführt: d. h. die Umwandlung der Zahl in einen Float sowie Anweisung 1. Bei falschem Zahlenformat wird zuerst der try-Block versucht. Dabei kommt es zur Exception und es wird sofort zum except-Block gesprungen. In diesem könntest du ein Fenster ausgeben, dass dem Benutzer mitteilt, dass das zahlenformat falsch ist. Oder besser, du machst nichts. Auch keine Berechnung, der Benutzer (also du) merkt dann schon selbst, das was nicht stimmt. So, mehr fällt mir nicht ein.
Fang das doch einfach ab das man nur ein Komma eingeben kann, dazu einfach den ASCII Code von dem , abfangen und einen boolean auf true setzen dann bei einem weiteren , einfach die eingabe ignorieren.
Hi. Also ich weiß gar nicht wie man so einen taschenrechner auf delphi7 programmieren soll, brauche das aber dringend!! kann mir das einer erklären/verraten?! weiß auch nicht ob ich das hier einfach fragen darf.... es wäre wirklich nett wenn einer hierauf antworten würde!!
Was verstehst Du unter 'Tschenrechner'. So ein Program, das graphisch einen Taschenrechner darstellt und der Benutzer mit der Maus auf die tasten klicken kann? Das ist doch weiter kein Problem. Oder eher sowas: Du gibst (als Text) in ein Edit-Feld ein: (2+3)*4 und in einem anderen Feld (oder in demselben) erscheint 20. Was Du dazu brauchst, ist ein Formelauswerter. Viele interpretierbare Sprachen koennen sowas aus dem Stand. Du schmeisst einer Funktion einen String vor und die Funktion wertet den Ausdruck aus. Ist ja auch ganz einfach: Der String wird einfach durch den Interpreter geschleust. Bei compilierbaren Sprachen ist das nicht ganz so einfach. Da muss man sich sowas selber bauen, oder eine Bibliothek dazu benutzen. Ansaetze dazu gibt es viele. Eine Moeglichkeit arbeitet ueber Stacks. Ein anderer benutzt Techniken aus dem Bereich 'Compilerbau' um den String anhand der Grammatik fuer arithmetische Ausdruecke zu parsen und dann entweder: * den Ausdruck gleich waehrend der Parserei auszuwerten * einen sog. Expression-Tree aufzubauen und den dann (ev. nach Optimierung) auswerten zu lassen. Dies macht man zB. wenn der ganze Ausdruck viele male ausgewertet werden muss (zb. Formelplotter) * Wieder eine andere Moeglichkeit ist es, sich eine kleine virtuelle Maschine aufzubauen und aus dem Expression-Tree dann quasi ein Maschinenprogram fuer diese virtuell Maschine zu 'compilieren'. Ist dann noch einen Tick schneller als die (wiederholte) Auswertung des Expression-Tree's. Hab ich Dich jetzt verwirrt? Die einfachste Loesung besteht darin, im Web nach einer fertigen Komponente zu suchen. Solche Formel-Auswerter gibt es wie Sand am Meer. Jeder Formel-Plotter enthaelt zb. sowas.
Ach ja. 'Parsen' bedeutet: Einen Text nach bestimmten Regeln zu zerlegen und nachzusehen ob er andere Regeln fuer 'Wohlgeformtheit' erfuellt. In C waere zB for( i = 0; i < 5; ++i ) wohlgeformt. Denn die Sprache verlangt, dass ein For-Statement die Gestalt "for" "(" Init_Teil ";" Bedingungs_Teil ";" Inkrement_Teil ")" haben muss (mir gehts jetzt nur ums 'for') for( i = 0; i < 5 ) waere es nicht, da ja die Regel ausdruecklich das Vorhandensein von 2 ";" verlangt. Den Teil der solche 'Wohlgeformtheit' beschreibt, nennt man die 'Grammatik' einer Sprache. Und ein Program das in der Lage ist festzustellen ob ein Text einer Grammatik entspricht, ist ein Parser. Fuer einfache arithmetische Ausdruecke sieht eine Grammatik zb so aus: Ausdruck = Term { ( "+" Term ) | ( "-" Term ) }. Term = Faktor { ( "*" Faktor ) | ( "/" Faktor ) }. Faktor = [ "-" ] ( Zahl | Variable | ( "(" Ausdruck ")" ) ). Zahl = Ziffer { Ziffer }. Variable = Buchstabe { Buchstabe | Sonderzeichen ). Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". Buchstabe = das spar ich mir jetzt Sonderzeichen = ditto Die erste Regel sagt. zb Ein Ausdruck ist ein Term gefolgt von beliebig vielen Einheiten (auch 0 mal!) die entweder mit einem "+" anfangen und einen Term enthalten oder mit einem "-" anfangen und einen Term enthalten. [ xxx ] xxx is 0 oder 1 mal erlaubt { xxx } xxx kann beliebig oft vorkommen, auch 0 mal ( xxx yyy ) xxx und yyy bilden eine Einheit | Alternative aus mehreren Moeglichkeiten "abc" abc muss im Quelltext genau so vorkommen abc abc ist eine andere Grammatik-Regel
Hi! also, es ist nett das du mir das erklärt hast aber ich meinte eigentlich das erste, was du genannt hast.... -.-'' für mich ist das ein RIESEN problem!!!! ich versteh nicht wie ich da anfangen muss.... naja, liegt sicher daran das ich ein mädchen bin!! :) kannst du mir (oder jemand anderes) sagen, wie ein ganz normaler taschenrechner programmiert wird? ich hab echt keine ahnung.... danke schon mal... die mel
Da dir an anderer Stelle schon ausführlich erklärt wurde, wie du vorgehen kannst, beschränke ich mich auf einen kleinen Tip: F1... Wirkt bei Borland Wunder. Nennt sich Kontext-Hilfe. Setz´ den Cursor auf ein Schlüsselwort, welches du nicht verstehst, dann drück´ F1. Oder markiere unten eine Fehlermeldung und drücke F1. Und nochwas: Lies das verd..... Manual! HTH, Dirk.
@ arwen026: Ich würde Dir empfehlen bei Torry eine Komponente zu suchen wo Du nur Realzahlen eingeben kannst. Damit hast Du mal einen Teil Deiner Probleme gelöst.Und dann würde ich den Punkt '.' anstatt das Koma '.' als Begrenzer eingeben. Und ja, der Rat mit Try... exept ist auch überlegenswert. (schon wegen der Division durch null) Schöne Weinachten Ruedi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.