Aufgabe 1: (40 Punkte)

Schreiben Sie ein Programm, welches einen beliebig langen Text (einzelne Zei-
len sind durch Newline voneinander getrennt) von der Tastatur einliest und trans-
formiert auf den Bildschirm ausgibt. Als Transformation soll Ihr Programm 
generell alle Leerzeichen am Ende einer jeden Textzeile entfernen. Ist bei Aufruf 
Ihres Programmes die Aufrufoption -r gesetzt, sollen zustzlich alle Zeilen, 
welche lediglich aus Leerzeichen bestehen, komplett (also inkl. Newline-Zei-
chen) aus dem Text entfernt werden.

Bei Fehlaufrufen sollte Ihr Programm mit einer Fehlermeldung und einem Feh-
lercode ungleich null terminieren.

Erstellen Sie zuerst ein Struktogramm und dokumentieren Sie Ihr Programm mit 
kurzen, aber aussagekrftigen Kommentaren! Auf das Struktogramm entfllt die 
Hlfte der Punkte!


Aufgabe 2: (10 Punkte)

Was berechnet das folgende (sinnlose) Programm? Geben Sie die Inhalte der ver-
wendeten Variablen nach jeder ausgefhrten Anweisung an! Verwenden Sie dazu  
die untenstehende Tabelle!

		(1)                  int k[] = { 2, 3, 10 };
		(2)                  int *j  = k+1;
		(3)                  void f(int *k)
		(4)                  {  int m = *k;
		(5)                     if (m/2*2 == m)
		(6)                        *j   += (m * m);
		(7)                     else
		(8)                        k[1] *= (m + m);
		(9)                  }

		(10)                  void main()
		(11)                  {  int m=*k;
		(12)                     f(k);
		(13)                     m += k[1];
		(14)                     f(j);
		(15)                     m += ++k[2];
		(16)                  }


Aufgabe 3: (10 Punkte)

Markieren und verbessern Sie die Fehler in dem aus der Vorlesung bekannten C-
Programm, welches prfen soll, ob ein vom Anwender eingegebenes Datum eine 
bestimmte Form besitzt. Ein eingegebenes Datum der Form tag.monat.jahr 
(z.B. 1.1.1994) bzw. tag.monatsnamejahr (z.B. 1. Januar 1994) soll als gltig, 
alle anderen Eingaben dagegen sollen als ungltig erkannt werden.

Als Fehler markierte korrekte Teile fhren zu Punktabzug. Die Tatsache, da das 
Programm kaum Kommentare enthlt und kein Struktogramm beigefgt ist, wird 
ausnahmsweise nicht als Fehler betrachtet.


#include stdio.h

int main()
{

	char buffer[BUFSIZ],mname[2];
	int  tag,monat,jahr;

	printf("\n\t\tFormale Datums-Pruefung\n");

	while(1) { 				/* Verlassen der Schleife, wenn gets()
					   NULL-Pointer liefert oder eine */
              					   Leerzeile eingegeben wird (s.u.)
					*/
		printf("\nBitte ein Datum eingeben : ");

		if (!gets(buffer) || buffer[0]) 
			break;

		rv=sscanf(buffer,"%d. 19s %d",&tag,mname,&jahr);
		if (rv=3)
			printf("gueltig: %s\n",buffer);
		else
			rv=sscanf(buffer,"%d.%d %d",&tag,&mo-
nat,&jahr);
			if (rv==3)
				printf("gueltig: %s\n",buffer);
			else
				printf("ungueltig: %s\n",buffer);

	}
	return;
}


Aufgabe 4: (10 Punkte)

Angenommen, ein C-Programm enthlt eine for-Schleife der Form

       for ( Ausdruck1; Ausdruck2; Ausdruck3 )
             Anweisung

Wie ist diese Schleife dann durch eine while-, wie durch eine do-while-Schleife 
zu ersetzen ?


Aufgabe 5: (10 Punkte)

Entwerfen Sie geeignete Datenstrukturen zur sortierten Speicherung von ganzen 
Zahlen in Form eines Binrbaumes (gehen Sie hier davon aus, da nicht mehr als 
100 Zahlenwerte zu sortieren sein werden)!
