Willkommen auf den Seiten zu der Vorlesung "Programmieren in C". Auf dieser Seite werden zukünftig immer die neuesten Programme aus der Vorlesung sowie die Übungsaufgaben bereitstehen.
Den Schlüssel für den Computerraum können Sie sich im Sekretariat des IMO (G02-201) ausleihen.
ssh -X Benutzername@Rechnername
,
um eine Verbindung zu dem Ihnen bekanntgegebenen Rechner
herzustellen.
Nach der Prüfungsordnung wird einer der Testatscheine "Programmieren in C" (1. Semester) und "Computerorientierte Mathematik" (2. Semester) benötigt, um die mündliche Prüfung über das Modul "Programmieren in C / Computerorientierte Mathematik" abzulegen.
Ich empfehle aber - mit Blick auf die Ergebnisse der mündlichen Prüfungen der vergangenen Jahre - dringend, beide Veranstaltungen erfolgreich abzuschließen, da ohne ausreichende Programmierkenntnisse die Prüfung nicht bestanden werden kann.
Für Teilnehmer, die bereits sehr gut C und/oder C++ programmieren können, gibt es die Möglichkeit, den Testatschein durch die Bearbeitung eines kleinen Projekts statt durch die Bearbeitung aller Programmieraufgaben zu erlangen.
Die Übungsaufgaben sind in den festgelegten Gruppen selbständig als Hausaufgaben zu bearbeiten. Erwarten Sie nicht, daß die Zeit in der betreuten Computerübung dazu ausreicht, die Programmieraufgaben zu lösen! Diese Zeit dient nur zur Abgabe der Aufgaben und zur Klärung von Fragen und Problemen.
Die angegebenen Bearbeitungsfristen sind strikte Deadlines. Bearbeiten Sie die Programme so früh wie möglich.
Benutzen Sie Emacs, um eine
Datei Kopieren Sie das Programm Hinweis: Informieren Sie sich dazu über die
C-Standardprozedur Hinweis: Eine
C-Funktion in Ihrem Programm könnte als Hinweis: Informieren Sie sich
über die C-Operatoren
Machen Sie sich mit dem UNIX-System, mit Emacs und dem
C-Compiler vertraut.
Teilnehmer
anzulegen, die Ihren
Namen enthält.
hello.c
aus
der Vorlesung in Ihr Verzeichnis, compilieren Sie es,
und führen Sie es aus.
Schreiben Sie eine C-Funktion zur Berechnung der
Fakultät einer natürlichen Zahl, und benutzen Sie
diese Funktion in einem C-Programm, um
für n=1,...,20 jeweils n
und n! auszugeben (wie
fib1.c
).Schreiben Sie ein interaktives C-Programm zur
Berechnung von Binomialkoeffizienten, d.h., lesen Sie
von der Standardeingabe zwei Zahlen n und
k und geben Sie den zugehörigen
Binomialkoeffizienten aus.
scanf()
, die zum Einlesen
von Daten von der Standardeingabe dient.
Schreiben Sie ein C-Programm zur Berechnung der
Primzahlen zwischen 1 und 1000.
int
is_prime(int n)
deklariert sein und 1 liefern,
wenn n eine Primzahl ist, und 0 sonst.
/
und %
.
Schreiben Sie ein interaktives C-Programm zur Berechnung der
reellen Lösung(en) einer allgemeinen quadratischen
Gleichung (ax2 + bx +
c = 0). Denken Sie daran, alle
möglichen Fälle für a,
b und c zu behandeln.
Hinweis: Die Methode des Siebes des Eratosthenes
verwendet keine Division, d.h., in Ihrem Programm
sollten die Operatoren Schreiben Sie ein C-Programm zur Berechnung der
Primzahlen zwischen a und b mittels der
Methode des Siebes des Eratosthenes. Verwenden Sie dazu
dynamischen Speicher (
malloc
/free
).
/
und %
nicht verwendet werden!
Informieren Sie sich (zum Beispiel unter Verwendung
der Unix-Manual-Pages, d.h., benutzen Sie in der Shell
den Befehl
man strlen
usw.) über die
Funktionalität der Standard-C-Funktionen strlen
,
strcat
, strcmp
,
strcpy
, strdup
und
strchr
. Schreiben Sie dann Ihre eigenen
Versionen dieser Funktionen (nennen Sie diese
my_strlen
usw.) und illustrieren Sie
die Wirkung aller dieser Funktionen in einem Programm.
Ändern Sie das Programm
matrix2.c
aus der Vorlesung, so daß das
Produkt zweier reeller Matrizen berechnet wird.
Erweitern Sie Ihr Programm aus der 7. Aufgabe
folgendermaßen:
Hinweis: Um zu entscheiden, ob die
Zeichenkette Ein Dateiformat zur Speicherung reeller Matrizen
sei wie folgt definiert. Die Textdatei enthalte in der
angegebenen Reihenfolge Textzeilen des folgenden Inhalts:
Hierbei seien Operand1, Operand2
entweder reelle Zahlen oder Namen von Dateien, die
reelle Matrizen im angegebenen Format
speichern. Operator sei
entweder
./matrix Operand1 Operator Operand2
*
, +
oder -
. Das Programm soll die so
angegebene Rechenaufgabe lösen, falls dies
möglich ist, und das Ergebnis auf der
Standardausgabe ausgeben. Eingabefehler sollen
erkannt und behandelt werden.
s
eine Zahl oder einen
Dateinamen enthält, können Sie
sscanf(s, "%lf", &zahl)
verwenden. Der
Rückgabewert dieses Aufrufs gibt an, ob erfolgreich eine Zahl
eingelesen wurde.
Schreiben Sie unter Verwendung von
realloc()
und fgets()
eine Funktion
Diese soll das Einlesen einer vollständigen Zeile
aus dem Datenstrom f in den Speicher ab der
Speicherstelle, auf die der Zeiger
void get_line_with_alloc(FILE *f, char **buffer_p, int
*size_p);
*buffer_p
zeigt, bewirken. Es sei
Speicher mit der Größe *size_p
reserviert. Falls dieser Speicher nicht ausreicht, um
die komplette Zeile zu speichern, wird er
mittels realloc()
vergrößert; die
neue reservierte Speicherstelle wird
in *buffer_p
geschrieben, und die neue
Größe wird in *size_p
geschrieben.
Schreiben Sie eine Bibliothek von C-Funktionen für
Berechnungen im Ring Z[X] der univariaten
Polynome mit ganzzahligen Koeffizienten. Verwenden Sie
eine Header-Datei, um alle
benötigten Strukturen und Funktionen zu
deklarieren.
Erweitern Sie Ihr Programm von der letzten Aufgabe wie
folgt:
Schreiben Sie Funktionen zum Einlesen und Ausgeben von
Polynomen in diesem Format.
1 3
5 7
2 0
Erweitern Sie Ihr Programm aus der vorigen Aufgabe: