Zyklen: break und continue

Die Seite wird erstellt Moritz Jordan
 
WEITER LESEN
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