From 89af24fbd96d21687207a52d7d1eaf79de6b9cbe Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Mon, 23 Nov 2015 15:51:19 +0100 Subject: [PATCH] Fixed operator index --- header.tex | 3 + programming/lecture/programming.tex | 110 ++++++++++++++++------------ 2 files changed, 68 insertions(+), 45 deletions(-) diff --git a/header.tex b/header.tex index 50fef0d..f184f91 100644 --- a/header.tex +++ b/header.tex @@ -196,6 +196,9 @@ \newcommand{\codeterm}[2][]{\textit{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[term]{#2}}{\protect\sindex[term]{#1}}} \newcommand{\file}[1]{\texttt{#1}} +% for escaping special characters into the index: +\newcommand{\scor}{"|} + %%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{tikz} \usetikzlibrary{shapes} diff --git a/programming/lecture/programming.tex b/programming/lecture/programming.tex index 1400ec0..ce92353 100644 --- a/programming/lecture/programming.tex +++ b/programming/lecture/programming.tex @@ -75,10 +75,14 @@ Variablen diesen Datentyp. \subsection{Arbeiten mit Variablen} Nat\"urlich kann mit den Variablen auch gearbeitet, bzw. gerechnet -werden. \matlab{} kennt alle normalen arithmetischen Operatoren wie -\code{+}, \code{-}, \code{*} und \code{/}. Die Potenz wird \"uber das -Dachsymbol \code{\^{}} dargestellt. Listing \ref{varListing3} zeigt, wie sie -benutzt werden. +werden. \matlab{} kennt alle normalen +\codeterm[Operator!arithmetischer]{arithmetischen Operatoren} wie +\code[Operator!arithmetischer!1add@+]{+}, +\code[Operator!arithmetischer!2sub@-]{-}, +\code[Operator!arithmetischer!3mul@*]{*} und +\code[Operator!arithmetischer!4div@/]{/}. Die Potenz wird \"uber das +Dachsymbol \code[Operator!arithmetischer!5pow@\^{}]{\^{}} +dargestellt. Listing \ref{varListing3} zeigt, wie sie benutzt werden. \begin{lstlisting}[label=varListing3, caption={Rechnen mit Variablen.}] >> x = 1; @@ -112,8 +116,9 @@ Beachtenswert ist z.B. in Zeilen 3 und 6, dass mit dem Inhalt einer Variablen gerechnet werden kann, ohne dass dadurch ihr Wert ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden soll, dann muss der Variable der neue Wert explizit zugewiesen werden -(mit dem \code{=} Zuweisungsoperator, z.B. Zeilen 16, 20). Zeile 25 -zeigt wie eine einzelne Variable gel\"oscht wird. +(mit dem \code[Operator!Zuweisung!=]{=} Zuweisungsoperator, +z.B. Zeilen 16, 20). Zeile 25 zeigt wie eine einzelne Variable +gel\"oscht wird. \subsection{Datentypen} @@ -244,7 +249,7 @@ erhalten werden (Listing \ref{arrayListing2}). Im Falle des Vektors Diese Ausgabe zeigt, dass Vektoren im Grunde 2-dimensional sind. Bei einem Zeilenvektor hat die erste Dimension die Gr\"o{\ss}e -1. \code[length()]{length(a)} gibt die l\"angste Ausdehnung an. Der \code{'}- +1. \code[length()]{length(a)} gibt die l\"angste Ausdehnung an. Der \code[Operator!Matrix!']{'}- Operator transponiert den Spaltenvektor zu einem Zeilenvektor (Zeilen 14 ff.). @@ -304,7 +309,7 @@ mit Indexen auf die Inhalte eines Vektors zugegriffen werden kann. \end{lstlisting} Hierbei kann auf einzelne Werte zugegriffen werden oder, analog zur -Erzeugung von Vektoren, die \code{:} Notation verwendet werden, um auf mehrere +Erzeugung von Vektoren, die \code[Operator!Matrix!:]{:} Notation verwendet werden, um auf mehrere Element gleichzeitig zuzugreifen. \begin{lstlisting}[caption={Zugriff auf den Inhalt von Vektoren I}, label=arrayListing5] @@ -365,10 +370,14 @@ problemlos m\"oglich. Bei der Multiplikation (Zeile 10), der Division (Zeile 14) und auch der Potenzierung mu{\ss} mit vorangestellem '.' klar gemacht werden, dass es sich um eine \emph{elementweise} Verarbeitung handeln soll. F\"ur diese elementweisen Operationen kennt -\matlab{} die Operatoren \code{.*}, \code{./} und \code{.\^{}}. Die -einfachen Operatoren \code{*}, \code{/} und \code{\^{}} sind mit den -entsprechenden Matrixoperationen aus der linearen Algebrar belegt -(Box \ref{matrixmultiplication}). +\matlab{} die Operatoren \code[Operator!arithmetischer!3mule@.*]{.*}, +\code[Operator!arithmetischer!4dive@./]{./} und +\code[Operator!arithmetischer!5powe@.\^{}]{.\^{}}. Die einfachen Operatoren +\code[Operator!arithmetischer!3mul@*]{*}, +\code[Operator!arithmetischer!4div@/]{/} und +\code[Operator!arithmetischer!5pow@\^{}]{\^{}} sind mit den entsprechenden +Matrixoperationen aus der linearen Algebrar belegt (Box +\ref{matrixmultiplication}). Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von Listing \ref{arrayListing6}. Wenn zwei Vektoren (elementweise) @@ -378,7 +387,7 @@ Spaltenvektoren) \"ubereinstimmen. Will man Elemente aus einem Vektor entfernen, dann weist man den -entsprechenden Zellen einen leeren Wert (\code{[]}) zu. +entsprechenden Zellen einen leeren Wert (\code[Operator!Matrix!{[]}]{[]}) zu. \begin{lstlisting}[label=arrayListing7, caption={L\"oschen von Elementen aus einem Vektor.}] >> a = (0:2:8); @@ -443,8 +452,9 @@ bis 3-d Matrizen (Abbildung \ref{matrixfig} A,B). Erzeugt werden Matrizen sehr \"ahnlich zu den Vektoren (Listing \ref{matrixListing}). Die Definition einer Matrize wird, wie beim -Vektor, durch \code{[]} eingeschlossen. Das \code{;} trennt die -einzelnen Zeilen der Matrize. +Vektor, durch \code[Operator!Matrix!{[]}]{[]} eingeschlossen. Das +\code[Operator!Matrix!;]{;} trennt die einzelnen Zeilen der +Matrize. \begin{lstlisting}[label=matrixListing, caption={Erzeugen von Matrizen.}] >> a = [1 2 3; 4 5 6; 7 8 9] @@ -561,10 +571,12 @@ verrechnet werden, wie die Dimensionalit\"aten \"ubereinstimmen. Besondere Vorsicht sollte man immer dann walten lassen, wenn man Matrizen miteinander multiplizieren, dividieren oder potenzieren will. Hier ist es wichtig sich klarzumachen was man will: -Eine elementweise Multiplikation (\code{.*} Operator, Listing +Eine elementweise Multiplikation +(\code[Operator!arithmetischer!3mule@.*]{.*} Operator, Listing \ref{matrixOperations} Zeile 18) oder ob eine Matrixmultiplikation -(\code{*} Operator, Listing \ref{matrixOperations} Zeile 12, Box -\ref{matrixmultiplication}) durchgef\"uhrt werden soll. +(\code[Operator!arithmetischer!3mul@*]{*} Operator, Listing +\ref{matrixOperations} Zeile 12, Box \ref{matrixmultiplication}) +durchgef\"uhrt werden soll. \begin{lstlisting}[label=matrixOperations, caption={Zwei Arten von Multiplikationen auf Matrizen.}] >> A = randi(10, [3, 3]) % 2-D Matrix @@ -637,19 +649,23 @@ Boolesche Ausdr\"ucke sind Anweisungen, die zu \codeterm{wahr} oder \codeterm{falsch} ausgewertet werden. Man kennt sie z.B. aus der Mengenlehre. In der Programmierung werden sie eingesetzt, um z.B. die Beziehung zwischen Entit\"aten zu testen. Hierzu werden die -\codeterm{relationalen Operatoren} (\code{>}, \code{<}, \code{==}, -\code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht) -eingesetzt. Mehrere Ausdr\"ucke werden mittels der \codeterm{logischen - Operatoren} (\code{\&}, \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, +\codeterm{relationalen Operatoren} (\code[Operator!relationaler!>]{>}, +\code[Operator!relationaler!<]{<}, +\code[Operator!relationaler!==]{==}, +\code[Operator!relationaler!"!]{!}, gr\"o{\ss}er als, kleiner als, +gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke werden mittels der +\codeterm[Operator!logischer]{logischen Operatoren} +(\code[Operator!logischer!and1@\&]{\&}, \code[Operator!logischer!or1@{"|} {}]{|}, +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 Tabellen \ref{logicalandor} zeigen die -Wahrheitstabellen f\"ur das logische UND (Tabelle \ref{logicalandor}, links) -und das logische ODER (Tabelle \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. +Wahrheitstabellen f\"ur das logische UND (Tabelle \ref{logicalandor}, +links) und das logische ODER (Tabelle \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. \begin{table}[tp] \titlecaption{Wahrheitstabellen logisches UND (links) und logisches ODER (rechts).}{}\label{logicalandor} @@ -675,14 +691,16 @@ Anders ist das beim logischen ODER. Hier ist der gesamte Ausdruck wahr, wenn sich der eine \emph{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\"upfen 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 ausgewertet wird, -muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der -``short-circuit'' Versionen spart Rechenzeit. Das auschlie{\ss}ende ODER -(XOR) ist in \matlab{} nur als Funktion \code[xor()]{xor(A, B)} verf\"ugbar. +sind hier noch die \code[Operator!logischer!and2@\&\&]{\&\&} und +\code[Operator!logischer!or2@{"|}{"|} {}]{||} Operatoren. Man kann beliebige +Ausdr\"ucke verkn\"upfen 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 ausgewertet wird, muss +der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der +\enterm{short-circuit} Versionen spart Rechenzeit. Das auschlie{\ss}ende +ODER (XOR) ist in \matlab{} nur als Funktion \code[xor()]{xor(A, B)} +verf\"ugbar. \begin{table}[th] \titlecaption{\label{logicaloperators} @@ -701,10 +719,11 @@ muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der \end{center} \end{table} -Um Werte miteinander zu vergleichen gibt es die \codeterm{relationalen - Operatoren} (Tabelle \ref{relationaloperators}). Mit ihnen kann man -auf Dinge wie Gleichheit (\code{==}) gr\"o{\ss}er oder kleiner als -(\code{>}, \code{<}) testen. +Um Werte miteinander zu vergleichen gibt es die +\codeterm[Operator!relationaler]{relationalen Operatoren} (Tabelle +\ref{relationaloperators}). Mit ihnen kann man auf Dinge wie +Gleichheit (\varcode{==}) gr\"o{\ss}er oder kleiner als (\varcode{>}, +\varcode{<}) testen. \begin{table}[th] \titlecaption{\label{relationaloperators} @@ -734,9 +753,10 @@ Beispiele. \matlab{} kennt die Schl\"usselworte \code{true} und \code{logical} Werte 1 und 0. \begin{important}[Zuweisungs- und Gleichheitsoperator] - Der Zuweisungsoperator \code{=} und der logische Operator \code{==} - sind zwei grundverschiedene Dinge. Da sie umgangsprachlich gleich - sind k\"onnen sie leider leicht verwechselt werden. + Der Zuweisungsoperator \code[Operator!Zuweisung!=]{=} und der + logische Operator \code[Operator!logischer!==]{==} sind zwei + grundverschiedene Dinge. Da sie umgangsprachlich gleich sind + k\"onnen sie leider leicht verwechselt werden. \end{important} \begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]