# Aufgaben zur UE
Einführung in die Programmierung

Legen Sie alle Programme so aus, dass der Benutzer die geforderten Berechnungen beliebig oft durchführen kann, ohne das Programm jedes mal neu zu starten.
Beim Einlesen von Zeichenketten können Sie davon ausgehen, dass keine Leerzeichen in der Eingabe vorkommen. Der Operator >> sieht ein Leerzeichen als Ende einer Eingabeoperation an. Sie können auch annehmen, dass der Benutzer keine zu langen Zeichenketten eingibt, die einen Pufferüberlauf provozieren könnten. Interessierte finden hier Methoden, wie auch Zeichenketten eingelesen werden können, die Leerzeichen enthalten und wie ein Pufferüberlauf vermieden werden kann.
Anspruchsvollere Aufgaben sind mit einem Stern gekennzeichnet.

##
4. Felder, Exkurs: Hashing

Erstellen Sie C++ Programme für folgende Problemstellungen:

1. Lesen Sie beliebig viele (max. 50) Zahlen (Abschluss mit dem Wert 0) ein, speichern Sie diese in einem Feld und geben Sie Mittelwert, Median und die Standardabweichung der Zahlen aus. (Bei der Ermittlung der Medians können Sie davon ausgehen, dass die Zahlen schon sortiert sind, vom Benutzer also entweder in aufsteigender oder in fallender Reihenfolge eingegeben werden.)

2. Bestimmen Sie alle Primzahlen bis zu einem gegebenen n mit Hilfe des Siebs des Eratosthenes.

3. Schreiben Sie ein Programm, das zunächst eine Zeichenkette (max. 80 Zeichen) einliest und dann immer wieder ein einzelnes Zeichen einliest und die Zeichenkette ausgibt, die entsteht wenn man das zuletzt eingegebene Zeichen aus der ursprünglichen Zeichenkette entfernt. (Das Programm soll durch Eingabe eines ! beendet werden.)
   z.B. Eingabe: Kranke Schwestern
   Eingabe: K
   Ausgabe: ranke Schwestern
   Eingabe: e
   Ausgabe: Krank Schwstrn
   Eingabe: !
   Programmende

4. Lesen Sie 2 2x2 Matrizen ein und geben Sie das Produkt der beiden Matrizen aus. Legen Sie das Programm so aus, dass der Benutzer beliebig viele Matrizenmultiplikationen ausführen kann, ohne das Programm mehrmals zu starten. Verwenden Sie in Ihrem Programm zur Speicherung der Matrizen maximal 3 Variable.

5. Lesen Sie maximal 50 Messpunkte (xi/yi) ein und berechnen Sie die Koeffizienten a und b in der Gleichung der Regressionsgeraden y=ax+b. Geben Sie außerdem den Punkt aus, dessen y Koordinate am stärksten von der berechneten Regressionsgeraden abweicht.

6. Bei einer Wahl muss sichergestellt werden, dass jeder Wahlberechtigte (es sind derer maximal 90) nur einmal seine Stimme abgibt. Für diesen Zweck prüft man die Sozialversicherungsnummer und merkt sich, wer schon gewählt hat. Schreiben Sie ein Programm, das beliebig viele Sozialversicherungsnummern einliest und eine Warnung ausgibt, sobald eine Nummer zum zweiten Mal eingegeben wird.
   Überlegen Sie, ob für diese Anforderungen der Einsatz einer Hash-Tabelle angebracht ist und verwenden Sie gegebenenfalls eine Hash-Tabelle mit linear probing

7. Schreiben Sie ein Programm, das Tipps im Lotto 6 aus 45 verwaltet. Lesen Sie maximal 50 Tipps ein (ein Tipp besteht aus jeweils 6 Zahlen. Beenden der Eingabe mit 0) und danach das Ziehungsergebnis (ebenfalls 6 Zahlen). Geben Sie aus wieviele Sechser in den Tipps vorkommen.
   Anmerkung: Gehen Sie der Einfachheit halber davon aus, daß die einzelnen Zahlen in den Tipps und im Ziehungsergebnis aufsteigend sortiert eingegeben werden.

8. Lesen Sie maximal 50 Zahlen (Abschluß mit 0) in ein Feld F ein, sowie einen Wert x. Teilen Sie den Inhalt des Feldes F so auf zwei weitere Felder Fg und Fk auf, dass alle Werte, die größer als x sind, in Fg liegen und alle anderen in Fk.
   Geben Sie dann abwechselnd je eine Zahl aus Fg und eine aus Fk aus, solange bis alle Zahlen ausgegeben sind.
   z.B. Eingabe: 3 14 31 7 29 10 18 15 19 0 x=10
   Fg enhält dann 14 31 29 18 15 19 und Fk 3 7 10
   Ausgabe: 14 3 31 7 29 10 18 15 19

9. Lesen Sie maximal 50 Zeichenketten ein (jede Zeichenkette hat maximal 80 Zeichen, Abschluß durch Eingabe von "Stop") sowie einen Wert n. Geben Sie dann alle Zeichenketten ein, die maximal n Zeichen lang sind. Die Verwendung von Stringfunktionen (strlen etc.) ist nicht gestattet.
   Anmerkung: Beachten Sie, dass beim Einlesen eine Zeichenkette durch ein Leerzeichen beendet wird. z.B. Eingabe: C++ ist ganz schön kompliziert so im Allgemeinen Stop n=4
   Ausgabe: C++ ist ganz so im

10. Schreiben Sie ein Programm zur Ermittlung des zu entrichtenden Steuerbetrags aus dem Gewinn unter Berücksichtigung der Steuerprogression. Verwenden Sie ein Feld, das mit den entsprechenden Bereichsgrenzen initialisiert wird, sowie ein zweites Feld, das mit den zugehörigen Steuersätzen initialisiert wird. Die aktuellen Werte für Österreich können Sie aus der Tabelle entnehmen und im Programm als Konstante vorgeben (Die Tabelle muss also nicht eingelesen werden.) Das Programm soll einen Gewinnbetrag einlesen und die entsprechende Steuer berechnen und ausgeben.

    von | bis | Prozentsatz
    0 | 3640 | 0
    3640.01 | 7270 | 21
    7270.01 | 21800 | 31
    21800.01 | 50870 | 41
    50870.01 |  | 50

11. Lesen Sie eine Zeichenkette ein und geben Sie, je nach Benutzerwunsch eine kodierte, bzw. dekodierte Version der Eingabe aus. Verwenden Sie dazu eine einfache Cäsar-Kodierung.
    z.B. Eingabe (kodieren): Test
    Ausgabe: Uftu

12. Bei einem Schiwettkampf mit maximal 30 Teilnehmern werden die erreichten Zeiten im Format min:sec:tausendstel eingegeben. Schreiben Sie ein Programm, das die Anzahl der Teilnehmer und die erreichten Zeiten einliest. Danach soll die Bestzeit ermittelt werden. Ausgegeben wird die Startnummer des Siegers, die Bestzeit, sowie eine Tabelle aller Teilnehmer in der die Zeitdifferenz zum Sieger angeführt wird. Diese Tabelle wird nach Startnummern sortiert ausgegeben, also nicht nach erreichter Position. z.B.: Eingabe:
    5
    1:10:22
    1:5:22
    1:7:40
    1:8:27
    1:6:23
    Ausgabe:
    Sieger ist die Startnummer 2 mit 1:5:22
    1 5
    2 0
    3 2.18
    4 3.05
    5 1.01

13. * Schreiben Sie eine einfache Version des Tic-Tac-Toe Spiels. Dabei spielt der Benutzer gegen den Computer. Nach jedem Zug soll der aktuelle Zustand des Spielbretts am Bildschirm ausgegeben werden.
    (Der Computer muss sich dabei nicht besonders schlau anstellen. Es genügt, wenn er einfach irgendeines der freien Felder besetzt, sobald er am Zug ist. Es muss auch nicht automatisch erkannt werden, wenn die Partie zu Ende ist.)

14. * Lesen Sie eine Zeichenkette ein und geben Sie aus, welche Zeichen wie oft in der Eingabe vorkommen.
    z.B. Eingabe: achtung, test
    Ausgabe: ,(1) a(1) c(1) e(1) g(1) h(1) n(1) s(1) t(3) u(1)

15. * Schreiben Sie ein Programm, das eine Zeichenkette (max. 80 Zeichen, nur Kleinbuchstaben) einliest und das erste Zeichen der ursprünglichen Zeichenkette alphabetisch korrekt einsortiert. Das heißt im Ergebnis sollen zunächst alle Zeichen, die kleiner als das ursprünglich erste Zeichen sind, dann dieses erste Zeichen und schließlich die Zeichen, die größer als das ursprünglich erste Zeichen sind auftreten.
    z.B. Eingabe: keinblasserschimmer
    Ausgabe: eibaechieknlssrsmmr