diff --git a/20181203/hp-2018ws-p3.tex b/20181203/hp-2018ws-p3.tex index a47eab02d0c330baab433baff0ef03b2d3628709..aca05c25ca5d6c936ca8c469be23a38c17b1189c 100644 --- a/20181203/hp-2018ws-p3.tex +++ b/20181203/hp-2018ws-p3.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Versuch 3, 5.12.2017 und Januar 2018: Druckknopfampel +% README: Versuch 3, 5.12.2017 und 9.1.2019: Druckknopfampel \documentclass[a4paper]{article} diff --git a/20190114/hp-2018ws-p4.pdf b/20190114/hp-2018ws-p4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2db1f052bb679298bf934e76a09cdabfe1d30202 Binary files /dev/null and b/20190114/hp-2018ws-p4.pdf differ diff --git a/20190114/hp-2018ws-p4.tex b/20190114/hp-2018ws-p4.tex new file mode 100644 index 0000000000000000000000000000000000000000..62174b215ce8ad9ed2ffe1fd569d7a6037a2b2fa --- /dev/null +++ b/20190114/hp-2018ws-p4.tex @@ -0,0 +1,196 @@ +% hp-2018ws-p4.pdf - Labor Notes on Low-Level Programming +% Copyright (C) 2014, 2015, 2016, 2018, 2019 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: Versuch 4, 16. und 23.1.2019: Objektorientiertes Grafik-Programm + +\documentclass[a4paper]{article} + +\usepackage{pgscript} +\usepackage{multicol} +\usepackage{amsmath} +\usepackage{sfmath} + +\sloppy +%\pagestyle{empty} +\newcommand{\sep}{~$\cdot$~} +\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)} + +\begin{document} + + \makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill + \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}} + \par\bigskip\bigskip + \begin{center} + \Large\textbf{Praktikumsversuch 4: Objektorientiertes Grafik-Programm} + \par\medskip + \normalsize Hardwarenahe Programmierung\sep + Wintersemester 2018/19\sep + Prof.~Dr.~Peter Gerwinski + \end{center} + + Aufgabe: Schreiben Sie ein GTK+-Programm, + mit dem man verschiedene Objekte (z.\,B.\ Rechtecke, Kreise, Dreiecke) + in eine Grafik einfügen und nachträglich verändern kann + (z.\,B.\ Position, Größe, Farbe). + + (Beispiel: Ich füge zunächst zwei Rechtecke und einen Kreis in eine Grafik ein, + wähle anschließend das erste Rechteck aus und ändere dessen Farbe.) + + \bigskip + + Hinweise: + \vspace*{-\medskipamount} + + \begin{itemize} + \item + Das Beispielprogramm \gitfile{hp}{20190114}{objects-12.c} zeigt, + wie man in C verschiedenartige Objekte + in einem Array von Zeigern verwaltet. + \item + Das Beispielprogramm \gitfile{hp}{20190114}{gtk-6.c} zeigt, + wie man mit Hilfe der GUI-Bibliothek GTK+ + verschiedene Objekte in ein Fenster zeichnet. + \item + Das Beispielprogramm \gitfile{hp}{20190114}{gtk-7.c} zeigt, + wie man in der GUI-Bibliothek GTK+ + Tastatur- und Maus-Eingaben entgegennimmt und verarbeitet. + \item + Das Auswählen eines bereits vorhandenen Objekts geht am einfachsten + mittels Tastatur-Eingaben (z.\,B.\ Ziffer 1 für das erste Objekt usw.). + Auswahl mit der Maus ist auch möglich, aber schwieriger. + \item + Mit Hilfe der Funktion \lstinline{gtk_widget_queue_draw()} + teilen Sie GTK+ mit, daß Sie ein \lstinline{GtkWidget} + neu zeichnen lassen möchten. + \item + Das Compilieren eines GTK+-Programms + (z.\,B.\ \gitfile{hp}{20190114}{gtk-7.c}) geschieht wie folgt: + \begin{lstlisting}[style=cmd,gobble=8] + gcc $(pkg-config --cflags gtk+-3.0) -Wall -O gtk-7.c \ + $(pkg-config --libs gtk+-3.0) -o gtk-7 + \end{lstlisting} + (Den Backslash am Ende der ersten Zeile entfällt, + wenn Sie den ganzen Befehl in eine einzige Zeile schreiben.) + \end{itemize} + + \bigskip + \textbf{GTK+ unter GNU/Linux} + \begin{itemize} + \item + Installieren Sie das Entwickler-Paket für GTK+-3,\\ + z.\,B.\ unter Debian GNU/Linux und darauf basierenden Systemen: + \begin{lstlisting}[style=cmd,gobble=8] + apt-get install libgtk-3-dev + \end{lstlisting} + \end{itemize} + + \bigskip + \goodbreak + \textbf{GTK+ unter MacOS X} + \begin{itemize} + \item + Zuerst den Paketmanager "`Homebrew"' installieren: + \begin{lstlisting}[style=cmd,gobble=8] + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ + Homebrew/install/master/install)" + \end{lstlisting} + (Die URL nicht trennen, sondern in einer Zeile schreiben.) + \item + Danach mit Hilfe von \lstinline[style=cmd]{brew} GTK+ installieren: + \begin{lstlisting}[style=cmd,gobble=8] + brew install gtk+3 + \end{lstlisting} + \end{itemize} + + \bigskip + \goodbreak + \textbf{GTK+ unter Microsoft Windows: Cygwin} + \begin{itemize} + \item + Im Cygwin-Setup-Programm die Pakete \file{libgtk3-devel} + und \file{xorg-server} installieren.\\ + (Evtl.\ muß zusätzlich \file{dbus-x11} installiert werden -- bitte mal testen.) + \item + Bevor Sie GTK+-Programme starten können, + müssen Sie einmalig den X-Server starten: + \begin{lstlisting}[style=cmd,gobble=8] + XWin -multiwindow & + \end{lstlisting} + \item + Bevor Sie GTK+-Programme starten können, + müssen Sie einmalig pro Shell-Sitzung\\ + die \lstinline[style=cmd]{DISPLAY}-Variable setzen: + \begin{lstlisting}[style=cmd,gobble=8] + export DISPLAY=:0.0 + \end{lstlisting} + \end{itemize} + + \bigskip + \goodbreak + \textbf{GTK+ unter Microsoft Windows: MinGW} + \begin{itemize} +% \item[] +% \emph{(Wir arbeiten dran. Kommt gleich \dots)} + \item + Installieren Sie \file{MSYS2} (Installer). + \item + Installieren Sie von der MinGW-Shell aus GTK+ + und weitere Entwicklungswerkzeuge: + \begin{lstlisting}[style=cmd,gobble=8] + pacman -S mingw-w64-x86_64-gcc + pacman -S mingw-w64-x86_64-gtk3 + pacman -S mingw-w64-x86_64-pkg-config + \end{lstlisting} + \item + Falls nötig, ergänzen Sie in der MinGW-Shell + den Pfad zu den neu installierten Programmen: + \begin{lstlisting}[style=cmd,gobble=8] + export PATH=$PATH:/mingw64/bin + \end{lstlisting} + \end{itemize} + + \bigskip + + \strut\hfill\emph{Viel Erfolg!} + + \vfill + + \begingroup + + \small + + \setlength{\leftskip}{3cm} + + Stand: 14.\ Januar 2019 + +% Soweit nicht anders angegeben:\\ + Copyright \copyright\ 2014, 2015, 2016, 2018, 2019\quad Peter Gerwinski\\ + Lizenz: \mylicense + + Sie können diese Praktikumsunterlagen einschließlich Quelltext +% und Beispielprogramme\\ + herunterladen unter:\\ + \url{https://gitlab.cvh-server.de/pgerwinski/hp} + + \endgroup + +\end{document} diff --git a/README.md b/README.md index 5e9652574d855caa30f8d001c0df34051f70dda1..fefb0d526848fdec3ae5e9f05f171f3aa81ca721 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,8 @@ Praktikumsunterlagen: --------------------- * [Versuch 1, 10., 17. und 24.10.2018: RSA-Verschlüsselung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181008/hp-2018ws-p1.pdf) * [Versuch 2, 14. und 21.11.2018: Weltraum-Simulation](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181112/hp-2018ws-p2.pdf) - * [Versuch 3, 5.12.2017 und Januar 2018: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-2018ws-p3.pdf) + * [Versuch 3, 5.12.2017 und 9.1.2019: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-2018ws-p3.pdf) + * [Versuch 4, 16. und 23.1.2019: Objektorientiertes Grafik-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190114/hp-2018ws-p4.pdf) Skript: ------- diff --git a/hp-slides-2018ws.pdf b/hp-slides-2018ws.pdf index 0e76e40103a20c996ce2591ee8e6ef49507c45c0..1b442af0a938f142f8d44c8efb504ca813798da8 100644 Binary files a/hp-slides-2018ws.pdf and b/hp-slides-2018ws.pdf differ