Programmierkurs "C und Computergrafik"
Aktuelle Projekete
Projekt 1 2005/2006: Gassimulation
Unser erstes Projekt in diesem Schuljahr beschäftigt sich mit der Simulation von Gasatomen in einem begrenzten Volumen. Das Executable, das ihr euch über den Link auf euren Rechner laden könnt, stellt eine erste einfache Lösung zu dieser Aufgabe dar. Sie beinhaltet die Reflektion der Gasteilchen an den Wänden des Kontainers und ermöglicht es dem Betrachter, mit den Tasten y/Y den Deckel zu senken/heben. Die Teilchen werden nach Lebensalter gefärbt. wird ein teilchen zu alt, so wird es entfernt und ein neues Teilchen erscheint zufällig.
Noch nicht berücksichtig werden:
-
Stösse zwischen Gasteilchen
Übertragung von Energie zwischen Stoßpartnern
Unterschiedliche Energie/Geschwindigkeit der Teilchen
Färbung auf Basis der aktuellen Energie
Ich habe euch den Code für dieses Beispiel nicht zur Verfügung gestellt, um euch die Möglichkeit zu geben, eigene Vorstellungen zu realisieren ...
Projekt 2 2005/2006: Terrain-Visualisierung
In unserem zweiten Projekt wollen wir ein Programm zur Visualisierung allgemeiner Terraindaten schreiben. Wichtig ist hierbei ein modularer Aufbau auf Basis eines C++-Klassenkonzeptes, um die Auswertung der Geländedaten von der Darstellung des Gel&auuml;ndes vollständig zu entkoppeln.
Fernziel ist ein Visualisierer, der das Terrain abhängig vom gewählten Beobachterstandpunkt, der Varianz der Terraindaten und der Geschwindigkeit des Rechners mit optimal angepasster Detailtreue darstellt. Dabei ist der Unterschied im dargestellten Bild (z.B. die Pixeldifferenz) massgebliches Gütekrietrium für die Bewertung einer Deatilstufe.
Bisherige Ideen:
-
Rekursive Verfeinerung
Per-Frame-Evaluierung der Geländedaten
Top-Down-Ansatz zur Verfeinerung des Terrains
Beurteilung der Detailstufe durch einen Geländemonitor (Top-View)
Verzeichnis der Übungsblätter
Übungsblätter 2003/2004
- Arbeitsblatt 01
- Arbeitsblatt 02
- Arbeitsblatt 03
- Arbeitsblatt 04
- Arbeitsblatt 05
- Arbeitsblatt 06
- Arbeitsblatt 07
Übungsblätter 2004/2005
Übungsblätter 2005/2006
Eckdaten
Betreuung: Michael Winckler
Zielgruppe: ab Klasse 7
Termin: Montags, 16:00-17:15
Stand: andauernd seit 2001
Materialien: Kurswebseite mit Arbeitsblättern
Stichwortverzeichnis/Glossar
- Bibliothek
Der Sprachumfang von C ist sehr schlank: nur etwas mehr als 30
reservierte Worte bilden den Kern dieser Programmiersprache. Die Macht
von C entfaltet sich erst durch die Anwedung weiterer Bibliotheken,
die dem Programmierer Befehle in Form von Routinen bereitstellen. Zum
Standardumfang jedes Compilers
gehört eine ganze Reihe von Grundbibilotheken, die Aufgaben wie
Ein- und Ausgabe, mathematische Funktionen, Generierung von
Zufallszahlen etc. übernehmen. Die Zusammenarbeit zwischen
Programm und Bibliotheken wird zum einen über Headerfiles und zum anderen über den
Linker realisiert.
- Compiler
Der Compiler übersetzt den vom Programmierer verfasste
Quelltext (Source) in mehreren
Arbeitsschritten in ein auf dem jeweiligen Rechner lauffähiges
Programm. Hierbei wird zuerst der Präprozessor angewendet, um
textuelle Ersetzungsarbeiten zu verrichten. Danach werden die Befehle
schritt für Schritt analysiert, assembliert und so Objectcode erzeugt. Schliesslich setzt
der Linker aus verschiedenen Objectcodes sowie den verwendeten Bibliotheken das lauffähige
Executable zusammen.
- Executable
Mit Executable wird ein fertiges, lauffähiges Programm
bezeichnet. Der C-Compiler stellt es her, indem er die Sourcen in Maschinensprache
übersetzt und danach die einzelnen Objectcodes der Module und Bibliotheken
zu einem Gesamtprogramm zusammensetzt. Dieser Vorgang ähnelt
einem Puzzelspiel, bei dem, beginnend mit dem Hauptprogramm, alle
Subroutineaufrufe durch Verweise auf den entsprechenden Subroutinecode
ersetzt werden. Diese Arbeit übernimmt der Linker.
- Header
Um die Trennung von Schnittstelle und Programmcode zu
realisieren, existieren in C Headerfiles. Ein Modul besteht so neben dem Sourcecode aus einem zweiten Anteil,
einem File, das sämtliche Schnittstelleninformationen
enthät. Diese Zweiteilung ist sowohl bei der Modularisierung als auch
für die verteilte Programmerstellung von Vorteil.
- Linker
Der Linker erstellt aus den vorcompilierten Modulen und Bibliotheken ein lauffähiges
Gesamtprogramm, das Executable. Dabei durchsucht er alle
Binärcode auf Verweise auf andere Routinen und fügt diese
Verweise zu einem Netzwerk zusammen. Nicht benötigte Routinen
kann er dabei entfernen, um den resultierenden Code schlank zu halten.
- Modul
Die Zerlegung eines Programmierprojektes in einzelne
unabhängige Teile nennt man Modularisierung. In C besteht ein
Modul aus zwei einzelnen Files. Der Header liefert dem Benutzer des Moduls
die nötigen Schnittstelleninformationen, der Sourcecode enthält die eigentliche
Implementierung. Zum Schutz von Programm-Know-How kann das Modul auch
in der Kombination Header plus Objectcode
an andere Programmierer weitergegeben werden.
- Objectcode
Wird ein Modul vom Compiler
verarbeitet, so erstellt dieser zunächst Objectcode, eine
Maschinensprache-Version des Moduls, in dem noch die Verbindung zu
anderen Modulen fehlen. Erst der Linker setzt aus allen Objectcodes
und den vorcompilierten Bibliotheken das Fertige Executable zusammen.
- Sourcecode
Als Sourcecode bezeichnet man in Compilersprachen den Teil des
Programmes, der vom Programmierer unter Anwendung der durch die
Sprache vorgegebene Syntax erstellt wird. In C ist der Sourcecode ein
reines ASCII-File, das auf dem jeweiligen Rechner unter einem mit der
Endung ".c" versehenen File gespeichert wird. Der Compiler wandelt den Sourcecode in
mehreren Schritten in das lauffähige Programm um.
- Rekursion
Von Rekursion spricht man, wenn eine Funktion sich selbst aufruft. Mit
rekursiver Programmierung lassen sich viele algorithmische Aufgaben
sehr elegant lösen. Kandidaten für rekursive Algorithemn
sind beispielsweise Sortierfunktionen wie Mergesort.
Zielgruppe: ab Klasse 7
Termin: Montags, 16:00-17:15
Stand: andauernd seit 2001
Materialien: Kurswebseite mit Arbeitsblättern
Der Sprachumfang von C ist sehr schlank: nur etwas mehr als 30 reservierte Worte bilden den Kern dieser Programmiersprache. Die Macht von C entfaltet sich erst durch die Anwedung weiterer Bibliotheken, die dem Programmierer Befehle in Form von Routinen bereitstellen. Zum Standardumfang jedes Compilers gehört eine ganze Reihe von Grundbibilotheken, die Aufgaben wie Ein- und Ausgabe, mathematische Funktionen, Generierung von Zufallszahlen etc. übernehmen. Die Zusammenarbeit zwischen Programm und Bibliotheken wird zum einen über Headerfiles und zum anderen über den Linker realisiert.
Der Compiler übersetzt den vom Programmierer verfasste Quelltext (Source) in mehreren Arbeitsschritten in ein auf dem jeweiligen Rechner lauffähiges Programm. Hierbei wird zuerst der Präprozessor angewendet, um textuelle Ersetzungsarbeiten zu verrichten. Danach werden die Befehle schritt für Schritt analysiert, assembliert und so Objectcode erzeugt. Schliesslich setzt der Linker aus verschiedenen Objectcodes sowie den verwendeten Bibliotheken das lauffähige Executable zusammen.
Mit Executable wird ein fertiges, lauffähiges Programm bezeichnet. Der C-Compiler stellt es her, indem er die Sourcen in Maschinensprache übersetzt und danach die einzelnen Objectcodes der Module und Bibliotheken zu einem Gesamtprogramm zusammensetzt. Dieser Vorgang ähnelt einem Puzzelspiel, bei dem, beginnend mit dem Hauptprogramm, alle Subroutineaufrufe durch Verweise auf den entsprechenden Subroutinecode ersetzt werden. Diese Arbeit übernimmt der Linker.
Um die Trennung von Schnittstelle und Programmcode zu realisieren, existieren in C Headerfiles. Ein Modul besteht so neben dem Sourcecode aus einem zweiten Anteil, einem File, das sämtliche Schnittstelleninformationen enthät. Diese Zweiteilung ist sowohl bei der Modularisierung als auch für die verteilte Programmerstellung von Vorteil.
Der Linker erstellt aus den vorcompilierten Modulen und Bibliotheken ein lauffähiges Gesamtprogramm, das Executable. Dabei durchsucht er alle Binärcode auf Verweise auf andere Routinen und fügt diese Verweise zu einem Netzwerk zusammen. Nicht benötigte Routinen kann er dabei entfernen, um den resultierenden Code schlank zu halten.
Die Zerlegung eines Programmierprojektes in einzelne unabhängige Teile nennt man Modularisierung. In C besteht ein Modul aus zwei einzelnen Files. Der Header liefert dem Benutzer des Moduls die nötigen Schnittstelleninformationen, der Sourcecode enthält die eigentliche Implementierung. Zum Schutz von Programm-Know-How kann das Modul auch in der Kombination Header plus Objectcode an andere Programmierer weitergegeben werden.
Wird ein Modul vom Compiler verarbeitet, so erstellt dieser zunächst Objectcode, eine Maschinensprache-Version des Moduls, in dem noch die Verbindung zu anderen Modulen fehlen. Erst der Linker setzt aus allen Objectcodes und den vorcompilierten Bibliotheken das Fertige Executable zusammen.
Als Sourcecode bezeichnet man in Compilersprachen den Teil des Programmes, der vom Programmierer unter Anwendung der durch die Sprache vorgegebene Syntax erstellt wird. In C ist der Sourcecode ein reines ASCII-File, das auf dem jeweiligen Rechner unter einem mit der Endung ".c" versehenen File gespeichert wird. Der Compiler wandelt den Sourcecode in mehreren Schritten in das lauffähige Programm um.
Von Rekursion spricht man, wenn eine Funktion sich selbst aufruft. Mit rekursiver Programmierung lassen sich viele algorithmische Aufgaben sehr elegant lösen. Kandidaten für rekursive Algorithemn sind beispielsweise Sortierfunktionen wie Mergesort.