Navigation

Schleifen

A) While-Schleifen

B) For-Schleifen

C) Suchen

D) Hausaufgaben

A) While-Schleifen

T4A1) Kommen wir nochmal zurueck zu unserem hungrigen Studenten... Bei sehr hungrigen Studenten reicht eventuell ein Nachschlag nicht. In diesem Fall lautet der Algorithmus:

Bestimme das Gewicht
Solange Gewicht<300g
  sage "Noch einen Nachschlag bitte"
  und bestimme das neue Gewicht.
Dann: nimm den Teller 

 Uebertragung in Matlab sieht das so aus:

Gewicht=input('Gewicht? ');
while Gewicht<300
   disp('Noch einen Nachschlag bitte')
   Gewicht=input('Neues Gewicht? ');
end
disp('Teller nehmen')

Probieren Sie das Programm aus. Erweitern Sie es so, dass der Student eine pampige Antwort gibt, wenn der Koch etwas vom Teller herunternimmt, statt einen Nachschlag dazu zu legen.

T4A2) Im Grunde genommen passiert bei einer While-Schleife das selbe wie bei einer if-Abfrage: Abhaengig vom Wahrheitswert einer Variablen, die angibt, ob eine Bedingung erfuellt ist, werden Befehle ausgefuehrt oder nicht. Der grosse Unterschied ist die Wiederholung. Um die Schleife wieder zu verlassen, muss eine Abbruchbedingung erfuellt sein. Warum geht folgende Schleife schief?

a=1; b=10;
while a<b
  b=2*b
end
sprintf('a=%g, b=%g',a,b)

 Wenn Sie diese Schleife ausprobieren: Man kann Matlabprogramme mit ctrl-C abbrechen!

T4A3) rand(1) erzeugt eine Zufallszahl zwischen 0 und 1. Schreiben Sie eine Funktion, die eine Zahl als Eingabeargument bekommt und solange Zufallszahlen auf dem Bildschirm ausgibt, bis die gezogene Zufallszahl groesser als die vom Benutzer eingegebene Zahl ist. Denken Sie daran, eine Abrage zu machen, ob die Eingabe des Benutzers sinnvoll ist.
 

B) For-Schleifen

T4B1) Prinzipiell reichen while-Schleifen fuer alle Anwendungen. Haeufig weiss man jedoch im vorhinein, wieviele Schritte erledigt werden muessen. In diesen Faellen ist es praktischer, eine Zaehlschleife zu benutzen. Probieren Sie folgendes Programm aus und uebertragen Sie es in eine while-Schleife:

aktuell=1;
for z=1:1:10
  aktuell=aktuell*z;
  sprintf('aktueller Wert: %i ',aktuell)
end

T4B2) Nach der Legende soll der Erfinder des Schachspiels von seinem Koenig eine grosse Belohnung versprochen bekommen haben. Der Erfinder wuenscht sich fuer das erste Feld des Schachbretts ein Reiskorn, fuer das zweite zwei, fuer das dritte vier usw. in Verdoppelungen bis zum 64. Feld. Zunaechst ist der Koenig verstimmt, weil er dies fuer eine sehr geringe Belohnung haelt, tatsaechlich treibt ihn seine Zusage in den Ruin. Wieviele Reiskoerner schuldet der Koenig dem Erfinder und wieviele Tonnen Reis sind das, wenn man 0.05g pro Korn annimmt?
[reiskoerner.m]

T4B3) Der (uns ja schon lange bekannte) Doppelpunkt-Operator ist eine implizite for-Schleife. Schreiben Sie mit Hilfe von for-Schleifen neue Versionen der alten Aufgaben:
a) eine Funktion, die die Werte auf der Diagonalen einer Quadratischen Matrix zurueckgibt
b) Erzeugen Sie ein 8*8 Schachbrett aus 0 und 1 und sehen es mit imagesc an. Erzeugen Sie spasseshalber auch ein 25*25 Schachbrett und sehen es an. 

T4B4) Was ist der Unterschied zwischen dem Doppelpunktoperator und for-Schleifen? Faellt Ihnen ein Beispiel ein,  das man mit einer for-Schleife loesen kann, aber nicht mit einem Doppelpunktoperator? Gibt es auch umgekehrte Beispiele?

C) Suchen

 T4C1) Daten nach bestimmten Kriterien zu durchsuchen ist eine sehr haeufige Aufgabe bei der wissenschaftlichen Datenauswertung. Prinzipiell laesst sich das gut mit Hilfe von logischen Operatoren, Fallunterscheidungen und Schleifen erreichen.
Laden Sie folgende Beobachtungsreihe: [fuetterungen.mat]
In dieser Matrix wurden an 31 Tagen eines Monats eingetragen, wie gross die Niederschlagsmenge des Tages in mm war (1. Spalte) und wie oft ein Meisenweibchen sein Nest zum Fuettern angeflogen hat (2. Spalte).
Finden Sie mit Hilfe von Schleifen, Fallunterscheidungen und / oder logischen Operatoren heraus:
An welchen Tagen dieses Monats ist kein Regen gefallen?
An welchen Tagen hat die Meise haeufiger als 50 mal gefuettert?
An welchen Tagen ohne Niederschlag hat die Meise haeufiger als 50 mal gefuettert? 
[fuetterungenC1.m] 

T4C2) Es gibt in Matlab auch einen Befehl, der das Suchen uebernimmt: find. Dieser Befehl gibt die Indizes derjenigen Elemente eines Vektors oder einer Matrix zurueck, die ungleich 0 sind. Probieren Sie aus:
v=[1 7 5 0 8 0 3 1]; ind_ungleich_0=find(v); ind_gleich_1=find(v==1);
m=[ 0 1; 5 9; 1 0]; [row_not0,col_not0]=find(m); [row_1,col_1]=find(m==1);

T4C3) Beantworten Sie die Fagen aus T4C1 durch Benuzung des Befehls find.

[fuetterungenC3.m] 
[Loesung aus dem Kurs: fuetterungenC3_kurs.m] 

D) Hausaufgabe:

T4H1) Erzeugen Sie noch einmal eine Multiplikationstabelle fuer das kleine Einmaleins - diesmal ohne unnoetigen Tipp-Aufwand. 

[einmaleins_for.m] 

T4H2) Schreiben Sie eine Funktion, die in einem beliebigen Vektor die Reihenfolge der Elemente umdreht. Z.B. aus [19 7 30] wird [30 7 19].

T4H3) Programmieren Sie ein Ratespiel, in dem ein Matlabprogramm mit so wenigen ja/nein Fragen wie moeglich eine ganze Zahl zwischen 1 und 20 erraet, die Sie sich ausdenken.
[ratespiel.m] 

T4H4) Erweitern Sie Ihr Programm so, dass das Matlabprogramm ueberprueft, ob Sie beim Antworten mogeln. 

T4H5) Erweitern Sie Ihr Wunschkatzen-Programm von gestern so, dass es die Daten (Geschlecht, Alter, Farben) saemtlicher gefundener Wunschkatzen ausgibt. Verwenden Sie dafuer
a) Schleifen
b) den find Befehl
[wunschkatze_mit_ausgabe.m] 

T4H6) Sie haben die Aufgabe, jeweils 10 maennliche und 10 weibliche Kohlmeisen, Amseln und Rotkehlchen zu fangen, zu beringen und ihr Gewicht zu bestimmen. Schreiben Sie eine Funktion, das diese Arbeit fuer Sie erledigt und eine Tabelle zurueckgibt, die fuer die 60 Tiere jeweils die Nummer des Ringes (aufsteigend von 1 bis 60 nach Fangreihenfolge), die Vogelart, das Geschlecht und das Gewicht enthaelt. Nutzen Sie dabei jeweils einen Zahlencode (z.B. Kohlmeise=1, Amsel=2, Rotkehlchen=3), der im Kommentar des Programms genau dokumentiert ist.
Die Voegel "fangen" Sie mit folgender Funktion [vogelfang.m], die mit [Art,Weibchen,Gewicht]=vogelfang aufgerufen wird und Ihnen zufaellige Voegel ins Netz flattern laesst. (Diese Funktion muessen Sie jetzt noch nicht verstehen sondern nur benutzen, wir besprechen sie am uebernaechsten Kurstag).
Rueckgabewerte: Art ist eine Zeichenkette, Weibchen ist ein Wahrheitswert zur Angabe des Geschlechts, Gewicht ist eine Zahl (in g)
Wenn Sie einen Vogel fangen, den Sie fuer Ihre Statistik nicht brauchen, lassen Sie ihn frei, ohne seine Daten aufzunehmen.
[Loesung mit switch: vogeltabelle_insa.m]  
[eine Loesung aus dem Kurs: vogel_untersuchung.m] 
[noch eine Loesung aus dem Kurs: voegel.m] 

Webmaster: Jutta Kretzb9qerlyafkggddrn (jusiittanqte.kretzberg@uet/5ol.8gpde) (Stand: 07.11.2019)