KafCa... übt

C

Die Nutzung von C scheint sich auf den ersten Blick nicht wesentlich von der anderer prozeduraler Sprachen zu unterscheiden. Interessant wird es, wenn es um das Handling von Arrays geht. Für mich interessant, weil ich Themen aus der Bildverarbeitung mit C bearbeiten will und hier Matrizen eine zentrale Rolle spielen. Auf ein Beispiel zur Übung für den Einsatz von Arrays stiess ich in einer Rätselzeitschrift, in der Matrizen mit Buchstaben dargestellt waren, die bestimmte Worte in Anordnungen horizontal, vertikal, diagonal und nach links oder rechts gelesen enthalten.

Beispiel

Die folgende Matrix (6 Spalten, 5 Zeilen) besteht pro Element aus einem Einzelbuchstaben:

1 2 3 4 5 6
1 a v o l k m
2 b w e i n s
3 x y e z c f
4 y r q i d j
5 d u r s t q

Hier findet sich unter anderem in der 5. (letzten) Zeile ab der 1. Spalte das Wort "durst" von links nach rechts gelesen und in der 2. Zeile ab der 2. Spalte das Wort "weit" nach rechts unten gelesen.

Algorithmus

Vorgaben:
Die Eigenschaften eines Elementes der Matrix werden als Struktur (struct) abgebildet und die Zeiger auf die Strukturen in der Suchmatrix entsprechend der Ausgangsmatrix angeordnet. Die Attribute der Strukturelemente sind die x- und y-Koordinaten der Position, der Inhalt = Buchstabe an der Position und die Zeiger auf die 8 Nachbarn.
Bezogen auf ihre Position haben die Elemente verschiedene Anzahlen von Nachbarn:

Ablauf:

  1. Suche den 1. Buchstaben des Suchwortes in der Suchmatrix.
  2. Wenn der Buchstabe nicht gefunden wird, gibt es das Suchwort in der Matrix nicht.
  3. Wenn der Buchstabe gefunden wird suche den 2. Buchstaben des Suchwortes bei den direkten Nachbarn des gefundenen 1. Buchstabens. Wird der 2. Buchstabe nicht gefunden, gibt es das Suchwort in der Matrix nicht.
  4. Wenn der 2. Buchstabe gefunden wird, merke dir die relative Position des Nachbarn zum 1. Buchstaben (links, links oben, oben, rechts oben, rechts, rechts unten, unten und links unten) und suche die folgenden Buchstaben des Suchwortes in der entsprechenden Richtung.
  5. Wird das Suchwort nicht bis zum letzten Zeichen in der Richtung gefunden, existiert es nicht in der Matrix ansonsten merke dir den erfolgreichen Fund.
  6. Suche die Umgebung des 1. Buchstaben weiter ab, bis alle Nachbarn überprüft sind.
  7. Danach führe das Verfahren mit dem nächsten Element der Matrix durch, bis alle Elemente der Matrix abgearbeit sind.

Umsetzung

Die aufgeführten Funktionen sind in die Funktionen der grafischen Oberfläche integriert:

Funktionen der grafischen Oberfläche

Fazit

C-Code

Und hier sind nun auch noch die Sourcen

... und ein paar Rätselmatrizen mit Suchwörtern.