C++ Rössel

Ex-2MNd Forum
Verfügbare Informationen zu "C++ Rössel"

  • Qualität des Beitrags: 0 Sterne
  • 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:07

    C++ 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"