diff options
| author | Martin Talarczyk <martin@talarczyk.de> | 2015-11-13 12:17:15 +0100 |
|---|---|---|
| committer | Martin Talarczyk <martin@talarczyk.de> | 2015-11-13 12:17:15 +0100 |
| commit | f08f2d0e3798ff90b7e68c46751e15b7b991a2a0 (patch) | |
| tree | 46d12d0da15882ec53d2a016e3252b05638d6b98 /Aufgabe3/quadrat.cc | |
| download | Skriptsprachen-f08f2d0e3798ff90b7e68c46751e15b7b991a2a0.tar.gz Skriptsprachen-f08f2d0e3798ff90b7e68c46751e15b7b991a2a0.zip | |
Commitel Aufgabe 1 bis 4
Diffstat (limited to 'Aufgabe3/quadrat.cc')
| -rw-r--r-- | Aufgabe3/quadrat.cc | 107 |
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 ---------- |
