128 lines
2.7 KiB
Matlab
128 lines
2.7 KiB
Matlab
% 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))
|
|
|