move While loops to Lektion_3 and add if clauses

This commit is contained in:
Tarek Dafay 2023-10-05 09:42:40 +02:00
parent abed847f74
commit dfa28f143d
8 changed files with 941 additions and 0 deletions

41
Lektion 2/If_Clauses/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Sketch",
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"command": "D:\\UNI\\Semester_1\\Programmieren\\processing-4.3\\processing-java.exe",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "dedicated"
},
"args": [
"--force",
"--sketch=${workspaceRoot}",
"--output=${workspaceRoot}/out",
"--run"
],
"windows": {
"type": "process",
"args": [
"--force",
{
"value": "--sketch=${workspaceRoot}",
"quoting": "strong"
},
{
"value": "--output=${workspaceRoot}\\out",
"quoting": "strong"
},
"--run"
]
}
}
]
}

View File

@ -0,0 +1,431 @@
// 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
void setup() {
size(500,500);
textAlign(CENTER);
textSize(width/5);
}
// Register mouse click
void mousePressed()
{
// Increment Zustand
zustand++;
}
void draw() {
// Background schwarz setzen
background(0);
// Zustand zur array.length()-1 clampen.
// 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.
zustand = constrain(zustand, 0, 5);
text(str[zustand], width/2, height/2);
}
*/

Binary file not shown.

View File

@ -0,0 +1,469 @@
/* 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);
}
}
}