Forum: Mikrocontroller und Digitale Elektronik Art Taschenrechner programmieren


von Mr D. (mrd)


Lesenswert?

Hallo,

ein Kumpel programmiert gerade eine Art Taschenrechner in C. Dies macht 
er mit Schleifen. Diese läuft solange, bis eine Taste gedrückt wurde.

Aus anderen Sprachen kenne ich das, dass erst nach Eingabe (hier z.B. 
ein Tastendruck) etwas ausgeführt wird. Ist das grundsätzlich bei C 
möglich?

else if Schleifen finde ich fürn sein Projekt unschön.

Für Hilfe schon mal im Vorraus Danke!

von Sean G. (atmega318)


Lesenswert?

while(!getkey()); ?
Braucht natürlich eine Funktion
getkey, welche 0 zurückgibt wenn nichts gedrückt ist...

von CC (Gast)


Lesenswert?

Unter Linux/Unix könnte man select() versuchen. Oder Interrupts auf 
GPIOs. Bei nem AVR o.ä. auch mit Interrupts. Leider sagst du nicht, was 
er nutzt, weshalb man Dir einfach nicht helfen kann.

von Beobachter #42 (Gast)


Lesenswert?

else if Schleifen

http://www.if-schleife.de/

#42

von Walter T. (nicolas)


Lesenswert?

Mr Dee schrieb:
> Aus anderen Sprachen kenne ich das, dass erst nach Eingabe (hier z.B.
> ein Tastendruck) etwas ausgeführt wird. Ist das grundsätzlich bei C
> möglich?

Callbacks sind normalerweise keine Eigenschaft der Sprache, sondern der 
Umgebung. Und zu der hast Du noch nichts geschrieben.

von Amateur (Gast)


Lesenswert?

Es gibt natürlich hunderte von Möglichkeiten so etwas anzugehen. Die 
grundsätzliche Problematik hierbei ist die etwas höhere Komplexität der 
Auswertung. Die Gurus werden wohl sagen: Was soll das denn, es gibt doch 
fertige Parser?
Dazu ein einfaches Beispiel:

1 + 1 = "Ich weiß, nicht übermäßig Kompliziert".

Das obige Beispiel sollte aber auch, unter vielem Anderen, umfassen:
a) 1 =
b) 1 + 1 + 1 (...) =
c) Natürlich dürfen auch die anderen, implementierten Rechenbefehle 
kommen.

Es muss das ganze Programm zur Erfassung einer Zahl (Vorzeichen, Komma 
bzw. Punkt, Exponent [+/-]) abgespult werden. Sogar das Ende einer Zahl 
zu erkennen kann Probleme erzeugen.

Dann kommt noch die Befehlserkennung (+, -, *, /, usw.) hinzu.

Ein bisschen Überprüfung kann auch nicht schaden.

Also aus den wenigen, nur angedeuteten Problemen kannst Du ersehen, dass 
die eine oder andere Abfrage nicht schaden kann. Ob Du dazu einen Käse 
oder ein if benutzt, ist eigentlich nebensächlich.

von c-hater (Gast)


Lesenswert?

Mr Dee schrieb:

> ein Kumpel programmiert gerade eine Art Taschenrechner in C. Dies macht
> er mit Schleifen. Diese läuft solange, bis eine Taste gedrückt wurde.
>
> Aus anderen Sprachen kenne ich das, dass erst nach Eingabe (hier z.B.
> ein Tastendruck) etwas ausgeführt wird.

Du meinst "ereignisorientierte Programmierung".

> Ist das grundsätzlich bei C
> möglich?

Das ist völlig sprachunabhängig. Deine Fehleinschätzung rührt daher, das 
die Hauptscheife (weil sie ohnehin im Wesentlichen immer gleich 
aussieht), bei den IDEs moderner objektorientierter Programmiersprachen 
oft vor dem Programmierer verborgen wird. Sie ist aber immer vorhanden, 
du kriegst sie bloß i.d.R. nicht zu sehen, weil sie irgendwo in den 
Untiefen irgendeiner Komponente liegt. Bei Wixdos z.B. sieht sie 
(vereinfacht) und in C typisch so aus:

while GetMessage(...)
{
   TranslateMessage(...)
   PerformMessage(...)
};

In anderen Spachen ist die Syntax anders, aufgerufen werden aber auch 
immer nur diese drei Funktionen aus der user32.dll.

Dabei verbigt sich hinter den beiden Funktionsaufrufen im Schleifenkern 
nichts anderes als der Aufruf unzähliger Callback-Funktionen, u.a. auch 
die Ereignishandler, die du bei dem geschrieben hast, was du für 
"Programmieren" hältst.

> else if Schleifen finde ich fürn sein Projekt unschön.

"else if Schleifen" gibt es nicht. Du hast absolut keine Ahnung, davon 
aber eine ganze Menge...

von Dr. Ecksack (Gast)


Lesenswert?

LOL, if/else findest du "unschön". Junge, das wird noch schlimmer, ein 
Parser geht kaum ohne goto.

von Quack (Gast)


Lesenswert?

Dr. Ecksack schrieb:
> LOL, if/else findest du "unschön". Junge, das wird noch schlimmer,
> ein Parser geht kaum ohne goto.

Ich habe schon zig Parser geschrieben und keiner brauchte ein goto. 
Nicht mal aus kosmetischen Gruenden.

von Simpel (Gast)


Lesenswert?

Hab ich mal in VB.net gemacht, samt kopmlexer Arithmetik mit grafischer 
Anzeige im Winkelformat. Aber leider bei einer Virus-Desinfektion 
weggehauen, ohne Backup. War mir dann zu aufwendig, das alles nochmal 
zusammenzufrickeln.

Hatte jeden Tastendruck auf zwei (oder mehr?) Case-Verzweigung geleitet 
und dann per Tag verzweigt. Die eine hat numerische Ausdrücke, die 
andere Rechenbefehle und Symbole (Klammern, etc.) gehandled. Die 
(beliebig vielen) Klammerebenen in Verbindung mit den normalen 
Hierarchien der Rechenoperationen, hatten die meisten Ooops-Erlebnisse 
produziert. ;-)

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
Noch kein Account? Hier anmelden.