/* autogenerated by Processing revision 1293 on 2023-09-26 */ import processing.core.*; import processing.data.*; import processing.event.*; import processing.opengl.*; import java.util.HashMap; import java.util.ArrayList; import java.io.File; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; public class If_Clauses extends PApplet { // Aufgaben /* 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"); } Die Zeichen ">=" müssen an die Stelle 3. Welchen Datentyp muss die BEDINGUNG haben? Warum? Die Bedingung muss vom Datentyp "Boolean" sein. 4. Warum ist es wichtig die Zeilen innerhalb einen Code-Blocks einzurücken? Übersichtlichkeit... 5. Wie viele else-Teile kann ein if-Teil haben? Einen. */ // Einfache if Anweisungen // Gegeben sei eine int-Variable foo. Wenn diese größer als 50 ist, soll "OK" ausgegeben werden. /* int foo = 75; if(foo > 50) { println("okay\n"); } */ // Gegeben seien zwei int-Variablen a und b. Wenn a um mindestens 10 größer ist als b, soll "a gewinnt" ausgegeben werden. int a = 50; int b = 40; /* // Die Differenz wird mit a-b berechnet. Dann wird geguckt ob diese größer als 10 ist if((a-b) > 10) { println("a gewinnt\n"); } */ // 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 /* float a = 25; float b = 30; float c = 5; float d = 10; if((a+b) > (b+c)) { println("a/b gewinnen\n"); } */ // Gegeben seien drei int-Variablen x, y, z. Wenn die Summe von x und y genau doppelt so groß ist wie z ist, soll "passt" ausgegeben werden. /* int x = 10; int y = 6; int z = 8; // Um zu gucken die Summe von x+y doppelt so groß ist, multipliziert man z mit zwei und guckt das Ergebnis gleich groß mit x+y ist. if((x+y) == (z * 2)) { println("passt\n"); } */ // If else // Gegeben seien zwei int-Variablen z1 und z2. Wenn die zwei Zahlen gleich sind, soll "gleich" ausgegeben werden, sonst "ungleich". /* int z1 = 5; int z2 = 5; // Wenn z1 gleich z2 ist if(z1 == z2) { println("gleich"); } //Wenn irgendein anderer Fal eintritt else { println("ungleich"); } */ // Löse die obige Aufgabe, indem du im ersten If-Teil "ungleich" ausgibst und im Else-Teil "gleich". Passe dazu die Bedingung an. /* int z1 = 5; int z2 = 5; if(z1 != z2) { println("ungleich"); } else { println("gleich"); } */ // Gegeben sei die int-Variable zahl. Wenn die Zahl gerade ist, soll "gerade" ausgegeben werden, sonst "ungerade". /* int zahl = 4; // Der Modulo ist Quasi Restrechnung. Besteht kein Rest, wenn die Zahl durch 2 geteilt wird, ist die Zahl gerade. // Falls es einen Rest gibt, ist die Zahl ungerade if(zahl%2==0) { println("gerade"); } else { println("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! /* int a = 5; int b = 10; int x = 8; Wenn x größer als und kleiner als b ist, befindet sich x in der Range if(x > a ) { if(x < b) { println("drin"); } } */ //4. Klausurnoten /* int punkte = 10; // Erziehlt der Teilnehmer 10 Punkte oder mehr hat dieser mit Auszeichnung bestanden if(punkte >= 10) { println("Bestanden mit Auszeichnung"); } // Erziehlt der Teilnehmer 5 Punkte oder mehr als hat dieser bestanden else if(punkte >= 5){ println("Bestanden! \nAuf Wiedersehen. \n "); } // In jedem anderen Fall hat der Teilnehmer nicht bestanden else { println("Leider durchgefallen :( \nAuf Wiedersehen.\n"); } */ /* 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); // width/2 ist der Mittelpunkt. Solange x also kleiner als der Mittelpunkt ist wird x incremented if (x < width/2) { x++; } } */ // 6. Wachsen // Der Ball fliegt wiederholt von links nach rechts. Bei jedem Durchlauf soll der Ball etwas größer sein. /* int x; int counter; int wh = 5; void draw() { background(255); ellipse(x, height/2, wh, wh); // Wenn größer gleich width ist, wird x zurückgesetzt und wh (Größe) mit 1.5 multipliziert. // Die verwendung von >= wird verwendet um Bugs verzubeugen, falls der einzige Tick, in welchem die Condition true ist, nicht registriert if(x>=width) { x=0; wh*= 1.5; } x++; } */ // 7. Wachsen 2 // 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. /* int wh = 1 ; void draw() { background(255); ellipse(width/2, height/2, wh, wh); // Wenn die Größe der Elipse größer als die Breite ist, dann wird die Größe zurückgesetzt // Für >= gilt die gleiche Begründung wie in der vorherigen Aufgabe if(wh >= width) { wh = 1; } // Increment wh +1 für jeden Tick. wh++; } */ // 8. 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. /* int size = 20; void draw() { background(255); // Ist die Mausposition größer als die Hälfte der Breite (Mittelpunkt), dann wird ein rectangle gezeichnet if(mouseX > width/2) { fill(0, 0, 0, 255); rect(mouseX-size/2, mouseY-size/2, size, size); } // Sonst wird ein Kreis gezeichnet else { fill(0, 0, 0, 0); ellipse(mouseX, mouseY, size, size); } } */ /* 9. 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: */ /* int count = 0; int frameRate = 60; // Framerate in der main() (setup) Methode setzen void setup() { frameRate(60); } void draw() { // Pro Tick wird der counter incremented count++; // Wenn der Rest (Modulo) von count/frameRate = 0 ist, dann wird ein Punkt mithilfe der Print() funktion ausgegeben. // Da kein Breakcharacter (\n) verwendet wird (Oder die println() Funktion) wird der dot in der gleichen Line ausgegeben if(count%frameRate==0) { print("."); } } */ /* 10. Klausurnoten (if-else-if) Löse eine ähnliche Aufgabe wie die oben mit if-else-if. Du hast eine Punktzahl gegeben: 0 - 10: Durchgefallen 11 - 20: Naja 21 - 30: Mittelgut 31 - 40: Gut 41 - 50: Super */ /* int punkte = 10; // Alle Punkte über 40 sind Super if(punkte > 40) { println("Super"); } else if (punkte > 30) { println("Gut"); } else if (punkte > 20) { println("Mittelgut"); } else if (punkte > 10) { println("Naja"); } else { println("Durchgefallen"); } */ /* 11. Lauftext Schreibe eine Textanzeige, die bei Mausklick zum nächsten Wort wechselt. Das erste Wort ist "Hallo": Ergänze den Code, dass bei jedem Mausklick ein neues Wort angezeigt wird. Nach "Hallo" kommt "mein", "Name", "ist", "Hase", "Tschüs". Danach geht es wieder von vorn los. Nutze die Variable zustand und eine if-else-if Konstruktion. */ /* int zustand = 0; void setup() { textAlign(CENTER); textSize(20); } void mousePressed() { zustand++; } void draw() { background(0); if (zustand == 0) { text("Hallo", width/2, height/2); } else if (zustand == 1) { text("mein", width/2, height/2); } else if (zustand == 2) { text("Name", width/2, height/2); } else if (zustand == 3) { text("ist", width/2, height/2); } else if (zustand == 4) { text("Hase", width/2, height/2); } else { text("Tschüs", width/2, height/2); } } */ /* //Performantere Version // Dies liegt daran, dass die Abzweigung von else-if trees vom Compiler vorrausgerechnet werden. Dies geschieht nach einer Warscheinlichkeit die // Die der Compiler einem Branch zuweist. Wenn der Compiler den richtigen Branch guessed, dann gibt es keine Performanceeinbußen gering. // Verschätzt sich der Compiler jedoch frisst das viel Performance. Deswegen kann man dem es dem Compiler einfacher machen und einen Array verwenden. */ int zustand; // Init string (const char*) array mit Strings für jedes Element String [] str = {"Hallo", "mein", "Name", "ist", "Hase", "Tschüß"}; // Call main() method public void setup() { /* size commented out by preprocessor */; textAlign(CENTER); textSize(width/5); } // Register mouse click public void mousePressed() { // Increment Zustand zustand++; } public void draw() { // Background schwarz setzen background(0); // Wenn der Zustand kleiner als 6 ist Verwende Zustand den Wert eines Elementes zu bekommen. // Würde man versuchenn ein Element auszulesen, welches bei einer Pos > (Array Length-1) liegt, würde man auf // Eine Ram-Adress zugreifen, welche für eine andere Variable zugewiesen ist, was eine outofBoundsException hervorrufen würde. //if(zustand < 6) //text(str[zustand], width/2, height/2); // Wenn das Element out of Bounds wäre, wird das letzte Element verwendet. //else zustand = constrain(zustand, 0, 5); text(str[zustand], width/2, height/2); //text(str[5], width/2, height/2); } public void settings() { size(500, 500); } static public void main(String[] passedArgs) { String[] appletArgs = new String[] { "If_Clauses" }; if (passedArgs != null) { PApplet.main(concat(appletArgs, passedArgs)); } else { PApplet.main(appletArgs); } } }