hilfe hausaufgabe python
Aufgeben, so lernt man es am besten.
Ich habe gerade folgendes auf meinem C64 gehackt:

@KlaliB: Wenn Du etwas programmieren willst, solltest Du von den *Grundlagen* der Programmiersprache auch alles lernen. Objektorientierung könnte man für diese Aufgabe weglassen, obwohl sich das für's modellieren eines Bankautomaten natürlich auch anbietet.
Wieso weisst Du nicht *was* Du programmieren sollst? Gibt's keine schriftliche Aufgabenstellung? Keine Vereinbarung mit dem Lehrer was den Umfang des Referats angeht?
Code: Alles auswählen
10 rem
20 rem geldautomat
30 rem -----------
40 rem
50 rem nw() - notenwerte
60 rem az() - anzahl scheine im automaten
70 rem z() - anzahl scheine fuer die ausgabe
80 rem gs - gesamtsumme im automaten
90 rem
100 rem notenwerte
110 data 500,200,100,50,20,5
120 dim nw(6):for i=1 to 6:read nw(i):next
130 dim az(6):for i=1 to 6:az(i)=1000:next
140 dim z(6)
150 rem
160 rem hauptschleife
170 rem
180 print:print:print "geldautomat":print "-----------":print
190 gs=0:for i=1 to 6:gs=gs+az(i)*nw(i):next:print "inhalt =";gs;"euro":print
200 input "auszahlbetrag";b
210 if b>gs then print "nicht genug geld vorhanden":goto 180
220 for i=1 to 6:z(i)=0:next
230 for i=1 to 6
240 n=int(b/nw(i)):if n>az(i) then n=az(i)
250 az(i)=az(i)-n:z(i)=n:b=b-n*nw(i)
260 next i
270 if b>0 then print "kann nicht passend auszahlen":goto 180
280 print "auszahlung:"
290 for i=1 to 6
300 if z(i)>0 then print " ";z(i);"x";nw(i)
310 next i:goto 180

@KlaliB: Wenn Du etwas programmieren willst, solltest Du von den *Grundlagen* der Programmiersprache auch alles lernen. Objektorientierung könnte man für diese Aufgabe weglassen, obwohl sich das für's modellieren eines Bankautomaten natürlich auch anbietet.
Wieso weisst Du nicht *was* Du programmieren sollst? Gibt's keine schriftliche Aufgabenstellung? Keine Vereinbarung mit dem Lehrer was den Umfang des Referats angeht?
BlackJack, in einem echten Basic-Programm hätte man niemals so umfangreich kommentiert und mit Leerzeichen so um sich geschmissen ;) Ein "10FORI=1TO6:PRINTI:NEXT" wäre realistischer. Leerzeichen landen IIRC beim C64 nämlich (im Gegensatz z.B. zum Schneider CPC, der das bessere Basic hatte) im Programm und müssen jedes Mal mit interpretiert werden.
Schließlich muss ich sagen, dass das Basic-Programm auf triviale Weise in ein Python-Programm konvertiert werden kann. Eine Lösung in Factor wäre hier besser gewesen ;)
Stefan
Schließlich muss ich sagen, dass das Basic-Programm auf triviale Weise in ein Python-Programm konvertiert werden kann. Eine Lösung in Factor wäre hier besser gewesen ;)
Stefan
@sma: Ich hätte auch in einem "echten" C64-BASIC-Programm so mit den Leerzeichen um mich geworfen. Ich hatte damals immer zwei Varianten von meinen Programmen -- eine zum bearbeiten und eine, bei der mit einem Programm alle überflüssigen Leerzeichen und Kommentare entfernt wurden und auch so viel wie möglich zu laaaangen Zeilen zusammengefasst wurden.
Ausserdem habe ich absichtlich (*hust*) einen Fehler eingebaut.
Ausserdem habe ich absichtlich (*hust*) einen Fehler eingebaut.

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ach, eine Whitespace-Lösung wäre optimal, insbesondere wenn der Quelltext dann auch noch auf die Handouts soll.sma hat geschrieben:Schließlich muss ich sagen, dass das Basic-Programm auf triviale Weise in ein Python-Programm konvertiert werden kann. Eine Lösung in Factor wäre hier besser gewesen
Letztendlich geht doch so ein Programm ganz einfach, lieber KlaliB, ist sogar ein Einzeiler:
Code: Alles auswählen
print 'U29ycnksIGljaCBnZWJlIGF1Zg==\n'.decode('base64')
- Zuerst wird der Speicher mit dem Unsigned Integer Wert 29 überschrieben (U29)
- Dann wird mit 'y' ein Speicherabbild angelegt.
- 'cnks' steht für Current Next Key Sequence erstellt eine Liste der Sequenzen die nun noch weiterverarbeitet werden muss.
- 'I' steht für Integer, also Ganzzahlen. Wie N in der Mathematik
- 'G' definiert Geldbeträge. Nun weiß der Computer dass es um Geldbeträge geht und er kann die nun besser berechnen.
- 'lj' ist eine recht alte Funktion, die stand ursprünglich für LaserJet, das ist sind alte Laserdrucker von HP, die ist nicht zwingend nötig, ist aber Aufgrund der Kompatibilität zu älteren Programmen dringend angeraten!
- 'CB' ist 'Change Binary', damit wechselt der Computer vom Binärmodus (du weißt schon, 01011101, wie in den ganzen Filmen) in den Dezimalmodus. Deine Geldbeträge werden automatisch konvertiert.
- 'n' sagt aus dass es 'n' Zahlen sind. Wir wollen ja eine allgemeine Lösung.
- 'ZWJ' sind die Initialen von JWZ einem recht bekannten Programmierer rückwährts geschrieben. Er hat beim Optimieren geholfen, und diese Optimierunen werden nun eben durch 'ZWJ' aktiviert.
- 'l' schaltet die Ausgabe auf 'Lang' um (englisch 'long')
- 'IGF' steht für "Identity Governance Framework" und stellt sicher dass die Ausgabe des Programms in einer für ihn verständlichen Weise ausgegeben wird.
- '1Z' ist die Anzahl von Stellen.
- 'g' ist 'go' und bedeutet dass die Eingabe abgeschlossen ist, und dass der Computer nun losrechnen soll.
- '==' bedeutet, dass die Korrektheit des Ergebnisses zweimal geprüft werden soll. Passiert ja ab und zu dass Software falsche Werte ausgibt, das kommt davon wenn man die Daten nicht mindestens doppelt nachprüfen lässt.
- '\n' bedeutet dass eine neue Zeile angefangen werden soll.
- 'print' zeigt schließlich das Ergebnis auf dem Bildschirm an.
So, und nun ist höchste Zeit zum Duschen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Daran erkennt man übrigens auch gut, dass Python von vi abstammt.Leonidas hat geschrieben: [*]Dann wird mit 'y' ein Speicherabbild angelegt.
Wasser marsch!So, und nun ist höchste Zeit zum Duschen.
@birkenfeld: Naja, Python stammt nicht direkt von vi ab, sondern wohl eher von dem Emacs-Mode, der den vi emuliert. Der heisst viper. 

BlackJack hat geschrieben:Ich habe gerade folgendes auf meinem C64 gehackt:
Code: Alles auswählen
10 rem 20 rem geldautomat 30 rem ----------- 40 rem 50 rem nw() - notenwerte 60 rem az() - anzahl scheine im automaten 70 rem z() - anzahl scheine fuer die ausgabe 80 rem gs - gesamtsumme im automaten 90 rem 100 rem notenwerte 110 data 500,200,100,50,20,5 120 dim nw(6):for i=1 to 6:read nw(i):next 130 dim az(6):for i=1 to 6:az(i)=1000:next 140 dim z(6) 150 rem 160 rem hauptschleife 170 rem 180 print:print:print "geldautomat":print "-----------":print 190 gs=0:for i=1 to 6:gs=gs+az(i)*nw(i):next:print "inhalt =";gs;"euro":print 200 input "auszahlbetrag";b 210 if b>gs then print "nicht genug geld vorhanden":goto 180 220 for i=1 to 6:z(i)=0:next 230 for i=1 to 6 240 n=int(b/nw(i)):if n>az(i) then n=az(i) 250 az(i)=az(i)-n:z(i)=n:b=b-n*nw(i) 260 next i 270 if b>0 then print "kann nicht passend auszahlen":goto 180 280 print "auszahlung:" 290 for i=1 to 6 300 if z(i)>0 then print " ";z(i);"x";nw(i) 310 next i:goto 180
@KlaliB: Wenn Du etwas programmieren willst, solltest Du von den *Grundlagen* der Programmiersprache auch alles lernen. Objektorientierung könnte man für diese Aufgabe weglassen, obwohl sich das für's modellieren eines Bankautomaten natürlich auch anbietet.
Wieso weisst Du nicht *was* Du programmieren sollst? Gibt's keine schriftliche Aufgabenstellung? Keine Vereinbarung mit dem Lehrer was den Umfang des Referats angeht?
was ist mit diesen zahlen? und was heist rem?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Aber nicht beim Commodore Basic V2.0! Hab grad selber noch mal in mein Bedieungshandbuch vom C64 geguckt und auf Seite 124 steht ganz klar, dass es für Remark stehtHerrHagen hat geschrieben:ich kenn es als remember...

Hallo BASIC-Freunde
Ich habe ein Buch vor mir, welches ich in den 80er Jahren eingekauft habe:
Titel: BASIC für Tischcomputer
Autor: K.L.Boon
Verlag: Pflaum Verlag München
Jahr: 1983
Da steht auf Seite 94:
REM ist vom englischen Wort remark abgeleitet zu Deutsch Bemerkung.
Gruss wuf
Ich habe ein Buch vor mir, welches ich in den 80er Jahren eingekauft habe:
Titel: BASIC für Tischcomputer
Autor: K.L.Boon
Verlag: Pflaum Verlag München
Jahr: 1983
Da steht auf Seite 94:
REM ist vom englischen Wort remark abgeleitet zu Deutsch Bemerkung.
Gruss wuf

Take it easy Mates!
In dem für mich in dieser Frage seit frühester Jugend maßgeblichen Dokument
http://www.worldofspectrum.org/ZXBasicM ... chap2.html
steht:
.
Gruß
http://www.worldofspectrum.org/ZXBasicM ... chap2.html
steht:
Scheint also tatsächlich beides zu gebenSinclair Research Limited hat geschrieben:REM ... stands for remark, or reminder, and is there solely to remind you of what the program does.

Gruß
In einem Text von Thomas Kurtz, in dem er über Entwurfsentscheidungen von Dartmouth BASIC schreibt, steht "remark". Dartmouth BASIC war das erste BASIC und Kurtz einer der Entwickler.