Taschernrechner Programmieren

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Von der Schule aus mussten wir jetzt einen (Grafik-)Taschenrechner bestellen, die meisten haben den fx-9860GII genommen (SW Punkt-Matrix-Display, 1,5 MB) ich hab den fx-cg20 Gennomen (384x192 Farbdisplay, 16 MB).
Jetzt gibt es da ein Problem: die Teile lassen sich beide Programmieren (auch ohne PC) aber die "Sprache" ist nicht gerade die Beste, hat da wer Erfahrung wie man sowas anders Programmieren kann?
Die Spiele werde ich wohl eh vergessen können, die laufen nur auf den SW-Display Rechnern, und neue gibt's auch nicht weil der Zu neu ist. :(

Mal ein Kleiner einblick wie so ein Programm aussieht:

Code: Alles auswählen

"Weiter mit F1"
Do
While 1
Getkey ->Z
If Z=79
Then
Break
EndIf
WhileEnd
locate 1,7,"Du hast F1 gedrückt"
Stop
Ausgabe:

Code: Alles auswählen

Weiter mit F1





Du hast F1 gedrückt
Wenn man damit ein Programm für Physik schreiben soll ist das sehr umständlich.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Py-Prog hat geschrieben: Jetzt gibt es da ein Problem: die Teile lassen sich beide Programmieren (auch ohne PC) aber die "Sprache" ist nicht gerade die Beste, hat da wer Erfahrung wie man sowas anders Programmieren kann?
Was heißt "sowas anders Programmieren kann"? Die Casio-Rechner haben halt diese spezielle Casio-Sprache, und das ist selbst im allerneuesten fx CX-20 noch dieselbe wie z.B. im 12 Jahre alten FX 2.0. Wenn du damit programmieren willst, musst du es eben lernen. Die zum Rechner gehörige CD-ROM enthält ein fettes PDF-Handbuch, wo auch die Programmierung umfassend mit allen Befehlen behandelt wird. Immerhin gibt es ja für den CX-20 eine Software, die es erlaubt, die Programme am PC zu schreiben und dann zu übertragen, das macht es wenigstens ein bisschen besser.

Alle weiteren Fragen würde ich hier stellen: http://www.casiofans.de/
BlackJack

@numerix: Die eingebaute Sprache muss ja nicht das einzige sein, was man benutzen kann. Insbesondere wenn man die Programme auch am PC verfasst, kann es Compiler für andere Sprachen geben, die das Taschenrechner-System als Ziel haben, oder zumindest in die darauf verwendete Hochsprache übersetzen können. Für Hewlett Packard's HP48 gibt es zum Beispiel den hp48cc-Compiler. Der übersetzt eine C-ähnliche Sprache in HPs RPN-Sprache.

@Py-Prog: So schlecht erscheint mir die Sprache gar nicht für einen Taschenrechner. Ansonsten kannst Du ja einen Compiler schreiben, der etwas Python-ähnliches in diesen BASIC-Dialekt übersetzt. :-)
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@BlackJack die Sprache ist schon schlecht, du hast nicht mein Prog für Druckrechnungen nicht gesehen, das ist wirklich schlimm. Aber das mit dem "Compiler" wollte ich sowieso mal probieren.
(Abgesehen von der Casio-Sprache ist der Taschenrechner sein Geldwert)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
BlackJack

@Py-Prog: Das Dein Programm für Druckrechnungen nicht schön ist, sagt ja noch nichts über die Sprache aus. Du schaffst es ja auch in Python nicht so schönen Code zu schreiben. :-P Und Python ist definitiv eine gute Sprache. :-)
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@BlackJack mach's besser! Wenn man da mal gute befehle hätte wäre das ja kein Problem aber wenn man verschiedenen Tasten eine "Funktion" zuweisen will, muss man das so machen:

Code: Alles auswählen

Do
While 1
Getkey->Z
If Z=79
Then
"F1 wurde Gedruckt"
EndIf

If Z=69
Then
"F2 wurde Gedruckt"
EndIf

If Z=59
Then
ClsText
EndIf
EndWhile
Stop (Sonst bekommt man einen Syntax-Error)
Dann hat man nur 26 variablen die "System weit" verfügbar sind, es gibt keine dictionarys, keine Funktionen, ... .
Am liebsten würde ich jetzt ein Paar deiner Ersten Programme heraus kramen ... :evil:
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Was regst du dich so auf? Sieh es als Chance an, deine Herangehensweise zur Problemlösung zu verändern, da sich diese Sprache stark von Python (oder auch anderen dir bekannten Sprachen) unterscheidet. Ich habe jedenfalls viel Spaß mit TI-BASIC auf meinem TI-84 Plus.
BlackJack

@Py-Prog: Was soll ich besser machen? Besseren Python-Code schreiben!? Kein Problem. :-P

Also bei der gezeigten Tastenabfrage sehe ich jetzt an der Sprache nichts allzu schlimmes. Mal abgesehen davon, dass das kein gültiges Programm ist -- zu dem ``Do`` fehlt irgendwie etwas und ``ClsText`` sollte wohl ``ClrText`` heissen. Den Syntax-Fehler bekommst Du wahrscheinlich wegen dem ``Do`` und das ``Stop`` ist da ein Hack und keine Lösung. Also könnte ich an der Stelle sogar besseren Casio-BASIC-Code schreiben. :-P

Die Einschränkung auf die 26 einbuchstabigen, globalen Variablen ist da schon härter. Funktionen kann man ja durch benannte Programme ersetzen. Insgesamt ist das aber schon erschreckend einschränkend für einen Rechner mit so viel Speicher. Ich hätte gedacht dass das Casio-BASIC auf dem Niveau von TI-BASIC wäre. Das war nämlich das letzte Taschenrechner-BASIC, mit dem ich auf einem TI-89 zu tun hatte. Den hatte ich mir damals mal ausgeliehen als er noch relativ neu war und ihn ausgiebig getestet. Hatte mich dann aber doch für einen HP48GX von Hewlett Packard entschieden. Wenn ich jetzt das Casio-BASIC mit dessen RPL-Programmiersprache vergleiche, dann ist die zwar ungewöhnlicher, aber IMHO deutlich besser.

Mit dem fx-9860 wäre man als Programmierer bei Casio-Taschenrechnern wohl besser bedient gewesen -- den kann man immerhin auch in C programmieren.

Ein paar meiner ersten Programme sind auch in BASIC geschrieben. CBM BASIC V2 auf einem C64. Der kann zwar mehr als 26 Variablen, hat dafür aber nicht einmal alle Kontrollstrukturen die das Casio-BASIC kennt. Es gibt nicht einmal ein ``ELSE`` zum ``IF``. Dein Programm würde da ungefähr so aussehen:

Code: Alles auswählen

10 GET A$:IF A$="" THEN 10
20 IF A$=CHR$(133) THEN PRINT "F1 WURDE GEDRUECKT"
30 IF A$=CHR$(137) THEN PRINT "F2 WURDE GEDRUECKT"
40 IF A$=CHR$(134) THEN PRINT CHR$(147)
50 GOTO 10
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Das Do (und somit auch Stop) nicht rein gehört, so weit bin ich jetzt auch schon.
In dem Taschenrechner Forum hab ich was gefunden was schon besser aussieht, hatte aber noch keine Zeit es auszuprobieren.
Casio könnte mal so ganz neben bei ne neue Firmware entwickeln.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
BlackJack

So ein ähnliches "Tasten → Ausgabe"-Programm in RPL für den HP48:

Code: Alles auswählen

« DO
    0 WAIT
    CASE
      DUP 11.1 == THEN "A gedrückt" MSGBOX END
      DUP 12.1 == THEN "B gedrückt" MSGBOX END
      DUP 13.1 == THEN "C gedrückt" MSGBOX END
    END
  UNTIL 91.1 == END
  DROP
»
Die Zahlencodes für die Tasten finde ich sehr praktisch: die erste Ziffer ist die Zeile auf der Tastatur, die Zweite die Spalte, und die nach dem Dezimalpunkt ist die "Shift-Ebene", also quasi welche Schift- oder Mod-Taste dazu aktiv war. Bei anderen Systemen muss man Tastaturcodes ja oft nachlesen oder auswendig lernen -- beim HP48 reicht einfach ein Blick auf die Tastatur.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@BlackJack da muss ich dir zu stimmen, bei Casio ist das Total unlogisch es gibt keine Taste 1,
F1=79, F2=69,...
Aber dafür hab ich KEYVIEW geschrieben.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Wer mal den Code für mein Druck-Programm sehen will:

Code: Alles auswählen

'ProgramMode:RUN
Lbl A
ClrText
"_#E59E_Py-Prog"
"Version 0.4"
""
"F1   Druck"
"F2   Kraft"
"F3   Flaeche"
"EXIT Beenden"

While 1
Getkey->Z
If Z=79
Then 
ClrText
"Kraft eingeben:"
?->Y
"Flaeche eingeben:"
?->Z
ClrText
"Es wirkt ein Druck"
"von"
Locate 1,3,Y/Z
Locate 1,4,"Pascal"
Locate 1,7,"MENU zuruck"
IfEnd

If Z=69
Then 
ClrText
"Druck eingeben"
?->Y
"Flaeche eingeben"
?->Z
ClrText
"Es wirkt eine Kraft"
"von"
Locate 1,3,Y*Z
Locate 1,4,"N"
Locate 1,7,"MENU zuruck"
IfEnd

If Z=59
Then 
ClrText
"Druck eingeben"
?->Y
"Kraft eingeben"
?->Z
ClrText
"Die Flaeche ist"
Locate 1,2,Z/Y
Locate 1,3,"m_#E5C2_"
Locate 1,7,"MENU zuruck"
IfEnd

If Z=48
Then 
Goto A
IfEnd

If Z=47
Then 
ClrText
"Bye Bye"
Break
IfEnd

WhileEnd
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Antworten