% Numerik fuer Mathematiker SS 2015
% Einfuehrung in MATLAB
%
% Skript zu Logik und Kontrollstrukturen

%% (1) Logik
%
% Vergleiche zwischen Zahlen
1 == 2      % ???
1 ~= 2      % ???
1 < 2       % ???
1 <= 1      % ???
1 >= 2      % ???

% Logische Operationen
~3                  % ???
1 & 0               % ???
4 | 0               % ???
[1 1 1] & [0 1 0]   % ???

%% (2) If-Else-Block
%
% Abhaengig davon, ob der logische Ausdruck/die Bedingung innerhalb der 
% runden Klammern wahr ist oder nicht, werden verschiedene Befehlsbloecke
% ausgefuhrt
if( pi^2 > 2^pi )
    %THEN-Block wird ausgefuehrt, falls der Ausdruck wahr ist
    disp('pi^2 ist groesser.');
else
    %ELSE-Block wird ausgefuehrt, falls der Ausdruck falsch ist
    disp('2^pi ist groesser.');
end

% Der else-Zweig ist optional und if-else kann auch in einer Zeile
% geschrieben werden:
x = 4; y = 3; if(y < x), tmp = x; x = y; y = tmp; end

% Man kann den else-Zweig auch weiter verzweigen
x = pi^2; y = 2^pi; z = 2*pi;
if(x <= z & y <= z), 
    disp('z ist am groessten.');
elseif(z<= x & y <= x)
    disp('x ist am groessten.');
else
    disp('y ist am groessten.');
end

%% SWITCH-CASE-Konstruktion
%
% Bietet sich an, wenn eine Variable eine endliche Anzahl von Werten
% annehmen kann und abhängig davon verschiedene Befehle ausgefuehrt werden
% sollen

note = 3;
switch note, % 
    case {1,2}
        % Wird ausgefuehrt, wenn "note" 1 oder 2 ist
        bestanden = true;
        disp('gut')
    case {3,4}
        % Wird ausgefuehrt, wenn "note" 3 oder 4 ist
        bestanden = true;
        disp('ok')
    case 5
        % Wird ausgefuehrt, wenn "note" 5 ist
        bestanden = false;
        disp('schlecht')
    otherwise
        % Wird ausgefuehrt, wenn ??? 
        disp('Keine Note.')
end


%% (4) While-Schleife
%
x=1; y = 1;
while x <= 10,
    %WHILE-Block wird solange ausgefuehrt, bis der Ausdruck falsch ist
    y = y*x;
    x = x+1;
end

% Diese While-Scheife berechnet ???

%% (5) For-Schleife
%
% Die Laufvariable (vor "=") durchlaeuft den Ausdruck hinter "=" und 
% jedesmal wird der Befehlsblock ausgefuehrt
s=0;
for( j = 1:2:25 ),
    % j durchlaeuft die ungeraden Zahlen bis 25 und jedesmal werden die 
    % nachfolgenden Befehle aufgerufen
    j
    s = s + j;
end

% Ein weiteres Beispiel
s = 'hello ';
for( j = 'hamster' ), 
    s = [s,j];          % Hier passiert ???
end
s
