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

Branch umbenannt: "2020ws" statt "master"

parent 047e52bc
Branches
No related tags found
No related merge requests found
Showing
with 79 additions and 79 deletions
No preview for this file type
...@@ -37,14 +37,14 @@ ...@@ -37,14 +37,14 @@
\exercise{Hello, world!} \exercise{Hello, world!}
Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20201105} Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201105}
können Sie können Sie
\href{https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20201105/hp-uebung-20201105.pdf}% \href{https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201105/hp-uebung-20201105.pdf}%
{diesen Übungszettel als PDF-Datei} {diesen Übungszettel als PDF-Datei}
herunterladen sowie die folgenden Beispielprogramme: herunterladen sowie die folgenden Beispielprogramme:
\begin{enumerate}[\quad(a)] \begin{enumerate}[\quad(a)]
\item \gitfile{hp}{20201105}{hello.c} \item \gitfile{hp}{2020ws/20201105}{hello.c}
\item \gitfile{hp}{20201105}{hello-gtk.c} \item \gitfile{hp}{2020ws/20201105}{hello-gtk.c}
\end{enumerate} \end{enumerate}
Bringen Sie diese Programme auf Ihrem eigenen Rechner Bringen Sie diese Programme auf Ihrem eigenen Rechner
und/oder auf einem Rechner der Hochschule und/oder auf einem Rechner der Hochschule
......
No preview for this file type
...@@ -132,25 +132,25 @@ ...@@ -132,25 +132,25 @@
return 0; return 0;
} }
\end{lstlisting} \end{lstlisting}
In den Dateien \gitfile{hp}{20201112}{loesung-1-1.c} bis \gitfile{hp}{20201112}{loesung-1-3.c} In den Dateien \gitfile{hp}{2020ws/20201112}{loesung-1-1.c} bis \gitfile{hp}{2020ws/20201112}{loesung-1-3.c}
finden Sie lauffähige Programme, die die o.\,a.\ Funktionen aufrufen. finden Sie lauffähige Programme, die die o.\,a.\ Funktionen aufrufen.
Beachten Sie, daß die Funktion \emph{vor\/} dem Hauptprogramm Beachten Sie, daß die Funktion \emph{vor\/} dem Hauptprogramm
deklariert werden muß, damit das Hauptprogramm sie kennt. deklariert werden muß, damit das Hauptprogramm sie kennt.
(Es gibt Tricks, mit denen es auch anders geht, (Es gibt Tricks, mit denen es auch anders geht,
aber was hätten wir in diesem Zusammenhang davon?) aber was hätten wir in diesem Zusammenhang davon?)
In \gitfile{hp}{20201112}{loesung-1-4.c} und \gitfile{hp}{20201112}{loesung-1-5.c} In \gitfile{hp}{2020ws/20201112}{loesung-1-4.c} und \gitfile{hp}{2020ws/20201112}{loesung-1-5.c}
findet die Schaltjahr-Prüfung direkt im Hauptprogramm statt. findet die Schaltjahr-Prüfung direkt im Hauptprogramm statt.
Dies ist ebenfalls eine richtige Lösung der Aufgabe, Dies ist ebenfalls eine richtige Lösung der Aufgabe,
schränkt aber die Wiederverwertbarkeit des Codes ein. schränkt aber die Wiederverwertbarkeit des Codes ein.
Die Datei \gitfile{hp}{20201112}{loesung-1-4.c} enthält darüberhinaus Codeverdopplungen, Die Datei \gitfile{hp}{2020ws/20201112}{loesung-1-4.c} enthält darüberhinaus Codeverdopplungen,
nämlich mehrere identische \lstinline{printf()}-Auf"-rufe nämlich mehrere identische \lstinline{printf()}-Auf"-rufe
an unterschiedlichen Stellen. an unterschiedlichen Stellen.
Dies ist schlechter Programmierstil ("`Cut-and-paste-Programmierung"'). Dies ist schlechter Programmierstil ("`Cut-and-paste-Programmierung"').
Die besten Lösungen sind \gitfile{hp}{20201112}{loesung-1-2.c} Die besten Lösungen sind \gitfile{hp}{2020ws/20201112}{loesung-1-2.c}
und \gitfile{hp}{20201112}{loesung-1-3.c}. und \gitfile{hp}{2020ws/20201112}{loesung-1-3.c}.
\goodbreak \goodbreak
...@@ -200,15 +200,15 @@ ...@@ -200,15 +200,15 @@
\solution \solution
Drei verschiedene richtige Lösungen finden Sie in den Dateien Drei verschiedene richtige Lösungen finden Sie in den Dateien
\gitfile{hp}{20201112}{loesung-2-1.c}, \gitfile{hp}{20201112}{loesung-2-2.c} und \gitfile{hp}{20201112}{loesung-2-3.c}. \gitfile{hp}{2020ws/20201112}{loesung-2-1.c}, \gitfile{hp}{2020ws/20201112}{loesung-2-2.c} und \gitfile{hp}{2020ws/20201112}{loesung-2-3.c}.
(Zum Compilieren von \gitfile{hp}{20201112}{loesung-2-2.c} und \gitfile{hp}{20201112}{loesung-2-3.c} (Zum Compilieren von \gitfile{hp}{2020ws/20201112}{loesung-2-2.c} und \gitfile{hp}{2020ws/20201112}{loesung-2-3.c}
ist mindestens der C99-Standard erforderlich; bitte nötigenfalls ist mindestens der C99-Standard erforderlich; bitte nötigenfalls
in \file{gcc} die Option \lstinline[style=cmd]{-std=c99} mit angeben.) in \file{gcc} die Option \lstinline[style=cmd]{-std=c99} mit angeben.)
Die Lösung in \gitfile{hp}{20201112}{loesung-2-3.c} ist zwar richtig, Die Lösung in \gitfile{hp}{2020ws/20201112}{loesung-2-3.c} ist zwar richtig,
aber unnötig kompliziert und daher nicht empfohlen. aber unnötig kompliziert und daher nicht empfohlen.
Eine \textbf{falsche} Lösung finden Sie in der Datei \gitfile{hp}{20201112}{loesung-2-f4.c}: Eine \textbf{falsche} Lösung finden Sie in der Datei \gitfile{hp}{2020ws/20201112}{loesung-2-f4.c}:
In der Ausgabe dieses Programms stehen die Faktoren und Ergebnisse In der Ausgabe dieses Programms stehen die Faktoren und Ergebnisse
nicht rechtsbündig untereinander. nicht rechtsbündig untereinander.
...@@ -232,16 +232,16 @@ ...@@ -232,16 +232,16 @@
\solution \solution
Zwei verschiedene richtige Lösungen finden Sie in den Dateien Zwei verschiedene richtige Lösungen finden Sie in den Dateien
\gitfile{hp}{20201112}{loesung-3-1.c} und \gitfile{hp}{20201112}{loesung-3-2.c}. \gitfile{hp}{2020ws/20201112}{loesung-3-1.c} und \gitfile{hp}{2020ws/20201112}{loesung-3-2.c}.
Die Lösung in \gitfile{hp}{20201112}{loesung-3-2.c} Die Lösung in \gitfile{hp}{2020ws/20201112}{loesung-3-2.c}
speichert alle berechneten Zahlen in einem Array, speichert alle berechneten Zahlen in einem Array,
die in \gitfile{hp}{20201112}{loesung-3-1.c} hingegen die in \gitfile{hp}{2020ws/20201112}{loesung-3-1.c} hingegen
speichert immer nur maximal drei Zahlen gleichzeitig. speichert immer nur maximal drei Zahlen gleichzeitig.
Sofern nicht alle berechneten Zahlen später noch benötigt werden, Sofern nicht alle berechneten Zahlen später noch benötigt werden,
ist daher \gitfile{hp}{20201112}{loesung-3-1.c} zu bevorzugen. ist daher \gitfile{hp}{2020ws/20201112}{loesung-3-1.c} zu bevorzugen.
Wichtig in \gitfile{hp}{20201112}{loesung-3-1.c} ist, daß \lstinline{f0 + f1} berechnet wird, Wichtig in \gitfile{hp}{2020ws/20201112}{loesung-3-1.c} ist, daß \lstinline{f0 + f1} berechnet wird,
\emph{bevor\/} \lstinline{f0} oder \lstinline{f1} ein neuer Wert zugewiesen wird. \emph{bevor\/} \lstinline{f0} oder \lstinline{f1} ein neuer Wert zugewiesen wird.
Dies ist nur möglich, weil das Programm Dies ist nur möglich, weil das Programm
eine zusätzliche Variable (hier: \lstinline{f2}) verwendet. eine zusätzliche Variable (hier: \lstinline{f2}) verwendet.
...@@ -252,7 +252,7 @@ ...@@ -252,7 +252,7 @@
\begin{minipage}[t]{0.65\textwidth} \begin{minipage}[t]{0.65\textwidth}
Wir betrachten das nebenstehende C-Programm Wir betrachten das nebenstehende C-Programm
(Datei: \gitfile{hp}{20201112}{aufgabe-4.c}). (Datei: \gitfile{hp}{2020ws/20201112}{aufgabe-4.c}).
\begin{itemize} \begin{itemize}
\item[(a)] \item[(a)]
Was bewirkt dieses Programm? Begründen Sie Ihre Antwort. Was bewirkt dieses Programm? Begründen Sie Ihre Antwort.
...@@ -310,7 +310,7 @@ ...@@ -310,7 +310,7 @@
\item[(b)] \item[(b)]
\textbf{Ändern Sie das Programm so, daß es einen "`Countdown"' von 10 bis 0 ausgibt.} \textbf{Ändern Sie das Programm so, daß es einen "`Countdown"' von 10 bis 0 ausgibt.}
Datei \gitfile{hp}{20201112}{loesung-4.c}: Datei \gitfile{hp}{2020ws/20201112}{loesung-4.c}:
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
#include <stdio.h> #include <stdio.h>
......
No preview for this file type
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
\begin{minipage}[t]{0.65\textwidth} \begin{minipage}[t]{0.65\textwidth}
Wir betrachten das nebenstehende C-Programm Wir betrachten das nebenstehende C-Programm
(Datei: \gitfile{hp}{20201112}{aufgabe-4.c}). (Datei: \gitfile{hp}{2020ws/20201112}{aufgabe-4.c}).
\begin{itemize} \begin{itemize}
\item[(a)] \item[(a)]
Was bewirkt dieses Programm? Begründen Sie Ihre Antwort. Was bewirkt dieses Programm? Begründen Sie Ihre Antwort.
......
No preview for this file type
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
\exercise{Seltsame Programme} \exercise{Seltsame Programme}
Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20201119} Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201119}
finden Sie (unter anderem)\\ finden Sie (unter anderem)\\
die Programme \gitfile{hp}{20201119}{test-1.c}, die Programme \gitfile{hp}{2020ws/20201119}{test-1.c},
\gitfile{hp}{20201119}{test-2.c} und \gitfile{hp}{20201119}{test-3.c}. \gitfile{hp}{2020ws/20201119}{test-2.c} und \gitfile{hp}{2020ws/20201119}{test-3.c}.
Was bewirken diese Programme, und warum verhalten sie sich so? Was bewirken diese Programme, und warum verhalten sie sich so?
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
\begin{itemize} \begin{itemize}
\item \item
\gitfile{hp}{20201119}{test-1.c} \gitfile{hp}{2020ws/20201119}{test-1.c}
Hinter \lstinline{return} steht ein Ausdruck mit dem Hinter \lstinline{return} steht ein Ausdruck mit dem
Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
übergeben und daher \lstinline{return 0} ausgeführt. übergeben und daher \lstinline{return 0} ausgeführt.
\item \item
\gitfile{hp}{20201119}{test-2.c} \gitfile{hp}{2020ws/20201119}{test-2.c}
Das Programm gibt die Zeile Das Programm gibt die Zeile
\lstinline[style=terminal]{Die Antwort lautet: 42} aus. \lstinline[style=terminal]{Die Antwort lautet: 42} aus.
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
\lstinline{else}-Zweig. \lstinline{else}-Zweig.
\item \item
\gitfile{hp}{20201119}{test-3.c} \gitfile{hp}{2020ws/20201119}{test-3.c}
Das Programm stürzt mit einer Fehlermeldung Das Programm stürzt mit einer Fehlermeldung
"`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab. "`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab.
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
\strut\hfill\url{http://heise.de/-193332}, \strut\hfill\url{http://heise.de/-193332},
\end{quote} \end{quote}
Der Artikel verweist auf ein Quelltextfragment (Datei: \gitfile{hp}{20201119}{aufgabe-2.c}), Der Artikel verweist auf ein Quelltextfragment (Datei: \gitfile{hp}{2020ws/20201119}{aufgabe-2.c}),
das für einen gegebenen Wert \lstinline{days} das für einen gegebenen Wert \lstinline{days}
das Jahr und den Tag innerhalb des Jahres das Jahr und den Tag innerhalb des Jahres
für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll: für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll:
...@@ -197,7 +197,7 @@ ...@@ -197,7 +197,7 @@
366 zu setzen. Darüberhinaus muß man die Funktion 366 zu setzen. Darüberhinaus muß man die Funktion
\lstinline{IsLeapYear()} bereitstellen (vgl.\ Aufgabe 1 vom 12.\,11.\,2020). \lstinline{IsLeapYear()} bereitstellen (vgl.\ Aufgabe 1 vom 12.\,11.\,2020).
Der Quelltext \gitfile{hp}{20201119}{loesung-2-f1.c} ist eine lauffähige Der Quelltext \gitfile{hp}{2020ws/20201119}{loesung-2-f1.c} ist eine lauffähige
Version des Programms, die den Fehler (Endlosschleife) Version des Programms, die den Fehler (Endlosschleife)
reproduziert. reproduziert.
...@@ -205,12 +205,12 @@ ...@@ -205,12 +205,12 @@
Es liegt nahe, den Fehler in der \lstinline{while}-Bedingung Es liegt nahe, den Fehler in der \lstinline{while}-Bedingung
zu korrigieren, so daß diese Schaltjahre berücksichtigt. Der zu korrigieren, so daß diese Schaltjahre berücksichtigt. Der
Quelltext \gitfile{hp}{20201119}{loesung-2-f2.c} behebt den Fehler auf diese Quelltext \gitfile{hp}{2020ws/20201119}{loesung-2-f2.c} behebt den Fehler auf diese
Weise mit Hilfe von Und- (\lstinline{&&}) und Weise mit Hilfe von Und- (\lstinline{&&}) und
Oder-Verknüpfungen (\lstinline{||}) in der Oder-Verknüpfungen (\lstinline{||}) in der
\lstinline{while}-Bedingung. \lstinline{while}-Bedingung.
Der Quelltext \gitfile{hp}{20201119}{loesung-2-f3.c} vermeidet die umständliche Der Quelltext \gitfile{hp}{2020ws/20201119}{loesung-2-f3.c} vermeidet die umständliche
Formulierung mit \lstinline{&&} und \lstinline{||} durch Formulierung mit \lstinline{&&} und \lstinline{||} durch
Verwendung des ternären Operators \lstinline{?:}. Dieser Verwendung des ternären Operators \lstinline{?:}. Dieser
stellt eine "`\lstinline{if}-Anweisung für Ausdrücke"' bereit. stellt eine "`\lstinline{if}-Anweisung für Ausdrücke"' bereit.
...@@ -218,7 +218,7 @@ ...@@ -218,7 +218,7 @@
\lstinline{days >} den Wert 366 im Falle eines Schaltjahrs \lstinline{days >} den Wert 366 im Falle eines Schaltjahrs
bzw.\ ansonsten den Wert 365. bzw.\ ansonsten den Wert 365.
Beide Lösungen \gitfile{hp}{20201119}{loesung-2-f2.c} und \gitfile{hp}{20201119}{loesung-2-f3.c} Beide Lösungen \gitfile{hp}{2020ws/20201119}{loesung-2-f2.c} und \gitfile{hp}{2020ws/20201119}{loesung-2-f3.c}
sind jedoch im Sinne der Aufgabenstellung \textbf{falsch}. sind jedoch im Sinne der Aufgabenstellung \textbf{falsch}.
Diese lautet: "`Schreiben Sie das Quelltextfragment so um, Diese lautet: "`Schreiben Sie das Quelltextfragment so um,
daß es die beschriebenen Probleme nicht mehr enthält."' daß es die beschriebenen Probleme nicht mehr enthält."'
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
\breath \breath
Eine richtige Lösung liefert \gitfile{hp}{20201119}{loesung-2-4.c}. Dieses Eine richtige Lösung liefert \gitfile{hp}{2020ws/20201119}{loesung-2-4.c}. Dieses
Programm speichert den Wert der Tage im Jahr in einer Programm speichert den Wert der Tage im Jahr in einer
Variablen \lstinline{DaysInYear}. Damit erübrigen sich die Variablen \lstinline{DaysInYear}. Damit erübrigen sich die
\lstinline{if}-Anweisungen innerhalb der \lstinline{if}-Anweisungen innerhalb der
...@@ -246,24 +246,24 @@ ...@@ -246,24 +246,24 @@
Um diese Code-Verdopplung loszuwerden, kann man das Um diese Code-Verdopplung loszuwerden, kann man das
\lstinline{if} durch den \lstinline{?:}-Operator ersetzen und \lstinline{if} durch den \lstinline{?:}-Operator ersetzen und
die Zuweisung innerhalb der \lstinline{while}-Bedingung die Zuweisung innerhalb der \lstinline{while}-Bedingung
vornehmen -- siehe \gitfile{hp}{20201119}{loesung-2-5.c}. Dies ist einer der vornehmen -- siehe \gitfile{hp}{2020ws/20201119}{loesung-2-5.c}. Dies ist einer der
seltenen Fälle, in denen ein Programm \emph{übersichtlicher\/} seltenen Fälle, in denen ein Programm \emph{übersichtlicher\/}
wird, wenn eine Zuweisung innerhalb einer Bedingung wird, wenn eine Zuweisung innerhalb einer Bedingung
stattfindet. stattfindet.
Alternativ kann \lstinline{DaysInYear()} auch eine Funktion Alternativ kann \lstinline{DaysInYear()} auch eine Funktion
sein -- siehe \gitfile{hp}{20201119}{loesung-2-6.c}. Diese Version ist sein -- siehe \gitfile{hp}{2020ws/20201119}{loesung-2-6.c}. Diese Version ist
wahrscheinlich die übersichtlichste, hat jedoch den Nachteil, wahrscheinlich die übersichtlichste, hat jedoch den Nachteil,
daß die Berechnung von \lstinline{DaysInYear()} zweimal statt daß die Berechnung von \lstinline{DaysInYear()} zweimal statt
nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit
verschwendet wird. verschwendet wird.
\gitfile{hp}{20201119}{loesung-2-7.c} und \gitfile{hp}{20201119}{loesung-2-8.c} beseitigen \gitfile{hp}{2020ws/20201119}{loesung-2-7.c} und \gitfile{hp}{2020ws/20201119}{loesung-2-8.c} beseitigen
dieses Problem durch eine Zuweisung des Funktionsergebnisses dieses Problem durch eine Zuweisung des Funktionsergebnisses
an eine Variable -- einmal innerhalb der an eine Variable -- einmal innerhalb der
\lstinline{while}-Bedingung und einmal außerhalb. \lstinline{while}-Bedingung und einmal außerhalb.
Der zweimalige Aufruf der Funktion \lstinline{DaysInYear()} in Der zweimalige Aufruf der Funktion \lstinline{DaysInYear()} in
\gitfile{hp}{20201119}{loesung-2-8.c} zählt nicht als Code-Verdopplung, denn \gitfile{hp}{2020ws/20201119}{loesung-2-8.c} zählt nicht als Code-Verdopplung, denn
der Code ist ja in einer Funktion gekapselt. (Genau dazu sind der Code ist ja in einer Funktion gekapselt. (Genau dazu sind
Funktionen ja da: daß man sie mehrfach aufrufen kann.) Funktionen ja da: daß man sie mehrfach aufrufen kann.)
......
No preview for this file type
...@@ -37,10 +37,10 @@ ...@@ -37,10 +37,10 @@
\exercise{Seltsame Programme} \exercise{Seltsame Programme}
Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20201119} Unter \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201119}
finden Sie (unter anderem)\\ finden Sie (unter anderem)\\
die Programme \gitfile{hp}{20201119}{test-1.c}, die Programme \gitfile{hp}{2020ws/20201119}{test-1.c},
\gitfile{hp}{20201119}{test-2.c} und \gitfile{hp}{20201119}{test-3.c}. \gitfile{hp}{2020ws/20201119}{test-2.c} und \gitfile{hp}{2020ws/20201119}{test-3.c}.
Was bewirken diese Programme, und warum verhalten sie sich so? Was bewirken diese Programme, und warum verhalten sie sich so?
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
\strut\hfill\url{http://heise.de/-193332}, \strut\hfill\url{http://heise.de/-193332},
\end{quote} \end{quote}
Der Artikel verweist auf ein Quelltextfragment (Datei: \gitfile{hp}{20201119}{aufgabe-2.c}), Der Artikel verweist auf ein Quelltextfragment (Datei: \gitfile{hp}{2020ws/20201119}{aufgabe-2.c}),
das für einen gegebenen Wert \lstinline{days} das für einen gegebenen Wert \lstinline{days}
das Jahr und den Tag innerhalb des Jahres das Jahr und den Tag innerhalb des Jahres
für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll: für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll:
......
No preview for this file type
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
Strings werden in der Programmiersprache C Strings werden in der Programmiersprache C
durch Zeiger auf \lstinline{char}-Variable realisiert. durch Zeiger auf \lstinline{char}-Variable realisiert.
Wir betrachten die folgende Funktion (Datei: \gitfile{hp}{20201126}{aufgabe-1.c}): Wir betrachten die folgende Funktion (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-1.c}):
\begin{center} \begin{center}
\begin{minipage}{8cm} \begin{minipage}{8cm}
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
\smallskip \smallskip
Die Datei \gitfile{hp}{20201126}{loesung-1.c} enthält ein Testprogramm Die Datei \gitfile{hp}{2020ws/20201126}{loesung-1.c} enthält ein Testprogramm
für alle o.\,a.\ Lösungen. für alle o.\,a.\ Lösungen.
Das Programm testet nur die offensichtlichsten Fälle; Das Programm testet nur die offensichtlichsten Fälle;
für den Einsatz der Funktionen in einer Produktivumgebung für den Einsatz der Funktionen in einer Produktivumgebung
...@@ -193,7 +193,7 @@ ...@@ -193,7 +193,7 @@
\exercise{Programm analysieren} \exercise{Programm analysieren}
Wir betrachten das folgende C-Programm (Datei: \gitfile{hp}{20201126}{aufgabe-2.c}): Wir betrachten das folgende C-Programm (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-2.c}):
\begin{lstlisting} \begin{lstlisting}
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
\end{lstlisting} \end{lstlisting}
...@@ -245,7 +245,7 @@ ...@@ -245,7 +245,7 @@
\lstinline{int main (void)} lautet und eine \lstinline{return}-Anweisung hat, \lstinline{int main (void)} lautet und eine \lstinline{return}-Anweisung hat,
wobei die in Aufgabenteil (a) festgestellte Eigenschaft erhalten bleiben soll.} wobei die in Aufgabenteil (a) festgestellte Eigenschaft erhalten bleiben soll.}
Datei: \gitfile{hp}{20201126}{loesung-2.c} Datei: \gitfile{hp}{2020ws/20201126}{loesung-2.c}
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
char*f="char*f=%c%s%c;int main(void){printf(f,34,f,34,10);return 0;}%c"; char*f="char*f=%c%s%c;int main(void){printf(f,34,f,34,10);return 0;}%c";
int main(void){printf(f,34,f,34,10);return 0;} int main(void){printf(f,34,f,34,10);return 0;}
...@@ -268,14 +268,14 @@ ...@@ -268,14 +268,14 @@
Hinweis dazu: \lstinline{#include<stdio.h>} Hinweis dazu: \lstinline{#include<stdio.h>}
(ohne Leerzeichen, um Platz zu sparen) (ohne Leerzeichen, um Platz zu sparen)
Lösung der Zusatzaufgabe: \gitfile{hp}{20201126}{loesung-2x.c} Lösung der Zusatzaufgabe: \gitfile{hp}{2020ws/20201126}{loesung-2x.c}
\end{itemize} \end{itemize}
\exercise{Fehlerhaftes Primzahl-Programm} \exercise{Fehlerhaftes Primzahl-Programm}
\begin{minipage}[t]{5.5cm} \begin{minipage}[t]{5.5cm}
Das nebenstehende Primzahlsuchprogramm (Datei: \gitfile{hp}{20201126}{aufgabe-3.c}) Das nebenstehende Primzahlsuchprogramm (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-3.c})
soll Zahlen ausgeben, die genau zwei Teiler haben, ist aber fehlerhaft. soll Zahlen ausgeben, die genau zwei Teiler haben, ist aber fehlerhaft.
\smallskip \smallskip
...@@ -327,7 +327,7 @@ ...@@ -327,7 +327,7 @@
die \lstinline{printf()}-Anweisung wird daher in jedem Fall ausgeführt. die \lstinline{printf()}-Anweisung wird daher in jedem Fall ausgeführt.
Korrektur dieses Fehlers: \lstinline{if (divisors == 2)} Korrektur dieses Fehlers: \lstinline{if (divisors == 2)}
-- siehe die Datei \gitfile{hp}{20201126}{loesung-2-1.c}. -- siehe die Datei \gitfile{hp}{2020ws/20201126}{loesung-2-1.c}.
\bigskip \bigskip
...@@ -359,7 +359,7 @@ ...@@ -359,7 +359,7 @@
\lstinline{for (i = 0; i < n; i++)}. \lstinline{for (i = 0; i < n; i++)}.
Korrektur dieses Fehlers: Beginn der Schleife mit \lstinline{i = 1} Korrektur dieses Fehlers: Beginn der Schleife mit \lstinline{i = 1}
statt \lstinline{i = 0} -- siehe die Datei \gitfile{hp}{20201126}{loesung-2-2.c}. statt \lstinline{i = 0} -- siehe die Datei \gitfile{hp}{2020ws/20201126}{loesung-2-2.c}.
\bigskip \bigskip
...@@ -379,7 +379,7 @@ ...@@ -379,7 +379,7 @@
Korrektur dieses Fehlers: Korrektur dieses Fehlers:
geschweifte Klammern um den Inhalt der äußeren \lstinline{for}-Schleife geschweifte Klammern um den Inhalt der äußeren \lstinline{for}-Schleife
-- siehe die Datei \gitfile{hp}{20201126}{loesung-2-3.c}. -- siehe die Datei \gitfile{hp}{2020ws/20201126}{loesung-2-3.c}.
\bigskip \bigskip
...@@ -403,12 +403,12 @@ ...@@ -403,12 +403,12 @@
Korrektur dieses Fehlers: Schleifenbedingung \lstinline{i <= n} Korrektur dieses Fehlers: Schleifenbedingung \lstinline{i <= n}
statt \lstinline{i < n} statt \lstinline{i < n}
-- siehe die Datei \gitfile{hp}{20201126}{loesung-2-4.c}. -- siehe die Datei \gitfile{hp}{2020ws/20201126}{loesung-2-4.c}.
\bigskip \bigskip
Nach der Korrektur dieses Fehlers verhält sich das Programm korrekt. Nach der Korrektur dieses Fehlers verhält sich das Programm korrekt.
Die Datei \gitfile{hp}{20201126}{loesung-2-4.c} enthält somit das korrigierte Programm. Die Datei \gitfile{hp}{2020ws/20201126}{loesung-2-4.c} enthält somit das korrigierte Programm.
\end{document} \end{document}
No preview for this file type
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
Strings werden in der Programmiersprache C Strings werden in der Programmiersprache C
durch Zeiger auf \lstinline{char}-Variable realisiert. durch Zeiger auf \lstinline{char}-Variable realisiert.
Wir betrachten die folgende Funktion (Datei: \gitfile{hp}{20201126}{aufgabe-1.c}): Wir betrachten die folgende Funktion (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-1.c}):
\begin{center} \begin{center}
\begin{minipage}{8cm} \begin{minipage}{8cm}
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
\exercise{Programm analysieren} \exercise{Programm analysieren}
Wir betrachten das folgende C-Programm (Datei: \gitfile{hp}{20201126}{aufgabe-2.c}): Wir betrachten das folgende C-Programm (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-2.c}):
\begin{lstlisting} \begin{lstlisting}
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
\end{lstlisting} \end{lstlisting}
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
\exercise{Fehlerhaftes Primzahl-Programm} \exercise{Fehlerhaftes Primzahl-Programm}
\begin{minipage}[t]{5.5cm} \begin{minipage}[t]{5.5cm}
Das nebenstehende Primzahlsuchprogramm (Datei: \gitfile{hp}{20201126}{aufgabe-3.c}) Das nebenstehende Primzahlsuchprogramm (Datei: \gitfile{hp}{2020ws/20201126}{aufgabe-3.c})
soll Zahlen ausgeben, die genau zwei Teiler haben, ist aber fehlerhaft. soll Zahlen ausgeben, die genau zwei Teiler haben, ist aber fehlerhaft.
\smallskip \smallskip
......
No preview for this file type
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
\begin{minipage}[t]{0.4\textwidth} \begin{minipage}[t]{0.4\textwidth}
Wir betrachten das folgende Programm\\ Wir betrachten das folgende Programm\\
(Datei: \gitfile{hp}{20201203}{aufgabe-1.c}): (Datei: \gitfile{hp}{2020ws/20201203}{aufgabe-1.c}):
\begin{lstlisting}[gobble=6] \begin{lstlisting}[gobble=6]
#include <stdio.h> #include <stdio.h>
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
\points{2} \points{2}
\item \item
Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern
(\gitfile{hp}{20201203}{aufgabe-1c.c})? (\gitfile{hp}{2020ws/20201203}{aufgabe-1c.c})?
Begründen Sie Ihre Antwort. Begründen Sie Ihre Antwort.
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
int main (void) int main (void)
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
\item \item
\textbf{Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern \textbf{Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern
(\gitfile{hp}{20201203}{aufgabe-1c.c})? (\gitfile{hp}{2020ws/20201203}{aufgabe-1c.c})?
Begründen Sie Ihre Antwort.} Begründen Sie Ihre Antwort.}
\begin{minipage}{0.35\textwidth} \begin{minipage}{0.35\textwidth}
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
\solution \solution
Die Datei \gitfile{hp}{20201203}{loesung-2.c} Die Datei \gitfile{hp}{2020ws/20201203}{loesung-2.c}
enthält die Bibliothek zusammen mit einem Test-Programm. enthält die Bibliothek zusammen mit einem Test-Programm.
Eine detaillierte Anleitung, Eine detaillierte Anleitung,
......
No preview for this file type
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
\begin{minipage}[t]{0.4\textwidth} \begin{minipage}[t]{0.4\textwidth}
Wir betrachten das folgende Programm\\ Wir betrachten das folgende Programm\\
(Datei: \gitfile{hp}{20201203}{aufgabe-1.c}): (Datei: \gitfile{hp}{2020ws/20201203}{aufgabe-1.c}):
\begin{lstlisting}[gobble=6] \begin{lstlisting}[gobble=6]
#include <stdio.h> #include <stdio.h>
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
\points{2} \points{2}
\item \item
Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern Was kann passieren, wenn Sie das Hauptprogramm wie folgt abändern
(\gitfile{hp}{20201203}{aufgabe-1c.c})? (\gitfile{hp}{2020ws/20201203}{aufgabe-1c.c})?
Begründen Sie Ihre Antwort. Begründen Sie Ihre Antwort.
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
int main (void) int main (void)
......
No preview for this file type
...@@ -61,9 +61,9 @@ ...@@ -61,9 +61,9 @@
Wenn wir die auf diese Weise ermittelten Ziffern direkt ausgeben, Wenn wir die auf diese Weise ermittelten Ziffern direkt ausgeben,
sind sie \emph{Little-Endian}, erscheinen also in umgekehrter Reihenfolge. sind sie \emph{Little-Endian}, erscheinen also in umgekehrter Reihenfolge.
Die Datei \gitfile{hp}{20201210}{loesung-1-1.c} setzt diesen Zwischenschritt um. Die Datei \gitfile{hp}{2020ws/20201210}{loesung-1-1.c} setzt diesen Zwischenschritt um.
Die Ausgabe der Ziffern erfolgt in \gitfile{hp}{20201210}{loesung-1-1.c} Die Ausgabe der Ziffern erfolgt in \gitfile{hp}{2020ws/20201210}{loesung-1-1.c}
über \lstinline{printf ("%d")} über \lstinline{printf ("%d")}
für die Ziffern 0 bis 9. Für die darüberliegenden Ziffern für die Ziffern 0 bis 9. Für die darüberliegenden Ziffern
wird der Buchstabe \lstinline{a} um die Ziffer abzüglich 10 inkrementiert wird der Buchstabe \lstinline{a} um die Ziffer abzüglich 10 inkrementiert
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
speichern wir die Ziffern von \lstinline{x} speichern wir die Ziffern von \lstinline{x}
in einem Array \lstinline{digits[]} zwischen in einem Array \lstinline{digits[]} zwischen
und geben sie anschließend in einer zweiten Schleife und geben sie anschließend in einer zweiten Schleife
in umgekehrter Reihenfolge aus (siehe \gitfile{hp}{20201210}{loesung-1-2.c}). in umgekehrter Reihenfolge aus (siehe \gitfile{hp}{2020ws/20201210}{loesung-1-2.c}).
Da wir wissen, daß \lstinline{x} eine 32-Bit-Zahl ist Da wir wissen, daß \lstinline{x} eine 32-Bit-Zahl ist
und daher höchstens 8 Hexadezimalziffern haben kann, und daher höchstens 8 Hexadezimalziffern haben kann,
ist 8 eine sinnvolle Länge für das Ziffern-Array \lstinline{digits[8]}. ist 8 eine sinnvolle Länge für das Ziffern-Array \lstinline{digits[8]}.
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
Nun sind die Ziffern in der richtigen Reihenfolge, Nun sind die Ziffern in der richtigen Reihenfolge,
aber wir erhalten zusätzlich zu den eigentlichen Ziffern führende Nullen. aber wir erhalten zusätzlich zu den eigentlichen Ziffern führende Nullen.
Da in der Aufgabenstellung nicht von führenden Nullen die Rede war, Da in der Aufgabenstellung nicht von führenden Nullen die Rede war,
sind diese nicht verboten; \gitfile{hp}{20201210}{loesung-1-2.c} ist daher sind diese nicht verboten; \gitfile{hp}{2020ws/20201210}{loesung-1-2.c} ist daher
eine richtige Lösung der Aufgabe. eine richtige Lösung der Aufgabe.
\breath \breath
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
können wir die \lstinline{for}-Schleifen durch \lstinline{while}-Schleifen ersetzen. können wir die \lstinline{for}-Schleifen durch \lstinline{while}-Schleifen ersetzen.
Die erste Schleife zählt hoch, solange \lstinline{x} ungleich 0 ist; Die erste Schleife zählt hoch, solange \lstinline{x} ungleich 0 ist;
die zweite zählt von dem erreichten Wert aus wieder herunter die zweite zählt von dem erreichten Wert aus wieder herunter
-- siehe \gitfile{hp}{20201210}{loesung-1-3.c}. -- siehe \gitfile{hp}{2020ws/20201210}{loesung-1-3.c}.
Da wir wissen, daß die Zahl \lstinline{x} höchstens 32 Bit, Da wir wissen, daß die Zahl \lstinline{x} höchstens 32 Bit,
also höchstens 8 Hexadezimalziffern hat, also höchstens 8 Hexadezimalziffern hat,
wissen wir, daß \lstinline{i} höchstens den Wert 8 erreichen kann, wissen wir, daß \lstinline{i} höchstens den Wert 8 erreichen kann,
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
Alternativ können wir auch mitschreiben, Alternativ können wir auch mitschreiben,
ob bereits eine Ziffer ungleich Null ausgegeben wurde, ob bereits eine Ziffer ungleich Null ausgegeben wurde,
und andernfalls die Ausgabe von Null-Ziffern unterdrücken und andernfalls die Ausgabe von Null-Ziffern unterdrücken
-- siehe \gitfile{hp}{20201210}{loesung-1-4.c}. -- siehe \gitfile{hp}{2020ws/20201210}{loesung-1-4.c}.
\breath \breath
...@@ -115,18 +115,18 @@ ...@@ -115,18 +115,18 @@
ist daher dasselbe wie eine Division durch 16, ist daher dasselbe wie eine Division durch 16,
und eine Und-Verknüpfung mit 15$_{10}$ = f$_{16}$ = 1111$_2$ und eine Und-Verknüpfung mit 15$_{10}$ = f$_{16}$ = 1111$_2$
ist dasselbe wie die Operation Modulo 16. ist dasselbe wie die Operation Modulo 16.
Die Datei \gitfile{hp}{20201210}{loesung-1-5.c} ist eine in dieser Weise abgewandelte Variante Die Datei \gitfile{hp}{2020ws/20201210}{loesung-1-5.c} ist eine in dieser Weise abgewandelte Variante
von \gitfile{hp}{20201210}{loesung-1-3.c}. von \gitfile{hp}{2020ws/20201210}{loesung-1-3.c}.
Mit dieser Methode kann man nicht nur auf die jeweils unterste Ziffer, Mit dieser Methode kann man nicht nur auf die jeweils unterste Ziffer,
sondern auf alle Ziffern direkt zugreifen. sondern auf alle Ziffern direkt zugreifen.
Damit ist kein Array als zusätzlicher Speicher mehr nötig. Damit ist kein Array als zusätzlicher Speicher mehr nötig.
Die Datei \gitfile{hp}{20201210}{loesung-1-6.c} setzt dies auf einfache Weise um. Die Datei \gitfile{hp}{2020ws/20201210}{loesung-1-6.c} setzt dies auf einfache Weise um.
Sie gibt wieder führende Nullen mit aus, Sie gibt wieder führende Nullen mit aus,
ist aber trotzdem eine weitere richtige Lösung der Aufgabe. ist aber trotzdem eine weitere richtige Lösung der Aufgabe.
Die führenden Nullen ließen sich auf die gleiche Weise vermeiden Die führenden Nullen ließen sich auf die gleiche Weise vermeiden
wie in \gitfile{hp}{20201210}{loesung-1-4.c}. wie in \gitfile{hp}{2020ws/20201210}{loesung-1-4.c}.
Die Bitverschiebungsmethode hat den Vorteil, Die Bitverschiebungsmethode hat den Vorteil,
daß kein zusätzliches Array benötigt wird. daß kein zusätzliches Array benötigt wird.
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
\exercise{Einfügen in Strings} \exercise{Einfügen in Strings}
Wir betrachten das folgende Programm (\gitfile{hp}{20201210}{aufgabe-2.c}): Wir betrachten das folgende Programm (\gitfile{hp}{2020ws/20201210}{aufgabe-2.c}):
% \begin{lstlisting}[style=numbered] % \begin{lstlisting}[style=numbered]
\begin{lstlisting} \begin{lstlisting}
#include <stdio.h> #include <stdio.h>
...@@ -250,7 +250,7 @@ ...@@ -250,7 +250,7 @@
Um im String "`Platz zu schaffen"', muß man von hinten beginnen, Um im String "`Platz zu schaffen"', muß man von hinten beginnen,
also die Schleife umdrehen\\ also die Schleife umdrehen\\
(siehe: \gitfile{hp}{20201210}{loesung-2.c}): (siehe: \gitfile{hp}{2020ws/20201210}{loesung-2.c}):
\begin{lstlisting}{gobble=8} \begin{lstlisting}{gobble=8}
for (int i = len; i >= pos; i--) for (int i = len; i >= pos; i--)
target[i + 1] = target[i]; target[i + 1] = target[i];
...@@ -324,7 +324,7 @@ ...@@ -324,7 +324,7 @@
\points{3} \points{3}
\end{itemize} \end{itemize}
Wir betrachten nun die folgenden Funktionen (Datei: \gitfile{hp}{20201210}{aufgabe-3.c}): Wir betrachten nun die folgenden Funktionen (Datei: \gitfile{hp}{2020ws/20201210}{aufgabe-3.c}):
\begin{center} \begin{center}
\begin{minipage}{8cm} \begin{minipage}{8cm}
\begin{lstlisting}[gobble=8] \begin{lstlisting}[gobble=8]
...@@ -394,8 +394,8 @@ ...@@ -394,8 +394,8 @@
\textbf{Schreiben Sie eine eigene Funktion \lstinline{int strlen (char *s)}, \textbf{Schreiben Sie eine eigene Funktion \lstinline{int strlen (char *s)},
die die Länge eines Strings zurückgibt.} die die Länge eines Strings zurückgibt.}
Siehe die Dateien \gitfile{hp}{20201210}{loesung-3c-1.c} (mit Array-Index) Siehe die Dateien \gitfile{hp}{2020ws/20201210}{loesung-3c-1.c} (mit Array-Index)
und \gitfile{hp}{20201210}{loesung-3c-2.c} (mit Zeiger-Arithmetik). und \gitfile{hp}{2020ws/20201210}{loesung-3c-2.c} (mit Zeiger-Arithmetik).
Beide Lösungen sind korrekt und arbeiten gleich schnell. Beide Lösungen sind korrekt und arbeiten gleich schnell.
Die Warnung \lstinline[style=terminal]{conflicting types for built-in function "strlen"} Die Warnung \lstinline[style=terminal]{conflicting types for built-in function "strlen"}
...@@ -413,7 +413,7 @@ ...@@ -413,7 +413,7 @@
und geben die Summe als Funktionsergebnis zurück. und geben die Summe als Funktionsergebnis zurück.
Im Falle des Test-Strings \lstinline{"Hello, world!\n"} Im Falle des Test-Strings \lstinline{"Hello, world!\n"}
lautet der Rückgabewert 1171 (siehe \gitfile{hp}{20201210}{loesung-3d-1.c} und \gitfile{hp}{20201210}{loesung-3d-2.c}). lautet der Rückgabewert 1171 (siehe \gitfile{hp}{2020ws/20201210}{loesung-3d-1.c} und \gitfile{hp}{2020ws/20201210}{loesung-3d-2.c}).
\item[(e)] \item[(e)]
% \textbf{Von welcher Ordnung (Landau-Symbol) sind die beiden Funktionen % \textbf{Von welcher Ordnung (Landau-Symbol) sind die beiden Funktionen
...@@ -443,9 +443,9 @@ ...@@ -443,9 +443,9 @@
und stattdessen die Ende-Prüfung in derselben Schleife vornimmt, und stattdessen die Ende-Prüfung in derselben Schleife vornimmt,
in der man auch die Zahlenwerte der Zeichen des Strings aufsummiert. in der man auch die Zahlenwerte der Zeichen des Strings aufsummiert.
Die Funktion \lstinline{fun_3()} in der Datei \gitfile{hp}{20201210}{loesung-3e-1.c} Die Funktion \lstinline{fun_3()} in der Datei \gitfile{hp}{2020ws/20201210}{loesung-3e-1.c}
realisiert dies mit einem Array-Index, realisiert dies mit einem Array-Index,
Die Funktion \lstinline{fun_4()} in der Datei \gitfile{hp}{20201210}{loesung-3e-2.c} Die Funktion \lstinline{fun_4()} in der Datei \gitfile{hp}{2020ws/20201210}{loesung-3e-2.c}
mit Zeiger-Arithmetik. mit Zeiger-Arithmetik.
Beide Lösungen sind korrekt und arbeiten gleich schnell. Beide Lösungen sind korrekt und arbeiten gleich schnell.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment