Hinweise zum I1 Praktikum
Im Folgenden finden Sie hier Hinweise zur Organisation des I1 Praktikums, zur Installation Ihres eigenen Rechners, und zur empfohlenen Entwicklungsumgebung.
Das Praktikum findet jeweils
- Donnerstag von 12:15–13:45 und 15:45–17:15 in WE.115 und
- Freitag von 14:00–15:30 in WB.201
statt.
Die Praktikumsunterlagen finden Sie falls vom Dozenten nicht anders angegeben unter:
Moodle-Kurs mit Vorlesungs-Skript:
Literatur:
- C/C++ Vorlesung
- Elias Fischer, C-HowTo, 20 EUR
- Gut für den Einstieg
- Günstig
- Informationen zu einzelnen C Funktionen wie z.B. printf:
- Linux man pages
- google “man printf”
Bitte teilen Sie Sich die Bearbeitung der auf dem Testatblatt angegebenen Übungsaufgaben eigenverantwortlich ein. Sie suchen sich auf dem Testatblatt die zum jeweiligen Vorlesungskapitel passenden Übungaufgaben heraus und bearbeiten diese. Für das Kapitel “Operatoren” wäre dies z.B. die Übungsaufgabe 5.2.1 oder 5.2.2. Bitte notieren Sie sich auf dem Testatblatt die jeweiligen bearbeiteten Aufgaben.
Sie führen außerdem ein Protokoll über die bearbeiteten Aufgaben. Das Protokoll dokumentiert hierbei die Ergebnisse der jeweiligen Aufgaben, d.h. für jede bearbeitete Aufgabe soll das Protokoll Folgendes beinhalten:
- Bearbeiter
- Aufgabennummer
- Bearbeitunsdatum
- Ergebnis-Code
- Ergebnisse wie Programm-Ausgaben, Fehlermeldungen, Abläufe etc.
- Selbstreflektion darüber, wo bei der Bearbeitung Aha-Effekte oder Problempunkte aufgetreten sind (d.h. was hat gut geklappt, oder auch nicht?).
Verwenden Sie bitte die folgende Vorlage für Libre-Office oder Word, in der Sie stichpunktartig Ihre Ergebnisse protokollieren:
Sie benötigen keine gesonderte Unterschrift zur Bestätigung der Aufgaben auf dem Testatblatt, sondern Sie dokumentieren anstelle dessen die Aufgaben eigenständig im Protokoll. Sie stellen dann bitte jeweils mindestens 2x im Praktikum die bearbeiteten Aufgaben anhand Ihres Protokolls vor und beantworten Fragen dazu, wobei Sie hierbei in meinem Beisein mindestens 1x eine Aufgabe vorprogrammieren. Auf diese Weise können Ihre Fragen individuell beantwortet werden und auf Ihre spezifischen Schwierigkeiten detailliert eingegangen werden.
Zum Ende des Praktikums laden Sie bitte Ihr vollständiges Gesamtprotokoll als ODT oder PDF auf der folgenden Seite hoch:
Als letzte Seite des Protokolls fügen Sie dann bitte eine Kopie Ihres Testatblatts an, wodurch Sie Ihr Praktikum mit Erfolg abgeschlossen haben.
Bitte denken Sie daran, dass Sie Sich gerne auch zu sog. Programmierpaaren zusammen finden können und die Aufgaben gemeinsam bearbeiten und sich gegenseitig unterstützen können (Stichwort Pair-Programming). Dies ist sogar empfohlen, aber die Programmierung der Aufgaben soll natürlich trotzdem eigenständig erfolgen.
Tipps zur Installation von Linux:
Sie können ein beliebiges Betriebssystem zur Bearbeitung der Aufgaben verwenden, empfohlen ist jedoch die Installation einer Linux Distribution auf einer virtuellen Maschine und ggfsl. eine sog. Dual-Boot Installation:
Davon unabhängig sind die im Folgenden beschriebenen Entwicklungsumgebungen gleichermassen für Linux, Mac und Windows empfehlenswert:
Tipps zur Entwicklungsumgebung:
Sie können eine Entwicklungsumgebung Ihrer Wahl verwenden. Wir schreiben keine bestimmte Umgebung vor, empfehlenswert ist schlicht und ergreifend diejenige Umgebung, mit der Sie am besten zurecht kommen. Probieren Sie bitte verschiedene aus, wie z.B. die folgenden IDE, welche sowohl für Linux, Mac und Windows empfehlenswert sind:
1A) GCC via Kommandozeile auf Linux
Es wird vorausgesetzt, dass Sie eine Linux Distribution wie z.B. Lubuntu in einer virtuellen Maschine (oder Dual-Boot) installiert haben:
Wie erstelle ich ein Programm mit dem GCC?
Öffnen sie ein Terminal (Ctrl-Alt-T) und tippen Sie darin Folgendes:
- GCC C-Compiler installieren:
- sudo apt install gcc
- Hauptprogramm main.c erzeugen bzw. editieren:
- gedit main.c &
- Hauptprogramm übersetzen:
- gcc main.c -o main
- Hauptprogramm ausführen:
- ./main
Tipp: Programme wie Libre-Office installiert man auf der Kommandozeile mit
- sudo apt install libreoffice aspell-de
1B) GCC via Kommandozeile auf Mac
Installieren Sie die Kommandozeilen-Tools von XCode. Dann können Sie wie oben beschrieben ein Terminal öffnen und ein C-Programm übersetzen.
2A) QtCreator auf Ubuntu
Es wird vorausgesetzt, dass Sie die Ubuntu Distribution installiert haben.
Installieren Sie QtCreator und GCC, indem Sie die folgende Kommandozeile im Terminal eingeben:
- sudo apt install qtcreator gcc
Falls Sie noch weitere nützliche Entwicklungstools wie CMake, GDB, Git, Subversion, Libre-Office, Inkscape, ImageMagic, Gimp, usw. installieren möchten, so kopieren Sie bitte die folgende Kommandozeile (Ctrl-C) und fügen diese im Terminal ein (Ctrl-Shift-V):
Wie erstelle ich ein Programm mit dem QtCreator?
Auf genau dieselbe Weise wie in den folgenden Hinweisen für Windows.
2B) QtCreator auf Windows
Es wird vorausgesetzt, dass Sie ein aktuelles Windows zur Verfügung haben. Die folgenden Hinweise gelten für Windows 11:
Laden Sie bitte den Qt Online Installer in Ihr Download-Verzeichnis herunter.
Nach dem Start des Installers sind folgende Schritte erforderlich:
- Erstellen eines Qt Accounts → Registrieren
- Anmelden über den Qt Account mit EMail & Passwort
- Stimmen Sie der Open Source Lizenz zu
- Installationsort wählen → C:/Qt
- Version wählen → Qt Desktop für Entwicklung mit MINGW
- Stimmen Sie den Nutzungsbedingungen zu
- Installation starten → benötigt etwa 6 GB (nur das Nötigste) bis 40 GB (Alles)
Stellen Sie sicher, dass sämtliche benötigte Komponenten installiert wurden, d.h.: Qt 6 Libraries, Qt 5 Compatibility Module, MinGW 64-bit Compiler, CMake und die QtCreator IDE.
Wie erstelle ich ein Projekt mit QtCreator?
Starten Sie QtCreator und erstellen Sie ein neues Projekt. Verwenden Sie den Projekttyp “Non-Qt Project” und Applikationstyp “Plain C Application”. Klicken Sie Sich anschließend durch das Konfigurationmenü, indem Sie immer die vorgeschlagenen Einstellungen bestätigen. Es wird anschließend automatisch ein Hauptprogramm “main.c” erstellt.
Nun können Sie im linken Dateimenü main.c anwählen und editieren. Wenn Sie damit fertig sind, so starten Sie das Programm mit dem grünen Pfeil unten rechts.
2C) QtCreator auf Mac
Es gelten dieselben Hinweise wie für Windows bis auf die Installation von QtCreator, wo Sie bitte der folgenden Qt Dokumentation folgen:
3) C-Lion auf Linux, Windows und Mac
Es wird vorausgesetzt, dass Sie eine C-Lion Lizenz und eine entsprechende Installation besitzen.
Wie erstelle ich ein Projekt mit CLion?
Bitte mit CLion ein neues Projekt anlegen, dann einen Ort für den Projektordner wählen (z.B. C:\Users\Stefan\Projects\Uebung-1) und den Sprachstandard für das “C Executable” auf “C99” einstellen. Das neu erstellte Projekt enthält dann automatisch ein “main.c”, mit dem man arbeiten kann.
4) Visual Studio Code auf Linux, Windows und Mac
Es wird vorausgesetzt, dass Sie einen C-Compiler wie MINGW oder M$ Visual C/C++ und ein sog. Build-System wie CMake bereits installiert haben.
Dies kann man auf Windows komfortabel mit dem Choco Installer erledigen:
choco install mingw make cmake
Installieren Sie nun Visual Studio Code und zusätzlich im Extensions-Menü von VSC das “C/C++” Plugin.
Wie erstelle ich ein Projekt mit Visual Studio Code?
Indem man für das C/C++ Plugin den installierten C-Compiler wie z.B “gcc” oder “mingw” auswählt, eine Datei main.c erstellt und diese dann mit dem ausgewählten Compiler übersetzt.
Optional für CMake als Build-System:
Bitte zusätzlich das “CMake” Plugin installieren, die folgende “CMakeLists.txt” Datei im Projektordner erstellen (in dem sich z.B. main.c befindet) und dann den entsprechenden Ordner in VSC öffnen:
project(Uebungsaufgabe_x)
set(cmake_c_standard 99)
add_executable(main.exe main.c)
Weiteres Material zur Programmiersprache C
- Online C-Vorlesung: http://th-nuremberg.de/roettger/index.php/Lectures/C-Programmierung
- Online C-Tutorium: https://www.c-howto.de/c-programmieren-lernen/
Coding Style and Indentation Example
Als Einrück-Konvention zum Formatieren des Quelltextes gibt es zwei Stile:
1) K&R Style
if (...) {
...
} else {
...
}
2) BSD Style
if (...)
{
...
}
else
{
...
}
Für Programmieranfänger empfiehlt sich der BSD Style. Die automatische Einrückung lässt sich diesbezüglich in der IDE entsprechend einstellen.
- Für QtCreator: Menu → Preferences → C/C++ → Code Style
- Für CLion: Menu → Settings → Editor → Code Style → C/C++ → Braces Layout → BSD-Style for “Function declarations” and “Other Statements and blocks”
Ein einfaches C-Beispielprogramm in diesem Einrückungsstil:
#include <stdio.h> // include header for printf
// just a procedure
void procedure()
{
printf("hello\n");
}
// function which doubles its input parameter and returns the result
int function(int x)
{
return(2 * x);
}
// main function
// does some stuff
// try to find out what it does
int main()
{
// calls a procedure
procedure();
// does some stuff
int x = 10;
for (int i=0; i<3; i++)
x = function(x);
// returns the result
return(x);
}
Auf der Linux Kommandozeile kann man sich das Ergebnis des Programmablaufs ausgeben lassen:
echo $?
Tipps zu speziellen C-Thematiken
- Ausgabe:
- printf(“char=d float=%.1f\n”, ‘C’, 3, M_PI);
- Eingabe:
- int x = 0; int u = scanf(“%d”, &x); if (u == 1) …
- Funktionen:
- float quadrat(float x) {return(x*x);}
- Prozeduren:
{
*x = 0;
printf("Bitte %s eingeben: ", s);
return(scanf("%f", x));
}
- Call-By-Value vs. Call-By-Reference
- Sortieren:
- Wie so häufig machen Hilfsfunktionen die Arbeit leichter - im konkreten Fall des Sortierens wäre dies eine Hilfsfunktion, welche zwei Elemente vertauscht, so dass nachher das eine Element größer als das andere ist. Dies ist die Grundlage für den Bubble-Sort Algorithmus und viele andere auch.
- Zwei-Dimensionale Arrays:
- Dies ist ein klassischer Fall für Setter und Getter Funktionen
- Nach “Setter Getter C Zwei-Dimensionale Arrays” googeln
Tipps zur Versionkontrolle
Ein weiteres C-Beispiel findet man auf SourceForge. Wir können es mit dem Versionskontrollsystem SVN herunterladen (unter Linux):
svn co https://svn.code.sf.net/p/glvertex/code/hi hi
Weitere Hinweise zur Benutzung von Versionskontrollsystemen:
- Wie benutze ich das Versionskontrollsystem SVN für die Software-Verwaltung
- Wie benutze ich das Versionskontrollsystem Git für die Software-Verwaltung
Weitere Tipps:
- Anstelle für jede Übungsaufgabe ein separates Programm zu erstellen, ist es in der Regel sinnvoller, jede Aufgabe als eigenständige Prozedur (oder Modul) zu verstehen und die jeweilige Prozedur in main() aufzurufen.
- Die Zerlegung der Aufgaben in einzelne Bestandteile (funktionale Dekomposition bzw. Salamitaktik) ist der Ausgangspunkt aller Programmierarbeit. Dabei hilft häufig auch ein Stück Schmierpapier.
- Zur Prüfungsvorbereitung können Sie sich von ChatGPT Prüfungsfragen generieren lassen.
Bei Fragen gerne auf Discord:
Bitte zuerst einmal versuchen, alleine weiter zu kommen. Googeln bzw. ChatGPT hilft in vielen Fällen!
Ein Wort zu ChatGPT:
Sie können Sich gerne von ChatGPT (als Sparringspartner bzw. analog zum Pair-Programming) helfen lassen, aber das bedeutet nicht, dass Sie den Code von ChatGPT programmieren lassen sollen ohne ihn selber getippt und verstanden zu haben. In der Klausur müssen Sie das schließlich auch selber können.