hilfe hausaufgabe python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
OverNord
User
Beiträge: 72
Registriert: Donnerstag 24. Januar 2008, 11:59
Kontaktdaten:

Aufgeben, so lernt man es am besten.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

KlaliB hat geschrieben:ich sags einem freund au smeinem kurs einfach das ers machen soll
Geniale Idee. Hättest du gleich so machen sollen ...
BlackJack

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?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
BlackJack

@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. ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 ;)
Ach, eine Whitespace-Lösung wäre optimal, insbesondere wenn der Quelltext dann auch noch auf die Handouts soll.

Letztendlich geht doch so ein Programm ganz einfach, lieber KlaliB, ist sogar ein Einzeiler:

Code: Alles auswählen

print 'U29ycnksIGljaCBnZWJlIGF1Zg==\n'.decode('base64')
Da programmieren ja immens schwer ist erkläre ich dir mal was das Programm tut:
  • 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.
Falls du den Quelltext nicht auf Anhieb verstehst ist das ok, aber die Ergebnisse sind auf jeden Fall richtig, da doppelt geprüft!!!

So, und nun ist höchste Zeit zum Duschen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Leonidas hat geschrieben: [*]Dann wird mit 'y' ein Speicherabbild angelegt.
Daran erkennt man übrigens auch gut, dass Python von vi abstammt.
So, und nun ist höchste Zeit zum Duschen.
Wasser marsch!
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

@birkenfeld: Naja, Python stammt nicht direkt von vi ab, sondern wohl eher von dem Emacs-Mode, der den vi emuliert. Der heisst viper. ;-)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Oh, nein. BlackJack ein Ketzer :? Welch schrecklicher Tag.
KlaliB
User
Beiträge: 50
Registriert: Mittwoch 13. Mai 2009, 13:28

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?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Die Zahlen geben die Zeile an, wobei man 10er Schritte nutzt um später einfacher Zeilen dazwischen packen zu können.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

... und "rem" steht für "remark".
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

ich kenn es als remember...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

HerrHagen hat geschrieben:ich kenn es als remember...
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 steht :-)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

@Hyperion: Nix da, das Handbuch zu meinem KC87 sagt REMember. :wink:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

HerrHagen hat geschrieben:@Hyperion: Nix da, das Handbuch zu meinem KC87 sagt REMember. :wink:
Das war dann aber kein Basic wie oben erwähnt ;-)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Klar war es das. Mal abgesehen davon, dass alle Befehle groß geschrieben waren, ist alles dabei was in den Beispiel enthalten ist. :wink:
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Take it easy Mates!
problembär

In dem für mich in dieser Frage seit frühester Jugend maßgeblichen Dokument

http://www.worldofspectrum.org/ZXBasicM ... chap2.html

steht:
Sinclair Research Limited hat geschrieben:REM ... stands for remark, or reminder, and is there solely to remind you of what the program does.
Scheint also tatsächlich beides zu geben :wink:.

Gruß
BlackJack

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.
Antworten