%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('Kontrollstrukturen und Programmieren')
format compact
clear all
close all


%if Anweisung
disp('if Anweisung')


x=rand(2,1)
abstand=norm(x)
disp('Der Punkt liegt...');

if(abstand>1)
    disp('...ausserhalb...');
elseif(abstand<1)
    disp('...im Innern...');
else
    disp('...auf dem Rand...');
end
disp('des Einheitskreises');

%switch Anweisung
disp('switch Anweisung')
input('Return druecken')
close all
clear all

n=mod(floor(rand(1)*10), 9)+1

switch n
    case {1,4,9}
        disp('ist Quadratzahl');
    case {2,3,5,7}
        disp('ist Primzahl');
    case {6}
        disp('hat 2 Primfaktoren');
    otherwise
        disp('ist Kubikzahl');
end

%for Schleife
disp('for Schleife')
input('Return druecken')
close all
clear all

%Berechnen einer Fibonacci Folge
n=6;
f=[0, 1];

for i=2:n
    f=[f, f(i)+f(i-1)];
end

disp(f);

%while Schleife
disp('while Schleife')
input('Return druecken')
close all
clear all

%Berechnet eine Naeherung der Euler Zahl
e=1;
n=1;

while abs(e-exp(1))>0.0001
    e=e+1/factorial(n)
    n=n+1
end


%Performance von Schleifen
disp('Performance von Schleife')
input('Return druecken')
close all
clear all

%Summieren von Zahlen mit for Schleife oder...
n=1000000;
summe=0;
x=[1:n];
disp('Summenberechnung');
disp('...mit For-Schleife');
tic
for i=x
    summe=summe+1/i;
end
toc
disp(summe)

%...summieren mit Vektor und dem Befehl sum
n=1000000;
summe=0;
x=[1:n];
disp('Summenberechnung');
disp('...mit Vektrobefehl');
tic
summe=sum(1./x);
toc
disp(summe)


%Erzeugen einer Folge mit dynamischer Erweiterung eines Vektors...
disp('Dynamische Erweiterung:');
clear;
n=10000;
tic
f=[0; 1];
tic
for i=2:n
    f=[f; f(i-1)+f(i)];
end
toc

%... oder fuellen eines vorinitialisierten Vektors
disp('Statischer Vektor:');
clear;
n=10000;
f=zeros(n+1,1);
f(1)=0;
f(2)=1;
tic
for i=2:n
    f(i+1)=f(i)+f(i-1);
end
toc


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
input('Return druecken zum Beenden')
close all
clear all