Verfügbare Informationen zu "C++ Rössel"
Qualität des Beitrags: Beteiligte Poster: heavyraptor - vogel - mätthu Forum: Ex-2MNd Forum Forenbeschreibung: Das ex-offizielle Forum der Klasse 2MNd des Gymnasiums Neufeld - offiziell: www.2mnd.ch.vu aus dem Unterforum: Gymnasium Antworten: 4 Forum gestartet am: Donnerstag 15.02.2007 Sprache: deutsch Link zum Originaltopic: C++ Rössel Letzte Antwort: vor 17 Jahren, 19 Tagen, 9 Stunden, 55 Minuten
Alle Beiträge und Antworten zu "C++ Rössel"
Re: C++ Rössel
heavyraptor - 25.04.2007, 16:07C++ Rössel
Code: #include <champ.h>
void zeigeBrett( int brett[8][8], int n, int x, int y );
int ways[8][2] = {{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
void gmain ()
{
cinit( "Roesselsprünge" );
cout << "Das Rösselsprung-Rätsel\n\n";
cout << "Auf einem 'Schachbrett' mit n Zeilen und n Spalten soll ein\n"
<< "Springer einen Weg zurücklegen, der ihn genau ein Mal\n"
<< "auf jedes Feld führt.\n"
<< setfill( '-' ) << setw( 80 ) << "" << endl;
int brett[8][8];
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
brett[i][j] = 0;
int n;
do {
cout << " Gib die Grösse des Schachbretts an (3 bis 8): ";
cin >> n;
} while ( n < 3 || n > 8 );
int y;
do {
cout << " Gib die Zeile des Ausgangsfeldes an: ";
cin >> y;
} while ( y < 0 || y > n-1 );
int x;
do {
cout << " Gib die Spalte des Ausgangsfeldes an: ";
cin >> x;
} while ( x < 0 || x > n-1 );
int zugNummer = 1, m = 0, k;
int naechsterZug;
brett[x][y] = 1;
cout << endl;
zeigeBrett( brett, n, x, y );
cout << endl;
do {
cout << "Gib die Nummer des naechsten Zugs an: ";
cin >> naechsterZug;
if (y + ways[naechsterZug - 1][0] < n && y + ways[naechsterZug - 1][0] >= 0 &&
x + ways[naechsterZug - 1][1] < n && x + ways[naechsterZug - 1][1] >= 0)
{
if (brett[x + ways[naechsterZug - 1][1]][y + ways[naechsterZug - 1][0]] == 1) {
cout << "Dieses Feld wurde bereits besucht." << endl;
}
else {
x += ways[naechsterZug - 1][1];
y += ways[naechsterZug - 1][0];
brett[x][y] = 1;
zeigeBrett( brett, n, x, y );
for (m = 0, k = 0; k < 8; k++) {
if (x + ways[k][1] < n && x + ways[k][1] >= 0 &&
y + ways[k][0] < n && y + ways[k][0] >= 0 &&
brett[x + ways[k][1]][y + ways[k][0]] == 0)
{
m = 1;
break;
}
}
if (m == 0)
break;
}
}
else
cout << "Ungültiges Feld." << endl;
} while ( zugNummer < n*n && naechsterZug != 0 );
getch();
cend();
}
void zeigeBrett( int brett[8][8], int n, int x, int y )
{
unsigned int i, j, k, m;
cout << setfill('-') << setw(4 * n + 2) << endl;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cout << "|";
if (i == x && j == y)
cout << " * ";
else if (brett[i][j] == 1)
cout << " - ";
else {
m = 0;
for (k = 0; k < 8; k++) {
if (i == x + ways[k][1] && j == y + ways[k][0]) {
cout << " " << (k + 1) << " ";
m = 1;
break;
}
}
if (m == 0)
cout << " ";
}
}
cout << "|" << endl << setfill('-') << setw(4 * n + 2) << endl;
}
}
Re: C++ Rössel
vogel - 26.04.2007, 07:34
super! so fägts viu meh, geit eifach es bitz lang:
Code: #include <champ.h>
void zeigeBrett( int brett[8][8], int n );
void gmain ()
{
CP::yield();
int zdiff, sdiff;
cinit( "Roesselsprünge" );
cout << "Das Rösselsprung-Rätsel\n\n";
cout << "Auf einem 'Schachbrett' mit n Zeilen und n Spalten soll ein\n"
<< "Springer einen Weg zurücklegen, der ihn genau ein Mal\n"
<< "auf jedes Feld führt.\n"
<< setfill( '-' ) << setw( 80 ) << "" << endl;
// Brett deklarieren und mit 0 auffüllen
// ...
int brett[8][8];
for( int i=0; i<8; i++ )
for( int j=0; j<8; j++)
brett[i][j] = 0;
int n;
do {
cout << " Gib die Grösse des Schachbretts an (3 bis 8): ";
cin >> n;
} while ( n < 3 || n > 8 );
int zeile;
do {
cout << " Gib die Zeile des Ausgangsfeldes an: ";
cin >> zeile;
} while ( zeile < 0 || zeile > n-1 );
int spalte;
do {
cout << " Gib die Spalte des Ausgangsfeldes an: ";
cin >> spalte;
} while ( spalte < 0 || spalte > n-1 );
cout << "Ein Springer kann von seinem Feld (x) aus bis zu 8 verschiedene\n"
<< "Zuege ausführen (nummeriert mit 1-8):\n"
<< "------------------------\n"
<< " | | 8 | | 1 | | \n"
<< "------------------------\n"
<< " | 7 | | | | 2 | \n"
<< "------------------------\n"
<< " | | | x | | | \n"
<< "------------------------\n"
<< " | 6 | | | | 3 | \n"
<< "------------------------\n"
<< " | | 5 | | 4 | | \n"
<< "------------------------\n";
int zugNummer = 1;
brett[zeile][spalte] = 1;
zeigeBrett( brett, n );
int naechsterZug = 1;
int * zuege = new int[n*n];
cout << "Please wait..." << endl;
do {
//cout << "Gib die Nummer des naechsten Zugs an : ";
//cin >> naechsterZug;
int test = 1;
while( test==1 )
{
switch( naechsterZug )
{
case 1:
zdiff = -2;
sdiff = 1;
break;
case 2:
zdiff = -1;
sdiff = 2;
break;
case 3:
zdiff = 1;
sdiff = 2;
break;
case 4:
zdiff = 2;
sdiff = 1;
break;
case 5:
zdiff = 2;
sdiff = -1;
break;
case 6:
zdiff = 1;
sdiff = -2;
break;
case 7:
zdiff = -1;
sdiff = -2;
break;
case 8:
zdiff = -2;
sdiff = -1;
break;
}
if( zeile+zdiff>=0 && zeile+zdiff<n && spalte+sdiff>=0 && spalte+sdiff<n && brett[zeile+zdiff][spalte+sdiff]==0 && naechsterZug <=8)
{
zeile +=zdiff;
spalte +=sdiff;
zugNummer++;
brett[zeile][spalte] = zugNummer;
zuege[zugNummer] = naechsterZug;
//cout << zugNummer << endl;
//zeigeBrett( brett, n );
test = 2;
}
else if(zeile+zdiff>0 || spalte+sdiff>=n)
{
//cout << "FELD GIBT ES NICHT!" << endl;
naechsterZug++;
if(naechsterZug>8)
test=3;
}
else if(brett[zeile+zdiff][spalte+sdiff]!=0)
{
//cout << "FELD SCHON BELEGT!" << endl;
naechsterZug++;
if(naechsterZug>8)
test=3;
}
else
{
naechsterZug++;
if(naechsterZug>8)
test=3;
}
}
//cout << "Znr. " << zugNummer << ": " << zuege[zugNummer];
if(test==3)
{
naechsterZug = zuege[zugNummer]+1;
switch( zuege[zugNummer] )
{
case 1:
zdiff = -2;
sdiff = 1;
break;
case 2:
zdiff = -1;
sdiff = 2;
break;
case 3:
zdiff = 1;
sdiff = 2;
break;
case 4:
zdiff = 2;
sdiff = 1;
break;
case 5:
zdiff = 2;
sdiff = -1;
break;
case 6:
zdiff = 1;
sdiff = -2;
break;
case 7:
zdiff = -1;
sdiff = -2;
break;
case 8:
zdiff = -2;
sdiff = -1;
break;
}
zeile -= zdiff;
spalte -= sdiff;
zuege[zugNummer] = 0;
for( int i=0; i<n; i++)
for( int j=0; j<n; j++)
if( brett[i][j] == zugNummer )
brett[i][j] = 0;
zugNummer--;
//cout << zugNummer << "+1 -> nächster zug..." << endl;
//cout << "Nächste Zugmöglichkeit: " << naechsterZug << endl;
//zeigeBrett( brett, n );
}
else
{
naechsterZug=1;
}
test=0;
} while ( zugNummer < n*n && naechsterZug != 0 );
zeigeBrett( brett, n );
delete [] zuege;
getch();
cend();
}
void zeigeBrett( int brett[8][8], int n )
{
// Darstellung des Schachbrett
for( int i=0; i<n; i++)
{
cout << setw( n*4 ) << setfill('-') << "-" << endl;
for( int j=0; j<n; j++)
{
if( brett[i][j]==0 )
cout << setfill(' ') << setw( 4 ) << "|";
else
cout << setfill(' ') << setw( 2 ) << brett[i][j] << setw(2) << "|";
}
cout << endl;
}
cout << setw( n*4 ) << setfill('-') << "-" << endl;
}
Re: C++ Rössel
mätthu - 26.04.2007, 19:25
rösch.. du bisch e chranke siech.. ds macht ja eifach aus fertig.. bim yannick chame immerhin no säuber.. isch luschtigi beschäftigung für ir schtung ;-)
Re: C++ Rössel
heavyraptor - 28.04.2007, 09:05
Bim erschtä vrsuäch ...:
http://heavyraptor.he.funpic.de/foo/allgemeine-schutzverletzung.gif ::lol-2::
... u i ha irgendwiä o ke luscht gha dä Fähler jetzt no zkorrigiärä ::grins::.
Aber es het de när scho funktioniert... mit 5 reiä, kei ahnig wieso.
Komplimänt, geilä code.
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum Ex-2MNd Forum
Das Schloss Dürande - gepostet von Knochenfaust am Sonntag 25.03.2007
exroucher winkler u lips ;) - gepostet von mätthu am Sonntag 09.09.2007
Neuer Moderator: Knochenfaust - gepostet von heavyraptor am Montag 19.02.2007
Rösch aus dirigänt!! - gepostet von heavyraptor am Montag 07.05.2007
BIO-CD - gepostet von heavyraptor am Freitag 08.06.2007
Ähnliche Beiträge wie "C++ Rössel"