summaryrefslogtreecommitdiffstats
path: root/Aufgabe3/quadrat.cc
diff options
context:
space:
mode:
authorMartin Talarczyk <martin@talarczyk.de>2015-11-13 12:17:15 +0100
committerMartin Talarczyk <martin@talarczyk.de>2015-11-13 12:17:15 +0100
commitf08f2d0e3798ff90b7e68c46751e15b7b991a2a0 (patch)
tree46d12d0da15882ec53d2a016e3252b05638d6b98 /Aufgabe3/quadrat.cc
downloadSkriptsprachen-f08f2d0e3798ff90b7e68c46751e15b7b991a2a0.tar.gz
Skriptsprachen-f08f2d0e3798ff90b7e68c46751e15b7b991a2a0.zip
Commitel Aufgabe 1 bis 4
Diffstat (limited to 'Aufgabe3/quadrat.cc')
-rw-r--r--Aufgabe3/quadrat.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/Aufgabe3/quadrat.cc b/Aufgabe3/quadrat.cc
new file mode 100644
index 0000000..2ee0a4f
--- /dev/null
+++ b/Aufgabe3/quadrat.cc
@@ -0,0 +1,107 @@
+//#=====================================================================================
+//#
+//# Filename: quadrat.cc
+//#
+//# Description: Suchaufgabe "Buchstabenquadrat"
+//#
+//# Version: 1.0
+//# Created: 30.08.2002
+//# Revision: none
+//# Compiler: GNU C/C++
+//#
+//# Author: Dr.-Ing. Fritz Mehner (Mn)
+//# Company: Fachhochschule Südwestfalen, Iserlohn
+//# Email: mehner@fh-swf.de
+//#
+//#=====================================================================================
+
+using namespace std;
+
+// ##### HEADER FILE INCLUDES ######################################################
+
+#include <iostream>
+
+
+// ##### VARIABLES - LOCAL TO THIS SOURCE FILE ###################################
+
+const int n = 4; // Dimension des Quadrats
+
+char quadrat[n][n] = { // Buchstabenquadrat
+ { 'S', 'R', 'G', 'D' },
+ { 'O', 'F', 'A', 'E' },
+ { 'N', 'U', 'B', 'L' },
+ { 'T', 'S', 'P', 'E' } };
+
+char buffer[1024]; // Puffer zum Aufbau der gefundenen Zeichenketten
+int erreicht[1024]; // Stapel zur Speicherung der erreichten Positionen
+int p; // Stapelzeiger
+
+
+// ##### FUNCTION DEFINITIONS - LOCAL TO THIS SOURCE FILE ########################
+
+//----------------------------------------------------------------------
+// weiter
+// Prüfen, ob ein Platz in der Matrix schon einmal erreicht wurde
+//----------------------------------------------------------------------
+bool
+weiter ( int i, int j )
+{
+ int k, pos = 10*i+j;
+
+ if( i<0 || i>=n || j<0 || j>=n )
+ return false; // Position außerhalb der Matrix
+
+ for ( k=0; k<p; k+=1 )
+ if(erreicht[k] == pos)
+ return false;
+
+ return true;
+} // ---------- end of function weiter ----------
+
+//----------------------------------------------------------------------
+// suche
+// Rekursiver Durchlauf durch die Matrix quadrat
+//----------------------------------------------------------------------
+void
+suche ( int i, int j )
+{
+ int di, dj;
+ int pos = 10*i+j; // Postition in der Matrix codieren
+
+ buffer[p] = quadrat[i][j]; // aktuelles zeichen in den Ausgabepuffer
+ erreicht[p] = pos; // erreichte Position in die Merkliste
+ p++; // Stapelzeiger erhöhen
+ buffer[p] = '\0'; // Zeichenkette im Ausgabepuffer abschließen
+ cout << buffer << "\n"; // Puffer ausgeben
+
+ for ( di=-1; di<=+1; di+=1 )
+ for ( dj=-1; dj<=+1; dj+=1 )
+ if ( weiter( i+di,j+dj) ) // Erreichbarkeit des Nachbarn prüfen
+ suche ( i+di,j+dj ); // Aufruf für die Nachbarn
+
+ p--; // Stapelzeiger vermindern
+
+ return ;
+} // ---------- end of function suche ----------
+
+
+//----------------------------------------------------------------------
+// Hauptprogramm
+//----------------------------------------------------------------------
+int
+main ( int argc, char *argv[] )
+{
+ int i, j;
+
+ //----------------------------------------------------------------------
+ // Rekursion beginnt der Reihe nach bei jedem Matrixelement
+ //----------------------------------------------------------------------
+ for ( i=0; i<n; i+=1 )
+ for ( j=0; j<n; j+=1 )
+ {
+ p = 0;
+ suche(i,j);
+ }
+
+ return 0;
+} // ---------- end of function main ----------