Navigation überspringen

Übungen zu Kontrollstrukturen

Programmablaufplan

Fragen

  1. Wieviele Start-Elemente und End-Elemente kann bzw. darf in PAP haben?
  2. Was ist der Unterschied zwischen einer Operation und einem Unterprogramm?
  3. Wie werden Farben im PAP eingesetzt?

Aufgaben

1. Passwort richtig eingeben
Erstelle einen einfachen, groben Programmablaufplan für ein Programm mit Passwortschutz.

  • Der Nutzer soll sein Passwort angeben. Ist das Passwort richtig ist dein Programm zu Ende und er kommt zu dem Programmteil, wo er eigentlich hinwollte.
  • Ist das Passwort falsch, wird nach dem ersten Fehlversuch ein Hinweis angezeigt.
  • Gibt er das Passwort erneut falsch ein, sperrt dein Programm den Zugriff und ist zu Ende.

2. Mausposition
Erstelle einen möglichst genauen Programmablaufplan für ein Programm im aktiven Modus, das je nach Mausposition etwas anderes anzeigt:

  • Wenn sich die Maus in der linken Bildschirmhälfte befindet, soll der Hintergrund schwarz sein und in der Mitte ein weißer Kreis sein
  • Wenn sich die Maus in der rechten Bildschirmhälfte befindet, soll der Hintergrund weiß sein und in der Mitte ein schwarzes Quadrat sein.

if-Anweisungen

Fragen

  1. Welcher Code ist korrekt? (Mehrere Antworten korrekt)
    • if(a != c){ }
    • if(true){ }
    • if(a <= b){ }
    • if(a % b = 0){ }
    • if(){ }
  2. Gegeben ist folgender Code. Welche(s) Zeichen muss an die Stelle ???, damit das Programm die richtige Ausgabe liefert?
    • int alter = 16;
      if (alter ??? 18) {
         println("Volljährig");
      } else {
         println("Minderjährig");
      }
  3. Welchen Datentyp muss die BEDINGUNG haben? Warum?
  4. Warum ist es wichtig die Zeilen innerhalb einen Code-Blocks einzurücken?
  5. Wie viele else-Teile kann ein if-Teil haben?

Aufgaben

1. Einfaches If
Schreibe jeweils kurze Programme (statischer Modus) für folgende Bedingungen und teste die Programme mit verschiedenen Variablenwerten:

  • Gegeben sei eine int-Variable foo. Wenn diese größer als 50 ist, soll "OK" ausgegeben werden.
  • Gegeben seien zwei int-Variablen a und b. Wenn a um mindestens 10 größer ist als b, soll "a gewinnt" ausgegeben werden.
  • Gegeben seien vier float-Variablen a, b, c, d. Wenn die Summe von a und b größer ist als die Summe von c und d, dann soll "a/b gewinnen" ausgegeben werden

2. If und Else
Schreibe jeweils kurze Programme (statischer Modus) für folgende Bedingungen und teste die Programme mit verschiedenen Variablenwerten:

  • Gegeben seien zwei int-Variablen z1 und z2. Wenn die zwei Zahlen gleich sind, soll "gleich" ausgegeben werden, sonst "ungleich".
  • Löse die obige Aufgabe, indem du im ersten If-Teil "ungleich" ausgibst und im Else-Teil "gleich". Passe dazu die Bedingung an.
  • Gegeben sei die int-Variable zahl. Wenn die Zahl gerade ist, soll "gerade" ausgegeben werden, sonst "ungerade".

3. Verschachteltes If
Gegeben seien drei int-Variablen a, b und x. Wenn x zwischen den Zahlen a und b liegt, sollst du "drin" auf der Konsole ausgeben. Geh davon aus, dass a kleiner als b ist!

Schreibe zunächst eine If-Anweisung und dann eine zweite innerhalb der ersten.

4. Klausurnoten
Du hast eine Punktzahl gegeben:

int punkte = 10;

Schreibe ein Programm, dass bei einer Punktzahl von mindestens 5 ausgibt:

Bestanden!
Auf Wiedersehen.

Bei 4 oder weniger Punkten, wird ausgegeben:

Leider durchgefallen :(
Auf Wiedersehen.

Hinweis: Verwende if-else und vermeide, dass Code-Zeilen mit der gleichen Anweisung zwei Mal auftreten.

Im nächsten Schritt erweitere dein Programm, so dass bei verschiedenen Punktständen jeweils folgendes ausgegeben wird:

0 - 4: Durchgefallen
5 - 9: Bestanden
10 - 15: Bestanden mit Auszeichnung

Teste dein Programm mit den Werten 0, 15 und 25.

5. Stehenbleiben
Ändere das folgende Programm derart, dass der Ball stehenbleibt, sobald er die Mitte erreicht.

int x = 0;

void draw() {
   background(255);
   ellipse(x, 50, 20, 20);
   x++;

   if (x > width) {
      x = 0;
   }
}

6. Wachsen
Ein mittig platzierter Kreis wird stetig größer, bis er den Rand des Fensters erreicht, dann beginnt er wieder als ein kleiner Kreis zu wachsen.

7. Mutierender Mousezeiger
Folgendes Programm erzeugt einen Mauszeiger in Form eines Kreises. Verändere das Programm derart, dass in der rechten Bildschirmhäfte der Mauszeiger zur gefüllten, schwarzen Box wird (mittig zum Mauszeiger) und in der linken wieder zum leeren Kreis.

void draw() {
   background(255);
   ellipse(mouseX, mouseY, 20, 20);
}

8. Timer
Du möchtest ein Programm schreiben, dass jede Sekunde einen Punkt auf die Konsole schreibt (verwende print statt println), d.h. nach 10 Sekunden siehst du:

..........

Schreibe zunächst ein Programm, das alle 60 "Zyklen" einen Punkt schreibt. Ein Zyklus bedeutet, dass ein Mal draw() aufgerufen wurde. Verwende eine Zählervariable:

int count = 0;

Hinweis: Je nach Rechner und aktueller Rechnerbelastung wir draw() auch seltener als 60 Mal aufgerufen. Die Systemvariable frameRate (float) gibt an, wie oft draw() aktuell pro Sekunde aufgerufen wird. Mithilfe der Funktion frameRate() kannst du eine bestimmte Framerate einstellen. Nutze dies, um 1x pro Sekunde einen Punkt zu malen.

9. Klausurnoten (if-else-if)
Löse eine ähnliche Aufgabe wie die oben mit if-else-if. Du hast eine Punktzahl gegeben:

int punkte = 10;

Schreibe den Code, so dass bei verschiedenen Punktständen ausgegeben wird, wie die Klausur ausfällt:

0 - 10: Durchgefallen
11 - 20: Naja
21 - 30: Mittelgut
31 - 40: Gut
41 - 50: Super

Teste dein Programm mit den Werten 0, 15, 25, 35, 45.

Switch

Fragen

  1. In welchen Fällen ist es sinnvoller einen Switch zu verwenden anstelle einer if-Anweisung?
  2. Welche Ausgabe liefert folgender Code?

    int zahl = 3;
    switch(zahl)
    {
       case 1:
          print("Die Zahl ist eins");
       case 2:
          print("Die Zahl ist zwei");
       case 3:
          print("Die Zahl ist drei");
       default:
          print("---");
    } 
    • Die Zahl ist drei---
    • ---
    • Die Zahl ist drei
  3. Man kann mehrere Cases in einem Switch zusammenfassen. Wahr oder falsch?
  4. Der Fall default wird ...
    • immer ausgeführt
    • ausgeührt, wenn keiner der anderen Fälle zutrifft.

Aufgaben

1. Steuerung

Schreibe ein Programm, dass die Tastatureingabe überprüft. Immer wenn eine Taste gedrückt wird, soll eine Funktion aufgerufen, die überprüft welche Taste gedrückt wurde.

Wenn eine der Pfeiltasten gedrückt wurde, soll je nach Preiltaste hoch, runter, links, rechts auf der Konsole geschrieben werden. Wenn eine andere Taste gedrückt wurde, soll "keine Pfeiltaste" angezeigt werden.

2. Spiel-Status
Gegeben ist folgender Code:

String status = "menu"; // kann start, running oder paused sein
 
void draw() {
  // Hier status überprüfen
 
}
 
void keyPressed() {
  // Hier status ändern
 
}

Schreibe ein Programm mit dem du unterschiedliche Statuse bzw. Zustände in einem Spiel simulieren kannst. Es soll die Zustände "menu", "running" und "paused" abfangen. Du musst nun kein vollständiges Spiel programmieren, simuliere die verschiedenen Zustände einfach, indem du jeweils folgende Botschaften auf dem Bildschirm anzeigst:

  • menu: "Wir befinden uns im Menü"
  • running: "Das Spiel läuft gerade"
  • paused: "Das Spiel ist pausiert"

Der Status soll mithilfe von keyPressed geändert werden. Die Taste 'm', soll in menu wechseln, die Taste 'r' soll zu running wechseln und 'p' zu paused. Nutze in beiden Fällen, also sowohl zu überprüfung, als auch zum ändern des Status jeweils einen switch.

Logische Operatoren

Fragen

  1. Inwiefern unterschieden sich logische Operatoren von arithmetischen Operatoren?
  2. Ist dieser Ausdruck ingesamt wahr oder falsch? ( false || ( false || true ))
  3. Ist dieser Ausdruck ingesamt wahr oder falsch? ( !false || ( false && true ))
  4. Welche Regeln gelten für die Auswertereihenfolge von logischen Operatoren?
  5. Welchen Datentyp hat das Ergebnis einer Operation mit logischen Operatoren?

Aufgaben

1. Enthalten

  1. Erstelle drei float-Variablen a, b und x. Gehe davon aus, dass a immer kleiner als b ist. Schreibe "x innerhalb" auf die Konsole, wenn x zwischen a und b liegt, sonst "x außerhalb". Teste dein Programm mit entsprechenden Werten.
  2. Erweitere dein obiges Programm so, dass es auch funktioniert, wenn b kleiner als a ist.

2. Human Resources
Du arbeitest in der Personalabteilung und möchtest jemanden einstellen, der/die nicht zu jung ist (min. 20 Jahre) und nicht zu alt (max. 60 Jahre). Außerdem soll die Abschlussnote stimmen (besser als 3.0). Ergänze den Code so, dass dein Programm "Einstellen!" ausgibt, wenn die obigen Bedingungen stimmen oder "Lieber nicht.", wenn nicht.

// Ändere die Werte zum Testen
int alter = 21;
float note = 1.7;

Teste dein Programm auch mit anderen Werten (alter=61, note=2.0 oder alter=33, note=3.3).

3. Human Resources 2
Du arbeitest in der Personalabteilung bei einer Softwarefirma. Du möchtest die Sichtung der Bewerbungen automatisieren. Du schaust dir die Abschlussnote (z.B. 1,7 oder 2,3) an und die Programmiererfahrung (zwischen 1 für "keine" und 5 für "hohe").

  • BewerberInnen mit der Note 1 werden direkt eingestellt. BewerberInnen mit Programmiererfahrung der Stufe 5 werden auch direkt eingestellt, sofern sie mindestens die Note 3 haben.
  • BewerberInnen mit Note 2 werden zum Gespräch eingeladen. Wenn Programmiererfahrung der Stufe 4 vorhanden ist, werden sie auch - unabhängig von der Note - eingeladen.
  • Alle anderen werden abgelehnt

Schreibe Code, der "einstellen" oder "zum Gespräch einladen" oder "ablehnen" ausgibt. Nutze die folgenden Variablen, deren Werte du natürlich mehrfach ändern musst, um die Korrektheit deines Codes zu testen.

// Ändere die Werte zum Testen
float note = 2.3;
int programmiererfahrung = 5;

4. Pulsieren
Ein Kreis mit Durchmesser 50 wird stetig größer, bis er den Rand des Fensters erreicht, dann verkleinert er sich bis Durchmesser 50 usw.

Wichtig: Achte darauf, dass der Durchmesser nicht negativ wird. Gib deine Variable für den Durchmesser zur Kontrolle auf der Konsole aus. Sie sollte nie negativ werden. Wenn du diesen Hinweis ignorierst, kann es sein, dass dein Programm nur aufgrund eines Artefakts "funktioniert", aber eigentlich falsch ist (und z.B. bei zukünftigen Versionen von Processing nicht mehr funktioniert).

5. Pulsierende Farbe
Ein schwarzer Kreis wird stetig weißer bis er ganz weiß ist, dann wieder schwärzer, bis er ganz schwarz ist usw. Auch hier ist das Schema wie in der vorigen Aufgabe: ein veränderlicher Wert (Grauwert) und eine Geschwindigkeit, die sich "umdreht".

6. Rote Zone
Verwende folgenden Basiscode und verändere ihn so, dass der Ball in der markierten Zone in der Mitte rot wird.

int x = 0;

void draw() {
   background(0);

   // Linien zum Markieren der Zone
   stroke(255);
   line(25, 0, 25, height);
   line(75, 0, 75, height);

   // hier wird animiert...
   ellipse(x, 50, 20, 20);
   x++;
   if (x > width) {
      x = 0;
   }
}

Boolesche Variablen

Fragen

  1. Welche Ausgabe erhalte ich in der Konsole, wenn ich diesen Code ausführe? Wie nennt man diese Operation?
    • boolean day = true;

      println(day);

      day = !day;

      println(day);

      day = !day;

      println(day);

      day = !day;
  2. Warum hist es hilfreich boolesche Ausdrücke in boolschen Variablen zu speichern?
  3. Statt true und false, kann man einer boolschen Variable auch die Werte 0 und 1 geben. Wahr oder falsch?

Aufgaben

1. Richtig/falsch
Gegeben sei eine boolesche Variable istKorrekt. Wenn diese wahr ist, soll "richtig" ausgegeben werden, sonst "falsch".

2. Vergeich
Gegeben seien zwei boolesche Variablen foo und bar. Gib "gleich" aus, wenn bei Variablen gleich sind, sonst "ungleich".

3. Größer/kleiner
Erstelle drei Variablen a (int), b (int) und agb (boolean). Setze a und b auf beliebige Werte. Die Variable agb soll true enthalten, wenn a größer b ist. Gib agb auf der Konsole aus. Teste dein Programm mit verschiedenen Werten für a und b.

4.Umschalten
Ergänze den folgenden Code so, dass die Variable foo erst auf false und dann auf true geschaltet wird. An beiden Stellen soll der gleiche Code stehen!

boolean foo = true;

// Dein Code

println(foo);

// Gleicher Code wie oben

println(foo);

Die Ausgabe soll sein:

false
true

Hinweis: Es gibt zwei Möglichkeiten. Entweder du verwendest ein if-else oder du überlegst dir, wie du eine boolesche Variable "umkehrst" - das funktioniert so ähnlich wie das Umkehren des Vorzeichens bei einer Zahl.

5. Kreis oder Box
Wo immer der Mauszeiger ist, wird ein weiß gefüllter Kreis gezeichnet (Durchmesser 30). Wenn du auf die Maustaste drückst, wird stattdessen ein schwarz gefülltes Quadrat gezeichnet (Kantenlänge 20). Wenn du wieder die Taste drückst, kommen wieder Kreise usw.

6. Horizontal oder vertikal
Ein Kreis fliegt von links nach rechts und erscheint wieder am linken Rand, wenn er rechts rausfliegt. Wenn man die Maustaste drückt, fliegt der Kreis nach unten und erscheint wieder oben, wenn er den unteren Rand erreicht. Beim nächsten Klick fliegt er wieder horizontal usw.

Interaktion mit Tasten

Fragen

  1. Was ist ein Callback-Funktion?
  2. Was ist der Unterschied zwischen der Funktion keyPressed() und der Variable keyPressed? Worin unterscheiden sich ihr Einsatzgebiete?
  3. Welche dieser Aussagen sind korrekt?
    • mouseClicked() ist eine Callback Funktion
    • Callback-Funktionen können wie jede andere Funktion z.B. innerhalb der draw-Funktion aufgerufen werden
    • background() ist eine Callback-Funktion
    • Callback-Funktionen können nicht im Code aufgerufen werden.
  4. Welche von Processing vorgegebene Variable ist dazu da, um spezielle "gecodede" Tasten auf der Tastatur (wie z.B. Alt, Strg, Leertaste oder die Pfeiltasten) und deren Funktion auszulesen?
  5. Welchen Datentyp hat die System-Variable keyPressed?
  6. Die Variable key enthält bei Processing stets den keyCode derjenigen Keyboard-Taste, welche in diesem Moment gedrückt wird. Wird keine Taste gedrück ist die Variable leer. Wahr oder falsch?

Aufgaben

1. Schwarzweiß
Der Hintergrund soll schwarz eingefärbt werden, wenn man eine Tastatur-Taste drückt, und weiß, wenn man eine Maustaste drückt. Verwende KEINE Zeichenbefehle (background(), ellipse()) in keyPressed() oder mousePressed().

Verwende folgenden Basiscode und achten darauf, dass das Rechteck nicht übermalt wird, wenn du den Hintergrund änderst.

void draw() {
   rectMode(CENTER);
   rect(50, 50, 40, 40);
}

Wichtig: Verwende eine Variable, die du in keyPressed bzw. keyPressed veränderst (sonst funktioniert die Folge-Aufgabe nicht).

2. Schwarzweiß 2
Ersetze im obigen Programm das Quadrat durch einen Kreis, der komplementär zum Hintergrund schwarz oder weiß ist.
Verwende KEINE Zeichenbefehle (background(), ellipse()) in keyPressed() oder mousePressed().

3. Pfeiltasten-Steuerung
Schreibe ein Programm, in dem du mit den Pfeiltasten einen Kreis steuern kannst.

  • Der Kreis soll in der Mitte des Bildschirm starten
  • Wenn eine der Pfeiltasten gedrückt wurde, soll sich der Kreis 10 Pixel in die Richtung der gedrückten Taste bewegen.
  • Der Kreis soll sich nicht kontinuiertlich bewegen, sondern bei Tastendruck nur einen Schritt (10 Pixel) gehen.

Tip: Bevor du den Kreis in dein Programm einbindest, schreibe zunächst die Abfrage für die Tasten und lass dir in der Konsole die Richtung (links, rechts, oben, unten) ausgeben. Wenn das klappt, ist es an der Zeit den Kreis miteinzubinden.

Kollisionserkennung

Aufgaben

1. Farb-Buttons
Erstelle drei weiße Buttons mit den Beschriftungen "Rot", "Grün" und "Blau".

  • Solange der Mauszeiger über einem der Buttons schwebt, soll der entsprechende Button hellgrau sein.
  • Wenn der User auf einen der Buttons klickt, soll der Hintergrund die entsprechende Farbe annehmen.
  • Wenn der User außerhalb der Buttons auf den Hintergrund klickt, wird dieser wieder grau.

2. rectMode(CENTER)
Passe den Code für die Farb-Buttons so an, dass du rectMode(CENTER) verwendest. Was musst du an der Kollisionsabfrage verändern, damit dein Code wieder richtig funktioniert?

3. Überlappende Buttons
Du hast zwei Quadrate mit Seitenlänge 50px. Färbe den "Mauszeiger" (Kreis) farbig ein, sobald er innerhalb der Bereiche ist. Konkret: rot im ersten Quadrat, grün im zweiten Quadrat und blau in der Schnittmenge.

Verwende den Basiscode und versuche, den Code so zu schreiben, dass das Programm auch funktioniert, wenn man die Werte von x1, y1, x2, y2 ändert.

int x1 = 30;
int y1 = 10;
int x2 = 10;
int y2 = 40;

void draw() {
   background(255);
   noFill();
   rect(x1, y1, 50, 50);
   rect(x2, y2, 50, 50);

   ellipse(mouseX, mouseY, 20, 20);
}

4. Kollision Punkt-Linie
Gegeben sind ein Punkt a und eine Linie b. Die Linie kannst du mit den Pfeiltasten bewegen. Ergänze den Basiscode unten so, dass immer sich die Linie unterhalt des Punkts (also nicht links oder rechts davon) befindet, die Linie rot gefärbt erscheint. Hier ist der Basiscode. Fokussiere dich ganz bewusst auf die x-Werte.

float ax = 50; // x-Position von Punkt a

float bx = 5; // x-Position des Startpunkts der Linie b
float bwidth = 30; // Breite der Linie b

void draw() {
   background(0);
   strokeWeight(5);

   stroke(0,255,0);
   point(ax, 50);

   stroke(255);

   // HIER DEINCODE

   line(bx, 60, bx+bwidth, 60);

   if (keyPressed) {
      if (keyCode == LEFT) {
         bx -= 2;
      } else if (keyCode == RIGHT) {
         bx += 2;
      }
   }
}

5. Kollision Linie-Linie
Wir erweitern das Szenario aus der letzten Aufgabe so, dass a jetzt auch eine Linie ist. Wie musst du den Code erweitern, damit die untere Linie b immer dann rot wird, während sich die beiden Linien überschneiden? Und wieder Basiscode:

float ax = 60; // x-Position des Startpunkts der Linie a
float awidth = 30; // Breite der Linie a

float bx = 5; // x-Position des Startpunkts der Linie b
float bwidth = 40; // Breite der Linie b

void setup() {
   size(150, 100);
}

void draw() {
   background(0);
   strokeWeight(4);

   stroke(0,255,0);
   line(ax, 50, ax+awidth, 50);

   stroke(255);

   // HIER DEIN CODE

   line(bx, 60, bx+bwidth, 60);

   if (keyPressed) {
      if (keyCode == LEFT) {
         bx -= 2;
      } else if (keyCode == RIGHT) {
         bx += 2;
      }
   }
}

While-Schleifen

Fragen

  1. Wozu benötigt einen Schleife eine Schleifenbedingung?
  2. Warum ist die Schleifenaktion wichtig? Was passiert, wenn es keine Schleifenaktion gibt?
  3. Was bedeutet kopfgesteuert und fußgesteuert in Bezug auf Schleifen?
  4. Ist dieser Code korrekt? Ist er sinnvoll? Begründe.int zaehler = 0;
    • while(true) {
         println("Hi");
         zaehler++;
      }

Aufgaben

1. 2er-Schritte
Schreibe eine While-Schleife, die eine Variable zaehler in 2er-Schritten von 0 bis 10 hochzählt. In jeder Runde gibst du den Wert auf der Konsole aus.

2. 2er-Schritte rückwärts
Schreibe eine While-Schleife, die eine Variable zaehler in 2er-Schritten von 10 bis 0 runterzählt. In jeder Runde gibst du den Wert auf der Konsole aus.

3. Hash-Zeichen
Schreibe eine While-Schleife, die eine vorgegebene Anzahl von #-Zeichen (engl. hash) auf der Konsole ausgibt. Die Anzahl wird durch eine Variable festgelegen.

int anzahl = 3;

// jetzt dein Code...

In dem Code oben sollen also 3 Hashes ausgegeben werden. Wenn man die Variable anzahl auf 7 setzt, sollen 7 Hashes ausgegeben werden.

Hinweis: Veränder die Variable anzahl nicht. Führe stattdessen eine zweite Variable i ein, um deine While-Schleife zu steuern.

Auf der Konsole sollte nach Start dies stehen:

###

4. Viele Quadrate
Zeichne drei Quadrate nebeneinander. Das erste liegt bei (10, 40) und ist 20x20 Pixel groß. Das nächste liegt mit 10 Pixeln Abstand rechts daneben, das dritte wieder 10 Pixel rechts davon. Verwende eine While-Schleife, so dass du mit einer kleinen Änderung auch 5 oder 2 Quadrate zeichnen kannst.

5. Teiler
Schreibe alle Zahlen im Bereich {1, ..., 49} auf die Konsole, die durch 7 teilbar sind, und alle, die durch 13 teilbar sind.
Verwende eine While-Schleife.

For-Schleifen

Fragen

  1. Was ist der Unterschied zwsichen eine For-Schleife und einer While-Schleife?
  2. Gibt es Dinge, die man mit einer For-Schleife machen kann, die eine While-Schleife nicht kann? Falls ja, welche?
  3. Ist eine For-Schleife kopfgesteuert oder fußgesteuert?
  4. Kann es bei einer For-Schleife zu einer endlos Schleife kommen? (Eine Schleife, deren Abbruchkriterium nie eintritt)

Aufgaben

1. 2er-Schritte
Schreibe eine For-Schleife, die eine Variable zaehler in 2er-Schritten von 0 bis 10 hochzählt. In jeder Runde gibst du den Wert auf der Konsole aus.

2. 2er-Schritte rückwärts
Schreibe eine For-Schleife, die eine Variable zaehler in 2er-Schritten von 10 bis 0 runterzählt. In jeder Runde gibst du den Wert auf der Konsole aus.

3. Hash-Zeichen
Schreibe eine For-Schleife, die eine vorgegebene Anzahl von #-Zeichen (engl. hash) auf der Konsole ausgibt.

int anzahl = 3;

// jetzt deinen Code..

Auf der Konsole sollte nach Start dies stehen:

###

4. ASCII-Art 1
Schreibe eine For-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt, dabei sollen # (Hash) und . (Punkt) im Wechsel gedruckt werden.

int anzahl = 5;

// jetzt deinen Code..

Verwende also eine separate Laufvariable, die du mit anzahl vergleichst. Auf der Konsole sollte nach Start dies stehen:

#.#.#

Bei anzahl = 8 entsprechend:

#.#.#.#.

5. Summe
Gegeben den folgenden Code...

int n = 4;

... berechne die Summe aus 1 + 2 + ... + n. Im Beispiel wäre das 1 + 2 + 3 + 4, also 10. Gib das Ergebnis in der Konsole aus. Teste dein Programm auch mit anderen Werten, z.B. mit 2 und 5.

6. Fakultät
Gegeben den folgenden Code...

int n = 3;

... berechne die Fakultät von n, also das Ergebniss der Multiplikation von 1 * 2 * ... * n. Im Beispiel wäre das 6. Gib das Ergebnis in der Konsole aus. Teste dein Programm auch z.B. mit 5 und 10.

Hinweis: Du kannst in Google mit 5! oder 10! das Ergebniss berechnen lassen.

7. Reihen
Schreibe eine For-Schleife, die auf der Konsole folgendes ausgibt:

0 0
1 2
2 4
3 6
4 8

Probiere auch folgende Ausgabe zu produzieren:

0 4
1 3
2 2
3 1
4 0

8. Fibonacci-Zahlen
Verwende eine For-Schleife, um die ersten 10 Fibonacci-Zahlen zu erzeugen. Die Fibonacci-Zahlen beginnen mit 1 und 1. Jede weitere Zahl ist die Summe der beiden vorangegangenen Zahlen. Auf deiner Konsole sollte erscheinen:

1 1 2 3 5 8 13 21 34 55

Schleifen im aktiven Modus

Fragen

  1. Wozu kann man Schleifen im aktiven Modus verwenden und wozu nicht?
  2. Wenn du eine Schleife im aktiven Modus verwendest, hast du "eigentlich" eine verschachtelte Schleife - warum?

Aufgaben

1. Kringel-Cursor 2. Linie zum Mauszeiger 3. Gitter-Cursor

Zeichne an der Stelle des Mauszeigers drei konzentrische Kreise um den Mauspunkt, die die Durchmesser 30, 40, 50 haben. Schreibe den Code so, dass du auch 5 oder 2 Kreise (oder mehr oder weniger) zeichnen kannst ...

Male (im aktiven Modus) eine Reihe von Punkten mit folgenden Eigenschaften:

  • Die Punkte gehen von links nach rechts auf der y-Mitte
  • Zwischen zwei Punkten sind 2 Pixel "leer" (Abstand)
  • Die Punkte gehen immer bis zur aktuellen x-Mausposition

An der Stelle des Mauszeigers soll ein quadratisches Gitter erscheinen. Die Anzahl der Zellen in eine Richtung soll durch eine globale Variable "num" geregelt werden können.(Beispiel für num = 5)

Hinweis: Eine einfachere Variante zeichnet das Gitter immer mit dem linken oberen Punkt an der Stelle des Mauszeigers.

Kreise Punkte Gitter

4. Animierte Streifen
Zeichne parallele, horizontale Streifen (y-Abstand 10 Pixel), die sich nach unten bewegen.

5. Kreise
Zeichne eine variable Anzahl von konzentrischen Kreisen (Abstand zwischen den Kreisen sind 10 Pixel) deren Mittelpunkt in der Mitte des Fensters liegt. Schreibe das Programm so, dass ein Klick mit der linken Maustaste einen weiteren Kreis hinzufügt. Ein Klick mit der rechten Maustaste entfernt einen Kreis. Es sollten immer mindestens drei Kreise da sein.

Verschachtelte Schleifen

Aufgaben

1. Kleines Einmaleins
Schreibe das kleine Einmaleins auf die Konsole. Das soll ungefähr so aussehen:

Die 1er-Reihe:
1 x 1 ist 1
1 x 2 ist 2
1 x 3 ist 3
// (und so weiter bis 10...)
1 x 10 ist 10
Die 2er-Reihe:
2 x 1 ist 2
2 x 2 ist 4
2 x 3 ist 6
2 x 4 ist 8
2 x 5 ist 10

// (und so weiter...)

2. ASCII-Art
Verwenden zwei For-Schleifen, um folgendes Muster in der Konsole zu produzieren. Das Programm sollte so flexibel sein, dass auch Quadrate mit mehr als vier Zeilen/Spalten erzeugt werden können.

Muster #1
Muster #2 Muster #3 Muster #4
#####
#####
#####
#####

#...
.#..
..#.
...#

####
.###
..##
...#


...#
..##
.###
####

3. Muster

Zeichne folgende Muster (unter Verwendung zweier verschachtelter Schleifen):

3a. Gitter mit Kopfspalte 3b. Schachbrett 3c. Radial
Gitter 1 Schach 1 Kreis 1

Vielleicht hilft es, zunächst dieses Muster zu zeichnen, und später die Rechtecke hinzuzufügen.

Gitter 2

Als Zwischenschritt zeichne zunächst das Brett ohne Einfärbung.

Schach 2

Als Zwischenschritt kannst du zunächst das Muster am Ursprung zeichnen und dann "verschieben":

Kreis 2



Made with eXeLearning (New Window)