% ########################################################################
% Vermischtes, zum Teil aus der Octave-Dokumentation entnommen
% ########################################################################

% ##################################################
% weitere Kontrollstrukturen
% ##################################################

% do until Anweisung

% Wir berechnen die ersten zehn Glieder der Fibonacci-Folge
fib = ones (1, 10);
i = 2;
do
 i++;
 fib(i) = fib(i-1) + fib(i-2);
until (i == 10)
fib

% break Anweisung
% Durch eine break-Anweisung springt man stets aus der innersten
% for- oder while-Schleife, die diese umgibt.

% Der folgende Code berechnet den kleinsten Teiler einer ganzen Zahl
% und bestimmt, ob diese eine Primzahl ist.
# num = 103;
# div = 2;
# while (div*div <= num)
  # if (rem (num, div) == 0) % rem berechnet den 'Rest'
    # break;
  # endif
  # div++;
# endwhile
# if (rem (num, div) == 0)
  # printf ("Smallest divisor of %d is %d\n", num, div)
# else
  # printf ("%d is prime\n\n\n", num);
# endif

% continue Anweisung

% Wir betrachten folgende Schleife.
% Es werden alle Eintraege eines 
% Zufallsvektors ausgegeben, welche gerade sind.
vec = round (rand (1, 10) * 100);
# for x = vec
  # if (rem (x, 2) == 0)
    # printf ("%d\n", x);
  # endif
# endfor

% Mit dem continue-Befehl sieht dies so aus.
# for x = vec
  # if (rem (x, 2) != 0)
    # continue; % Ueberspringe den Rest dieses Schleifendurchlaufs.
  # endif
  # printf ("%d\n", x);
# endfor

% switch Anweisung
# A = 6;
# switch A
  # case { 6, 7 }
    # printf("Variable ist entweder 6 oder 7\n");
  # case 5
    # printf("Variable ist 5\n");
  # otherwise
    # printf("Variable ist weder 5 oder 6 noch 7\n");
# endswitch

% ##################################################
% Cell-Arrays
% ##################################################
% Um Variablen verschiedenen Typs und/oder verschiedener
% Groesse in einer Variablen ablegen zu koennen
% gibt es die so genannten Cell-Arrays.

# c = {"eine Zeichenkette", rand(3, 3)}
# % Zugriff mit geschweiften Klammern!!!
# c{1} 
# c{1:2}
# c{3} = 3
# c = cell(2,2)

% Mehrdimensional
%c1 = cell(3, 4, 5)
%c2 = cell( [3, 4, 5] )


% ##################################################
% Benutzereingaben von der Konsole lesen
% ##################################################
% z.B.
# x=input('Bitte einen Vektor eingeben ')

% ##################################################
% Elementare File I/O
% ##################################################
# A = [ 1:3; 4:6; 7:9 ];
# save meineMatrix.mat A
# clear A
# load meineMatrix.mat
# A

# filename = "hallowelt.txt";
# fid = fopen (filename, "w"); % bedeutet, dass wir an den Anfang der Datei schreiben wollen
                             # % alte Eintrage werden ueberschrieben
# fputs (fid, "Hallo Welt!");
# fclose (fid);


% ##################################################
% Weitere nuetzliche Matrixfunktionen
% ##################################################

# A=[-1 0 3; 3 0 0; 9 6 -3]

# k = find(A>0) % k enthaelt die Positionen der positiven Eintrage.
              # % Die Eintraege der Matrix A werden dabei Spaltenweise durchgezaehlt:
              # % A(1,1)=1, A(2,1)=2, A(3,1)=3, A(1,2)=4, usw.

# [i j]=find(A>0) % In i bekommt man die Zeilenindices der Stellen,
                # % wo positive Werte stehen, in j die Spaltenindices.

# % nette Anwendung
# A(find(A>0))=-100