Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder
Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte aller im Vorfeld behandelten Vorlesungs- und Übungseinheiten vorausgesetzt. Bibliotheksfunktionen Außer printf() und der Verwendung des booleschen Datentyps sind keine weiteren Bibliotheksfunktionen zur Lösung der Aufgaben dieses Komplexes erlaubt. Zum Testen der Funktionen dürfen Sie bei Bedarf natürlich weitere Bibliotheksfunktionen verwenden. Einmal geschriebene Funktionen dürfen Sie bei Bedarf auch zur Lösung weiterer Aufgaben dieses Komplexes verwenden. 72
Eindimensionale Felder Aufgabe Reverse a) Schreiben Sie eine Funktion LengthOfString(), die die Länge einer als Argument übergebenen Zeichenkette ermittelt und als Funktionswert zurückliefert. b) Schreiben Sie eine Funktion, die eine Zeichenkette umdreht, z.b. LAGER REGAL. c) Testen Sie Ihre Funktion, indem Sie innerhalb von main() eine Zeichenkette definieren, diese Ihrer Funktion übergeben und anschließend die Zeichenkette auf dem Bildschirm ausgeben. 73
Eindimensionale Felder Aufgabe Palindrom Palindrome ergeben rückwärts wie vorwärts gelesen das gleiche Wort, z.b. OTTO, STETS. a) Schreiben Sie eine boolesche Funktion, die prüft, ob eine als Funktionsargument übergebene Zeichenkette ein Palindrom ist. Wenn ja, soll die Funktion true zurückgeben und sonst false. Groß- und Kleinbuchstaben sind voneinander zu unterscheiden, d.h. dass Rentner kein Palindrom ist. b) Erweitern Sie Ihre Funktion aus a) so, dass Groß- und Kleinschreibung keinen Einfluss auf die Erkennung eines Palindroms haben, also Rentner ein Palindrom ist. Die zu testende Zeichenkette darf dabei nicht geändert werden. 74
Eindimensionale Felder Aufgabe Fehlende Zahlen Lesen Sie mit Hilfe der Funktion readint() eine nullterminierte Zahlenfolge ein, deren Zahlen zwischen 1 und 100 liegen müssen. Geben Sie nur die Zahlen zwischen 1 und 100 aus, die nicht eingegeben wurden! 75
Eindimensionale Felder Aufgabe Anagramm Unter dem Anagramm eines Wortes versteht man ein neues Wort, das durch Mischen der Buchstaben des Ausgangswortes entsteht. Schreiben Sie eine boolesche Funktion, die zwei als Argument übergebene Zeichenketten prüft, ob eine ein Anagramm der anderen ist! Wenn ja, soll die Funktion true zurückgeben und sonst false. Beispiele für Anagramme: EISBAER - ABREISE, ANGELA MERKEL - KARAMELENGEL Hinweis: Es sollen nur Wörter mit Großbuchstaben (ohne Umlaute) ausgewertet werden, d.h. Satzzeichen, Leerzeichen, Kleinbuchstaben und Sonderzeichen können ignoriert werden. 76
Eindimensionale Felder Aufgabe Dualzahl Schreiben Sie eine Funktion printbinary(), die eine als Funktionsargument übergebene nichtnegative ganze Zahl als Dualzahl auf dem Bildschirm ausgibt! Testen Sie printbinary() indem Sie innerhalb der main()-funktion alle höchstens siebenstelligen Binärzahlen generieren und auf dem Bildschirm ausgeben lassen. Zusatzaufgabe: Dimensionieren Sie das zur Zwischenspeicherung der Dualzahl benötigte Feld nur so groß wie unbedingt nötig! 77
Eindimensionale Felder Aufgabe AND-Verknüpfung Schreiben Sie eine Funktion AND() die zwei beliebig lange Dualzahlen bitweise UND-verknüpft und das Ergebnis auf dem Bildschirm ausgibt. Die beiden zu verknüpfenden Dualzahlen seien als Zeichenketten (beliebige Abfolge der Zeichen 1 und 0 ) der Funktion zu übergeben und dürfen von Ihrem Algorithmus nicht verändert werden. Beispiel Dualzahl 1: 10001110111010101010101010101 Dualzahl 2: 111010000111000111000111 Ausgabe der Funktion: 110010000101000101000101 78
Eindimensionale Felder Aufgabe Maximale Teilsumme Gegeben sei eine Zahlenfolge (a1,..., an). Schreiben Sie eine Funktion, die unter allen Paaren aus { (i,j) : 1 i j n } dasjenige auf dem Bildschirm ausgibt, für das die Summe der Folgenglieder von i bis j maximal ist. Welche Parameter müssen Sie der Funktion übergeben? Beispiel Für die Zahlenfolge 12-34 56-5 -6 78-32 müsste Ihr Algorithmus das Index-Paar (3,6) bestimmen, da die Summe 56 + -5 + -6 + 78 maximal ist, d.h. es gibt keine Teilfolge mit einer größeren Summe. 79
Eindimensionale Felder Aufgabe Pattern Matching siehe Vorlesung Schreiben Sie eine Funktion, der sie zwei Zeichenketten s und p übergeben. Wenn die Zeichenkette p in s enthalten ist, soll die Funktion die Indexposition des ersten Auftretens von p in s zurückliefern. Ist p nicht in s enthalten, soll der Funktionswert eine Zahl < 0 sein. Beispiel Sei s die Zeichenkette "sein oder nicht sein" und p die Zeichenkette "ich", dann sollte Ihre Funktion den Wert 11 zurückliefern. Hinweis Sie dürfen zur Realisierung der Funktion keine Bibliotheksfunktionen verwenden, jedoch dürfen Sie die Funktion LengthOfString() aus der ersten Aufgabe dieses Komplexes verwenden bzw. als gegeben annehmen. 80
Übungskomplex Felder Aufgabe Matrixausgabe Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die alle Elemente der Matrix derart formatiert auf dem Bildschirm ausgibt, so dass die Werte verschiedener Zeilen aber gleicher Spalten direkt untereinander stehen. Hinweis: Sie können davon ausgehen, dass vier Zeichen ausreichen, um ein beliebiges Element der Matrix (ggf. inklusive Vorzeichen) auszugeben. 81
Übungskomplex Felder Aufgabe Matrixmaximum Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die den Wert des größten Matrixelements bestimmt und als Funktionswert zurückliefert. 82
Übungskomplex Felder Aufgabe Matrixmodifikation 1 Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die das kleinste Element der Matrix bestimmt und alle Werte der zugehörigen Zeile mit den Werten der ersten Zeile austauscht. Die Spaltenzugehörigkeit der einzelnen Werte muss dabei erhalten bleiben! Beispiel: 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 4 3 2 1 12 11 10 9 8 7 6 5 16 15 14 13 83
Übungskomplex Felder Aufgabe Matrixmodifikation 2 Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die alle Werte der Spalte mit der höchsten Spaltensumme mit den Werten der letzten Spalte austauscht. Hierbei muss die Zeilenzugehörigkeit der einzelnen Werte erhalten bleiben! Beispiel: 4 3 2 1 12 11 10 9 8 7 6 5 16 15 14 13 1 3 2 4 9 11 10 12 5 7 6 8 13 15 14 16 84
Übungskomplex Felder Aufgabe Matrixtransposition Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die die transponierte Matrix bildet (bei der die Zeilen und die Spalten vertauscht sind). Beispiel: 1 3 2 4 9 11 10 12 5 7 6 8 13 15 14 16 1 9 5 13 3 11 7 15 2 10 6 14 4 12 8 16 85
Übungskomplex Felder Aufgabe Matrixsumme Gegeben sei eine N N - Matrix mit ganzzahligen Elementen. N sei dabei als symbolische Konstante mittels #define mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie je eine Funktion, die die Summe aller Elemente ermittelt, die a) oberhalb der Haupt- und Nebendiagonalen (NORD) b) unterhalb der Haupt- und oberhalb der Nebendiagonalen (WEST) c) unterhalb der Haupt- und der Nebendiagonalen (SÜD) N N N N N W N N N O W W N O O W W W O O O W W S O O W S S S O S S S S S Richtungen einer 7 7-Matrix d) oberhalb der Haupt- und unterhalb der Nebendiagonalen (OST) liegen. 86
Übungskomplex Felder Aufgabe FeldZuMatrix Gegeben seien eine N N - Matrix und eine in einem Feld abgelegte Zahlenfolge (w1,w2,..., wnxn) mit N 2 ganzzahligen Elementen. N sei mittels #define als symbolische Konstante mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Schreiben Sie eine Funktion, die die Elemente der Zahlenfolge wie im folgenden Schema gezeigt in die Matrix einordnet: w1 w2 w5 w10 w4 w3 w6 w11 w9 w8 w7 w12 w16 w15 w14 w13 87
Übungskomplex Felder Aufgabe Magisches Quadrat Ein magisches Quadrat ist eine N N - Matrix, die alle natürlichen Zahlen von 1 bis N 2 genau einmal enthält und die Summe der Elemente jeder Zeile, jeder Spalte und der beiden Diagonalen stets dieselbe ist. Schreiben Sie eine boolesche Funktion, die testet, ob eine gegebene N N - Matrix mit ganzzahligen Werten magisch ist! N sei mittels #define als symbolische Konstante mit einem Wert aus dem Bereich der natürlichen Zahlen vordefiniert. Beispiel: 4 9 2 3 5 7 8 1 6 Magisches 3 3-Quadrat 88