Programmieren in C


von Prof. Dr. Rainer Thomas

Übungen zum Programmieren in C

1. Aufgabe
2. Aufgabe
3. Aufgabe
4. Aufgabe
5. Aufgabe
6. Aufgabe
7. Aufgabe
8. Aufgabe
9. Aufgabe
10. Aufgabe


1. Aufgabe


Erstellen Sie ein ANSI-C-Programm, daß folgende Ein- und Ausgaben durch- führt (s. untenstehendes Beispiel eines Musterlaufs):

Alle Programmausgaben müssen dem nachfolgenden Beispiel entsprechen :

2. Aufgabe


Bei vielen Rechnersystemen/Terminals existieren spezielle Steuersequenzen zur Steuerung der Bildschirmausgabe.
Eine Ausgabe dieser Steuersequenzen führt nicht zur direkten Ausgabe der darin enthaltenen Zeichen sondern bewirkt eine Bildschirmsteuerung.
Diese Steuersequenzen können für unterschiedliche Systeme unterschiedlich sein.
Beispielsweise gelten für den IBM-PC (bei geladenem ANSI-Treiber) die ANSI- Steuersequenzen und für den Atari die VT52-Steuersequenzen :

ANSI (IBM-PC) VT52 (ATARI)
Clear Screen (u. Cursor Home) <ESC> [ 2 J <ESC> E
absolute Cursor-Positionierung <ESC> [ Zn;Sn f

<ESC> Y Zx Sx

Zn Zeilennummer (1..25) Zx = (char)(Zn + 31)
Sn Spaltennumm. (1..80) Sx = (char)(Sn + 31)

<ESC> ist das ASCII-Steuerzeichen mit dem sedizimalen Zeichencode $1B

  1. Erstellen Sie ein portables (d.h. ohne Quellcode-Änderung nur durch Neuübersetzung sowohl auf dem IBM-PC als auch auf dem ATARI ablauffähiges) ANSI-C-Programm,daß

    Nach Drücken der <RETURN>-Taste soll der Bildschirm wieder gelöscht und das Programm beendet werden.

    Die Portabilität ist durch - mittels geeigneter Preprozessoranweisungen realisierbare - Definition der Makros

    und bedingte Compilierung zu erreichen.

    Als Unterscheidungskriterium soll die nur beim ATARI-PURE-C-Compiler definierte Konstante __PUREC__ (=1) dienen.

  2. Modifizieren Sie das Programm aus a) so, daß durch immer erneute Positionsanforderungen und -eingaben eine wiederholte Verschiebung des Alpha-Musters möglich ist. (Verschiebung bedeutet, daß das Musters an der alten Position gelöscht wird)
    Die Eingabeaufforderung soll ständig in der ersten Bildschirmzeile erscheinen.
    Bei Eingabe von CTRL-Z (mit anschließendem <RETURN>) soll - nach Löschen des Bildschirms - das Programm beendet werden.

3. Aufgabe


Ein über die Standardeingabe einzugebender Text soll analysiert werden.

Erstellen Sie ein ANSI-C-Programm, mit dem

Unter einem Wort sei dabei jede Zeichenfolge, die mit einem Buchstaben oder Underscore ('_') beginnt, nur aus Buchstaben, Ziffern und dem Underscore besteht und von beliebigen Steuer- oder Sonder-Zeichen (nicht aber Ziffern) begrenzt wird, verstanden.
Beachten Sie, daß nach dieser Definition z. B. die Zeichenfolge ;2abc% kein Wort enthält.


4. Aufgabe


Erstellen Sie ein ANSI-C-Programm, mit dem ein Histogramm der Wortlänge eines über die Standardeingabe eingegebenen Textes ermittelt und in folgender Form auf dem Bildschirm ausgegeben werden kann:

              H i s t o g r a m m  der Wortlänge eines Textes
              -----------------------------------------------
                 *
        *        *
  *     *        *
  *     *        *
  *     *        *
  *     *        *
  *     *        *
  *     *        *
  *  *  *        *           *
  *  *  *        *        *  *
  *  *  *     *  *        *  *                                            *
  *  *  *  *  *  *  *  *  *  *     *     *                                *
  *  *  *  *  *  *  *  *  *  *  *  *  *  *                                *
---------------------------------------------------------------------------
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Unter einem Wort sei hier jede Zeichenfolge, die mit einem Buchstaben oder Underscore ('_') beginnt, nur aus Buchstaben, Ziffern und dem Underscore besteht und von beliebigen Steuer- oder Sonder-Zeichen (nicht aber Ziffern) begrenzt wird, verstanden.
Beachten Sie, daß nach dieser Definition z. B. die Zeichenfolge ;3abc% kein Wort enthält.

Die Anzahl der Sternchen soll gleich der Anzahl der Auftritte eines Worts der entsprechenden Länge sein.
Alle Worte, die größer gleich 25 Zeichen lang sind, sollen dabei zu einer Gruppe zusammengefaßt werden.

Damit die gesamte Bildschirmausgabe sichtbar ist, ist bei Wortlängen, deren Auftritte die Anzahl 20 überschreitet die Ausgabe auf 19 Sternchen zu begrenzen und an der Position des 20. (obersten) Sternchens die tatsächliche Anzahl der Auftritte auszugeben.


5. Aufgabe



6. Aufgabe


Entwickeln Sie ein ANSI-C-Programm, das auf die Eingabe von Abkürzungsbezeichnungen für die - deutschen - Wochentage mit der Ausgabe des vollen - englischen - Namens der Wochentage reagiert.


7. Aufgabe


Erstellen Sie ein ANSI-C-Programm, mit dem über die Tastatur eingegebene arithmetische Ausdrücke ausgewertet werden (Taschenrechner !).

Beispiel:

Das Programm soll in einer Schleife fortwährend die Eingabe eines Ausdrucks anfordern, diesen einlesen, auswerten und das Ergebnis am Bildschirm ausgeben.
Es soll enden, wenn an beliebiger Stelle ein Dateiendezeichen (CTRL_Z) eingegeben wird.

Auf die Eingabe eines fehlerhaften Ausdrucks sowie eines Nenners mit dem Wert "0" soll das Programm mit der Ausgabe einer entsprechenden Fehlermeldung statt eines Ergebnisses reagieren.
Dabei sollen folgende Fehlermeldungen unterschieden werden :

Hinweise :


8. Aufgabe


Erstellen Sie ein Programm mit dem maximal 1000 Strings der maximalen Länge 136 alphabetisch sortiert werden können, wobei große und kleine Buchstaben jeweils als gleich betrachtet werden sollen.
Verwenden Sie zum Sortieren den Quick-Sort-Algorithmus.

Durch Angabe von "auf" bzw. "ab" in der Kommandozeile soll beim Programmaufruf bestimmt werden, ob aufsteigend oder absteigend sortiert wird.
Wird kein oder kein zulässiger Kommandozeilenparameter angegeben, so ist aufsteigend zu sortieren.

Die zu sortierenden Strings sind von stdin einzulesen.

Die sortierten Strings sind nach stdout auszugeben.

Hinweise :


9. Aufgabe


In einer Datei, deren Name wechseln kann, befinden sich eine nicht bekannte Anzahl unsortierter "double"-Werte in maschineninterner Darstellung.

Erstellen Sie ein ANSI-C-Programm, mit dem die Werte gelesen und intern in einer binären Baumstruktur aufsteigend sortiert gespeichert werden.

Anschliessend ist die sortierte Wertefolge auf den Maximalwert normiert in eine Textdatei - pro Zeile ein Wert - auszugeben.
Der Name der Textdatei soll ebenfalls variabel sein.

Am Bildschirm sind die Anzahl der gelesenen Werte, der Maximalwert und der Minimalwert (jeweils unnormiert) auszugeben.

Die Namen der Eingabe-(Double-Werte-)Datei und der Ausgabe-(Text-)Datei sind als Kommandozeilenparameter zu übergeben.
Wird nur ein oder kein Kommandozeilenparameter übergeben, so ist daß Programm mit einem Hinweis auf das richtige Aufrufformat zu beenden.

Kann die Eingabedatei nicht geöffnet werden (z.B. weil sie nicht existiert) oder kann die Ausgabedatei nicht geöffnet werden, so ist das Programm mit der Ausgabe eines entsprechenden Hinweises, der den Dateinamen enthalten muß, zu beenden.

Für Testzwecke wird eine geeignete Datei mit den "double"-Werten zur Verfügung gestellt.

Hinweise :


10. Aufgabe


Erstellen Sie ein C-Programm DUMP mit dem der Inhalt einer beliebigen Datei sedezimal und in ASCII-Interpretation am Bildschirm ausgegeben werden kann (siehe untenstehende Darstellung ). Dabei sind Steuerzeichen und Zeichen mit einem Code >=$80 in der ASCII-Interpretation als Punkt darzustellen.
Der Name der Datei ist als Kommandozeilenparameter zu übergeben.
Bei Fehlen dieser Angabe ist durch das Programm nach dem Dateinamen zu fragen.
Kann die angegebene Datei nicht geöffnet werden, so ist das Programm mit der Ausgabe eines entsprechenden Hinweises zu beenden.

Der Dump ist seitenweise (jeweils 16 Zeilen zu je 16 Bytes) durchzuführen. Nach der Darstellung einer Seite soll jeweils wie folgt fortgefahren werden: Bei Eingabe von
'+' oder <RETURN> : Darstellung der nächsten Seite
'-', 'b' oder 'B' : Darstellung der vorhergehenden Seite
'q' oder 'Q' : Beendigung des Programms

Nach der Darstellung der letzten - eventuell nicht mehr vollständigen - Seite soll das Programm n i c h t automatisch beendet werden (sondern erst nach Eingabe von 'q' bzw 'Q').

Hinweis zur Lösung :




Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Copyright © FH München, FB 04, Prof. Dr. Rainer Thomas
U - PC - 021 - 01 - TH - 07
U - PC - 021 - 02 - TH - 07
U - PC - 022 - 00 - TH - 05
U - PC - 023 - 00 - TH - 03
U - PC - 024 - 01 - TH - 06
U - PC - 024 - 02 - TH - 07
U - PC - 025 - 00 - TH - 05
U - PC - 026 - 00 - TH - 07
U - PC - 027 - 00 - TH - 04
U - PC - 028 - 00 - TH - 04