script work, further topics slides
This commit is contained in:
@@ -605,12 +605,159 @@ durchgef\"uhrt werden soll.
|
||||
|
||||
\section{Boolesche Operationen}
|
||||
|
||||
Boolesche Ausdr\"ucke sind Anweisungen, die zu \textit{wahr} oder
|
||||
\textit{falsch} ausgewertet werden. Man kennt sie z.B. aus der
|
||||
Mengenlehre. In der Programmierung werdens sie eingesetzt um z.B. die
|
||||
Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
|
||||
\textit{relationalen Operatoren} (\code{>, <, ==, !}, gr\"o{\ss}er
|
||||
als, kleiner als, gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke
|
||||
werden mittels der \textit{logischen Operatoren} (\code{\&, |}, UND,
|
||||
ODER ) verkn\"upft. Sie sind f\"ur uns nicht nur wichtig um
|
||||
Codeabschnitte bedingt auszuf\"uhren (Verzweigungen,
|
||||
\ref{controlstructsec}) sondern auch um aus Vektoren und Matrizen
|
||||
bequem Elemente auszuw\"ahlen (logisches Indizieren,
|
||||
\ref{logicalindexingsec}).
|
||||
|
||||
Die folgenden Tabellen zeigen die Wahrheitstabellen f\"ur das logische
|
||||
UND (\ref{logicalandor}, links) aund das logische ODER
|
||||
(\ref{logicalandor}, rechts). Es werden die Aussagen A und B mit dem
|
||||
Operator verkn\"upft. Beim logischen UND ist der gesamte Ausdruck nur
|
||||
dann wahr, wenn beide Ausdr\"ucke sich zu wahr auswerten lassen.
|
||||
|
||||
|
||||
\section{Logisches Indizieren}
|
||||
\begin{table}[]
|
||||
\caption{Wahrheitstabellen logisches UND (links) und logisches ODER (rechts).}\label{logicalandor}
|
||||
\begin{minipage}[t]{0.4\textwidth}
|
||||
\begin{tabular}{llll}
|
||||
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
|
||||
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
|
||||
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch} \\ \cline{2-4}
|
||||
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{red}{falsch}} & \textcolor{red}{falsch}
|
||||
\end{tabular}
|
||||
\end{minipage}
|
||||
\begin{minipage}[t]{0.4\textwidth}
|
||||
\begin{tabular}{llll}
|
||||
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
|
||||
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
|
||||
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{mygreen}{wahr} \\ \cline{2-4}
|
||||
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch}
|
||||
\end{tabular}
|
||||
\end{minipage}
|
||||
\end{table}
|
||||
|
||||
Anders ist das beim logischen ODER. Hier ist der gesamte Ausdruck
|
||||
wahr, wenn sich der eine \textit{oder} der andere Ausdruck zu wahr
|
||||
auswerten l\"a{\ss}t.
|
||||
|
||||
Tabelle \ref{logicaloperators} zeigt die logischen Operatoren, die in
|
||||
Matlab definiert sind. Zu bemerken sind hier noch die \code{\&\&} und
|
||||
\code{||} Operatoren. Man kann beliebige Ausdr\"ucke verkn\"uepfen und
|
||||
h\"aufig kann schon anhand des ersten Ausdrucks entschieden werden, ob
|
||||
der gesamte Boolesche Ausdruck zu wahr oder falsch ausgewertet werden
|
||||
wird. Wenn zwei Aussagen mit einem UND verkn\"upft werden und der
|
||||
erste zu falsch ausgewerte wird, dann muss der zweite gar nicht mehr
|
||||
gepr\"uft werden. Die Verwendung der ``short-circuit'' Versionen spart
|
||||
rechenzeit. Das auschliessende ODER (XOR) ist in Matlab nur als Funktion
|
||||
\code{xor(A, B)} verf\"ugbar.
|
||||
|
||||
\begin{table}[th]
|
||||
\caption{\label{logicaloperators}
|
||||
\textbf{Logische Operatoren in Matlab.}}
|
||||
\begin{center}
|
||||
\begin{tabular}{c|c}
|
||||
\hline
|
||||
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
|
||||
$\sim$ & logisches NOT\\
|
||||
$\&$ & logisches UND\\
|
||||
$|$ & logisches ODER\\
|
||||
$\&\&$ & short-circuit logical UND\\
|
||||
$\|$ & short-circuit logical ODER\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Um Werte miteinander zu vergleichen gibt es die \textit{relationalen
|
||||
Operatoren} (Tabelle \ref{relationaloperators}). Mit ihnen kann man
|
||||
auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als
|
||||
(\code{>, <}) testen.
|
||||
|
||||
\begin{table}[th]
|
||||
\caption{\label{relationaloperators}
|
||||
\textbf{Relationale Operatoren in Matlab.}}
|
||||
\begin{center}
|
||||
\begin{tabular}{c|c}
|
||||
\hline
|
||||
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
|
||||
$<$ & kleiner als\\
|
||||
$>$ & gr\"osser als \\
|
||||
$==$ & gleich \\
|
||||
$>=$ & gr\"osser oder gleich \\
|
||||
$<=$ & kleiner oder gleich \\
|
||||
$\sim=$ & ungleich\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
Das Ergebnis eines Booleschen Ausdrucks ist immer vom Datentyp
|
||||
\textit{logical}. Man kann jede beliebige Variable zu wahr oder falsch
|
||||
auswerten indem man in den Typ \textit{logical} umwandelt. Dabei
|
||||
werden von Matlab alle Werte, die nicht 0 sind als wahr
|
||||
eingesch\"atzt. Listing \ref{booleanexpressions} zeigt einige
|
||||
Beispiele. Matlab kennt die Schl\"usselworte \code{true} und
|
||||
\code{false}. Diese sind jedoch nur Synonyme f\"ur die
|
||||
\textit{logical} Werte 1 und 0. Man beachte, dass der
|
||||
Zuweisungsoperator \code{=} und der logische Operator \code{==} zwei
|
||||
grundverschiedene Dinge sind. Da sie umgangsprachlich gleich sind kann
|
||||
man sie leider leicht verwechseln.
|
||||
|
||||
\footnotesize
|
||||
\begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]
|
||||
>> true
|
||||
ans =
|
||||
1
|
||||
>> false
|
||||
ans =
|
||||
0
|
||||
>> logical(1)
|
||||
ans =
|
||||
1
|
||||
>> 1 == true
|
||||
ans =
|
||||
1
|
||||
>> 1 == false
|
||||
ans =
|
||||
0
|
||||
>> logical('test')
|
||||
ans =
|
||||
1 1 1 1
|
||||
|
||||
>> 1 > 2
|
||||
ans =
|
||||
0
|
||||
>> 1 < 2
|
||||
ans =
|
||||
1
|
||||
>> x = [2 0 0 5 0] & [1 0 3 2 0]
|
||||
x =
|
||||
1 0 0 1 0
|
||||
|
||||
>> ~([2 0 0 5 0] & [1 0 3 2 0])
|
||||
ans =
|
||||
0 1 1 0 1
|
||||
|
||||
>> [2 0 0 5 0] | [1 0 3 2 0]
|
||||
ans =
|
||||
1 0 1 1 0
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
|
||||
|
||||
\section{Kontrollstrukturen}
|
||||
\section{Logisches Indizieren}\label{logicalindexingsec}
|
||||
|
||||
|
||||
\section{Kontrollstrukturen}\label{controlstructsec}
|
||||
|
||||
\begin{definition}[Kontrollstrukturen]
|
||||
In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten
|
||||
|
||||
Reference in New Issue
Block a user