diff --git a/20151119/ainf-20151119.pdf b/20151119/ainf-20151119.pdf index b92b2e5bec937142c1366714b4d6a31f610c33b4..8ecf79dfd380bc0581c57c55efeab6a5f1abb56e 100644 Binary files a/20151119/ainf-20151119.pdf and b/20151119/ainf-20151119.pdf differ diff --git a/20151119/ainf-20151119.tex b/20151119/ainf-20151119.tex index 679ceed16f226e4b974d24b89552c2d2b067ec65..58065e6c0d274f2062bb994bcf5503378d555fc6 100644 --- a/20151119/ainf-20151119.tex +++ b/20151119/ainf-20151119.tex @@ -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!}\\ diff --git a/20151119/ainf-uebung-20151119.pdf b/20151119/ainf-uebung-20151119.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3aa5cf5589f41bcda03631ac636e8893ca0ae695 Binary files /dev/null and b/20151119/ainf-uebung-20151119.pdf differ diff --git a/20151119/ainf-uebung-20151119.tex b/20151119/ainf-uebung-20151119.tex new file mode 100644 index 0000000000000000000000000000000000000000..cc7c62d26d4c799cb16cc2d676f0736f0c7850fa --- /dev/null +++ b/20151119/ainf-uebung-20151119.tex @@ -0,0 +1,179 @@ +% 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} diff --git a/20151119/bla/hex-1.c b/20151119/bla/hex-1.c new file mode 100644 index 0000000000000000000000000000000000000000..937b43c837bd7c3f9d2b1b4652a3545014441f56 --- /dev/null +++ b/20151119/bla/hex-1.c @@ -0,0 +1,19 @@ +#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; +} diff --git a/20151119/bla/mainparam-1.c b/20151119/bla/mainparam-1.c new file mode 100644 index 0000000000000000000000000000000000000000..e6e64ba029e1042aff60960fc8b7c3d4d5d8e2e2 --- /dev/null +++ b/20151119/bla/mainparam-1.c @@ -0,0 +1,9 @@ +#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; +} diff --git a/20151119/bla/pruzzel.c b/20151119/bla/pruzzel.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/20151119/blubb b/20151119/blubb new file mode 100644 index 0000000000000000000000000000000000000000..fc22e11c08b409d0dd264bad74fd85c1b9d38b88 --- /dev/null +++ b/20151119/blubb @@ -0,0 +1,9 @@ + + ************************ + * * + * ++ ++ * + * ++ ++ * + * - - * + * ------------- * + * * + ******************** diff --git a/20151119/fak-1.c b/20151119/fak-1.c new file mode 100644 index 0000000000000000000000000000000000000000..75c7d8535dbdd6264b6dd3bf864bf3c1983a32ac --- /dev/null +++ b/20151119/fak-1.c @@ -0,0 +1,16 @@ +#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; +} diff --git a/20151119/hanoi-0.c b/20151119/hanoi-0.c new file mode 100644 index 0000000000000000000000000000000000000000..38b2ef9bfd7b1532a47c0537f60388362edaf872 --- /dev/null +++ b/20151119/hanoi-0.c @@ -0,0 +1,25 @@ +#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 (); +} diff --git a/20151119/hanoi-1.c b/20151119/hanoi-1.c new file mode 100644 index 0000000000000000000000000000000000000000..686325a32d4634acfb085e6ba7cfb7d3a4eebc1f --- /dev/null +++ b/20151119/hanoi-1.c @@ -0,0 +1,29 @@ +#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] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + display (); +} diff --git a/20151119/hanoi-2.c b/20151119/hanoi-2.c new file mode 100644 index 0000000000000000000000000000000000000000..bbbc07b0c3e1b2682d4a9a5e08837f60bd18bfa8 --- /dev/null +++ b/20151119/hanoi-2.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + move (2, 0, 1); + display (); +} diff --git a/20151119/hanoi-3.c b/20151119/hanoi-3.c new file mode 100644 index 0000000000000000000000000000000000000000..0fff0efb5d1005fd5dd6ba7eaaa266d94bd4183c --- /dev/null +++ b/20151119/hanoi-3.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + move (0, 2, 1); + display (); +} diff --git a/20151119/hanoi-4.c b/20151119/hanoi-4.c new file mode 100644 index 0000000000000000000000000000000000000000..1d6f224f18bcab9e814dfba2a060d43c5db2e7de --- /dev/null +++ b/20151119/hanoi-4.c @@ -0,0 +1,52 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, 1); +} diff --git a/20151119/hanoi-5.c b/20151119/hanoi-5.c new file mode 100644 index 0000000000000000000000000000000000000000..49cbb2638a06f13f0137bfefd3ab9a6f8f8d17e8 --- /dev/null +++ b/20151119/hanoi-5.c @@ -0,0 +1,59 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, 1); + move (from, to, disks - 1); + move (help, to, 1); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); +} diff --git a/20151119/hanoi-6.c b/20151119/hanoi-6.c new file mode 100644 index 0000000000000000000000000000000000000000..7815e9816f2520c7be0ddcb6e439bbe2c0053591 --- /dev/null +++ b/20151119/hanoi-6.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + fatal_error ("trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, 1); + move (from, to, disks - 1); + move (help, to, 1); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); +} diff --git a/20151119/hanoi-7.c b/20151119/hanoi-7.c new file mode 100644 index 0000000000000000000000000000000000000000..fadef7250422506b0e2bacf053a7ca667b9f8721 --- /dev/null +++ b/20151119/hanoi-7.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + fatal_error ("trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = 4; + tower[0][0] = 3; + tower[0][1] = 2; + tower[0][2] = 1; + tower[0][3] = 0; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); +} diff --git a/20151119/hanoi-8.c b/20151119/hanoi-8.c new file mode 100644 index 0000000000000000000000000000000000000000..4b3cb8137be06176f62b7d8b7023e7e3ad416af4 --- /dev/null +++ b/20151119/hanoi-8.c @@ -0,0 +1,59 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 5 + +int n[3], tower[3][DISKS]; +char *program_name; + +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"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + fatal_error ("trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); +} diff --git a/20151119/hanoi-9.c b/20151119/hanoi-9.c new file mode 100644 index 0000000000000000000000000000000000000000..8c15ceb0212c198463c5bd98ed393574eb4b2b58 --- /dev/null +++ b/20151119/hanoi-9.c @@ -0,0 +1,59 @@ +#include <stdio.h> +#include <stdlib.h> + +#define DISKS 64 + +int n[3], tower[3][DISKS]; +char *program_name; + +void display (void) +{ + for (int i = 0; i < 3; i++) + { + printf ("tower %d: ", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } + printf ("\n"); +} + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s: %s\n", program_name, msg); + exit (1); +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + fatal_error ("trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + fatal_error ("trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (int argc, char **argv) +{ + program_name = argv[0]; + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); +} diff --git a/20151119/hex-2.c b/20151119/hex-2.c new file mode 100644 index 0000000000000000000000000000000000000000..a5ec0321fcb421e7b0b8227048da969fc35e9113 --- /dev/null +++ b/20151119/hex-2.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <stdint.h> + +void print_hex (uint32_t x) +{ + if (x > 0) + { + 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; +} diff --git a/20151119/hex-3.c b/20151119/hex-3.c new file mode 100644 index 0000000000000000000000000000000000000000..d4d8429e08a6a1f9bba8f448076618af2b7de50a --- /dev/null +++ b/20151119/hex-3.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <stdint.h> + +void print_hex (uint32_t x) +{ + if (x > 0) + { + 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 (0); + printf ("\n"); + return 0; +} diff --git a/20151119/hex-4.c b/20151119/hex-4.c new file mode 100644 index 0000000000000000000000000000000000000000..2f1aa73da0dcce6d98e00052a82cf50de36a6167 --- /dev/null +++ b/20151119/hex-4.c @@ -0,0 +1,24 @@ +#include <stdio.h> +#include <stdint.h> + +void print_hex (uint32_t x) +{ + if (x == 0) + printf ("0"); + else + { + 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 (0); + printf ("\n"); + return 0; +} diff --git a/20151119/hex-5.c b/20151119/hex-5.c new file mode 100644 index 0000000000000000000000000000000000000000..60419c1296e20e264d4ac79f8d43bda8ee4694f3 --- /dev/null +++ b/20151119/hex-5.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <stdint.h> + +void print_hex (uint32_t x) +{ + if (x >= 16) + 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"); + print_hex (0); + printf ("\n"); + return 0; +} diff --git a/20151119/mainparam-1.c b/20151119/mainparam-1.c new file mode 100644 index 0000000000000000000000000000000000000000..e6e64ba029e1042aff60960fc8b7c3d4d5d8e2e2 --- /dev/null +++ b/20151119/mainparam-1.c @@ -0,0 +1,9 @@ +#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; +}