new files
This commit is contained in:
127
programming/exercises/boolean_expressions.m
Normal file
127
programming/exercises/boolean_expressions.m
Normal file
@@ -0,0 +1,127 @@
|
||||
% Uebungen 3: Boolesche Ausdruecke
|
||||
|
||||
%% 1) Boolesche Ausdruecke auf Vektoren
|
||||
x = [1 5 2 8 9 0 1];
|
||||
y = [5 2 2 6 0 0 2];
|
||||
|
||||
% a
|
||||
disp('a:')
|
||||
disp(x > y)
|
||||
% liefert einern logischen Verktor der 1 an den Stellen ist, an denen der
|
||||
% Wert in x groesser als der entsprechende Wert in y
|
||||
|
||||
% b
|
||||
disp('b:')
|
||||
disp(y < x)
|
||||
% dto., da die Frage nur umgekehrt gestellt wurde
|
||||
|
||||
% c
|
||||
disp('c:')
|
||||
disp(x == y)
|
||||
% 1 nur an den Stellen, an denen beide Vektoren geiche Werte enthalten (3
|
||||
% und 6)
|
||||
|
||||
% d
|
||||
disp('d:')
|
||||
disp(x ~= y)
|
||||
% wahr an allen Stellen ausser 3 und 6, da auf ungleichheit der Werte getestet
|
||||
% wird.
|
||||
|
||||
% e
|
||||
disp('e:')
|
||||
disp(x & ~y)
|
||||
% glesen: das Ergebnis sei wahr an den Stellen, an denen x ungleich 0 ist
|
||||
% (wahr) UND y == 0 (falsch) ist.
|
||||
|
||||
% f
|
||||
disp('f:')
|
||||
disp(x | y)
|
||||
% gelesen: das Ergebnis sei wahr an den Stellen, an denen x ODER y ungleich
|
||||
% 0 ist (alle ausser Nr. 6)
|
||||
|
||||
%% 2) bitand und bitor
|
||||
|
||||
% a
|
||||
disp('a:')
|
||||
disp(bitand(10, 8))
|
||||
% wenn man sich die Zahlen binaer dargestellt vorstellt, dann werden diese
|
||||
% binaeren Vektoren mit einem logischen UND bit fuer bit verglichen. Das
|
||||
% Ergebnis hat eine 1 nur an der 4. Position, der 8.
|
||||
|
||||
% b
|
||||
disp('b:')
|
||||
disp(bitor(10,8))
|
||||
% Wiederum binaer dargestellt und mit logischem ODER verglichen. Das
|
||||
% Ergebnis ist wahr an den Stellen 2 und 4, was der 10 im Dezimalsystem
|
||||
% entspricht
|
||||
|
||||
%% 3) Boolesche Ausdruecke implementieren
|
||||
|
||||
% a: Das Ergebnis sei wahr, wenn x groesser als y und die Summe aus x und y
|
||||
% nicht kleiner als 100 ist.
|
||||
|
||||
x > y & (x + y) > 100;
|
||||
|
||||
|
||||
% b: Das Ergebnis sei wahr, wenn x und y ungleich 0 oder x und y gleich sind.
|
||||
|
||||
(x & y) | (x == y);
|
||||
|
||||
%% 4) Logisches Indizieren
|
||||
|
||||
x = (1:10);
|
||||
y = [3 1 5 6 8 2 9 4 7 0];
|
||||
|
||||
% a
|
||||
disp('a:')
|
||||
disp(x < 5)
|
||||
% logischer Vektor, der 1 an den Stellen ist, an denen die Werte in x
|
||||
% kleiner als 5 sind.
|
||||
|
||||
% b
|
||||
disp('b:')
|
||||
disp(x( x < 5))
|
||||
% Die Werte aus x an den Stellen, an denen die Werte in x kleiner als 5
|
||||
% sind.
|
||||
|
||||
% c
|
||||
disp('c:')
|
||||
disp(x( (y <= 2) ))
|
||||
% Die Werte aus x and den Stellen, an denen die Werte in y (!) kleiner oder
|
||||
% gleich 2 sind.
|
||||
|
||||
% d
|
||||
disp('d:')
|
||||
disp(x( (x > 2) | (y < 8) ))
|
||||
% Die Werte aus x an den Stellen, an denen die Werte in x groesse 2 UND die
|
||||
% Werte in y kleiner 8 sind.
|
||||
|
||||
% e
|
||||
disp('e:')
|
||||
disp(x( (x == 0) & (y == 0) ))
|
||||
% Die Werte aus x an den Stellen an denen die Werte in x UND y gleich 0 sind
|
||||
|
||||
|
||||
%% 5) Teste den Zufallsgenerator
|
||||
|
||||
x = randi(100, 100, 100); % 1:100
|
||||
|
||||
% a
|
||||
x(x < 33) = 1;
|
||||
x(x >= 33 & x < 66) = 2;
|
||||
x(x >= 66) = 3;
|
||||
% man benutzt das logische Indizieren um all die Were zu ersetzen, die
|
||||
% einer bestimmten Bedingung entsprechen. z.B: setze all die Werte in x an
|
||||
% den Stellen, an denen die Werte in x < 33 gleich 1...
|
||||
|
||||
% b
|
||||
|
||||
disp('Anzahl Werte kleiner 33:')
|
||||
disp(sum(x(:) == 1))
|
||||
|
||||
disp('Anzahl Werte groesser gleich 33 und kleiner 66:')
|
||||
disp(sum(x(:) == 2))
|
||||
|
||||
disp('Anzahl Werte groesser gleich 66:')
|
||||
disp(sum(x(:) == 3))
|
||||
|
||||
190
programming/exercises/control_structures.m
Normal file
190
programming/exercises/control_structures.m
Normal file
@@ -0,0 +1,190 @@
|
||||
%% Uebung 4 Kontrollstrukturen
|
||||
|
||||
clear
|
||||
close all
|
||||
|
||||
%% 1) for-Schleife
|
||||
|
||||
% a
|
||||
for i = 0:10
|
||||
disp(i)
|
||||
end
|
||||
|
||||
% b
|
||||
for i = 10:-1:0
|
||||
disp(i)
|
||||
end
|
||||
|
||||
% c
|
||||
for i = 0:0.1:1
|
||||
disp(i)
|
||||
end
|
||||
|
||||
|
||||
%% 2) Zugriffe auf Vektoren mit der Laufvariable
|
||||
|
||||
% a
|
||||
|
||||
x = 1:100;
|
||||
|
||||
% b
|
||||
for i = 1:length(x)
|
||||
disp(x(i))
|
||||
end
|
||||
% Die Laufvariable erhaelt mit jedem Iterationsschritt einen neuen Wert.
|
||||
% Dieser "laeuft" von 1 bis zur Anzahl Element in x. Die Laufvar. wird dann
|
||||
% als Index benutzt mit dem auf x zugegriffen wird.
|
||||
|
||||
% c
|
||||
for i = x
|
||||
disp(i)
|
||||
end
|
||||
% Alternativ kann man mit der Schleife auch direkt durch den Vektor x
|
||||
% laufen. Mit jeder Iteration enthaelt i nun einen Wert aus x. Es muss
|
||||
% nicht mehr mittles Index auf x zugegriffen werden.
|
||||
|
||||
%% 3 ) Arithmetisches Mittel, Standardabweichung
|
||||
|
||||
x = rand(1,50) .* 10; % rand liefert im Bereich 0 bis 1
|
||||
|
||||
% a
|
||||
mittelwert = [];
|
||||
summe = 0;
|
||||
n = length(x);
|
||||
|
||||
for i = 1:n
|
||||
summe = summe + x(i);
|
||||
end
|
||||
mittelwert = summe / n;
|
||||
disp(mittelwert)
|
||||
|
||||
% b
|
||||
|
||||
% 1. Mittelwert berechnen
|
||||
mittelwert = [];
|
||||
summe = 0;
|
||||
n = length(x);
|
||||
|
||||
for i = 1:n
|
||||
summe = summe + x(i);
|
||||
end
|
||||
mittelwert = summe / n;
|
||||
|
||||
% 2. Std berechnen
|
||||
standardabw = [];
|
||||
summe_quadratische_abw = 0;
|
||||
|
||||
for i = 1:n
|
||||
summe_quadratische_abw = summe_quadratische_abw + (x(i) - mittelwert).^2;
|
||||
end
|
||||
standardabw = sqrt(summe_quadratische_abw / n);
|
||||
disp(standardabw)
|
||||
|
||||
% c
|
||||
disp(mean(x))
|
||||
|
||||
disp(std(x,1)) % Wir verwenden eine Formel fuer die std, die in Matlab nicht default ist
|
||||
|
||||
|
||||
%% 4 While Schleife
|
||||
|
||||
% a
|
||||
count = 0;
|
||||
while count < 100
|
||||
disp(count)
|
||||
count = count + 1;
|
||||
end
|
||||
|
||||
% b
|
||||
% count = 0;
|
||||
% while true
|
||||
% disp(count)
|
||||
% count = count + 1;
|
||||
% end
|
||||
|
||||
|
||||
%% 5
|
||||
count = 1;
|
||||
x = 1:10;
|
||||
while true
|
||||
disp(x(count))
|
||||
count = count + 1;
|
||||
end
|
||||
|
||||
%% 6
|
||||
|
||||
% a
|
||||
while true
|
||||
x = randn(1,1);
|
||||
if x > 1.33
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
% b
|
||||
trials = zeros(1000,1);
|
||||
for i = 1:length(trials)
|
||||
count = 1;
|
||||
while true
|
||||
x = randn(1,1);
|
||||
if x > 1.33
|
||||
trials(i) = count;
|
||||
break;
|
||||
end
|
||||
count = count + 1;
|
||||
end
|
||||
end
|
||||
disp(mean(trials))
|
||||
|
||||
% c
|
||||
figure()
|
||||
plot(trials)
|
||||
xlabel('Durchgang')
|
||||
ylabel('Anzahl Versuche')
|
||||
|
||||
% d
|
||||
|
||||
% Mit groesser werdender Schwelle steigt auch die durchschnittliche Anzahl
|
||||
% Versuche.
|
||||
|
||||
%% 7 Loeschen von Elementen
|
||||
|
||||
% a
|
||||
x = rand(10,1) .* 10;
|
||||
disp('vorher:')
|
||||
disp(x)
|
||||
for i = length(x):-1:1
|
||||
if x(i) < 5
|
||||
x(i) = [];
|
||||
end
|
||||
end
|
||||
disp('nachher:')
|
||||
disp(x)
|
||||
% Der Trick ist hier nicht von vorne durch den Vektor zu laufen, sondern
|
||||
% rueckwaerts. Ansonsten laeuft man Gefahr hinter den gekuerzten Vektor zu
|
||||
% greifen, was zu einem Index exceeds matrix dimensions Fehler fuehren
|
||||
% wuerde.
|
||||
|
||||
% b
|
||||
x = rand(10,1) .* 10;
|
||||
disp('vorher:')
|
||||
disp(x)
|
||||
for i = length(x):-1:1
|
||||
if x(i) < 5 & x(i) > 2
|
||||
x(i) = [];
|
||||
end
|
||||
end
|
||||
disp('nachher:')
|
||||
disp(x)
|
||||
|
||||
% c
|
||||
x = rand(10,1) .* 10;
|
||||
disp('vorher:')
|
||||
disp(x)
|
||||
x(x < 5 & x >2) = [];
|
||||
disp('nachher:')
|
||||
disp(x)
|
||||
|
||||
|
||||
%% 8 Teste den Zufallsgenerator
|
||||
|
||||
Reference in New Issue
Block a user