Aufgabe 1: (40 Punkte)

Schreiben Sie ein Programm calc, welches zwei beim Programmaufruf in der 
Kommandozeile (Achtung: nicht von der Standardeingabe einlesen!!!) bergebe-
ne Fliekomma-Zahlen (operand1 und operand2) gem eines zustzlich ber-
gebenen Operators (operator) miteinander verknpft und die Aufrufargumente 
sowie das Ergebnis (ergebnis) der Verknpfung auf die Standardausgabe ausgibt.

Beispiel: Bei Aufruf Ihres Programms mittels

    calc   operand1  operand2  operator                             (also z.B.:  calc  4.5  7  + )

soll Ihr Programm

            operand1  operator  operand2  =  ergebnis       (hier also: 4.5  +  7  =  11.5 )

ausgeben und terminieren.

Ihr Programm soll folgende Operatoren erkennen und entsprechend handeln (ma-
thematische Funktionen der C-Library wie pow() o.. drfen bei der Implemen-
tierung von Ihnen nicht verwendet werden!):


	+	: Berechnen von operand1 + operand2

	-	: Berechnen von operand1 - operand2

	*	: Berechnen von operand1 * operand2

	/	: Berechnen von operand1 / operand2

	^	: Berechnen von operand1operand2  (, ganzzahlig)


Zur Wandlung einer in der Aufrufzeile gegebenen Ziffernfolge in eine Fliekom-
ma-Zahl kann die Funktion double atof(char *str) verwendet werden (wobei str 
einen Zeiger auf den zu konvertierenden String darstellt).

Bei Fehlaufrufen (z.B. fehlendes Argument, unerlaubter Operator, etc.) soll Ihr 
Programm mit einer Fehlermeldung und einem Fehlercode ungleich null termi-
nieren.

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[] = { 1, 0, 1, 0 };
		(2)                  void f(int *k)
		(3)                  {  int m = *k-2;
		(4)                     do {
		(5)                        m       =  k[1];
		(6)                        *(k+1) += *k;
		(7)                        k++;
		(8)                     }while(m > 0);
		(9)                     (*k)++;
		(10)                  }

		(11)                  void main()
		(12)                  {  int *m = k;
		(13)                     f(m);
		(14)                     m++;
		(15)                     f(m);
		(16)                  }


Aufgabe 3: (10 Punkte)

Markieren und verbessern Sie die Fehler in dem aus Kernighan/Ritchie "Pro-
grammieren in C" bekannten Programm, welches einen Text ber die Standard-
eingabe einliest und die Zahl der Zeichen, Worte (ein Wort wird hier definiert als 
Zeichenfolge, die keine Leerzeichen, Tabulatorzeichen bzw. Zeilentrenner ent-
hlt) und Zeilen darin zhlt und ausgibt.

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


#include <stdio.h>

#define OUT 0;

int main(void)
{
	int c, nl, nw, state;

	state = OUT;
	nl = nw = nc = 0;

	while((c=getchar() != EOF) {
		++nc;
		if ( c == '\n' )
			++nl;
		if ( c == ' ' || c == '\n' || c == '/t' );
			sate = OUT;
		else
			if ( state = OUT )
				state = IN;
				+nw;
	}

	printf("Zeilen: %d Worte: %d Zeichen: %d\n",nl,nw,nc);

	return 0;
}


Aufgabe 4: (10 Punkte)

Geben Sie fr die folgenden for-, while- und do-while-Schleifen jeweils an, wie 
oft und mit welchen Werten der Schleifenvariablen diese jeweils durchlaufen wer-
den!

	int j,k;

	a) for(j = 10; j > 4; j -= 2) { ...... }

	b) k=8;
	   for(j = 8; j <= k; j++) { k=10; ...... }

	c) j=4;
	   while(++j < 8) { ...... }

	d) j=10;
	   do { ...... }while(j < 10);



Aufgabe 5: (10 Punkte)

Entwerfen Sie geeignete Datenstrukturen zur sortierten Speicherung von Perso-
naldaten (ein Personaldatensatz besteht hier vereinfacht aus Name, Vorname, 
Personalnummer und Gehalt (z.B.: "Mustermann", "Hans", 4711, 2345.67)) in 
Form eines Binrbaumes (sortiert wird lexikographisch nach Namen). Gehen Sie 
dabei davon aus, da Strings nicht mehr als 20 Zeichen enthalten, und da maxi-
mal 100 Personaldatenstze zu speichern sein werden!
