Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • pgerwinski/ainf
  • bwildenhain/ainf
2 results
Select Git revision
  • master
1 result
Show changes

Commits on Source 39

Showing
with 258 additions and 1 deletion
20151001/20151001_003.jpg

812 KiB

20151012/20151012_001.jpg

858 KiB

20151014/20151014_001.jpg

809 KiB

20151015/20151015_003.jpg

799 KiB

20151022/20151022_002.jpg

1 MiB

20151112/20151112_001.jpg

915 KiB

20151112/20151112_002.jpg

855 KiB

20151116/20151116_001.jpg

877 KiB

20151118/20151118_001.jpg

853 KiB

20151119/20151119_002.jpg

947 KiB

No preview for this file type
......@@ -104,7 +104,7 @@
\item
\textbf{Doppelte Pufferung}\\
2 "`Bildschirme"': einer zum Zeichnen; einer wird angezeigt\\
\file{opengl-magic.double.c}, \lstinline{gluSwapBuffers()}
\file{opengl-magic-double.c}, \lstinline{gluSwapBuffers()}
\pause
\item
\textbf{Im Display-Handler} (\lstinline{draw()}) \textbf{wirklich nur zeichnen!}\\
......
File added
% ainf-uebung-20151119.pdf - Exercises on Applied Computer Sciences
% Copyright (C) 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[a4paper]{article}
\usepackage{pgscript}
\usepackage{pdftricks}
\usepackage{fleqn}
\begin{psinputs}
\usepackage{pgscript}
\definecolor{PracticallyWhite}{rgb}{0.99 0.99 0.99}
\end{psinputs}
\newcounter{exercise}
\newcommand{\exercise}[1]{\addtocounter{exercise}{1}\subsection*{Aufgabe \arabic{exercise}: #1}}
\newcounter{points}
\newcommand{\onepoint}{(1 Punkt)\addtocounter{points}{1}}
\newcommand{\points}[1]{(#1 Punkte)\addtocounter{points}{#1}}
\begin{document}
% \thispagestyle{empty}
\section*{Angewandte Informatik\\Übungsaufgaben -- 19.\ November 2015}
\exercise{Fakultät}
Die Fakultät $n!$ einer natürlichen Zahl $n$ ist definiert als:
\begin{eqnarray*}
0 & \mbox{für} & n \le 1, \\
n \cdot (n-1)! & \mbox{für} & n > 1.
\end{eqnarray*}
Mit anderen Worten: $n! = 1\cdot2\cdot3\cdot\dots\cdot n$.
Die folgende Funktion \lstinline{fak()} berechnet die Fakultät \emph{rekursiv}:
\begin{lstlisting}
#include <stdio.h>
int fak (int n)
{
if (n <= 1)
return 1;
else
return n * fak (n - 1);
}
int main (void)
{
for (int n = 1; n <= 5; n++)
printf ("%d\n", fak (n));
return 0;
}
\end{lstlisting}
\begin{itemize}
\item[(a)]
Schreiben Sie eine Funktion, die die Fakultät \emph{iterativ} berechnet,\\
d.\,h.\ mit Hilfe einer Schleife anstelle von Rekursion.
\item[(b)]
Wie viele Multiplikationen erfordern beide Versionen der Fakultätsfunktion?
\item[(c)]
Wieviel Speicherplatz erfordern beide Versionen der Fakultätsfunktion?
\end{itemize}
% \exercise{Koordinaten-FIFO}
%
% Implementieren Sie einen FIFO für Koordinaten-Paare.\\
% Koordinatenpaare sollen "`hintereinander eingereiht"' werden.
%
% \begin{itemize}
% \item
% Eine Funktion \lstinline{push (int x, int y)}
% schiebt sie in den FIFO.
% \item
% Eine Funktion \lstinline{pop (int &x, int &y)}
% liest und entfernt sie wieder aus dem FIFO.
% \item
% Eine Funktion \lstinline{dump ()}
% gibt den Inhalt des FIFO auf dem Bildschirm aus.
% \end{itemize}
\clearpage
\exercise{Kalender-Berechnung}
Am 3.\,1.\,2009 meldete \emph{heise online\/}:
\begin{quote}
Kunden des ersten mobilen Media-Players von Microsoft
erlebten zum Jahresende eine böse Überraschung:
Am 31.\ Dezember 2008 fielen weltweit alle Zune-Geräte der ersten Generation aus.
Ursache war ein interner Fehler bei der Handhabung von Schaltjahren.
\strut\hfill\url{http://heise.de/-193332},
\end{quote}
Der Artikel verweist auf ein Quelltextfragment, das für einen gegebenen Wert \lstinline{days}
das Jahr und den Tag innerhalb des Jahres
für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll:
\begin{lstlisting}
year = ORIGINYEAR; /* = 1980 */
while (days > 365)
{
if (IsLeapYear (year))
{
if (days > 366)
{
days -= 366;
year += 1;
}
}
else
{
days -= 365;
year += 1;
}
}
\end{lstlisting}
Dieses Quelltextfragment weist mehrere Code-Verdopplungen auf:
\begin{itemize}
\item
Die Anweisung \lstinline{year += 1} taucht an zwei Stellen auf.
\item
Es gibt zwei unabhängige Abfragen \lstinline{days > 365} und \lstinline{days > 366}:\\
eine in einer \lstinline{while}- und die andere in einer \lstinline{if}-Bedingung.
\item
Die Länge eines Jahres wird nicht durch eine Funktion berechnet oder in einer Variablen gespeichert;
stattdessen werden an mehreren Stellen die expliziten numerischen Konstanten 365 und 366 verwendet.
\end{itemize}
Diese Probleme führten am 31.\ Dezember 2008 zu einer Endlosschleife,
die sich -- z.\,B.\ durch eine Funktion \lstinline{DaysInYear()} -- leicht hätte vermeiden lassen.
Gut hingegen ist die Verwendung einer Präprozessor-Konstanten \lstinline{ORIGINYEAR}
anstelle der Zahl 1980
sowie die Kapselung der Berechnung der Schaltjahr-Bedingung in einer Funktion \lstinline{IsLeapYear()}.
\begin{itemize}
\item[(a)]
Erklären Sie das Zustandekommen der Endlosschleife.
\item[(b)]
Schreiben Sie das Quelltextfragment so um, daß es die beschriebenen Probleme
nicht mehr enthält.
\end{itemize}
% \bigskip
%
% Anleitung:
% \begin{itemize}
% \item
% 1 Array
% \item
% 2 Index-Variablen (eine zum Schreiben, eine zum Lesen)
% \item
% ansonsten wie Stack
% \end{itemize}
\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;
}
#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;
}
************************
* *
* ++ ++ *
* ++ ++ *
* - - *
* ------------- *
* *
********************
#include <stdio.h>
int fak (int n)
{
if (n <= 1)
return 1;
else
return n * fak (n - 1);
}
int main (void)
{
for (int n = 1; n <= 5; n++)
printf ("%d\n", fak (n));
return 0;
}
#include <stdio.h>
#define DISKS 4
int n[3], tower[3][DISKS];
void display (void)
{
for (int i = 0; i < 3; i++)
{
printf ("tower %d: ", i);
for (int j = 0; j < n[i]; j++)
printf ("%2d", tower[i][j]);
printf ("\n");
}
printf ("\n");
}
int main (void)
{
n[0] = 0;
n[1] = 0;
n[2] = 0;
display ();
}