Zyklen: break und continue
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Zyklen: break und continue
Innerhalb eines Zyklus:
break – beendet vorzeitig die zyklische Verarbeitung
Beispiel:
a = [1 2 3 4 5 6 0 1 2];
n = length(a);
s=0; Wenn 0 gefunden wird, so wird
nn=0; der Zyklus verlassen und die
for i=1:1:n Mittelwertbildung beendet
if a(i)==0
break;
Achtung:
end
s= s + a(i); Programm würde abstürzen, wenn
nn = nn +1; eine 0 am Anfang des Feldes
end; stehen würde.
mw=s/nn;
Peter Sobe 25Zyklen: break und continue
Innerhalb eines Zyklus:
continue – vorzeitiger Übergang zum nächsten
Schleifendurchlauf
Beispiel:
a = [1 2 3 4 5 6 0 1 2];
Für alle gefundenen 0-Werte
n = length(a);
wird der Rest des Zyklus-
s=0;
nn=0; inneren übergangen, d.h die
for i=1:1:n Nullen werden für die
if a(i)==0 Mittelwertbildung ignoriert
continue;
end Achtung:
s= s + a(i); Diese Programm würde
nn = nn +1;
abstürzen, wenn ausschließlich
end;
Nullen im Feld enthalten sind.
mw=s/nn;
Peter Sobe 26Mehrfachauswahl: if-elseif
Alternativen mit mehreren Zweigen (mehr als 2) können
mittel if-elsif-else realisiert werden.
Beispiel:
if Bedingung1 if alterMehrfachauswahl: switch-case
Alternativen mit mehreren Zweigen (mehr als 2) können
auch per switch-case-Konstruktion programmiert werden.
Das kann u.U. übersichtlicher sein.
Beispiel:
switch Ausdruck switch note
case wert1 case1
Anweisung1; auswahl=‘sehr gut‘;
case wert2 case 2
Anweisung2; auswahl=‘gut‘;
otherwise
case 3
auswahl=‘befriedigend‘;
Anweisung3;
case 4
end;
auswahl=‘ausreichend‘;
otherwise
auswahl=‘‘nicht erfolgreich;
end
Peter Sobe 28Ein- und Ausgabe Neben der interaktiven Eingabe der Werte in Kommando-Fenster ist auch eine gezielte Nutzerabfrage durch Skripte und Funktionen möglich. input-Funktion zur Eingabeaufforderung wert = input(‘Bitte Wert eingeben:‘); Nach Ausgabe eines Erläuterungstextes wird dem Nutzer die Eingabe erlaubt. Der Typ des eingegebenen Werts hängt von der Eingabe ab und kann ein String, eine einzelne numerische Variable, ein Vektor oder eine Matrix sein. Zum Erzwingen einer String-Eingabe: nachricht = input(‘Geben Sie hier Ihren Text ein:‘, ‘s‘); Peter Sobe 29
Ein- und Ausgabe fprintf-Funktion zur Ausgabe in Kommandofenster Die Funktion fprintf gibt den als ersten Parameter übergebenen String aus. fprintf(‘einfacher Text‘); … es erscheint ‘einfacher Text‘ Beispiel: j = input(‘Jahrsezahl:‘); if mod(j,4)==0 && (mod(j,100)~=0 || mod(j,400)==0) fprintf(‘ist ein Schaltjahr \n‘); else fprintf(‘ist kein Schaltjahr \n‘); end; Peter Sobe 30
Ein- und Ausgabe Die Funktion fprintf kann darüberhinaus Variablen formatiert ausgeben. Dazu müssen im übergebenen String s.g. Umwandlungsangaben (%s, %f u.ä.) angegeben werden. An deren Stelle werden die Werte der danach als weitere Parameter angegebenen Variablen ausgegeben. z=7; fprintf(‘‘Das Doppelte von %f ist %f \n‘, z, 2*z); … es erscheint ‘Das Doppelte von 7 ist 14‘ Die Reihenfolge der weiteren Parameter gibt die Zuordnung zu den Umwandlungsangaben an. Peter Sobe 31
fprintf - Umwandlungen
fprintf dient der formatierten Ausgabe von Texten und Variablen auf der
Konsole, oder in eine Datei (wird später behandelt).
fprintf(Formatstring, Variablen …);
Die Umwandlungsangaben in einem fprintf-Formatstring beginnen immer
mit einem %-Zeichen. Der dann folgende Buchstabe gibt an, wie die
Ausgabe erfolgen soll.
%s … Einsetzen des Variableninhalts als String
%d … Einsetzen des Variablenwerts als ganze Zahl
(ohne Nachkommastellen)
%f … Einsetzen des Variablenwerts als Fließkommawert
%e … Fließkommawert im wissenschaftlichen Format
%g … automatische Auswahl der kompakteren Form aus %f und %e
Peter Sobe 32fprintf - Umwandlungen Beispiel, z.B. als Skript: radiofrequenzen=[ 89.6 95.8 100.6 102.6 ]; for i=1:4 fprintf(‘ Radioprogramm %d: %f MHz \n‘,i,radiofrequenzen(i)) end Ausgabe: Radioprogramm 1: 89.600000 MHz Radioprogramm 2: 95.800000 MHz Radioprogramm 3: 100.600000 MHz Radioprogramm 4: 102.600000 MHz Peter Sobe 33
fprintf - Umwandlungen Beispiel (auszugsweise) mit Format-/Präzisionsangabe: fprintf(‘ Radioprogramm %d: %.1f MHz \n‘,i,radiofrequenzen(i)) Ausgabe: Radioprogramm 1: 89.6 MHz Radioprogramm 2: 95.8 MHz Radioprogramm 3: 100.6 MHz Radioprogramm 4: 102.6 MHz fprintf(‘ Radioprogramm %d: %5.1f MHz \n‘,i,radiofrequenzen(i)) Ausgabe: Radioprogramm 1: 89.6 MHz Radioprogramm 2: 95.8 MHz Radioprogramm 3: 100.6 MHz Radioprogramm 4: 102.6 MHz Peter Sobe 34
fprintf - Umwandlungen Format-/Präzisionsangabe: %vl.pu v … Vorzeichen (+,- oder weggelassen) l … Länge, d.h. Anzahl Zeichen, die für die Ausgabe reserviert sind p … Anzahl Stellen nach dem Dezimalpunkt u … Umwandlungsangabe (s,d,f,e,g) Weggelassen werden können: v,l,p … dann werden Standardformatierungen benutzt Zur weiteren Formatierung können benutzt werden: \n … Zeilenumbruch \t … Tabulator Peter Sobe 35
fprintf und disp
fprintf-Umwandlungen und –Formatierungen sind auf einzelne Werte
bezogen.
Vektoren und Matrizen können per disp()-Funktion ausgegeben werden.
disp() gibt die angegebene Variable im Kommandofenster aus, ohne
jedoch den Variablennamen voranzustellen.
Beispiel: Ausgabe:
v1 = [1 2 3 4 5 6]; Vektor v1
fprintf(‘Vektor v1\n'); 1 2 3 4 5 6
disp(v1);
m2 = [v1; v1; 0 0 0 0 0 0]; Matrix m2
fprintf('Matrix m2\n'); 1 2 3 4 5 6
disp(m2); 1 2 3 4 5 6
0 0 0 0 0 0
Peter Sobe 36Relations-Operatoren in Matlab
Einzelne Werte, Vektoren und Matrizen können verglichen werden.
Es entsteht ein logischer Wert (0 oder 1), bzw. ein Vektor logischer
Werte, oder eine Matrix logischer Werte.
Operator Bedeutung
< kleiner als
größer als
>= größer oder
gleich als
Achtung:
== gleich Unterschied
gegenüber =
~= Ungleich
Peter Sobe 37Logische Ausdrücke in Matlab Bisher hatten wir die Operationen AND, OR, NOT innerhalb aussagenlogischer Ausdrücke benutzt. Diese Operation besitzen in Matlab spezielle Symbole: Operation Matlab-Symbol Beispiel AND && if a>0 && a
Logische Ausdrücke in Matlab
Jede Relation und jeder aussagenlogische Ausdruck kann auf
skalare Variable (1x1), Vektoren(1xn) oder Matrizen (mxn)
angewendet werden.
m1 = [1 2 3; 4 5 6; 7 8 9]; m1 = [1 2 3; 4 5 6; 7 8 9];
m2 = [3 2 1; 5 6 4; 7 9 8]; vgl = m1 < 5;
vgl = m1 < m2;
vgl =
vgl =
1 1 1
1 0 0 1 0 0
1 1 0 0 0 0
0 1 0
Peter Sobe 39Logische Ausdrücke in Matlab Jede Relation und jeder aussagenlogische Ausdruck kann auf skalare Variable (1x1), Vektoren(1xn) oder Matrizen (mxn) angewendet werden. Geschickte Ausnutzung für die Bildung einer elementweisem absoluten Differenz … m1 = [1 2 3; 4 5 6; 7 8 9]; m2 = [3 2 1; 5 6 4; 7 9 8]; m1_kl_m2 = m1 < m2; m3p1 = (m1_kl_m2 .* (m2 - m1)); m3p2 = (~m1_kl_m2 .* (m1 - m2)); m3 = m3p1 + m3p2; Peter Sobe 40
Nützliche Funktionen
Summe über Vektoren
V = [0.5 1.2 3.4];
S = sum(V); % summiert die Elemente eines Vektors
M = [1 2 3; 4 5 6];
SS = sum(M); % summiert spaltenweise und liefert Vektor der
Spaltensummen
Minima über Vektoren ( Maxima ähnlich)
V = [0.5 1.2 3.4];
mi = min(V); % kleinstes Element des Vektors
M = [1 2 3; 4 5 6];
smi = min(M); % spaltenweises Minima
Peter Sobe 41Nützliche Funktionen Arithmetisches Mittel über Vektoren V = [0.5 1.2 3.4]; mw = mean(V); M = [1 2 3; 4 5 6]; smw = mean(M); % mittelt spaltenweise Zum Nachdenken: Wie bildet man eine Summe über alle Elemente einer Matrix? Wie findet man den maximalen, bzw. minimalen Wert in einer Matrix? Wie berechnet man das arithmetische Mittel aller Werte in einer Matrix? Peter Sobe 42
Sie können auch lesen