Nachricht für neue Nutzer.
Nachricht für engagierte Nutzer.

Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 1: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung
Markierung: Quelltext-Bearbeitung 2017
KKeine Bearbeitungszusammenfassung
Markierung: Quelltext-Bearbeitung 2017
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
{{Fortsetzung|
{{Fortsetzung|
vorher=zurück|
vorher=zurück|
vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_2 |
vorherlink=Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_2 |
weiter=weiter|
weiter=weiter|
weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/Know-How-Assembler|
weiterlink=Lernpfad_Know-How-Computer/Know-How-Assembler|
übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}}
übersicht=Startseite|übersichtlink=Lernpfad_Know-How-Computer}}


{{Box|Programmieraufgaben Teil 1|In den bisherigen Kapiteln hast du alles erfahren, was du zum Programmieren des Know-How-Computers wissen musst. Jetzt kannst du loslegen und deine eigenen Programme schreiben! Hier kommen ein paar Programmieraufgaben für dich. Die ersten sind „zum Warmwerden” noch ziemlich einfach, im zweiten Teil kommen aber auch einige deutlich anspruchsvollere Aufgaben.  
{{Box|Einfache Übungsaufgaben für Programmiereinsteiger|In den bisherigen Kapiteln hast du alles erfahren, was du zum Programmieren des Know-How-Computers wissen musst. Jetzt kannst du loslegen und deine eigenen Programme schreiben! Hier kommen ein paar Programmieraufgaben für dich. Die ersten sind quasi zum Warmwerden noch ziemlich einfach, im zweiten Teil kommen aber auch einige deutlich anspruchsvollere Aufgaben.  


Beim Lösen der Aufgaben kannst du auf verschiedene Arten vorgehen:
Beim Lösen der Aufgaben kannst du auf verschiedene Arten vorgehen:
* Eine Möglichkeit besteht natürlich darin, das Programm im KHC-Papiermodell zu schreiben und zu testen.
* Eine Möglichkeit besteht natürlich darin, das Programm im KHC-Papiermodell zu schreiben und zu testen.
* Du kannst deinen Programmcode auch direkt in das Hauptspeicher-Textfeld des KHC-Emulators tippen. Dabei ist es wichtig, in jeder Zeile die Reihenfolge Adresse, Doppelpunkt, KHC-Befehl einzuhalten. Die Eingabe beendest du mit dem Schalter „Neustart“ (Funktionstaste F8).  
* Du kannst deinen Programmcode auch direkt in das Hauptspeicher-Textfeld des KHC-Emulators tippen. Dabei ist es wichtig, in jeder Zeile die Reihenfolge Adresse, Doppelpunkt, KHC-Befehl einzuhalten. Die Eingabe beendest du mit dem Schalter "Neustart" (Funktionstaste F8).  
* Statt deinen Programmcode gleich direkt in das Hauptspeicher-Textfeld einzutippen, kannst du ihn auch erst in einem Texteditor schreiben und anschließend durch „Kopieren und Einfügen“ („Drag and Drop“) in das Hauptspeicher-Textfeld kopieren.  
* Statt deinen Programmcode gleich direkt in das Hauptspeicher-Textfeld einzutippen, kannst du ihn auch erst in einem Texteditor schreiben und anschließend durch "Kopieren und Einfügen" (Drag and Drop) in das Hauptspeicher-Textfeld kopieren.  
* Wenn du dein Programm in einer Textdatei speichern möchtest, geht das natürlich in der umgekehrten Richtung auch mit „Kopieren“ und „Einfügen“.  
* Wenn du dein Programm in einer Textdatei speichern möchtest, geht das natürlich in der umgekehrten Richtung ebenfalls mit Kopieren und Einfügen.  
* Die meisten Lösungen kannst du über die entsprechenden Schalter unter dem Hauptspeicher-Textfeld als Speicherkonfiguration laden. Aber vielleicht kommst du vorher ja auch selbstständig auf eine eigene Lösung?
* Die meisten Lösungen kannst du über die entsprechenden Schalter unter dem Hauptspeicher-Textfeld als Speicherkonfiguration laden. Aber vielleicht kommst du vorher ja auch selbstständig auf eine eigene Lösung?
|Lernpfad}}
|Lernpfad}}


<div style="width: 100%; overflow: hidden;">
<div style="width: 100%; overflow: hidden;">
  <div style="width: 40%; float: left;">
{{Box|1=Programm testen im KHC-Emulator
        |2={{KnowHowComputer
          |Speicherkonfiguration1=# Alles auf 0
          |Speicherkonfiguration2=# x + y = ?
1: isz 8
2: jmp 4
3: stp
4: inc 7
5: dec 8
6: jmp 1
7: 5
8: 4
          |Speicherkonfiguration3=# x - y = ?
1: isz 8
2: jmp 4
3: stp
4: dec 7
5: dec 8
6: jmp 1
7: 5
8: 3
          |Speicherkonfiguration4=# Ist x ungerade?
1: isz 12
2: jmp 4
3: stp
4: dec 12
5: isz 13
6: jmp 8
7: jmp 10
8: dec 13       
9: jmp 1
10: inc 13
11: jmp 1
12: 5
13: 0
          |Speicherkonfiguration5=# Ist x = y?
1: isz 21
2: jmp 4 
3: jmp 7
4: isz 22
5: jmp 10
6: jmp 14
7: isz 22
8: jmp 14
9: jmp 13
10: dec 21
11: dec 22
12: jmp 1 
13: inc 23
14: stp   
21: 5     
22: 3     
23: 0     
          |nohelp=true
        }}
      |3=Experimentieren
    }}
</div>
<div style="margin-left: 42%;">


{{Box
{{Box
Zeile 86: Zeile 25:
|3=Kurzinfo}}
|3=Kurzinfo}}


  <div style="width: 60%; float: left;">


{{Box
{{Box
|1=1. Aufgabe „x + y = ?
|1=1. Aufgabe "x + y = ?"
|2=Berechne die Summe zweier Zahlen x und y.
|2=Berechne die Summe zweier Zahlen x und y.
; Vor dem Programmstart steht
; Vor dem Programmstart steht
Zeile 96: Zeile 36:
|3=Üben}}
|3=Üben}}


{{Lösung versteckt|Das Beispielprogramm „Von x auf 0“ kann als Grundlage für dieses Programm verwendet werden.|Tipp 1 anzeigen|Tipp 1 verstecken}}
{{Lösung versteckt|Das Beispielprogramm "Von x auf 0" kann als Grundlage für dieses Programm verwendet werden.|Tipp 1 anzeigen|Tipp 1 verstecken}}


{{Lösung versteckt|1=Pseudocode für das Programm „x + y = ?:
{{Lösung versteckt|1=Pseudocode für das Programm "x + y = ?":
<pre>
<pre>
solange nicht y = 0 wiederhole
solange nicht y = 0 wiederhole
Zeile 109: Zeile 49:


{{Box
{{Box
|1=2. Aufgabe „x - y = ? für x >= y”
|1=2. Aufgabe "x - y = ? für x >= y"
|2=Berechne die Differenz zweier Zahlen x und y, wobei vorausgesetzt wird, dass y nicht größer als x ist, das Ergebnis also nicht negativ werden kann.
|2=Berechne die Differenz zweier Zahlen x und y, wobei vorausgesetzt wird, dass y nicht größer als x ist, das Ergebnis also nicht negativ werden kann. (Eine Subtraktionsaufgabe, bei der das Ergebnis auch negativ werden darf, findest du im Kapitel [[Lernpfad_Know-How-Computer/KHC_Programmieraufgaben_Teil_2|Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 2]] in der 6. Aufgabe.)
; Vor dem Programmstart steht  
; Vor dem Programmstart steht  
: in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und <br> in Speicherzelle 8 ein beliebiger Wert y, der aber nicht größer als x sein darf, hier z.B. der Wert 3.
: in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und <br> in Speicherzelle 8 ein beliebiger Wert y, der aber nicht größer als x sein darf, hier z.B. der Wert 3.
Zeile 117: Zeile 57:
|3=Üben}}
|3=Üben}}


{{Lösung versteckt|1=Das Programm aus der 1. Aufgabe „x + y =?kann als Grundlage für dieses Programm verwendet werden.|2=Tipp anzeigen|3=Tipp verstecken}}
{{Lösung versteckt|1=Das Programm aus der 1. Aufgabe "x + y =?" kann als Grundlage für dieses Programm verwendet werden.|2=Tipp anzeigen|3=Tipp verstecken}}




{{Box
{{Box
|1=3. Aufgabe „Ist x ungerade?
|1=3. Aufgabe "Ist x ungerade?"
|2=Entscheide, ob der Wert x in Speicherzelle 12 gerade oder ungerade ist.
|2=Entscheide, ob der Wert x in Speicherzelle 12 gerade oder ungerade ist.
; Vor dem Programmstart steht
; Vor dem Programmstart steht
Zeile 132: Zeile 72:
|2=Tipp 1 anzeigen|3=Tipp 1 verstecken}}
|2=Tipp 1 anzeigen|3=Tipp 1 verstecken}}


{{Lösung versteckt|1=Pseudocode für das Programm „Ist x ungerade?:
{{Lösung versteckt|1=Pseudocode für das Programm "Ist x ungerade?":
<pre>
<pre>
solange nicht x = 0 wiederhole
solange nicht x = 0 wiederhole
Zeile 146: Zeile 86:


{{Box
{{Box
|1=4. Aufgabe „Ist x = y ?
|1=4. Aufgabe "Ist x = y ?"
|2=Entscheide, ob die Werte x und y, die in zwei verschiedenen Speicherzellen stehen, gleich sind oder nicht.
|2=Entscheide, ob die Werte x und y, die in zwei verschiedenen Speicherzellen stehen, gleich sind oder nicht.
; Vor dem Programmstart steht  
; Vor dem Programmstart steht  
Zeile 165: Zeile 105:


{{Lösung versteckt|1=[[Datei:KHC PAP 4. Aufgabe x gleich y Arial24.png|center|500px|Programmablaufplan zur 4. Aufgabe]]  
{{Lösung versteckt|1=[[Datei:KHC PAP 4. Aufgabe x gleich y Arial24.png|center|500px|Programmablaufplan zur 4. Aufgabe]]  
|2=PAP anzeigen|3=PAP verstecken}}
{{Box|1=<i class="fa fa-universal-access fa-2x" aria-hidden="true"></i> &nbsp; Hinweis
<!--
|2=Diese Grafik gibt es im [[Lernpfad_Know-How-Computer/Anhang|Anhang]] auch als taktile Schwellpapier-Kopiervorlage mit Braillebeschriftung.
{{Lösung versteckt|1=Lösung zur 4. Aufgabe: „Ist x = y?
|3=}}
<pre>
|2=PAP anzeigen
1: isz 21 ; Ist x=0 ?
|3=PAP verstecken}}
2: jmp 4 ; nein: x>0, dann y überprüfen ab M(4)
  </div>
3: jmp 7 ;  ja:   x=0, dann y überprüfen ab M(7)
 
4: isz 22 ; Hier ist x>0. Ist zusätzlich y=0?
  <div style="margin-left: 62%;">
5: jmp 10 ; nein: dann ist x>0 und y>0, also beide verringern und Schleife wiederholen ab M(10)
{{Box|1=Programm testen im KHC-Emulator
6: jmp 14 ; ja:  dann ist x>0 und y=0, also fertig in M(14)
        |2={{KnowHowComputer
7: isz 22 ; Hier ist x=0. Ist zusätzlich y=0?
          |Speicherkonfiguration1=# Alles auf 0
8: jmp 14 ; nein: dann ist x=0 und y>0, also fertig  in M(14)
          |Speicherkonfiguration2=# x + y = ?
9: jmp 13 ; ja:  dann ist x=0 und y=0, also z=1 in M(13) und fertig in M(14)
1: isz 8
10: dec 21 ; Hier ist x>0 und y>0. Daher x und y verringern und dann Schleife wiederholen
2: jmp 4
11: dec 22 ;
3: stp
12: jmp 1  ; zurück zum Schleifenanfang in M(1)
4: inc 7
13: inc 23 ; Im Fall x=0 und y=0: z in M(23) von 0 auf 1 erhöhen und
5: dec 8
14: stp    ; fertig
6: jmp 1
21: 5      ; x
7: 5
22: 3      ; y
8: 4
23: 0      ; z
          |Speicherkonfiguration3=# x - y = ?
</pre>
1: isz 8
|2=Lösung anzeigen|3=Lösung verstecken}}
2: jmp 4
-->
3: stp
4: dec 7
5: dec 8
6: jmp 1
7: 5
8: 3
          |Speicherkonfiguration4=# Ist x ungerade?
1: isz 12
2: jmp 4
3: stp
4: dec 12
5: isz 13
6: jmp 8
7: jmp 10
8: dec 13       
9: jmp 1
10: inc 13
11: jmp 1
12: 5
13: 0
          |Speicherkonfiguration5=# Ist x = y?
1: isz 21
2: jmp 4  
3: jmp 7  
4: isz 22  
5: jmp 10  
6: jmp 14  
7: isz 22  
8: jmp 14  
9: jmp 13  
10: dec 21  
11: dec 22
12: jmp 1   
13: inc 23  
14: stp     
21: 5       
22: 3       
23: 0       
          |nohelp=true
          |Speichergroesse=23
        }}
      |3=Experimentieren
    }}
   </div>
   </div>
</div>
</div>




{{Fortsetzung|
{{Fortsetzung|
vorher=zurück|
vorher=zurück|
vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_2 |
vorherlink=Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_2 |
weiter=weiter|
weiter=weiter|
weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/Know-How-Assembler|
weiterlink=Lernpfad_Know-How-Computer/Know-How-Assembler|
übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}}
übersicht=Startseite|übersichtlink=Lernpfad_Know-How-Computer}}
 
 
[[Kategorie:Know-How-Computer]]

Aktuelle Version vom 30. Juli 2025, 19:23 Uhr

Einfache Übungsaufgaben für Programmiereinsteiger

In den bisherigen Kapiteln hast du alles erfahren, was du zum Programmieren des Know-How-Computers wissen musst. Jetzt kannst du loslegen und deine eigenen Programme schreiben! Hier kommen ein paar Programmieraufgaben für dich. Die ersten sind quasi zum Warmwerden noch ziemlich einfach, im zweiten Teil kommen aber auch einige deutlich anspruchsvollere Aufgaben.

Beim Lösen der Aufgaben kannst du auf verschiedene Arten vorgehen:

  • Eine Möglichkeit besteht natürlich darin, das Programm im KHC-Papiermodell zu schreiben und zu testen.
  • Du kannst deinen Programmcode auch direkt in das Hauptspeicher-Textfeld des KHC-Emulators tippen. Dabei ist es wichtig, in jeder Zeile die Reihenfolge Adresse, Doppelpunkt, KHC-Befehl einzuhalten. Die Eingabe beendest du mit dem Schalter "Neustart" (Funktionstaste F8).
  • Statt deinen Programmcode gleich direkt in das Hauptspeicher-Textfeld einzutippen, kannst du ihn auch erst in einem Texteditor schreiben und anschließend durch "Kopieren und Einfügen" (Drag and Drop) in das Hauptspeicher-Textfeld kopieren.
  • Wenn du dein Programm in einer Textdatei speichern möchtest, geht das natürlich in der umgekehrten Richtung ebenfalls mit Kopieren und Einfügen.
  • Die meisten Lösungen kannst du über die entsprechenden Schalter unter dem Hauptspeicher-Textfeld als Speicherkonfiguration laden. Aber vielleicht kommst du vorher ja auch selbstständig auf eine eigene Lösung?
Für alle Übungsaufgaben gilt ...
  • Alle Zellen des Hauptspeichers enthalten solange standardmäßig den Wert 0, bis etwas anderes per Tastatureingabe oder durch das Laden einer Speicherkonfiguration hineingeschrieben wird.
  • Nach dem Programmende darf der Datenwert, der dann in einer Speicherzelle steht, von dem ursprünglichen Wert abweichen, der vor der Programmausführung in der Zelle stand.
1. Aufgabe "x + y = ?"

Berechne die Summe zweier Zahlen x und y.

Vor dem Programmstart steht
in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und
in Speicherzelle 8 ein beliebiger Wert y, z.B. der Wert 4.
Nach dem Programmende steht
in Speicherzelle 7 die Summe x + y, im Beispiel also der Wert 9.
Das Beispielprogramm "Von x auf 0" kann als Grundlage für dieses Programm verwendet werden.

Pseudocode für das Programm "x + y = ?":

solange nicht y = 0 wiederhole
  erhöhe x um 1
  verringere y um 1
solange_ende


2. Aufgabe "x - y = ? für x >= y"

Berechne die Differenz zweier Zahlen x und y, wobei vorausgesetzt wird, dass y nicht größer als x ist, das Ergebnis also nicht negativ werden kann. (Eine Subtraktionsaufgabe, bei der das Ergebnis auch negativ werden darf, findest du im Kapitel Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 2 in der 6. Aufgabe.)

Vor dem Programmstart steht
in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und
in Speicherzelle 8 ein beliebiger Wert y, der aber nicht größer als x sein darf, hier z.B. der Wert 3.
Nach dem Programmende steht
in Speicherzelle 7 die Differenz x - y, im Beispiel also der Wert 2.
Das Programm aus der 1. Aufgabe "x + y =?" kann als Grundlage für dieses Programm verwendet werden.


3. Aufgabe "Ist x ungerade?"

Entscheide, ob der Wert x in Speicherzelle 12 gerade oder ungerade ist.

Vor dem Programmstart steht
in Speicherzelle 12 ein beliebiger Wert x, z.B. der Wert 3 und
in Speicherzelle 13 der Wert 0.
Nach dem Programmende steht
in Speicherzelle 13 der Wert 1, wenn der ursprüngliche Wert x eine ungerade Zahl war.
Wenn x gerade war, steht in Speicherzelle 13 weiterhin der Initialisierungswert 0.
Im Beispiel steht also am Ende in Speicherstelle 13 eine 1.
Lösungsidee: Während x schrittweise bis auf 0 heruntergezählt wird, wird der Wert in y ebenso schrittweise zwischen 0 und 1 hin- und hergeschaltet.

Pseudocode für das Programm "Ist x ungerade?":

solange nicht x = 0 wiederhole
  wenn y = 0 
    dann erhöhe y um 1
    sonst verringere y um 1
  wenn_ende
  verringere x um 1
solange_ende


4. Aufgabe "Ist x = y ?"

Entscheide, ob die Werte x und y, die in zwei verschiedenen Speicherzellen stehen, gleich sind oder nicht.

Vor dem Programmstart steht
in Speicherzelle 21 ein beliebiger Wert x, z.B. der Wert 5 und
in Speicherzelle 22 ein beliebiger Wert y, z.B. der Wert 3.
Nach dem Programmende steht
in Speicherzelle 23 der Wert 1, wenn die ursprünglichen Werte x und y gleich waren, andernfalls steht
in Speicherzelle 23 weiterhin der Initialisierungswert 0.

x und y werden beide in einer Schleife heruntergezählt, solange dies möglich ist, solange also beide größer als 0 sind. Dabei müssen vor jedem Schleifendurchgang vier Fälle unterschieden werden:

  1. x>0 und y>0: Dann x und y beide verringern und Schleife wiederholen
  2. x=0 und y=0: Dann z=1 setzen und fertig
  3. x>0 und y=0: Dann z=0 lassen und fertig
  4. x=0 und y>0: Dann z=0 lassen und fertig
Da der Befehl isz nicht den Inhalt von zwei Zellen gleichzeitig überprüfen kann, muss dies hintereinander geschehen. Hat man als erstes z.B. den Inhalt von x überprüft, so erhält man zunächst zwei Fälle: x=0 und x>0. Anschließend muss man in beiden Fällen getrennt von einander auch noch den Inhalt von y mit dem Befehl isz y zu überprüfen.
Programmablaufplan zur 4. Aufgabe
  Hinweis
Diese Grafik gibt es im Anhang auch als taktile Schwellpapier-Kopiervorlage mit Braillebeschriftung.
Programm testen im KHC-Emulator
# Alles auf 0 # x + y = ? 1: isz 8 2: jmp 4 3: stp 4: inc 7 5: dec 8 6: jmp 1 7: 5 8: 4 # x - y = ? 1: isz 8 2: jmp 4 3: stp 4: dec 7 5: dec 8 6: jmp 1 7: 5 8: 3 # Ist x ungerade? 1: isz 12 2: jmp 4 3: stp 4: dec 12 5: isz 13 6: jmp 8 7: jmp 10 8: dec 13 9: jmp 1 10: inc 13 11: jmp 1 12: 5 13: 0 # Ist x = y? 1: isz 21 2: jmp 4 3: jmp 7 4: isz 22 5: jmp 10 6: jmp 14 7: isz 22 8: jmp 14 9: jmp 13 10: dec 21 11: dec 22 12: jmp 1 13: inc 23 14: stp 21: 5 22: 3 23: 0