diff --git a/20201105/hp-uebung-20201105.pdf b/20201105/hp-uebung-20201105.pdf index 9fc02ee3495f5fa32eda3f023b6f448333f3ecc3..a2ae74e8b0ccd25a0ff9cecc699b5034368d9309 100644 Binary files a/20201105/hp-uebung-20201105.pdf and b/20201105/hp-uebung-20201105.pdf differ diff --git a/20201105/hp-uebung-20201105.tex b/20201105/hp-uebung-20201105.tex index 00c6d2be5cb44c969c338b69263b02aa69ba1a05..f91a10c74a670dc76d6e5df4914af5ce89a5f65d 100644 --- a/20201105/hp-uebung-20201105.tex +++ b/20201105/hp-uebung-20201105.tex @@ -37,14 +37,14 @@ \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 - \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} herunterladen sowie die folgenden Beispielprogramme: \begin{enumerate}[\quad(a)] - \item \gitfile{hp}{20201105}{hello.c} - \item \gitfile{hp}{20201105}{hello-gtk.c} + \item \gitfile{hp}{2020ws/20201105}{hello.c} + \item \gitfile{hp}{2020ws/20201105}{hello-gtk.c} \end{enumerate} Bringen Sie diese Programme auf Ihrem eigenen Rechner und/oder auf einem Rechner der Hochschule diff --git a/20201112/hp-musterloesung-20201112.pdf b/20201112/hp-musterloesung-20201112.pdf index 1cd35a34e66972bdd5dc2aab8969e5e9d928a6bb..a30be210e47015cbbcb98cbfc5469c0e1975f0f9 100644 Binary files a/20201112/hp-musterloesung-20201112.pdf and b/20201112/hp-musterloesung-20201112.pdf differ diff --git a/20201112/hp-musterloesung-20201112.tex b/20201112/hp-musterloesung-20201112.tex index bf0367b6305fc41944e7cec9fb0e770081b43c7f..37247f42e0c7f9f4bd32644a9cbd749c28039a26 100644 --- a/20201112/hp-musterloesung-20201112.tex +++ b/20201112/hp-musterloesung-20201112.tex @@ -132,25 +132,25 @@ return 0; } \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. Beachten Sie, daß die Funktion \emph{vor\/} dem Hauptprogramm deklariert werden muß, damit das Hauptprogramm sie kennt. (Es gibt Tricks, mit denen es auch anders geht, 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. Dies ist ebenfalls eine richtige Lösung der Aufgabe, 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 an unterschiedlichen Stellen. Dies ist schlechter Programmierstil ("`Cut-and-paste-Programmierung"'). - Die besten Lösungen sind \gitfile{hp}{20201112}{loesung-1-2.c} - und \gitfile{hp}{20201112}{loesung-1-3.c}. + Die besten Lösungen sind \gitfile{hp}{2020ws/20201112}{loesung-1-2.c} + und \gitfile{hp}{2020ws/20201112}{loesung-1-3.c}. \goodbreak @@ -200,15 +200,15 @@ \solution 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}. - (Zum Compilieren von \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}{2020ws/20201112}{loesung-2-2.c} und \gitfile{hp}{2020ws/20201112}{loesung-2-3.c} ist mindestens der C99-Standard erforderlich; bitte nötigenfalls 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. - 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 nicht rechtsbündig untereinander. @@ -232,16 +232,16 @@ \solution 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, - 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. 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. Dies ist nur möglich, weil das Programm eine zusätzliche Variable (hier: \lstinline{f2}) verwendet. @@ -252,7 +252,7 @@ \begin{minipage}[t]{0.65\textwidth} Wir betrachten das nebenstehende C-Programm - (Datei: \gitfile{hp}{20201112}{aufgabe-4.c}). + (Datei: \gitfile{hp}{2020ws/20201112}{aufgabe-4.c}). \begin{itemize} \item[(a)] Was bewirkt dieses Programm? Begründen Sie Ihre Antwort. @@ -310,7 +310,7 @@ \item[(b)] \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] #include <stdio.h> diff --git a/20201112/hp-uebung-20201112.pdf b/20201112/hp-uebung-20201112.pdf index 778726ed23519a65e306208e51e9de51ad2c7df5..485f0934a5c5cbd518b659c85708179c9c07306e 100644 Binary files a/20201112/hp-uebung-20201112.pdf and b/20201112/hp-uebung-20201112.pdf differ diff --git a/20201112/hp-uebung-20201112.tex b/20201112/hp-uebung-20201112.tex index 0fe5dff09c464ebc4e88d83aa1acab1448af1f87..ecfe5175d765cf81a36db1411e8fc52d84657d90 100644 --- a/20201112/hp-uebung-20201112.tex +++ b/20201112/hp-uebung-20201112.tex @@ -79,7 +79,7 @@ \begin{minipage}[t]{0.65\textwidth} Wir betrachten das nebenstehende C-Programm - (Datei: \gitfile{hp}{20201112}{aufgabe-4.c}). + (Datei: \gitfile{hp}{2020ws/20201112}{aufgabe-4.c}). \begin{itemize} \item[(a)] Was bewirkt dieses Programm? Begründen Sie Ihre Antwort. diff --git a/20201119/hp-musterloesung-20201119.pdf b/20201119/hp-musterloesung-20201119.pdf index 509d508b21d0e101d8dec612f5cd541bc303fb5c..53f9bb704884eee1c02c409b2b055adeed78a1b0 100644 Binary files a/20201119/hp-musterloesung-20201119.pdf and b/20201119/hp-musterloesung-20201119.pdf differ diff --git a/20201119/hp-musterloesung-20201119.tex b/20201119/hp-musterloesung-20201119.tex index 392afbbe0379e9f60824c7a505d09c691a51491d..f1bcd8d470eb2269f57961a2b0d3a2601a4cde11 100644 --- a/20201119/hp-musterloesung-20201119.tex +++ b/20201119/hp-musterloesung-20201119.tex @@ -33,10 +33,10 @@ \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)\\ - die Programme \gitfile{hp}{20201119}{test-1.c}, - \gitfile{hp}{20201119}{test-2.c} und \gitfile{hp}{20201119}{test-3.c}. + die Programme \gitfile{hp}{2020ws/20201119}{test-1.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? @@ -44,7 +44,7 @@ \begin{itemize} \item - \gitfile{hp}{20201119}{test-1.c} + \gitfile{hp}{2020ws/20201119}{test-1.c} Hinter \lstinline{return} steht ein Ausdruck mit dem Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma @@ -59,7 +59,7 @@ übergeben und daher \lstinline{return 0} ausgeführt. \item - \gitfile{hp}{20201119}{test-2.c} + \gitfile{hp}{2020ws/20201119}{test-2.c} Das Programm gibt die Zeile \lstinline[style=terminal]{Die Antwort lautet: 42} aus. @@ -72,7 +72,7 @@ \lstinline{else}-Zweig. \item - \gitfile{hp}{20201119}{test-3.c} + \gitfile{hp}{2020ws/20201119}{test-3.c} Das Programm stürzt mit einer Fehlermeldung "`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab. @@ -104,7 +104,7 @@ \strut\hfill\url{http://heise.de/-193332}, \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 Jahr und den Tag innerhalb des Jahres für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll: @@ -197,7 +197,7 @@ 366 zu setzen. Darüberhinaus muß man die Funktion \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) reproduziert. @@ -205,12 +205,12 @@ Es liegt nahe, den Fehler in der \lstinline{while}-Bedingung 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 Oder-Verknüpfungen (\lstinline{||}) in der \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 Verwendung des ternären Operators \lstinline{?:}. Dieser stellt eine "`\lstinline{if}-Anweisung für Ausdrücke"' bereit. @@ -218,7 +218,7 @@ \lstinline{days >} den Wert 366 im Falle eines Schaltjahrs 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}. Diese lautet: "`Schreiben Sie das Quelltextfragment so um, daß es die beschriebenen Probleme nicht mehr enthält."' @@ -230,7 +230,7 @@ \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 Variablen \lstinline{DaysInYear}. Damit erübrigen sich die \lstinline{if}-Anweisungen innerhalb der @@ -246,24 +246,24 @@ Um diese Code-Verdopplung loszuwerden, kann man das \lstinline{if} durch den \lstinline{?:}-Operator ersetzen und 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\/} wird, wenn eine Zuweisung innerhalb einer Bedingung stattfindet. 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, daß die Berechnung von \lstinline{DaysInYear()} zweimal statt nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit 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 an eine Variable -- einmal innerhalb der \lstinline{while}-Bedingung und einmal außerhalb. 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 Funktionen ja da: daß man sie mehrfach aufrufen kann.) diff --git a/20201119/hp-uebung-20201119.pdf b/20201119/hp-uebung-20201119.pdf index ceecfb8a89fa6091c0ec15f6d22ac7f8edac73f5..199e98fa298500294d2f22bbed6ae771ec5d2145 100644 Binary files a/20201119/hp-uebung-20201119.pdf and b/20201119/hp-uebung-20201119.pdf differ diff --git a/20201119/hp-uebung-20201119.tex b/20201119/hp-uebung-20201119.tex index 9b7486c28a3654a9d9fdb70b08a3feecdac5d770..923d5ce91ac2391fb7d87d3a38616e5b95bd8434 100644 --- a/20201119/hp-uebung-20201119.tex +++ b/20201119/hp-uebung-20201119.tex @@ -37,10 +37,10 @@ \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)\\ - die Programme \gitfile{hp}{20201119}{test-1.c}, - \gitfile{hp}{20201119}{test-2.c} und \gitfile{hp}{20201119}{test-3.c}. + die Programme \gitfile{hp}{2020ws/20201119}{test-1.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? @@ -55,7 +55,7 @@ \strut\hfill\url{http://heise.de/-193332}, \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 Jahr und den Tag innerhalb des Jahres für den \lstinline{days}-ten Tag nach dem 1.\,1.\,1980 berechnen soll: diff --git a/20201126/hp-musterloesung-20201126.pdf b/20201126/hp-musterloesung-20201126.pdf index f2cf5e9ddb5b4bf697b29249397a66304bdfcd8d..4739320734aabdfa9557d77aa213fea5b04f515e 100644 Binary files a/20201126/hp-musterloesung-20201126.pdf and b/20201126/hp-musterloesung-20201126.pdf differ diff --git a/20201126/hp-musterloesung-20201126.tex b/20201126/hp-musterloesung-20201126.tex index e8d013ea2e80920c394d37d79d3216c13c15a72b..f885398763f9073f0f4a58462ff405342bdaf001 100644 --- a/20201126/hp-musterloesung-20201126.tex +++ b/20201126/hp-musterloesung-20201126.tex @@ -36,7 +36,7 @@ Strings werden in der Programmiersprache C 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{minipage}{8cm} \begin{lstlisting}[gobble=8] @@ -157,7 +157,7 @@ \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. Das Programm testet nur die offensichtlichsten Fälle; für den Einsatz der Funktionen in einer Produktivumgebung @@ -193,7 +193,7 @@ \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} char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} \end{lstlisting} @@ -245,7 +245,7 @@ \lstinline{int main (void)} lautet und eine \lstinline{return}-Anweisung hat, 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] 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;} @@ -268,14 +268,14 @@ Hinweis dazu: \lstinline{#include<stdio.h>} (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} \exercise{Fehlerhaftes Primzahl-Programm} \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. \smallskip @@ -327,7 +327,7 @@ die \lstinline{printf()}-Anweisung wird daher in jedem Fall ausgeführt. 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 @@ -359,7 +359,7 @@ \lstinline{for (i = 0; i < n; i++)}. 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 @@ -379,7 +379,7 @@ Korrektur dieses Fehlers: 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 @@ -403,12 +403,12 @@ Korrektur dieses Fehlers: Schleifenbedingung \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 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} diff --git a/20201126/hp-uebung-20201126.pdf b/20201126/hp-uebung-20201126.pdf index ed25f3143eb9caea63406bb980016d034292ad6b..271787494f648cfbc71bbcf7b195bc60dda2eb83 100644 Binary files a/20201126/hp-uebung-20201126.pdf and b/20201126/hp-uebung-20201126.pdf differ diff --git a/20201126/hp-uebung-20201126.tex b/20201126/hp-uebung-20201126.tex index 108b692e04fb871d9f16d1f07dee699611eefd4e..9ca341764b4364160bdfd75783fd46d17188d85d 100644 --- a/20201126/hp-uebung-20201126.tex +++ b/20201126/hp-uebung-20201126.tex @@ -40,7 +40,7 @@ Strings werden in der Programmiersprache C 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{minipage}{8cm} \begin{lstlisting}[gobble=8] @@ -77,7 +77,7 @@ \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} char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} \end{lstlisting} @@ -96,7 +96,7 @@ \exercise{Fehlerhaftes Primzahl-Programm} \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. \smallskip diff --git a/20201203/hp-musterloesung-20201203.pdf b/20201203/hp-musterloesung-20201203.pdf index 34f30286f7f0c2c98370411f33447737c8938a63..b4e1a8c2a0acc02a5385f0053cecc5810c168bc9 100644 Binary files a/20201203/hp-musterloesung-20201203.pdf and b/20201203/hp-musterloesung-20201203.pdf differ diff --git a/20201203/hp-musterloesung-20201203.tex b/20201203/hp-musterloesung-20201203.tex index e93adefdc7bdf7eba6d775e7a615d6d924a1bf68..b2208917afca84821c8020490e76241a781c8323 100644 --- a/20201203/hp-musterloesung-20201203.tex +++ b/20201203/hp-musterloesung-20201203.tex @@ -35,7 +35,7 @@ \begin{minipage}[t]{0.4\textwidth} Wir betrachten das folgende Programm\\ - (Datei: \gitfile{hp}{20201203}{aufgabe-1.c}): + (Datei: \gitfile{hp}{2020ws/20201203}{aufgabe-1.c}): \begin{lstlisting}[gobble=6] #include <stdio.h> @@ -84,7 +84,7 @@ \points{2} \item 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. \begin{lstlisting}[gobble=8] int main (void) @@ -144,7 +144,7 @@ \item \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.} \begin{minipage}{0.35\textwidth} @@ -194,7 +194,7 @@ \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. Eine detaillierte Anleitung, diff --git a/20201203/hp-uebung-20201203.pdf b/20201203/hp-uebung-20201203.pdf index 77b848f34fa2783531c7149f9dde9261482b78d6..f6a2d288e3db1714dcfa52b366e0dda929cafe80 100644 Binary files a/20201203/hp-uebung-20201203.pdf and b/20201203/hp-uebung-20201203.pdf differ diff --git a/20201203/hp-uebung-20201203.tex b/20201203/hp-uebung-20201203.tex index dd019955cf7bc0d77c3b0715cb8b24b0bd147e14..f1b3659cd4ec6e8beb192a2a199e400d4870be07 100644 --- a/20201203/hp-uebung-20201203.tex +++ b/20201203/hp-uebung-20201203.tex @@ -44,7 +44,7 @@ \begin{minipage}[t]{0.4\textwidth} Wir betrachten das folgende Programm\\ - (Datei: \gitfile{hp}{20201203}{aufgabe-1.c}): + (Datei: \gitfile{hp}{2020ws/20201203}{aufgabe-1.c}): \begin{lstlisting}[gobble=6] #include <stdio.h> @@ -93,7 +93,7 @@ \points{2} \item 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. \begin{lstlisting}[gobble=8] int main (void) diff --git a/20201210/hp-musterloesung-20201210.pdf b/20201210/hp-musterloesung-20201210.pdf index 9b53df19a21b11266eb047f91894b433218ce66f..e2c19bae1421c7d78645e9af29bb242ca6c649c5 100644 Binary files a/20201210/hp-musterloesung-20201210.pdf and b/20201210/hp-musterloesung-20201210.pdf differ diff --git a/20201210/hp-musterloesung-20201210.tex b/20201210/hp-musterloesung-20201210.tex index 3b948f5f6cd46a811057e18e21f3bd1a1742dadb..9f1c06d864d055f41ba36c141ce532eb2dbffb1f 100644 --- a/20201210/hp-musterloesung-20201210.tex +++ b/20201210/hp-musterloesung-20201210.tex @@ -61,9 +61,9 @@ Wenn wir die auf diese Weise ermittelten Ziffern direkt ausgeben, 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")} 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 @@ -73,7 +73,7 @@ speichern wir die Ziffern von \lstinline{x} in einem Array \lstinline{digits[]} zwischen 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 und daher höchstens 8 Hexadezimalziffern haben kann, ist 8 eine sinnvolle Länge für das Ziffern-Array \lstinline{digits[8]}. @@ -81,7 +81,7 @@ Nun sind die Ziffern in der richtigen Reihenfolge, aber wir erhalten zusätzlich zu den eigentlichen Ziffern führende Nullen. 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. \breath @@ -90,7 +90,7 @@ 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 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, also höchstens 8 Hexadezimalziffern hat, wissen wir, daß \lstinline{i} höchstens den Wert 8 erreichen kann, @@ -105,7 +105,7 @@ Alternativ können wir auch mitschreiben, ob bereits eine Ziffer ungleich Null ausgegeben wurde, 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 @@ -115,18 +115,18 @@ ist daher dasselbe wie eine Division durch 16, und eine Und-Verknüpfung mit 15$_{10}$ = f$_{16}$ = 1111$_2$ ist dasselbe wie die Operation Modulo 16. - Die Datei \gitfile{hp}{20201210}{loesung-1-5.c} ist eine in dieser Weise abgewandelte Variante - von \gitfile{hp}{20201210}{loesung-1-3.c}. + Die Datei \gitfile{hp}{2020ws/20201210}{loesung-1-5.c} ist eine in dieser Weise abgewandelte Variante + von \gitfile{hp}{2020ws/20201210}{loesung-1-3.c}. Mit dieser Methode kann man nicht nur auf die jeweils unterste Ziffer, sondern auf alle Ziffern direkt zugreifen. 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, ist aber trotzdem eine weitere richtige Lösung der Aufgabe. 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, daß kein zusätzliches Array benötigt wird. @@ -140,7 +140,7 @@ \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} #include <stdio.h> @@ -250,7 +250,7 @@ Um im String "`Platz zu schaffen"', muß man von hinten beginnen, also die Schleife umdrehen\\ - (siehe: \gitfile{hp}{20201210}{loesung-2.c}): + (siehe: \gitfile{hp}{2020ws/20201210}{loesung-2.c}): \begin{lstlisting}{gobble=8} for (int i = len; i >= pos; i--) target[i + 1] = target[i]; @@ -324,7 +324,7 @@ \points{3} \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{minipage}{8cm} \begin{lstlisting}[gobble=8] @@ -394,8 +394,8 @@ \textbf{Schreiben Sie eine eigene Funktion \lstinline{int strlen (char *s)}, die die Länge eines Strings zurückgibt.} - Siehe die Dateien \gitfile{hp}{20201210}{loesung-3c-1.c} (mit Array-Index) - und \gitfile{hp}{20201210}{loesung-3c-2.c} (mit Zeiger-Arithmetik). + Siehe die Dateien \gitfile{hp}{2020ws/20201210}{loesung-3c-1.c} (mit Array-Index) + und \gitfile{hp}{2020ws/20201210}{loesung-3c-2.c} (mit Zeiger-Arithmetik). Beide Lösungen sind korrekt und arbeiten gleich schnell. Die Warnung \lstinline[style=terminal]{conflicting types for built-in function "strlen"} @@ -413,7 +413,7 @@ und geben die Summe als Funktionsergebnis zurück. 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)] % \textbf{Von welcher Ordnung (Landau-Symbol) sind die beiden Funktionen @@ -443,9 +443,9 @@ und stattdessen die Ende-Prüfung in derselben Schleife vornimmt, 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, - 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. Beide Lösungen sind korrekt und arbeiten gleich schnell. diff --git a/20201210/hp-uebung-20201210.pdf b/20201210/hp-uebung-20201210.pdf index 0c97d9d304f3890dc9016e9f17898a5492a5da00..6d713c0cd332a21c28da29a719303a07ea65ccd7 100644 Binary files a/20201210/hp-uebung-20201210.pdf and b/20201210/hp-uebung-20201210.pdf differ diff --git a/20201210/hp-uebung-20201210.tex b/20201210/hp-uebung-20201210.tex index fed8650425ab484ed374fdd943766230b2c6e761..c988102749d6d59d839394382d0222f845f97022 100644 --- a/20201210/hp-uebung-20201210.tex +++ b/20201210/hp-uebung-20201210.tex @@ -59,7 +59,7 @@ \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} #include <stdio.h> @@ -170,7 +170,7 @@ \points{3} \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{minipage}{8cm} \begin{lstlisting}[gobble=8] diff --git a/20201217/hp-2020ws-p2.pdf b/20201217/hp-2020ws-p2.pdf index 4916d463ee8b413c41cf654537397798a23ebf4d..0081d3c2667838cb911e8ca1086c615acc4f45b6 100644 Binary files a/20201217/hp-2020ws-p2.pdf and b/20201217/hp-2020ws-p2.pdf differ diff --git a/20201217/hp-2020ws-p2.tex b/20201217/hp-2020ws-p2.tex index 38bdde2fd5b9ebe9ce3a3631a80efca598642108..12a39ac9fa8c9f5972caa4f98e6cae16a38128d8 100644 --- a/20201217/hp-2020ws-p2.tex +++ b/20201217/hp-2020ws-p2.tex @@ -118,7 +118,7 @@ \item Für eine derartige Simulation einschließlich ihrer Darstellung als bewegte Grafik - können Sie sich von dem Beispiel-Programm \gitfile{hp}{20201217}{gtk-16.c} + können Sie sich von dem Beispiel-Programm \gitfile{hp}{2020ws/20201217}{gtk-16.c} inspirieren lassen. % (Compilieren mit: % \lstinline[style=cmd]{gcc} diff --git a/20201217/hp-musterloesung-20201217.pdf b/20201217/hp-musterloesung-20201217.pdf index b24f535efe114e8c0e5539547b29f19ab90e3d4d..6d28b21ef0e1d7d973b4e6d345c85fce9899181d 100644 Binary files a/20201217/hp-musterloesung-20201217.pdf and b/20201217/hp-musterloesung-20201217.pdf differ diff --git a/20201217/hp-musterloesung-20201217.tex b/20201217/hp-musterloesung-20201217.tex index 80b5cf47a725e33ea10db827fa4a34d6c24ac89d..96a1a73d756410ff9290f1c5ef7bb910f53bc97d 100644 --- a/20201217/hp-musterloesung-20201217.tex +++ b/20201217/hp-musterloesung-20201217.tex @@ -80,7 +80,7 @@ \textbf{Schreiben Sie ein C-Programm, das den zeitlichen Spannungsverlauf in einer Tabelle darstellt.} - In dem Programm \gitfile{hp}{20201217}{loesung-1a.c} + In dem Programm \gitfile{hp}{2020ws/20201217}{loesung-1a.c} arbeiten wir, dem ersten Hinweis folgend, mit einem Zeitintervall von \lstinline{dt = 0.01}. Mit dieser Schrittweite lassen wir uns eine Tabelle ausgeben, @@ -109,9 +109,9 @@ \textbf{Schreiben Sie ein C-Programm, das ermittelt, wie lange es dauert, bis die Spannung unter \boldmath $0.1\,{\rm V}$ gefallen ist.} - Wir ändern das Programm \gitfile{hp}{20201217}{loesung-1a.c} so ab, + Wir ändern das Programm \gitfile{hp}{2020ws/20201217}{loesung-1a.c} so ab, daß zum einen die Schleife abbricht, sobald die Spannung - den Wert $0.1\,{\rm V}$ unterschreitet (\gitfile{hp}{20201217}{loesung-1b.c}), + den Wert $0.1\,{\rm V}$ unterschreitet (\gitfile{hp}{2020ws/20201217}{loesung-1b.c}), und daß zum anderen nicht jedesmal eine Zeile für die Tabelle ausgegeben wird, sondern erst am Ende die Zeit (und die Spannung). @@ -126,10 +126,10 @@ U(t) = U_0 \cdot e^{-\frac{t}{RC}} \end{math}} - Wir ändern das Programm \gitfile{hp}{20201217}{loesung-1a.c} so ab, + Wir ändern das Programm \gitfile{hp}{2020ws/20201217}{loesung-1a.c} so ab, daß es zusätzlich zur Zeit und zur simulierten Spannung die exakte Spannung $U_0 \cdot e^{-\frac{t}{RC}}$ - gemäß der theoretischen Entladekurve ausgibt (\gitfile{hp}{20201217}{loesung-1c.c}), + gemäß der theoretischen Entladekurve ausgibt (\gitfile{hp}{2020ws/20201217}{loesung-1c.c}), Da dieses Programm die Exponentialfunktion verwendet, müssen wir nun beim Compilieren zusätzlich \lstinline[style=cmd]{-lm}\hspace{1pt} @@ -145,7 +145,7 @@ Wenn Sie die Ausgabe des Programms, z.\,B.\ mit \lstinline[style=cmd]{./loesung-1c > loesung-1c.dat}, - in einer Datei \gitfile{hp}{20201217}{loesung-1c.dat} speichern, + in einer Datei \gitfile{hp}{2020ws/20201217}{loesung-1c.dat} speichern, können Sie sich die beiden Kurven graphisch darstellen lassen, z.\,B.\ mit \file{gnuplot} und dem folgenden Befehl: \begin{lstlisting}[style=cmd,gobble=8] @@ -165,7 +165,7 @@ \exercise{Fehlerhaftes Programm: Hüpfender Ball} Das auf der nächsten Seite abgedruckte GTK+-Programm - (Datei: \gitfile{hp}{20201217}{aufgabe-2.c}) soll einen + (Datei: \gitfile{hp}{2020ws/20201217}{aufgabe-2.c}) soll einen hüpfenden Ball darstellen, ist jedoch fehlerhaft. \begin{enumerate}[\quad(a)] @@ -277,7 +277,7 @@ \lstinline{g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);} Dies erkennt man sehr schnell durch Vergleich mit dem Beispiel-Programm - \gitfile{hp}{20201217}{gtk-16.c}. + \gitfile{hp}{2020ws/20201217}{gtk-16.c}. \item \textbf{Nach der Fehlerbehebung in Aufgabenteil (a) @@ -290,7 +290,7 @@ \lstinline{g_timeout_add (50, (GSourceFunc) timer, drawing_area);} Auch dies erkennt man sehr schnell durch Vergleich mit dem Beispiel-Programm - \gitfile{hp}{20201217}{gtk-16.c}. + \gitfile{hp}{2020ws/20201217}{gtk-16.c}. \item \textbf{Erklären Sie das merkwürdige Hüpfverhalten des Balls. @@ -320,7 +320,7 @@ \lstinline{vy += g * dt;} Auch dies erkennt man sehr schnell durch Vergleich mit dem Beispiel-Programm - \gitfile{hp}{20201217}{gtk-16.c}. + \gitfile{hp}{2020ws/20201217}{gtk-16.c}. \end{enumerate} \end{document} diff --git a/20201217/hp-uebung-20201217.pdf b/20201217/hp-uebung-20201217.pdf index 0e0a9dd70fa2689fdffa47b22ff53faf76d9534f..9dabeb446661ba7dadcc3a7dbc49bf325c10e834 100644 Binary files a/20201217/hp-uebung-20201217.pdf and b/20201217/hp-uebung-20201217.pdf differ diff --git a/20201217/hp-uebung-20201217.tex b/20201217/hp-uebung-20201217.tex index c751465ed845232f67ea819201ea0c875d465d49..6b9c11944f2215e1240d749a8d2cc744005497f7 100644 --- a/20201217/hp-uebung-20201217.tex +++ b/20201217/hp-uebung-20201217.tex @@ -82,7 +82,7 @@ \exercise{Fehlerhaftes Programm: Hüpfender Ball} Das auf der nächsten Seite abgedruckte GTK+-Programm - (Datei: \gitfile{hp}{20201217}{aufgabe-2.c}) soll einen + (Datei: \gitfile{hp}{2020ws/20201217}{aufgabe-2.c}) soll einen hüpfenden Ball darstellen, ist jedoch fehlerhaft. \begin{enumerate}[\quad(a)] diff --git a/common/pgscript.sty b/common/pgscript.sty index 0a36e84e6b3087a3369e74d1a5b33fd58902993d..e6a863d7b20ddec0b2d483deb393c4b826d50c6b 100644 --- a/common/pgscript.sty +++ b/common/pgscript.sty @@ -102,7 +102,7 @@ \newcounter{points} \newcommand{\points}[1]{\ifthenelse{#1=1}{(1 Punkt)}{(#1 Punkte)}\addtocounter{points}{#1}} -\newcommand{\gitfile}[3]{\href{https://gitlab.cvh-server.de/pgerwinski/#1/raw/master/#2/#3}{\file{#3}}} +\newcommand{\gitfile}[3]{\href{https://gitlab.cvh-server.de/pgerwinski/#1/raw/#2/#3}{\file{#3}}} \usepackage{listings} \lstset{basicstyle=\color{blendedblue}, diff --git a/script/hp-2020ws.pdf b/script/hp-2020ws.pdf index eab13eeb248cdd96d7ae143e812fffbbffde1e07..5cb5791ac2df663284a741c84b703d637c9494a0 100644 Binary files a/script/hp-2020ws.pdf and b/script/hp-2020ws.pdf differ diff --git a/script/hp-2020ws.tex b/script/hp-2020ws.tex index 9f44ecd7250c6a89ec08983eb70536f20ac14948..a6f2868c37c02c4ec315a1dc06f74894062f0bf4 100644 --- a/script/hp-2020ws.tex +++ b/script/hp-2020ws.tex @@ -1967,7 +1967,7 @@ führt dies zu unsinnigen Ergebnissen bis hin zu einem Absturz (Speicherzugriffsfehler). - Beispielprogramm: \gitfile{hp}{20161024}{strings-14.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-14.c} \item[\textbf{;\,)}] Null-Zeichen in den String schreiben @@ -1988,7 +1988,7 @@ werden andere Variable überschrieben, was in der Regel zu einem Absturz führt (Speicherzugriffsfehler). - Beispielprogramm: \gitfile{hp}{20161024}{strings-14.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-14.c} \item \lstinline{strlen()} -- Ermitteln der Länge eines Strings @@ -2001,7 +2001,7 @@ printf ("%s\n", strlen (hello)); \end{lstlisting} - Beispielprogramm: \gitfile{hp}{20161024}{strings-14.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-14.c} \item \lstinline{strcmp()} -- Strings vergleichen @@ -2024,7 +2024,7 @@ normalerweise ASCII. Dabei kommen z.\,B.\ Großbuchstaben grundsätzlich \emph{vor\/} den Kleinbuchstaben. - Beispielprogramm: \gitfile{hp}{20161024}{strings-15.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-15.c} \item \lstinline{strcat()} -- String an anderen String anhängen @@ -2046,7 +2046,7 @@ werden andere Variable überschrieben, was in der Regel zu einem Absturz führt (Speicherzugriffsfehler). - Beispielprogramm: \gitfile{hp}{20161024}{strings-15.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-15.c} \item \lstinline{sprintf()} -- in String schreiben @@ -2075,7 +2075,7 @@ zu verwenden. Diese erwartet als zweiten Parameter die Länge des Ziel-Strings und sorgt dafür, daß nicht über dessen Ende hinausgeschrieben wird. - Beispielprogramm: \gitfile{hp}{20161024}{strings-16.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-16.c} \item \lstinline{strstr()} -- in String suchen @@ -2097,7 +2097,7 @@ (\emph{signed size type\/}). Um diese mit \lstinline{printf()} auszugeben, verwendet man \lstinline{%zd} anstelle von \lstinline{%d}. - Beispielprogramm: \gitfile{hp}{20161024}{strings-16.c} + Beispielprogramm: \gitfile{hp}{2020ws/20161024}{strings-16.c} \end{itemize} @@ -3096,7 +3096,7 @@ Unter Microsoft Windows ist der Aufruf etwas anders und hängt von der verwendeten Version der GLUT-Bibliothek ab. Für Details siehe die Dokumentation der GLUT-Bibliothek - sowie die Datei \gitfile{hp}{20161031}{egal.txt}.) + sowie die Datei \gitfile{hp}{2020ws/20161031}{egal.txt}.) Die Bibliothek stellt uns fertig geschriebene Programmfragmente zur Verfügung, insbesondere: \begin{itemize} @@ -5274,7 +5274,7 @@ print_object (object[i]); \end{lstlisting} - (Beispiel-Programm: \gitfile{hp}{20161219}{objects-7.c}) + (Beispiel-Programm: \gitfile{hp}{2020ws/20161219}{objects-7.c}) Die expliziten Typumwandlungen sind ein gravierender Nachteil dieser Vorgehensweise, denn sie schalten jegliche Überprüfung durch den Compiler aus. @@ -5317,7 +5317,7 @@ NULL }; \end{lstlisting} - (Beispiel-Programm: \gitfile{hp}{20161219}{objects-8.c}) + (Beispiel-Programm: \gitfile{hp}{2020ws/20161219}{objects-8.c}) \subsection{Unions} @@ -5357,7 +5357,7 @@ Die im o.\,a.\ Beispiel konstruierte \lstinline{union} spricht dieselbe Speicherzelle einerseits als \lstinline{int8_t} an und andererseits als \lstinline{uint8_t}. - Das Beispiel-Programm (Datei: \gitfile{hp}{20161219}{unions-1.c}) + Das Beispiel-Programm (Datei: \gitfile{hp}{2020ws/20161219}{unions-1.c}) nutzt dies aus, um die negative Zahl \lstinline{-3} als positive 8-Bit-Zahl auszugeben (Berechnung des Zweierkomplements). @@ -5419,7 +5419,7 @@ \end{minipage} \end{center} - (Beispiel-Programm: \gitfile{hp}{20161219}{objects-9.c}) + (Beispiel-Programm: \gitfile{hp}{2020ws/20161219}{objects-9.c}) Das Ansprechen falscher Speicherbereiche wird hierdurch zwar nicht völlig ausgeschlossen; @@ -5437,7 +5437,7 @@ nur die veränderlichen Eigenschaften der Objekte in einer \lstinline{union} zu speichern -- siehe Aufgabe 1 (c) bis (e) in den Übungen vom 19.\,12.\,2016 - (Datei: \gitfile{hp}{20161219}{hp-uebung-20161219.pdf}). + (Datei: \gitfile{hp}{2020ws/20161219}{hp-uebung-20161219.pdf}). \goodbreak @@ -5454,7 +5454,7 @@ Die Bibliothek verwendet intern einige der hier besprochenen Vorgehensweisen zur Realisierung objektorientierter Programmierung in C. - Die Beispielprogramme \href{https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20161219}% + Die Beispielprogramme \href{https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20161219}% {\file{gtk-1.c} bis \file{gtk-7.c}} demonstrieren, wie man mit Hilfe von GTK+ ein einfaches GUI-Programm schreibt, das graphische Objekte (Rechteck, Kreis, Dreieck) auf den Bildschirm zeichnet @@ -5490,7 +5490,7 @@ sowie die Verarbeitung von Benutzereingaben (Tastatur, Maus) über Callbacks. - In \href{https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20161219/hp-2016ws-p4.pdf}% + In \href{https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20161219/hp-2016ws-p4.pdf}% {Praktikumsversuch 4} haben Sie selbst weitere Erfahrungen mit GTK+ gesammelt und gleichzeitig eine eigene Objekt-Hierarchie (für graphische Objekte: Rechteck, Kreis, Dreieck) programmiert. @@ -5611,7 +5611,7 @@ \breath - Das Beispiel-Programm \gitfile{hp}{20170109}{objects-12.c} illustriert, + Das Beispiel-Programm \gitfile{hp}{2020ws/20170109}{objects-12.c} illustriert, wie man virtuelle Methoden in C realisieren kann. In größeren Projekten ist es nicht effizient, @@ -5620,7 +5620,7 @@ Stattdessen speichert man in der Objektinstanz lediglich einen Zeiger auf eine Tabelle von Zeigern auf die virtuellen Methoden, die sog.\ \newterm{virtuelle Methodentabelle} -- - siehe das Beispiel-Programm \gitfile{hp}{20170109}{objects-13.c}. + siehe das Beispiel-Programm \gitfile{hp}{2020ws/20170109}{objects-13.c}. \subsection{Einführung in C++} @@ -5635,8 +5635,8 @@ Andere bekannte objektorientierte Sprachen sind Java, Python, C\#, JavaScript, PHP, verschiedene Pascal-Dialekte und viele weitere. - Das Beispiel-Programm \gitfile{hp}{20170109}{objects-14.cpp} - ist eine direkte Übersetzung von \gitfile{hp}{20170109}{objects-12.c} nach C++. + Das Beispiel-Programm \gitfile{hp}{2020ws/20170109}{objects-14.cpp} + ist eine direkte Übersetzung von \gitfile{hp}{2020ws/20170109}{objects-12.c} nach C++. In C++ kümmert sich der Compiler um die Vererbung zwischen den Objekt-Datentypen, um die Verwaltung der Zeiger auf virtuelle Methoden, um korrekte Konstruktoren und um vieles mehr. @@ -5687,7 +5687,7 @@ In der ermittelten Hälfte beginnt man die Suche wieder in der Mitte -- so lange, bis man nur noch ein einzelnes Element vor sich hat. - Das Beispiel-Programm \gitfile{hp}{20170116}{stack-11.c} illustriert, + Das Beispiel-Programm \gitfile{hp}{2020ws/20170116}{stack-11.c} illustriert, wie man einen Stack mit den o.\,g.\ Funktionalitäten implementieren kann. \breath @@ -5711,7 +5711,7 @@ Die beiden Indexvariablen arbeiten also \emph{ringförmig\/}; der FIFO wird durch einen \newterm{Ringpuffer\/} realisiert. - Beispiel-Programm: \gitfile{hp}{20170116}{fifo-8.c} + Beispiel-Programm: \gitfile{hp}{2020ws/20170116}{fifo-8.c} \subsection{Verkettete Listen} diff --git a/script/hp-slides-title-2020ws.tex b/script/hp-slides-title-2020ws.tex index f91e237bee502e184f9b69bb353656fea606b04e..0ab157f1bb3f3134cdb74c302bee3fb45214fef8 100644 --- a/script/hp-slides-title-2020ws.tex +++ b/script/hp-slides-title-2020ws.tex @@ -60,7 +60,7 @@ mit allen Zwischenschritten enthalten und befinden sich in den zu den jeweiligen Kalenderdaten gehörenden Verzeichnissen (z.\,B.\ für den 10.\kern0.5pt10.\,2020 unter - \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20201105/}\kern1pt). + \url{https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201105/}\kern1pt). Wenn Sie die Übungsaufgaben bearbeiten, nutzen Sie die Gelegenheit, Ihre Lösungen in den Übungen überprüfen zu lassen.