Folgende Frage: Ich habe einen ATxMega128a3-Board mit 3,2" Touch-Grafikdisplay von [[http://www.ribu.at/]]. Über das LCD habe ich einen Zehnertastaur mit den Zusatztasten delete und ok gezeichnet. Einen einzelnen Tastendruck auslesen ist kein Problem, aber wie kann ich aus einzelnen Ziffern eine Zahl formen? (analog bei der Eingabe eines Taschenrechners) Mit dem Befehl GETATKBD()war ich erfolglos, da die Abfrage des Touch Screen über die serielle Schnittstelle mit dem Hilfsprogramm Grafikroutinen für PICASO-SGC vom Ribu gemacht wird. Ausgelesen wird der Touch Screen so: (Beispiel für zwei Tasten) Do Call Ilcd_get_touch() Rem Touchpanel abfrage X_Touch = X-Wert, Y_Touch = Y-Wert If X_touch > 1 And X_touch < 77 Then If Y_touch > 100 And Y_touch < 130 Then Rap_sol = 1 End If End If If X_touch > 83 And X_touch < 157 Then If Y_touch > 100 And Y_touch < 130 Then Rap_sol = 2 End If End If Loop
Stefan schrieb: > und ok gezeichnet. Einen einzelnen Tastendruck auslesen ist kein > Problem, aber wie kann ich aus einzelnen Ziffern eine Zahl formen? > (analog bei der Eingabe eines Taschenrechners) Du hast die Zahl 8. Und an die willst du eine 3 drannhängen, um daraus 83 zu formen.
1 | Neue Zahl = Alte Zahl * 10 + nächste Ziffer |
2 | |
3 | 8 * 10 -> 80 |
4 | 80 + 3 -> 83 |
und an diese 83 kommt jetzt noch die 5 hinten drann
1 | 83 * 10 -> 830 |
2 | 830 + 5 -> 835 |
Ja, manchmal muss man doch tatsächlich ein bischen rechnen. Ist aber nicht so schwer, wenn man erkannt hat, dass eine Multiplikation mit 10 typografisch einer 'Verschiebung' um 1 Stelle nach links entspricht.
Ist denn die Länge der Zahl bekannt? Wenn jeden Tastendruck in ein Array abspeichern mit sagen wir einem '!' als Stopzeichen. Bevor Tasten ausgelesen werden muss das gesamte Array mit '!' beschrieben werden. Jetzt landen 3 Zahlen in dem Array. Nun guckste wie Lang dein Array ist, also alle Indexe zählen bis '!'. Dies ergibt 3. Damit fütterst du eine forschleife die von 2 nach 0 zählt (also die Indexe des Arrays abklappert). als variablen ahste deine zahlvariable und eine multiplikatorvariable ich kanns jetz nur in C schreiben
1 | zahlvariable = 0; |
2 | multiplikator = 1; |
3 | for (int i = arraylength(zahlarray)-1; i >=0; i--){ |
4 | |
5 | zahlvariable = zahlvariable + zahlarray[i]*multiplikator; |
6 | multiplikator = multiplikator*10; |
7 | |
8 | }
|
das geht das Array durch und Addiert alle zahlen mit dem richtigen Dezimalmultiplikator auf.
Danke Karl! Habe das letzte mal in meiner Schulzeit (>30 Jahre) kleine Programme geschrieben.
Hallo Martin! Nein. Sie soll die Eingabe für einen Abschaltewert des Zählers sein. Sie kann im zweistelligen Bereich sein aber auch fünfstellig. Je nach dem, wieviele Rapporte (Fabwechsel) die Maschine häckelt. ich denke, fürs Array fehlts noch an meinem Wissen. Da kann ich Karls Methode leichter umsetzen.
Martin Wende schrieb: > Ist denn die Länge der Zahl bekannt? Machs nicht so kompliziert. Man kann die Zahl zusammensetzen, während der Benutzer die Tasten drückt. Bei ganzen Zahlen ist das überhaupt kein Problem, lediglich auf Overflows muss man aufpassen. Mit jedem Tastendruck multipliziert man das bisherige mit 10 und addiert die Ziffer dieses Tastendrucks dazu. Pseudocode
1 | ... |
2 | |
3 | number = 0 |
4 | |
5 | do |
6 | { |
7 | if( User Pressed a Key ) |
8 | { |
9 | key = next Key pressed |
10 | |
11 | if( key is numeric ) |
12 | { |
13 | digit = numeric value of key |
14 | number = 10 * number + digit |
15 | } |
16 | |
17 | else if( key is 'Delete' ) |
18 | number = number / 10 |
19 | |
20 | else if( key is 'Clear' ) |
21 | number = 0 |
22 | |
23 | show number on display |
24 | } |
25 | } while( User did not Press Enter ) |
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.