431 lines
9.4 KiB
Plaintext
431 lines
9.4 KiB
Plaintext
// 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);
|
|
}
|
|
*/ |