Aufgabe 1: (40 Punkte)

Schreiben Sie ein Programm, welches einen beliebigen Text (einzelne Zeilen 
sind durch Newline voneinander getrennt) von der Tastatur einliest und transfor-
miert auf den Bildschirm ausgibt. Die durchzufhrende Transformation soll da-
bei mittels genau einer der folgenden Aufrufoptionen durch den Anwender 
whlbar sein:

	-tn  :  zu Beginn einer Textzeile aufeinander folgende (fhrende) Tabu-
	          latorzeichen (Ersatzdarstellung: \t) werden durch n (n=1,2,...) Spa-
	         ces (Leerzeichen) ersetzt.

	-sn  :  jede Folge von n fhrenden Spaces (n=1,2,...) einer Textzeile wird
	         durch ein Tabulatorzeichen ersetzt.

Bei Fehlaufrufen (z.B. beide Optionen gesetzt, n<1, etc.) sollte Ihr Programm mit 
einer Fehlermeldung und einem Fehlercode ungleich null terminieren. Zur 
Wandlung der auf den Optionsbuchstaben folgenden Ziffernfolge in einen Inte-
gerwert kann die Funktion int atoi(char *str) verwendet werden (wobei str ei-
nen Zeiger auf den zu konvertierenden String darstellt).

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 j=0;
		(2)                  void f(int *k)
		(3)                  {
		(4)                     int m=j;
		(5)                     j = m + (*k);
		(6)                    *k = j * j;
		(7)                  }

		(8)                  void main()
		(9)                  {
		(10)                     int k=10,m=0;
		(11)                     f(&k);
		(12)                     m += k--;
		(13)                     f(&j);
		(14)                     m += j;
		(15)                     printf("m = %d\n",m);
		(16)                  }


Aufgabe 3: (10 Punkte)

Markieren und verbessern Sie die Fehler in folgendem C-Programm, das die L-
sungen einer quadratischen Gleichung berechnen soll.

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.
(Bemerkung: Loesungsformel war auf Klausur angegeben, laesst sich aber
	    als Text hier nicht vernuenftig darstellen)

include <math.h> /* fr Wurzelfunktion sqrt() */
void main()
{
   double a,b,c,wu,x1,x2;
   while(1) {
      printf("\nBitte a b c eingeben : ");
      scanf("%lf %lf %lf",&a,&b,c);
      if (a .eq. 0.0)
         printf("a muss ungleich null sein !\n");
         continue;
      if ((wu = b^2 - 4.0 a c) < 0.0);
         printf("\nKeine Loesung !\n");
      else {
         x1 = (-b + sqrt(wu)) / (2.0 * a);
         x2 = (-b - sqrt(wu)) / (2.0 * a);
         printf("\nLoesungen : %lf %lf\n",x1,x2)
      }
      printf("\nNoch mehr Gleichungen (0=nein));
      scanf("d%",&eingabe);
      if (eingabe = 0) break;
   }
}


Aufgabe 4: (10 Punkte)

Angenommen, ein Integerwert wird im Rechner mit 8 Bit reprsentiert (incl. 1 
Bit Vorzeichen; negative Zahlen werden analog zur Vorlesung im Zweierkom-
plement dargestellt). Welche Bitmuster (bzw. Dezimalwerte) ergeben sich dann 
fr folgende Ausdrcke?

(1)	0x2d
(2)	0376
(3)	!45
(4)	~45
(5)	45>>2
(6)	45 & -2
(7)	45 | -2


Aufgabe 5: (10 Punkte)

Bauen Sie schrittweise aus der Zahlenfolge 12, 15, 8, 7, 10, 9 einen Binrbaum 
auf (Konstruktionsschema gem Vorlesung: ein Knoten km ist linker Nachfolger 
eines Knotens kl, wenn der Schlssel von km kleiner als der Schlssel von kl ist, 
sonst rechter Nachfolger)! Die einzelnen Schritte mssen erkennbar sein! Ist der 
entstandene Baum ausbalanciert?
