Skip to content
Snippets Groups Projects
Commit b1d88eae authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Vorbereitung 19.11.2015

parent a04f6dcd
No related branches found
No related tags found
No related merge requests found
../common/Tower_of_Hanoi.jpeg
\ No newline at end of file
File added
% ainf-20151119.pdf - Lecture Slides on Applied Computer Sciences
% Copyright (C) 2012, 2013, 2015 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
\documentclass[10pt,t]{beamer}
\usepackage{pgslides}
\usepackage{pdftricks}
\newrgbcolor{orange}{0.7 0.2 0.0}
\begin{psinputs}
\usepackage[latin1]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{helvet}
\renewcommand*\familydefault{\sfdefault}
\usepackage{pstricks,pst-grad}
\end{psinputs}
\title{Angewandte Informatik}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{19.\ November 2015}
\begin{document}
\maketitleframe
\begin{frame}
\textbf{Sie können diese Vortragsfolien
einschließlich Beispielprogramme, Skript und sonstiger Lehrmaterialien
unter}
\begin{center}
\url{https://gitlab.cvh-server.de/pgerwinski/ainf.git}
\end{center}
\textbf{herunterladen.}
\bigskip
\begin{onlyenv}<1>
\begin{itemize}
\arrowitem
\textbf{\color{blue}Files}\\
einzelne Dateien herunterladen
\arrowitem
\textbf{\color{blue}Download zip/tar.gz/tar.bz2/tar}\\
als Archiv herunterladen
\arrowitem
\url{https://gitlab.cvh-server.de/pgerwinski/ainf.git}\\
mit GIT herunterladen und synchronisieren
\end{itemize}
\end{onlyenv}
\begin{onlyenv}<2>
Achtung: Einige Dateien sind \newterm{Symlinks} -- symbolische Verknüpfungen!
\begin{itemize}
\item
Verweis auf eine andere Datei
\item
hier: Verweis auf gemeinsame Datei im Verzeichnis \file{common}
\item
Web-Interface zeigt Dateinamen als Text (statt Dateiinhalt)
\item
Beispiel: \file{earth-texture.rgb}\\
\textarrow\ Textdatei mit Inhalt "`\file{../common/earth-texture.rgb}"'\\
\textarrow\ bei Verwendung: keine Fehlermeldung, aber keine Textur
\item
Beim Herunterladen als Archiv-Datei (zip/tar.gz/tar.bz2/tar)\\
sind die Symlinks darin korrekt gespeichert.
\item
ebenfalls korrekt:\\
\file{git clone https://gitlab.cvh-server.de/pgerwinski/ainf.git}
\end{itemize}
\end{onlyenv}
\end{frame}
\sectionnonumber{Ergänzungen}
\subsectionnonumber{OpenGL}
\begin{frame}
\showsectionnonumber
\showsubsectionnonumber
\begin{itemize}
\item
\textbf{Doppelte Pufferung}\\
2 "`Bildschirme"': einer zum Zeichnen; einer wird angezeigt\\
\file{opengl-magic.double.c}, \lstinline{gluSwapBuffers()}
\pause
\item
\textbf{Im Display-Handler} (\lstinline{draw()}) \textbf{wirklich nur zeichnen!}\\
Wir haben nicht unter Kontrolle, wann, wie oft oder ob überhaupt\\
diese Funktion aufgerufen wird.
\end{itemize}
\end{frame}
\subsectionnonumber{Umgang mit Bibliotheken}
\begin{frame}[fragile]
\showsectionnonumber
\showsubsectionnonumber
\begin{itemize}
\item
\textbf{Separates Compilieren}\\
\begin{lstlisting}[style=terminal,gobble=8]
$ ¡gcc -c -Wall opengl-magic.c¿
$ ¡gcc -c -Wall textured-spheres.c¿
$ ¡gcc -Wall orbit-x.c -lGL -lGLU -lglut \
opengl-magic.o textured-spheres.o -o orbit-x¿
\end{lstlisting}
\pause
\item
Die \textbf{Link-Reihenfolge} kann eine Rolle spielen!\\
\begin{lstlisting}[style=terminal,gobble=8]
$ ¡gcc -Wall orbit-x.c \
opengl-magic.o textured-spheres.o \
-lGL -lGLU -lglut -o orbit-x¿
\end{lstlisting}
Notfalls:
\begin{lstlisting}[style=terminal,gobble=8]
$ ¡gcc -Wall orbit-x.c -lGL -lGLU -lglut \
opengl-magic.o textured-spheres.o \
-lGL -lGLU -lglut -o orbit-x¿
\end{lstlisting}
\end{itemize}
\end{frame}
\subsectionnonumber{Parameter des Hauptprogramms}
\begin{frame}[fragile]
\showsectionnonumber
\showsubsectionnonumber
\medskip
\begin{lstlisting}
int main (int argc, char **argv)
{
init_opengl (&argc, argv, "Orbit");
...
return 0;
}
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsectionnonumber
\showsubsectionnonumber
\medskip
\begin{lstlisting}
#include <stdio.h>
int main (int argc, char **argv)
{
printf ("argc = %d\n", argc);
for (int i = 0; i < argc; i++)
printf ("argv[%d] = \"%s\"\n", i, argv[i]);
return 0;
}
\end{lstlisting}
\end{frame}
\sectionnonumber{\inserttitle}
\begin{frame}
\showsectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\item[\textbf{2}] \textbf{Einführung in C}
\item[\textbf{3}] \textbf{Bibliotheken}
\begin{itemize}
\item[3.1] Der Präprozessor
\item[3.2] Bibliotheken einbinden
\item[3.3] Bibliothek verwenden (Beispiel: OpenGL)
\item[3.4] Projekt organisieren: make
\end{itemize}
\item[\textbf{4}] \textbf{Algorithmen}
\begin{itemize}
\color{medgreen}
\item[4.1] Differentialgleichungen
\color{red}
\item[4.2] Rekursion
\item[4.3] Stack und FIFO
\color{black}
\item[4.4] Aufwandsabschätzungen
\end{itemize}
\color{gray}
\item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
\item[\makebox(0,0){\textbf{\raisebox{0.5ex}{\dots}}}]
% \item[\textbf{6}] \textbf{Ergänzungen und Ausblicke}
\end{itemize}
\end{frame}
\section{Einführung}
\section{Einführung in C}
\section{Bibliotheken}
\section{Algorithmen}
\subsection{Differentialgleichungen}
\begin{frame}[fragile]
\showsection
\showsubsection
\vspace*{-\bigskipamount}
\begin{eqnarray*}
\varphi'(t) &=& \omega(t) \\[\medskipamount]
\omega'(t) &=& -\frac{g}{l}\cdot\sin\varphi(t)\hspace*{7.1cm}
\end{eqnarray*}
\begin{itemize}
\item
Von Hand (analytisch): Lösung raten (Ansatz), Parameter berechnen
\item
Mit Computer (numerisch): Eulersches Polygonzugverfahren
\end{itemize}
\medskip
\begin{lstlisting}[gobble=0]
phi += dt * omega;
omega += - dt * g / l * sin (phi);
\end{lstlisting}
\bigskip
Praktikumsaufgabe: Umlaufbahn
\end{frame}
\subsection{Rekursion}
\begin{frame}[fragile]
\showsubsection
Vollständige Induktion:
\vspace*{-0.725cm}
\begin{displaymath}
\hspace*{4cm}
\left.
\begin{array}{r}
\mbox{Aussage gilt für $n = 1$}\\[2pt]
\mbox{Schluß von $n - 1$ auf $n$}
\end{array}
\right\}
\mbox{Aussage gilt für alle $n\in\mathbb{N}$}
\end{displaymath}
\vspace*{-0.5cm}
\pause
Türme von Hanoi
\begin{onlyenv}<2>
\begin{center}
\includegraphics[width=12.2cm]{Tower_of_Hanoi.jpeg}
\end{center}
\end{onlyenv}
\begin{onlyenv}<3->
\begin{itemize}
\item
64 Scheiben, 3 Plätze,
\only<3-4>{\hfill\makebox(0,0)[rt]{\includegraphics[width=6cm]{Tower_of_Hanoi.jpeg}}}\\
immer 1 Scheibe verschieben
\item
Ziel: Turm verschieben
\item
Es dürfen nur kleinere Scheiben\\
auf größeren liegen.
\bigskip
\pause
\pause
\item
$n = 1$ Scheibe: fertig
\item
Wenn $n - 1$ Scheiben verschiebbar:\\
schiebe $n - 1$ Scheiben auf Hilfsplatz,\\
verschiebe die darunterliegende,\\
hole $n - 1$ Scheiben von Hilfsplatz
\end{itemize}
\pause
\vspace{-4.3cm}
\begin{lstlisting}[gobble=6,xleftmargin=6.2cm]
void verschiebe (int n, int start, int ziel)
{
if (n == 1)
verschiebe_1_scheibe (start, ziel);
else
{
verschiebe (1, start, hilfsplatz);
verschiebe (n - 1, start, ziel);
verschiebe (1, hilfsplatz, ziel);
}
}
\end{lstlisting}
\end{onlyenv}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{minipage}[t]{6cm}
\vspace*{0.5cm}
Floodfill\strut\\
\begin{lstlisting}[gobble=6]
void fill (int x, int y, char c, char o)
{
if (get_point (x, y) == o)
{
put_point (x, y, c);
fill (x + 1, y, c, o);
fill (x - 1, y, c, o);
fill (x, y + 1, c, o);
fill (x, y - 1, c, o);
}
}
\end{lstlisting}
\end{minipage}\pause
\begin{minipage}[t]{6.3cm}
\vspace*{-1cm}
Aufgabe: Schreiben Sie eine\\
Bibliothek für "`Text-Grafik"'\\
mit folgenden Funktionen:
\begin{itemize}
\item
\lstinline|void clear (char c)|\\
Bildschirm auf Zeichen \lstinline|c| löschen
\item
\lstinline|void put_point (int x, int y, char c)|\\
Punkt setzen
\item
\lstinline|char get_point (int x, int y)|\\
Punkt lesen
\item
\lstinline|void fill (int x, int y, char c, char o)|\\
Fläche in der "`Farbe"' \lstinline|o|,\\
die den Punkt \lstinline|(x, y)| enthält,\\
mit der "`Farbe"' \lstinline|c| ausmalen
\item
\lstinline|void display (void)|\\
Inhalt des Arrays auf dem\\
Bildschirm ausgeben
\end{itemize}
Hinweis: Verwenden Sie ein\\Array als "`Bildschirm"'.
\end{minipage}
\end{frame}
\begin{frame}[fragile]
\showsubsection
Ausgabe einer Hex-Zahl\strut\\
\begin{itemize}
\item
Den Rest der Zahl bei Division durch 16 ausgeben, \dots
\item
\dots\ \emph{aber vorher\/} die Hex-Ziffern der durch 16 dividierten Zahl ausgeben.
\pause
\arrowitem
Array als Zwischenspeicher zum Umdrehen entfällt.
\pause
\arrowitem
\emph{Wirklich?}
\end{itemize}
\end{frame}
\subsection{Stack und FIFO}
\begin{frame}[fragile]
\showsubsection
\bigskip
\begin{minipage}[b]{6cm}
\begin{center}
"`First In -- First Out"'
\bigskip
\begin{picture}(6,4)
\thicklines
\color{structure}
\put(0.5,0){\line(1,0){5}}
\put(3.5,0){\only<1-5>{\line(0,1){1}}}
\put(4.5,0){\only<1-4>{\line(0,1){1}}}
\put(3.5,1){\only<1-4>{\line(1,0){1}}}
\put(4.0,0.5){\only<1-4>{\makebox(0,0){\lstinline{3}}}}
\put(3.0,1.5){\only<1>{\vector(1,-1){0.45}}}
\put(3.0,1.5){\only<1>{\makebox(0,0)[b]{\lstinline{push (3)}}}}
\put(2.5,0){\only<2-6>{\line(0,1){1}}}
\put(2.5,1){\only<2-5>{\line(1,0){1}}}
\put(3.0,0.5){\only<2-5>{\makebox(0,0){\lstinline{7}}}}
\put(2.0,1.5){\only<2>{\vector(1,-1){0.45}}}
\put(2.0,1.5){\only<2>{\makebox(0,0)[b]{\lstinline{push (7)}}}}
\put(1.5,0){\only<3-6>{\line(0,1){1}}}
\put(1.5,1){\only<3-6>{\line(1,0){1}}}
\put(2.0,0.5){\only<3-6>{\makebox(0,0){\lstinline{137}}}}
\put(1.0,1.5){\only<3>{\vector(1,-1){0.45}}}
\put(1.0,1.5){\only<3>{\makebox(0,0)[b]{\lstinline{push (137)}}}}
\put(4.55,1.05){\only<4>{\vector(1,1){0.45}}}
\put(5.00,1.60){\only<4>{\makebox(0,0)[b]{\lstinline{pop ()}: 3}}}
\put(3.55,1.05){\only<5>{\vector(1,1){0.45}}}
\put(4.00,1.60){\only<5>{\makebox(0,0)[b]{\lstinline{pop ()}: 7}}}
\put(2.55,1.05){\only<6>{\vector(1,1){0.45}}}
\put(3.00,1.60){\only<6>{\makebox(0,0)[b]{\lstinline{pop ()}: 137}}}
\end{picture}
\bigskip
FIFO = Queue = Reihe
\end{center}
\end{minipage}\hfill
\begin{minipage}[b]{6cm}
\begin{center}
"`Last In -- First Out"'
\bigskip
\begin{picture}(6,4)
\thicklines
\color{structure}
\put(1.5,0){\line(1,0){3}}
\put(2.5,0){\line(0,1){1}}
\put(3.5,0){\line(0,1){1}}
\put(2.5,1){\line(1,0){1}}
\put(3.0,0.5){\makebox(0,0){\lstinline{3}}}
\put(2.0,1.5){\only<1>{\vector(1,-1){0.45}}}
\put(2.0,1.5){\only<1>{\makebox(0,0)[b]{\lstinline{push (3)}}}}
\put(2.5,1){\only<2-5>{\line(0,1){1}}}
\put(3.5,1){\only<2-5>{\line(0,1){1}}}
\put(2.5,2){\only<2-5>{\line(1,0){1}}}
\put(3.0,1.5){\only<2-5>{\makebox(0,0){\lstinline{7}}}}
\put(2.0,2.5){\only<2>{\vector(1,-1){0.45}}}
\put(2.0,2.5){\only<2>{\makebox(0,0)[b]{\lstinline{push (7)}}}}
\put(2.5,2){\only<3-4>{\line(0,1){1}}}
\put(3.5,2){\only<3-4>{\line(0,1){1}}}
\put(2.5,3){\only<3-4>{\line(1,0){1}}}
\put(3.0,2.5){\only<3-4>{\makebox(0,0){\lstinline{137}}}}
\put(2.0,3.5){\only<3>{\vector(1,-1){0.45}}}
\put(2.0,3.5){\only<3>{\makebox(0,0)[b]{\lstinline{push (137)}}}}
\put(3.55,3.05){\only<4>{\vector(1,1){0.45}}}
\put(4.00,3.60){\only<4>{\makebox(0,0)[b]{\lstinline{pop ()}: 137}}}
\put(3.55,2.05){\only<5>{\vector(1,1){0.45}}}
\put(4.00,2.60){\only<5>{\makebox(0,0)[b]{\lstinline{pop ()}: 7}}}
\put(3.55,1.05){\only<6>{\vector(1,1){0.45}}}
\put(4.00,1.60){\only<6>{\makebox(0,0)[b]{\lstinline{pop ()}: 3}}}
\end{picture}
\bigskip
LIFO = Stack = Stapel
\end{center}
\end{minipage}
%
% \dots
\end{frame}
\sectionnonumber{\inserttitle}
\begin{frame}
\showsectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\item[\textbf{2}] \textbf{Einführung in C}
\item[\textbf{3}] \textbf{Bibliotheken}
\item[\textbf{4}] \textbf{Algorithmen}
\begin{itemize}
\item[4.1] Differentialgleichungen
\item[4.2] \color{medgreen}Rekursion
\item[4.3] Stack und FIFO
\item[4.4] \color{black}Aufwandsabschätzungen
\end{itemize}
\color{gray}
\item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
\item[\makebox(0,0){\textbf{\raisebox{0.5ex}{\dots}}}]
% \item[\textbf{6}] \textbf{Ergänzungen und Ausblicke}
\end{itemize}
\end{frame}
\end{document}
#include <stdio.h>
#include <stdint.h>
void print_hex (uint32_t x)
{
print_hex (x / 16);
int e = x % 16;
if (e < 10)
printf ("%d", e);
else
printf ("%c", 'a' + e - 10);
}
int main (void)
{
print_hex (16777226);
printf ("\n");
return 0;
}
../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgscript.sty
\ No newline at end of file
../common/pgslides.sty
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment