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 25
Zyklen: 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 26
Mehrfachauswahl: if-elseif Alternativen mit mehreren Zweigen (mehr als 2) können mittel if-elsif-else realisiert werden. Beispiel: if Bedingung1 if alter
Mehrfachauswahl: 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 28
Ein- 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 32
fprintf - 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 36
Relations-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 37
Logische 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 39
Logische 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 41
Nü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