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

README-Datei, Skript, alte Klausuren

parent d99e5e1f
Branches
No related tags found
No related merge requests found
Showing
with 628 additions and 64 deletions
Hardwarenahe Programmierung
===========================
Lehrveranstaltung im Wintersemester 2020/21
Lehrveranstaltung im Wintersemester 2021/22
Hochschule Bochum, Campus Velbert/Heiligenhaus
Prof. Dr. rer. nat. Peter Gerwinski
Copyright © 2012–2020 Peter Gerwinski
Copyright © 2012–2021 Peter Gerwinski
**Diese Lehrmaterialien sind freie Software.**
Sie dürfen diese gemäß den jeweils angegebenen Lizenzen
([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/CC-BY-SA-3.0),
[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/GNU-GPL-3),
[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/BSD-MODIFIED))
([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/CC-BY-SA-3.0),
[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/GNU-GPL-3),
[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/BSD-MODIFIED))
studieren, kopieren, modifizieren und/oder weitergeben.
Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/README).
Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/README).
Vortragsfolien und Beispiele:
-----------------------------
* [05.11.2020: Einführung, Einführung in C (bis Schleifen)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201105/hp-20201105.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201105/)
* [12.11.2020: Einführung in C: Seiteneffekte, Funktionen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201112/hp-20201112.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201112/)
* [19.11.2020: Einführung in C: Zeiger, Arrays und Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201119/hp-20201119.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201119/)
* [26.11.2020: Einführung in C: Arrays und Strings und Zeichen, Strukturen, Dateien und Fehlerbehandlung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201126/hp-20201126.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201126/)
* [03.12.2020: Parameter des Hauptprogramms, String-Operationen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201203/hp-20201203.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201203/)
* [10.12.2020: Präprozessor, Bibliotheken einbinden und verwenden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201210/hp-20201210.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201210/)
* [17.12.2020: make, Differentialgleichungen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201217/hp-20201217.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20201217/)
* [07.01.2021: Rekursion, Aufwandsabschätzungen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210107/hp-20210107.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210107/)
* [14.01.2021: Hardwarenahe Programmierung: Bit-Operationen, I/O-Ports](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210114/hp-20210114.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210114/)
* [21.01.2021: Hardwarenahe Programmierung: Interrupts, volatile-Variable, Byte-Reihenfolge – Endianness, Binärdarstellung negativer Zahlen, Speicherausrichtung – Alignment](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-20210121.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210121/)
* [28.01.2021: Objektorientierte Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-20210128.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210128/)
* [04.02.2021: Objektorientierte Programmierung: virtuelle Methoden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-20210204.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210204/)
* [11.02.2021: Objektorientierte Programmierung: virtuelle Methoden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-20210211.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210211/)
* [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/hp-slides-2020ws.pdf)
* [04.10.2021: Einführung, Einführung in C (bis Schleifen)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/20211004/hp-20211004.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/20211004/)
* [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/hp-slides-2021ws.pdf)
Übungsaufgaben:
---------------
* [05.11.2020: Hello-World-Programme, Schaltjahr ermitteln, Maximum berechnen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201105/hp-uebung-20201105.pdf)
* [12.11.2020: Schaltjahr ermitteln, Multiplikationstabelle, Fibonacci-Zahlen, fehlerhaftes Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201112/hp-uebung-20201112.pdf)
* [19.11.2020: Seltsame Programme, Kalender-Berechnung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201119/hp-uebung-20201119.pdf)
* [26.11.2020: Strings, Programm analysieren, fehlerhaftes Primzahl-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201126/hp-uebung-20201126.pdf)
* [03.12.2020: Arrays mit Zahlen, Datum-Bibliothek](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201203/hp-uebung-20201203.pdf)
* [10.12.2020: Ausgabe von Hexadezimalzahlen, Einfügen in Strings, Länge von Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201210/hp-uebung-20201210.pdf)
* [17.12.2020: Kondensator, hüpfender Ball](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201217/hp-uebung-20201217.pdf)
* [07.01.2021: Fakultät, Länge von Strings (Neuauflage), Hexdumps](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210107/hp-uebung-20210107.pdf)
* [14.01.2021: Zahlensysteme, Mikrocontroller, Einfügen in Strings (Ergänzung)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210114/hp-uebung-20210114.pdf)
* [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-uebung-20210121.pdf)
* [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-uebung-20210128.pdf)
* [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-uebung-20210204.pdf)
* [11.02.2021: Stack-Operationen, einfach und doppelt verkettete Listen, ternärer Baum](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-uebung-20210211.pdf)
* [04.10.2021: Hello-World-Programme, Schaltjahr ermitteln, Maximum berechnen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/20211004/hp-uebung-20211004.pdf)
Musterlösungen:
---------------
* [12.11.2020: Schaltjahr ermitteln, Multiplikationstabelle, Fibonacci-Zahlen, fehlerhaftes Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201112/hp-musterloesung-20201112.pdf)
* [19.11.2020: Seltsame Programme, Kalender-Berechnung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201119/hp-musterloesung-20201119.pdf)
* [26.11.2020: Strings, Programm analysieren, fehlerhaftes Primzahl-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201126/hp-musterloesung-20201126.pdf)
* [03.12.2020: Arrays mit Zahlen, Datum-Bibliothek](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201203/hp-musterloesung-20201203.pdf)
* [10.12.2020: Ausgabe von Hexadezimalzahlen, Einfügen in Strings, Länge von Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201210/hp-musterloesung-20201210.pdf)
* [17.12.2020: Kondensator, hüpfender Ball](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201217/hp-musterloesung-20201217.pdf)
* [07.01.2021: Fakultät, Länge von Strings (Neuauflage), Hexdumps](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210107/hp-musterloesung-20210107.pdf)
* [14.01.2021: Zahlensysteme, Mikrocontroller](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210114/hp-musterloesung-20210114.pdf)
* [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-musterloesung-20210121.pdf)
* [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-musterloesung-20210128.pdf)
* [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-musterloesung-20210204.pdf)
* [11.02.2021: Stack-Operationen, einfach und doppelt verkettete Listen, ternärer Baum](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-musterloesung-20210211.pdf)
(keine)
Tafelbilder:
------------
......@@ -69,45 +34,45 @@ Tafelbilder:
Praktikumsunterlagen:
---------------------
* [Versuch 1: RSA-Verschlüsselung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201112/hp-2020ws-p1.pdf)
* [Versuch 2: Weltraum-Simulation](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20201217/hp-2020ws-p2.pdf)
* [Versuch 3: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210114/hp-2020ws-p3.pdf)
* [Versuch 4: Objektorientiertes Grafik-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-2020ws-p4.pdf)
(keine)
Alte Klausuren:
---------------
* [Wintersemester 2015/16](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/exams/20160129/ainf-klausur-20160129.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/exams/20160129/)
* [Wintersemester 2016/17](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/exams/20170206/hp-klausur-20170206.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/exams/20170206/)
* [Wintersemester 2017/18](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/exams/20180213/hp-klausur-20180213.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/exams/20180213/)
Skript:
-------
* [Hardwarenahe Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/script/hp-2020ws.pdf)
* [Hardwarenahe Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/script/hp-2021ws.pdf)
Original-Materialien einschließlich Beispiel-Programme und LaTeX-Quelltexte:
----------------------------------------------------------------------------
* [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/common)
* [script – Skript zur Lehrveranstaltung](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/script)
* [201????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws)
* [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/common)
* [script – Skript zur Lehrveranstaltung](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/script)
* [201????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws)
* [branch 2018ws – vollständige Lehrmaterialien vom Wintersemester 2018/19](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2018ws)
Low-Level Programming
=====================
Course in winter semester 2020-21
Course in winter semester 2021-22
Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus
Prof. Dr. rer. nat. Peter Gerwinski
Copyright © 2012–2020 Peter Gerwinski
Copyright © 2012–2021 Peter Gerwinski
**These teaching materials are Free Software.**
You may study, copy, modify, and/or distribute them
according to their respective licences
([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/CC-BY-SA-3.0),
[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/GNU-GPL-3),
[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/BSD-MODIFIED)).
See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/common/README) for details.
* [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/common)
* [script – lecture notes](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/script)
* [201????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws)
* [hp-slides-2020ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/hp-slides-2020ws.pdf)
([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/CC-BY-SA-3.0),
[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/GNU-GPL-3),
[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/BSD-MODIFIED)).
See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/common/README) for details.
* [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/common)
* [script – lecture notes](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws/script)
* [201????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2021ws)
* [hp-slides-2021ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2021ws/hp-slides-2021ws.pdf)
* [branch 2018ws – complete teaching materials from winter semester 2018–19](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2018ws)
File added
% ainf-klausur-20160129.pdf - Examination on Applied Computer Sciences
% Copyright (C) 2015, 2016 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/>.
% README: Wintersemester 2015/16
\documentclass[a4paper]{article}
\usepackage{pgscript}
\newcounter{exercise}
\newcommand{\exercise}[1]{\addtocounter{exercise}{1}\subsection*{Aufgabe \arabic{exercise}: #1}}
\usepackage{enumerate}
\usepackage{ifthen}
\newcommand{\workspacexyt}[3]{%
\begin{center}
\setlength{\unitlength}{0.5cm}
\begin{picture}(#1,#2)
\color[rgb]{0.7,0.7,0.7}
\put(0,0){\line(1,0){#1}}
\multiput(0,1)(0,1){#2}{\line(1,0){#1}}
\put(0,0){\line(0,1){#2}}
\multiput(1,0)(1,0){#1}{\line(0,1){#2}}
\put(0,0){\makebox(#1,#2)[c]{\color[rgb]{0.2,0.2,0.2}#3}}
\end{picture}
\end{center}}
\newcommand{\workspace}[1]{\workspacexyt{30}{#1}{}}
\newcounter{points}
\newcommand{\points}[1]{\ifthenelse{#1=1}{(1 Punkt)}{(#1 Punkte)}\addtocounter{points}{#1}}
\begin{document}
\thispagestyle{empty}
\strut\hfill
\includegraphics[height=1.5cm]{logo-hochschule-bochum.pdf}
\section*{Angewandte Informatik -- Klausur -- 29.\ Januar 2016}
Prof.~Dr.~Peter Gerwinski, Wintersemester 2015/16
\bigskip
\bigskip
\begin{center}
\renewcommand{\arraystretch}{2.0}
\begin{tabular}{|l|p{10cm}|} \hline
Name: & \\\hline
Matrikel-Nr.: & \\\hline
\end{tabular}
\end{center}
\bigskip
Zeit: 120 Minuten
Zulässige Hilfsmittel:
\begin{itemize}
\item Schreibgerät
\item Beliebige Unterlagen in Papierform und/oder auf Datenträgern
\item Elektronische Rechner (Notebook, Taschenrechner o.\,ä.)\\
\emph{ohne}\/ Zugang zu Datennetzen jeglicher Art
\end{itemize}
Nur die o.\,a.\ zulässigen Hilfsmittel
dürfen sich während der Klausur im Arbeitsbereich befinden.
\mbox{WLAN-,} Bluetooth- und sonstige Funkeinheiten von Notebooks o.\,ä.\
sind auszuschalten;
ggf.\ dafür vorhandene physische Schalter sind zu benutzen.
Mobiltelefone, Geräte mit mobilem Internet-Zugang u.\,ä.\
sind auszuschalten und in der Tasche
zu verstauen.
Die reguläre Maximalpunktzahl beträgt \totalpoints\ Punkte.\\
Bei besonderen Leistungen sind Zusatzpunkte möglich.\\
Mit 20 erreichten Punkten gilt die Klausur als bestanden.
Die Beispielprogramme werden Ihnen auf Datenträger (USB-Stick)
zur Verfügung gestellt. Die Abgabe von digital gelösten Aufgaben
hat auf demselben Datenträger zu erfolgen.
\clearpage
\exercise{Strings}
Wir betrachten das folgende Programm (\file{aufgabe-1.c}):
\begin{lstlisting}[style=numbered]
#include <stdio.h>
#include <string.h>
void fun (char *s)
{
int len = strlen (s);
for (int i = 0; i < len; i++)
for (int j = i + 1; j < len; j++)
if (s[i] > s[j])
{
char sx = s[i];
s[i] = s[j];
s[j] = sx;
}
}
int main (void)
{
char s[] = "Informatik";
fun (s);
printf ("%s\n", s);
return 0;
}
\end{lstlisting}
Auf einem Rechner, der den ASCII-Zeichensatz verwendet, lautet die Ausgabe:
\lstinline[style=terminal]{Iafikmnort}
\begin{enumerate}[\quad(a)]
\item
Was bewirkt die Funktion \lstinline{fun}, und wie funktioniert sie?
\points{4}
\workspace{14}
\item
Warum beginnt der Ausgabe-String mit \lstinline{'I'} und nicht mit \lstinline{'a'}?
\points{2}
\workspace{10}
\item
Was passiert, wenn die Zeile \lstinline{char s[] = "Informatik";}
durch \lstinline|char s[] = { 'I', 'n', 'f', 'o'|~\lstinline|};| ersetzt wird, und warum?
\points{2}
\workspace{10}
\item
Von welcher Ordnung (Landau-Symbol) ist die Funktion \lstinline{fun} und warum?
Wir beziehen uns hierbei auf die Anzahl der Vergleiche \lstinline{s[i] > s[j]}
in Abhängigkeit von der Länge des Eingabe-Strings \lstinline{"Informatik"}.
\points{1}
\workspace{10}
\item
Beschreiben Sie -- in Worten und/oder als C-Quelltext --, wie
sich die Funktion \lstinline{fun} hinsichtlich der Rechenzeit
effizienter gestalten läßt. Von welcher Ordnung
(Landau-Symbol) ist Ihre effizientere Version der Funktion und warum?
\points{4}
\workspace{21}
\end{enumerate}
\exercise{Zeigerarithmetik}
Wir betrachten das folgende Programm (\file{aufgabe-2.c}):
\begin{lstlisting}[style=numbered]
#include <stdio.h>
#include <stdint.h>
void output (uint16_t *a)
{
for (int i = 0; a[i]; i++)
printf (" %d", a[i]);
printf ("\n");
}
int main (void)
{
uint16_t prime_numbers[] = { 2, 3, 5, 7, 11, 13, 17, 0 };
uint16_t *p1 = prime_numbers;
output (p1);
p1++;
output (p1);
char *p2 = prime_numbers;
output (p2);
p2++;
output (p2);
return 0;
}
\end{lstlisting}
Das Programm wird compiliert und ausgeführt:
\begin{lstlisting}[style=terminal]
$ ¡gcc -Wall -std=c99 aufgabe-2.c -o aufgabe-2¿
aufgabe-2.c: In function 'main':
aufgabe-2.c:20:13: warning: initialization from
incompatible pointer type [enabled by default]
aufgabe-2.c:21:3: warning: passing argument 1 of 'output' from
incompatible pointer type [enabled by default]
aufgabe-2.c:4:6: note: expected 'uint16_t *' but argument is of type 'char *'
aufgabe-2.c:23:3: warning: passing argument 1 of 'output' from
incompatible pointer type [enabled by default]
aufgabe-2.c:4:6: note: expected 'uint16_t *' but argument is of type 'char *'
$ ¡./aufgabe-2¿
2 3 5 7 11 13 17
3 5 7 11 13 17
2 3 5 7 11 13 17
768 1280 1792 2816 3328 4352
\end{lstlisting}
\begin{enumerate}[\quad(a)]
\item
Erklären Sie die Funktionsweise der Funktion \lstinline{output ()}.
\points{2}
\workspace{10}
\workspace{5}
\item
Begründen Sie den Unterschied zwischen der ersten (\lstinline{2 3 5 7 11 13 17})\\
und der zweiten Zeile (\lstinline{3 5 7 11 13 17}) der Ausgabe des Programms.
\points{2}
\workspace{11}
\item
Erklären Sie die beim Compilieren auftretenden Warnungen\\
und die dritte Zeile (\lstinline{2 3 5 7 11 13 17}) der Ausgabe des Programms.
\points{3}
\workspace{11}
\item
Erklären Sie die vierte Zeile (\lstinline{768 1280 1792 2816 3328 4352})
der Ausgabe des Programms.\\
% Welche Endianness hat der verwendete Rechner?\\
% Wie sähe die Ausgabezeile bei umgekehrter Endianness aus?
%
% 2 0 3 0 5 0 7 0 11 --> 2 3 5 7 11
% 0 3 0 5 0 7 0 11 --> 768 1280 ...
%
% 0 2 0 3 0 5 0 7 0 11 --> 2 3 5 7 11
% 2 0 3 0 5 0 7 0 11 --> 768 1280 ...
%
% --> Endianness nicht erkennbar!
%
Sie dürfen einen Little-Endian-Rechner voraussetzen.
\points{4}
\workspace{16}
\end{enumerate}
\exercise{Objektorientierte Programmierung}
Wir betrachten das folgende Fragment (\file{aufgabe-3.c})
eines objektorientierten Mathematik-Programms:
\begin{lstlisting}
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char symbol;
int (*calculate) (int a, int b);
}
operation;
operation *new_operation (void)
{
operation *op = malloc (sizeof (operation));
op->symbol = '?';
op->calculate = NULL;
return op;
}
[...]
int main (void)
{
operation *op[4];
op[0] = new_plus ();
op[1] = new_minus ();
op[2] = new_times ();
op[3] = NULL;
for (int i = 0; op[i]; i++)
printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
return 0;
}
\end{lstlisting}
\begin{enumerate}[\quad(a)]
\item
Was bedeutet \lstinline{int (*calculate) (int a, int b)},
und für welchen Zweck wird es verwendet?
\points{3}
\workspace{12}
\item
Ergänzen Sie das Fragment zu einem funktionsfähigen Programm,
das die folgende Ausgabe erzeugt:
\begin{lstlisting}[style=terminal,gobble=8]
2 + 3 = 5
2 - 3 = -1
2 * 3 = 6
\end{lstlisting}
\points{5}
Abgabe auf Datenträger ist erwünscht, aber nicht zwingend.\\
Für Notizen verwenden Sie nötigenfalls die Rückseiten der Klausurbögen
und/oder zusätzliche Blätter.
\item
Was geschieht, wenn man auf die Zeile \lstinline{op[3] = NULL;} verzichtet,
und warum?
\points{2}
\workspace{8}
\end{enumerate}
\exercise{XBM-Grafik}
Bei einer XBM-Grafikdatei handelt es sich
um ein als C-Quelltext abgespeichertes Array,
das die Bildinformationen enthält:
\begin{itemize}\itemsep0pt
\item Jedes Bit entspricht einem Pixel.
\item Nullen stehen für Weiß, Einsen für Schwarz.
\item LSB first.
\item Jede Zeile des Bildes wird auf ganze Bytes aufgefüllt.
\item Breite und Höhe des Bildes sind als Konstantendefinitionen
(\lstinline{#define}) in der Datei enthalten.
\end{itemize}
Sie können eine XBM-Datei sowohl mit einem Texteditor
als auch mit vielen Grafikprogrammen öffnen und bearbeiten.
Beispiel (\file{aufgabe-4.xbm}):\hfill
\makebox(0,0)[tr]{\framebox{\includegraphics[scale=3]{aufgabe-4.png}}}
\begin{lstlisting}
#define aufgabe_4_width 14
#define aufgabe_4_height 14
static unsigned char aufgabe_4_bits[] = {
0x00, 0x00, 0xf0, 0x03, 0x08, 0x04, 0x04, 0x08, 0x02, 0x10, 0x32, 0x13,
0x22, 0x12, 0x02, 0x10, 0x0a, 0x14, 0x12, 0x12, 0xe4, 0x09, 0x08, 0x04,
0xf0, 0x03, 0x00, 0x00 };
\end{lstlisting}
Ein C-Programm, das eine XBM-Grafik nutzen will,
kann die \file{.xbm}-Datei mit \lstinline{#include "..."} direkt einbinden.
Schreiben Sie ein Programm, das die XBM-Datei als ASCII-Grafik ausgibt, z.\,B.:
\begin{lstlisting}[style=terminal,lineskip=-4pt]
******
* *
* *
* *
* ** ** *
* * * *
* *
* * * *
* * * *
* **** *
* *
******
¡ ¿
\end{lstlisting}
\points{8}
Abgabe auf Datenträger ist erwünscht, aber nicht zwingend.\\
Für Notizen verwenden Sie nötigenfalls die Rückseiten der Klausurbögen
und/oder zusätzliche Blätter.
\makeatletter
\immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}}
\makeatother
\vfill
\begin{flushright}
\textit{Viel Erfolg!}
\end{flushright}
\end{document}
#include <stdio.h>
#include <string.h>
void fun (char *s)
{
int len = strlen (s);
for (int i = 0; i < len; i++)
for (int j = i + 1; j < len; j++)
if (s[i] > s[j])
{
char sx = s[i];
s[i] = s[j];
s[j] = sx;
}
}
int main (void)
{
char s[] = "Informatik";
fun (s);
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <string.h>
void fun (char *s)
{
int len = strlen (s);
for (int i = 0; i < len; i++)
for (int j = i + 1; j < len; j++)
if (s[i] > s[j])
{
char sx = s[i];
s[i] = s[j];
s[j] = sx;
}
}
int main (void)
{
char s[] = { 'I', 'n', 'f', 'o' };
fun (s);
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
void output (uint16_t *a)
{
for (int i = 0; a[i]; i++)
printf (" %d", a[i]);
printf ("\n");
}
int main (void)
{
uint16_t prime_numbers[] = { 2, 3, 5, 7, 11, 13, 17, 0 };
uint16_t *p1 = prime_numbers;
output (p1);
p1++;
output (p1);
char *p2 = prime_numbers;
output (p2);
p2++;
output (p2);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char symbol;
int (*calculate) (int a, int b);
}
operation;
operation *new_operation (void)
{
operation *op = malloc (sizeof (operation));
op->symbol = '?';
op->calculate = NULL;
return op;
}
[...]
int main (void)
{
operation *op[4];
op[0] = new_plus ();
op[1] = new_minus ();
op[2] = new_times ();
op[3] = NULL;
for (int i = 0; op[i]; i++)
printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
return 0;
}
exams/20160129/aufgabe-4.png

162 B

#define aufgabe_4_width 14
#define aufgabe_4_height 14
static unsigned char aufgabe_4_bits[] = {
0x00, 0x00, 0xf0, 0x03, 0x08, 0x04, 0x04, 0x08, 0x02, 0x10, 0x32, 0x13,
0x22, 0x12, 0x02, 0x10, 0x0a, 0x14, 0x12, 0x12, 0xe4, 0x09, 0x08, 0x04,
0xf0, 0x03, 0x00, 0x00 };
../../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../../common/pgscript.sty
\ No newline at end of file
#include <stdio.h>
#include <string.h>
void fun (char *s)
{
int len = strlen (s);
for (int i = 0; i < len; i++)
{
for (int j = i - 1; j >= 0; j--)
{
if (s[i] < s[j])
{
char sx = s[i];
s[i] = s[j];
s[j] = sx;
}
}
}
}
int main (void)
{
char s[] = "BAECD";
fun (s);
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
int main (void)
{
uint16_t numbers[] = { 25928, 27756, 11375, 30496, 29295, 25708, 2593, 0 };
printf ("%s", numbers);
return 0;
}
#include <stdio.h>
#include <stdint.h>
int main (void)
{
uint32_t numbers[] = { 25928, 27756, 11375, 30496, 29295, 25708, 2593, 0 };
printf ("%s\n", numbers);
return 0;
}
#include <stdio.h>
#include <stdint.h>
int main (void)
{
uint8_t numbers[] = { 25928, 27756, 11375, 30496, 29295, 25708, 2593, 0 };
printf ("%s\n", numbers);
return 0;
}
#include <stdio.h>
void sort (void **data, int (*compare) (void *x1, void *x2))
{
for (int i = 0; data[i]; i++)
for (int j = i + 1; data[j]; j++)
if (compare (data[i], data[j]) > 0)
{
void *tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
[...]
int main (void)
{
char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
sort (strings, compare_strings);
for (int i = 0; strings[i]; i++)
printf ("%s\n", strings[i]);
printf ("\n");
int two = 2, ten = 10, zero = 0, three = 3, one = 1;
int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
sort (numbers, compare_numbers);
for (int i = 0; numbers[i]; i++)
printf ("%d\n", *numbers[i]);
return 0;
}
#include <stdio.h>
[...]
int main (void)
{
pbm_open (14, 14, "test.pbm");
pbm_line (" ");
pbm_line (" XXXXXX ");
pbm_line (" X X ");
pbm_line (" X X ");
pbm_line (" X X ");
pbm_line (" X XX XX X ");
pbm_line (" X X X X ");
pbm_line (" X X ");
pbm_line (" X X X X ");
pbm_line (" X X X X ");
pbm_line (" X XXXX X ");
pbm_line (" X X ");
pbm_line (" XXXXXX ");
pbm_line (" ");
pbm_close ();
return 0;
}
File added
exams/20170206/aufgabe-4.png

162 B

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment