Übung 4
Zusammengesetzte Typen, Streams & Arrays

Einleitung                                       
Die Programmieraufgaben werden nach der Übungsstunde im PC-Saal vorgeführt und nicht schriftlich abgegeben.

4.1: Datentype "Adresse"	(3)
Definieren Sie einen neuen Datentyp Adresse unter Verwendung der struct- und der typedef-Anweisung. Der neue Datentyp soll dabei aus den Feldern Anrede, Name, Vorname, Straße, Hausnummer, PLZ und Ort bestehen. 
Deklarieren Sie eine Variable vom Typ Adresse, und weisen Sie ihr eine gültige Adresse zu.

A 4.2: Formatierte Ausgabe	(6)
Ein wesentlicher Nachteil der Ausgabe über Streams ist, daß Zahlen nicht formatiert ausgegeben werden können:
Unformatiert	Formatiert	
123.456	123.456	
45.2890	 45.2890	
1.349	  1.349	
(a)	Skizzieren Sie kurz, wie Sie unter Verwendung von Schleifen und if-then-else-Anweisungen eine beliebige, positive (Fließkomma-)Zahl formatiert ausgeben können. (Bemerkung: Gehen Sie von (Fließkomma-)Zahlen mit max. 10 Stellen vor dem Komma aus)
(b)	Schreiben Sie ein C++ - Programm, daß die Wurzeln der 2er-Potenzen von 1 bis 16 formatiert ausgibt. Es reicht, wenn Sie die Zahlen bis auf 5 Stellen nach dem Dezimalpunkt genau angeben:
Potenz	Wert	Wurzel	
 1	    2	  1.41421	
 2	    4	  2	
...	...	...	
16	65536	256	

A 4.3: Arrays	(5)
In dieser Aufgabe soll ein C++ - Programm geschrieben werden, mit dem man sich eine Übersicht über schulische Leistungen während mehrerer Halbjahre verschaffen und diese Leistungen auch weiter auswerten kann.
(a)	Erzeugen Sie ein Array von Integers, das die Einträge der folgenden Tabelle (natürlich ohne die Beschriftung) enthält:
SCHULNOTEN	1998, 1. Halbjahr	1998, 2.Halbjahr	1999, 1.Halbjahr	
Mathe	2	1	2	
Deutsch	3	3	2	
Geschichte	4	3	4	
Englisch	1	1	2	
Sport	3	3	3	
(b)	Geben Sie die Tabelle unter Verwendung von Tabulatoren auf dem Bildschirm aus. 
(c)	Geben Sie für jedes Halbjahr den auf eine Nachkommastelle gerundeten Mittelwert der Noten aus. Beachten Sie hierbei, daß die einzelnen Noten im Integer-Format vorliegen, der Mittelwert jedoch im Float-Format berechnet werden muß. 
Skizzieren Sie kurz, wie Sie eine Fließkommazahl mit beliebig vielen Nachkommastellen auf eine Nachkommastelle runden können. Verwenden Sie hierzu ausschließlich Zuweisungen, arithmetische Operationen und explizites Casting !
	Beispiel:	3,47 auf eine Nachkommastelle runden:
		3,47 * 10 = 34,7        34,7 + 0,5 = 35,2        [35,2] = 35        35 / 10 =3,5

A 4.4: Arrays & Pointer-Arithmetik	(4)
(a)	Definieren Sie ein zweidimensionales Array mit folgendem Inhalt:
	 0  1  2
	10 11 12 13 14 
	20 21 22 23 24 25 26 
	30 31 32 33 34 35 36 37 38 
	Das Array soll dabei keine überflüssigen Elemente enthalten. 
(b)	Geben Sie den Inhalt des Arrays in obiger Form aus. Beachten Sie bitte, daß die Ausgabe formatiert im Sinne von Aufgabe 4.2. erfolgen soll.
(c)	Geben Sie für jede Zeile des Arrays nur jedes zweite Element aus.
(d)	Geben Sie jedes zweite Element des Arrays aus (d.h. im obigen Beispiel 0, 2, 11, 13, ...).
Verwenden Sie in den Aufgabenteilen (b) – (d) nicht den Array-Zugriffsoperator [], sondern ausschließlich Pointer-Arithmetik! 

A 4.5: Primzahlen	(8)
Eine Primzahl ist eine natürliche Zahl (d.h. unsigned int), die nur durch 1 und sich selbst teilbar ist. Schreiben Sie ein C++ - Programm, das die Primzahlen zwischen 1 und 100 ausgibt.
Anleitung: 	Testen Sie für jede Zahl n zwischen 1 und 100, ob eine der Zahlen zwischen 2 und 		[n/2] die Zahl n teilt.