mirror of
https://github.com/vale981/TUD_MATH_BA
synced 2025-03-05 09:31:39 -05:00
weiter in PROG 1
This commit is contained in:
parent
898df0c586
commit
00e1d53383
6 changed files with 247 additions and 1 deletions
|
@ -0,0 +1,146 @@
|
|||
\section{Begriffe}
|
||||
|
||||
Eine \begriff{Sequenz} sind einzelne Anweisungen hintereinander. \\
|
||||
Eine \begriff{Selektion} ist eine Verzweigung. \\
|
||||
Eine \begriff{Repetition} ist eine Wiederholung.
|
||||
|
||||
\subsection{Variablen und Daten}
|
||||
|
||||
Wir sehen uns einen Biertrinker an, der nach dem Genuss noch ein paar Besorgungen machen muss. Dabei ergeben sich folgende Variablen
|
||||
\begin{itemize}
|
||||
\item Variable \textbf{Durst} von Typ \textit{LOGICAL}
|
||||
\item Variable \textbf{Geld} von Typ \textit{INTEGER}
|
||||
\item Variable \textbf{PreisDerBesorgung} von Typ \textit{INTEGER}
|
||||
\item Variable \textbf{Rest} von Typ \textit{INTEGER}
|
||||
\item Variable \textbf{Bierpreis} von Typ \textit{INTEGER}
|
||||
\item Variable \textbf{WirtschaftAnnehmbar} von Typ \textit{LOGICAL}
|
||||
\item Variable \textbf{Autofahrer} von Typ \textit{LOGICAL}
|
||||
\item Variable \textbf{AlkoholGrenzwert} von Typ \textit{REAL}
|
||||
\item Variable \textbf{AlkoholVergiftungsWert} von Typ \textit{REAL}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Schleifen}
|
||||
|
||||
In Fortran gibt es 4 Arten von \begriff{Schleifen}:
|
||||
\begin{itemize}
|
||||
\item Endlosschleife
|
||||
\item Schleife mit Anfangsbedingung
|
||||
\item Schleife mit Endbedingung
|
||||
\item Zählschleife
|
||||
\end{itemize}
|
||||
|
||||
Bei einer \begriff[Schleifen!]{Endlosschleife} wird der Anweisungsblock innerhalb der Schleife unendlich lange ausgeführt:
|
||||
\begin{lstlisting}
|
||||
do
|
||||
Anweisung1
|
||||
Anweisung2
|
||||
Anweisung3
|
||||
end do
|
||||
\end{lstlisting}
|
||||
|
||||
Bei einer \begriff[Schleifen!]{Schleife mit Anfangsbedingung} wird der Anweisungsblock nur ausgeführt, wenn die Anfangsbedingung wahr ist. Ist sie wahr, so wird der Block ausgeführt und anschließend überprüft, ob die Anfangsbedingung wieder wahr ist. Ist die Anfangsbedingung nicht wahr, so wird die Schleife nicht ausgeführt.
|
||||
\begin{lstlisting}
|
||||
do while(Anfangsbedingung)
|
||||
Anweisung1
|
||||
Anweisung2
|
||||
Anweisung3
|
||||
end do
|
||||
\end{lstlisting}
|
||||
|
||||
Hat die \begriff[Schleifen!]{Schleife eine Endbedingung}, so wird der Anweisungsblock auf jedem Fall 1-mal ausgeführt. Erst dann wird überprüft, ob die Endbedingung wahr ist. Ist sie das, wird die Schleife \textbf{verlassen}. Ist sie falsch, so wird die Schleife erneut ausgeführt.
|
||||
\begin{lstlisting}
|
||||
do
|
||||
Anweisung1
|
||||
Anweisung2
|
||||
Anweisung3
|
||||
if(Endbedingung) exit
|
||||
end do
|
||||
\end{lstlisting}
|
||||
|
||||
Eine \begriff[Schleifen!]{Zählschleife} in Fortran ist ähnlich wie in anderen Programmiersprachen konzipiert, aber die Syntax ist deutlich verschieden. Eine Zählschleife besitzt eine Zählvariable (die auch in der Schleife benutzt werden kann, aber nicht geändert werden sollte), die von einer Anfangszahl mit bestimmter Schrittweite solange hochgezählt (oder bei negativer Schrittweite heruntergezählt) wird, bis die Zählvariable die Endzahl erreicht.
|
||||
\begin{lstlisting}
|
||||
do i = anfang, ende, schrittweite
|
||||
Anweisung1
|
||||
Anweisung2
|
||||
Anweisung3
|
||||
end do
|
||||
\end{lstlisting}
|
||||
|
||||
Bitte beachten:
|
||||
\begin{itemize}
|
||||
\item Der Zustand der Zählvariable \texttt{i} vor der Schleife geht verloren, auch wenn die Schleife 0-mal läuft.
|
||||
\item Die Zählvariable \texttt{i} darf im Inneren der Schleife nicht geändert werden.
|
||||
\item Der Endzustand der Zählvariable \texttt{i} ist nach der Schleife nicht definiert.
|
||||
\item Ausdrücke werden zu Beginn genau 1-mal (vor der ersten Iteration) berechnet und sind dann fest.
|
||||
\item Die Anzahl der Iterationen ist: $N=\max\left\lbrace 0,\texttt{nint}\left(\frac{\texttt{ende }-\texttt{ anfang }+\texttt{ i}}{\texttt{i}}\right)\right\rbrace$
|
||||
\end{itemize}
|
||||
|
||||
\section{Einfache Syntax}
|
||||
|
||||
Es gibt einen zulässigen Fortran-Zeichensatz. Dieser umfasst zum Beispiel die Buchstaben A-Z und a-z, sowie 0-9, Sonderzeichen und Operatoren.
|
||||
|
||||
Nun einige lexikalische Einheiten (Symbole/Tokens):
|
||||
\begin{itemize}
|
||||
\item Keywords sind nicht reserviert, Variablen können also auch nach Keywords benannt werden.
|
||||
\item Identifiers (Namen) haben eine Länge von maximal 63 Zeichen. Variablen können Buchstaben, Zahlen und auch den Unterstrich enthalten.
|
||||
\item Literale (Konstanten): 3 $\Rightarrow$ INTEGER, 2.876 $\Rightarrow$ REAL, .TRUE. $\Rightarrow$ LOGICAL, "'Hallo"' $\Rightarrow$ STRING
|
||||
\item Labels (Marken): 00000 ... 99999 sind Sprungmarken, die mit \texttt{GOTO 99999} erreicht werden können.
|
||||
\item Separatoren (Trennsymbole) sind: \texttt{()}, \texttt{/}, \texttt{/(/)}, \texttt{[]}, \texttt{=}, \texttt{=>}, \texttt{:}, \texttt{::}, \texttt{,}, \texttt{;} und \texttt{\%}.
|
||||
\item Operatoren sind: \texttt{+}, \texttt{-}, \texttt{*},\texttt{/}, \texttt{**}, \texttt{//}, \texttt{==}, \texttt{<=}, \texttt{<}, \texttt{/=}, \texttt{>}, \texttt{>=}, \texttt{.NOT.}, \texttt{.OR.}, \texttt{.AND.}, \texttt{.EQV.} und \texttt{.NEQV.}.
|
||||
\end{itemize}
|
||||
|
||||
In den alten Quellformen bis vor Fortran-90, also insbesondere Fortran-66 und Fortran-77 waren
|
||||
\begin{itemize}
|
||||
\item Namen maximal 6 Zeichen lang und
|
||||
\item Lochkarten 80 Zeichen breit.
|
||||
\end{itemize}
|
||||
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\draw (0,0) -- (10,0);
|
||||
\draw (0,0) -- (0,4);
|
||||
\draw (0,4) -- (1,5);
|
||||
\draw (1,5) -- (10,5);
|
||||
\draw (10,0) -- (10,5);
|
||||
|
||||
\node at (10,-0.3) (ende) {80};
|
||||
\node at (8,-0.3) (mitte) {$72\vert73$};
|
||||
\node at (0.2,-0.3) (1) {1};
|
||||
\node at (0.4,-0.3) (2) {2};
|
||||
\node at (0.6,-0.3) (3) {3};
|
||||
\node at (0.8,-0.3) (4) {4};
|
||||
\node at (1,-0.3) (5) {5};
|
||||
\node at (1.3,-0.3) (6) {$\vert 6\vert$};
|
||||
|
||||
\draw (1.16,0) -- (1.16,5);
|
||||
\draw (1.43,0) -- (1.43,5);
|
||||
\draw (8,0) -- (8,5);
|
||||
|
||||
\node at (0.2,3.5) (c) {\texttt{C}};
|
||||
\node at (0.85,3.5) (Com) {\texttt{Com}};
|
||||
\node at (1.3,3.47) (m) {\texttt{m}};
|
||||
\node at (1.82,3.488) (ents) {\texttt{ents}};
|
||||
|
||||
\node at (0.2,3) (stern) {\texttt{*}};
|
||||
\node at (0.85,3) (Kom) {\texttt{Kom}};
|
||||
\node at (1.3,2.97) (m2) {\texttt{m}};
|
||||
\node at (2,2.99) (entare) {\texttt{entare}};
|
||||
|
||||
\node at (0.84,2.5) (123) {\texttt{123}};
|
||||
\node at (2.75,2.5) (myprog) {\texttt{PROGRAM MYPROG}};
|
||||
\node at (0.65,2) (99999) {\texttt{99999}};
|
||||
\node at (2.75,2) (product) {\texttt{PRODUC = X * Y}};
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
|
||||
Ab Fortran-90 wurden neue Quellformen entwickelt, das heißt:
|
||||
\begin{itemize}
|
||||
\item Zeilen sind nun maximal 132 Zeichen lang
|
||||
\item Kommentare beginnen mit "'!"' und gehen bis zum Zeilenende
|
||||
\item Eine neue Zeile ist eine neue Anweisung, außer die letzte Zeile endet mit "'\&"'
|
||||
\item "'\&"' am Zeilenende bedeutet, dass die nächste nicht-Kommentar und nicht-Leerezeile die Anweisung fortsetzt.
|
||||
\item Die Fortsetzung darf mit "'\&"' beginnen.
|
||||
\item Es sind maximal 39 Fortsaetzungszeilen möglich
|
||||
\item Leerzeichen sind signifkant $\Rightarrow$ alle lexikalischen Tokens sind am Stück zu schreiben.
|
||||
\item Groß- und Kleinschreibung ist nicht signifikant in Namen und Keywords
|
||||
\end{itemize}
|
|
@ -0,0 +1,45 @@
|
|||
\section{Gleitkommazahlen}
|
||||
|
||||
Gleitkommazahlen werden auch Fließkommazahlen, Gleitpunktzahlen, Fließpunktzahlen oder floating-point-numbers genannt.
|
||||
|
||||
Das \begriff{Gleitkommaformat} $R=(b,l,\underline{e},\overline{e})$ besteht aus
|
||||
\begin{itemize}
|
||||
\item einer Basis $b$
|
||||
\item einer Mantissenlänge $l$
|
||||
\item einem Exponentenbereich von $\underline{e}$ bis $\overline{e}$.
|
||||
\end{itemize}
|
||||
|
||||
Eine \begriff{Gleitkommazahl} ist entweder 0 oder $x=(-1)^s\cdot m\cdot b^e$ mit
|
||||
\begin{itemize}
|
||||
\item Vorzeichenbit $s\in \{0,1\}$
|
||||
\item Mantisse $m=[0.m_1m_2m_3...m_l]_b$ mit Mantissenziffern $m_i\in\{0,1,2,...,b-1\}$
|
||||
\item $e\in\{\underline{e},\underline{e}+1,\underline{e}+2,...,\overline{e}\}$
|
||||
\end{itemize}
|
||||
|
||||
Schauen wir uns das Beispiel $R(2,3,-1,+2)$ an. Eine solche Zahl benötigt 1 bit für $s$, 2 bits für $e$ und 3 bits für $m$.
|
||||
\begin{center}
|
||||
\begin{tabular}{l|cccccccc}
|
||||
$m=$\textbf{ 0.} & \textbf{111} & \textbf{110} & \textbf{101} & \textbf{100} & \textbf{011} & \textbf{010} & \textbf{001} & \textbf{000} \\
|
||||
\hline
|
||||
$e=-1$ & \textcolor{Green}{$\frac{7}{16}$} & \textcolor{Green}{$\frac{6}{16}$} & \textcolor{Green}{$\frac{5}{16}$} & \textcolor{Green}{$\frac{4}{16}$} & \textcolor{red}{$\frac{3}{16}$} & \textcolor{red}{$\frac{2}{16}$} & \textcolor{red}{$\frac{1}{16}$} & 0 \\
|
||||
$e=0$ & \textcolor{Green}{$\frac{14}{16}$} & \textcolor{Green}{$\frac{12}{16}$} & \textcolor{Green}{$\frac{10}{16}$} & \textcolor{Green}{$\frac{8}{16}$} & \textcolor{Cyan}{$\frac{6}{16}$} & \textcolor{Cyan}{$\frac{4}{16}$} & \textcolor{Cyan}{$\frac{2}{16}$} & \textcolor{Cyan}{0} \\
|
||||
$e=1$ & \textcolor{Green}{$\frac{28}{16}$} & \textcolor{Green}{$\frac{24}{16}$} & \textcolor{Green}{$\frac{20}{16}$} & \textcolor{Green}{$\frac{16}{16}$} & \textcolor{Cyan}{$\frac{12}{16}$} & \textcolor{Cyan}{$\frac{8}{16}$} & \textcolor{Cyan}{$\frac{4}{16}$} & \textcolor{Cyan}{0} \\
|
||||
$e=2$ & \textcolor{Green}{$\frac{56}{16}$} & \textcolor{Green}{$\frac{48}{16}$} & \textcolor{Green}{$\frac{40}{16}$} & \textcolor{Green}{$\frac{32}{16}$} & \textcolor{Cyan}{$\frac{24}{16}$} & \textcolor{Cyan}{$\frac{16}{16}$} & \textcolor{Cyan}{$\frac{8}{16}$} & \textcolor{Cyan}{0} \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
Es gibt also auch mehrere Darstellungen für eine Zahl! Die \textcolor{Cyan}{Cyan} eingefärbten Zahlen können auch anders dargestellt werden.
|
||||
|
||||
\textcolor{Green}{Grüne} Zahlen sind sogenannte \begriff[Gleitkommazahl!]{normalisierte Gleitkommazahlen}, ihre erste Mantissenziffer ist $\neq 0$. Die \textcolor{red}{roten} Zahlen sind \begriff[Gleitkommazahl!]{denormalisierte Gleitkommazahlen}: Ihre ersten Mantissenziffer ist $m_1=0$ und ihr Exponent $e=\underline{e}$. Da das erste Mantissenbit häufig eine 1 ist, wird angenommen, dass das erste Mantissenbit eine 1 ist und wird deswegen nicht gespeichert (hidden bit). Das sorgt dafür, dass bei 3 bit Genauigkeit mit 4 bit Genauigkeit gerechnet werden kann. Ist das erste Mantissenbit eine 0, gibt es dafür eine spezielle Exponentenkennung.
|
||||
|
||||
Ein Zahlenstrahl mit diesen Zahlen ist besonders dicht um 0, aber ab 2 werden die Abstände sehr groß.
|
||||
|
||||
Die größte darstellbare Zahl ist $x_{max}=0.1111...1=(1-b^l)\cdot b^{\overline{e}}$. \\
|
||||
Der kleinste darstellbare normalisierte Betrag ist $x_{min,N} = 0.10000...0=b^{\underline{e}-1}$. \\
|
||||
Der kleinste darstellbare denormalisierte Betrag ist $x_{min,D} = 0.0000...1=b^{\underline{e}-l}$.
|
||||
|
||||
Doch es gibt eine Probleme:
|
||||
\begin{itemize}
|
||||
\item absolute/relative Fehler bei Zahlen, die zwischen 2 darstellbaren Zahlen liegen $\Rightarrow$ Rundungen bei nahezu jeder Rechnung!
|
||||
\item Grundrechenarten können nicht darstellbare Zahlen erzeugen
|
||||
\end{itemize}
|
26
1. Semester/PROG/TeX_files/Rundung.tex
Normal file
26
1. Semester/PROG/TeX_files/Rundung.tex
Normal file
|
@ -0,0 +1,26 @@
|
|||
\section{Rundung}
|
||||
|
||||
Eine \begriff{Rundung} ist eine Funktion $O:\real\to\text{Gleitkomma-Raster }R$.
|
||||
|
||||
Eine Rundung $O$ hat folgende Eigenschaften:
|
||||
\begin{enumerate}
|
||||
\item $O(x)=x$ wenn $x\in R$
|
||||
\item $x,y\in\real$ mit $x<y\Rightarrow O(x)<O(y)$
|
||||
\item \textcolor{Gray}{$O(-x)=-O(x)$, nur manche Rundungen haben diese Eigenschaft}
|
||||
\end{enumerate}
|
||||
|
||||
Es gibt verschiedene Rundungsmodi:
|
||||
\begin{itemize}
|
||||
\item "'to nearest"': zur nächsten Gleitkommazahl, wenn 2 Gleitkommazahlen gleich weit weg sind, wird abwechselnd auf- und abgerundet
|
||||
\item "'trancation"': Abschneiden der Nachkommastellen $\Rightarrow$ betragskleiner runden
|
||||
\item "'augmentation"': zusätzliche Stellen hinzufügen $\Rightarrow$ betragsgrößer runden
|
||||
\item "'upward"': nach oben runden
|
||||
\item "'downward"': nac unten runden
|
||||
\end{itemize}
|
||||
|
||||
Wenn $O$ eine Rundung mit einem Rundungsmodus, also $O\in \{\text{Rundungsmodi}\}$, ist und $\circ$ eine Grundrechenart, also $\circ\in\{+,-,\cdot,\div\}$, dann gilt für eine Gleitkommaoperation $\odot$
|
||||
\begin{align}
|
||||
x,y\in R: x\odot y := O(x\circ y)\notag
|
||||
\end{align}
|
||||
|
||||
\textbf{Auslöschung} in Summen von Gleitkommazahlen tritt auf, wenn die Größenordnung der exakten Summe wesentlich kleiner ist als die Größenordnung der Summanden (bzw. der Zwischenergebnisse).
|
Binary file not shown.
|
@ -25,6 +25,7 @@
|
|||
\input{./TeX_files/Basis-Konversion_ganzer_Zahlen}
|
||||
\include{./TeX_files/Basis-Konversion_gebrochener_Zahlen}
|
||||
\include{./TeX_files/Gleitkommazahlen}
|
||||
\include{./TeX_files/Rundung}
|
||||
|
||||
\chapter{Grundstrukturen von Algorithmen}
|
||||
\input{./TeX_files/Einfache_Syntax}
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%Graphics-related packages
|
||||
\RequirePackage[table]{xcolor}
|
||||
\RequirePackage[table,dvipsnames]{xcolor}
|
||||
\RequirePackage{graphicx}
|
||||
\RequirePackage{tcolorbox}
|
||||
|
||||
|
@ -110,6 +110,34 @@
|
|||
\RequirePackage{enumerate}
|
||||
\RequirePackage{enumitem} %customize label
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%Pakete für Programmierung
|
||||
|
||||
\RequirePackage{lmodern}
|
||||
\RequirePackage{listings}
|
||||
|
||||
%Konfiguration dazu
|
||||
\definecolor{lightlightgray}{rgb}{0.95,0.95,0.95}
|
||||
\definecolor{lila}{rgb}{0.8,0,0.8}
|
||||
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
|
||||
\definecolor{mygreen}{rgb}{0,0.8,0.26}
|
||||
|
||||
\lstset{language=[95]Fortran,
|
||||
basicstyle=\ttfamily,
|
||||
keywordstyle=\color{lila},
|
||||
commentstyle=\color{lightgray},
|
||||
morecomment=[l]{!\ },% Comment only with space after !
|
||||
stringstyle=\color{mygreen}\ttfamily,
|
||||
backgroundcolor=\color{white},
|
||||
showstringspaces=false,
|
||||
numbers=left,
|
||||
numbersep=10pt,
|
||||
numberstyle=\color{mygray}\ttfamily,
|
||||
identifierstyle=\color{blue},
|
||||
xleftmargin=.2\textwidth,
|
||||
xrightmargin=.2\textwidth
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%Index related packages
|
||||
\RequirePackage[texindy]{imakeidx}
|
||||
|
|
Loading…
Add table
Reference in a new issue