Begrüßung und erste Frage!



  • Stimmt!
    Ja du hattest recht!

    Jetzt versteh ichs!

    Hab übersehen das immer TREFFER kommt auch wenn ich nicht treffe!

    DANKE



  • Die lokale Benutzung von Variablen und die Initialisierung solltest du noch umsetzen. Un für meinen Geschmack könnte an manchen Stellen ein Leerzeichen für bessere Lesbarkeit sorgen.

    #include <iostream> 
    #include <cstdlib> 
    #include <cstdio> 
    #include <ctime>  // statt time.h
    
    using namespace std; 
    
    const int X=8; 
    const int Y=8; 
    
    int main() 
    { 
      srand(time(NULL)); 
    
      char feld[X][Y]; 
      int schiffx=(rand()%6); 
      int schiffy=(rand()%8); 
    
      for( unsigned int y = 0; y < Y; y++) // lokale Zählvariable y
      {
          for( unsigned int x = 0; x < X; x++) // lokale Zählvariable x
          {
             feld[x][y]='.'; 
          }
      }
      for( unsigned int z = 0; z < 3; z++) // lokale Zählvariable z
      {
         feld[schiffx+z][schiffy]='o';  
      }
    
      bool Ende = false;
      do 
      { 
         cout<<"\n A B C D E F G H\n"; 
         for( unsigned int y = 0; y < Y; y++) // lokale Zählvariable y
         { 
            cout<<y+1; 
            for( unsigned int x = 0; x < X; x++) // lokale Zählvariable x
            {
                cout<<feld[x][y]<<" "; 
            }
            cout<<"\n"; 
         } 
    
         cout<<"\nZielkoordinaten eingeben: "; 
         int bamx = 0; // bamx, bamy werden erst hier benötigt, also auch erst hier definieren
         int bamy = 0; 
         cin>>bamx>>bamy; 
         int konvx=bamx - 'A'; // siehe bamx, bamy
         int konvy=bamy - '1'; 
    
         if( konvx >= 0 && konvx < 9 && konvy >= 0 && konvy < 9 ) 
         { 
            feld[konvx][konvy]='-'; 
            if( konvy==schiffy ) 
            {
               if( konvx==schiffx || konvx==schiffx+1 || konvx==schiffx+2 ) 
               {
                  feld[konvx][konvy]='x'; cout<<"\nTREFFER\n"; 
               }
               else 
               {
                  cout<<"\nDANEBEN\n";
               }
            }
         } 
         else 
         { 
            Ende = true; 
         } 
      } 
      while( !Ende ); 
      getchar(); 
    }
    


  • Ah..

    Bin wohl bei den ganzen Vorschlägen bei dem hier auf der Leitung gestanden.
    Das erleichtert die Auswahl an Zählern ungemein und man kommt nicht so leicht durcheinander! Diese unsigned int variablen sind also nur zum zählen und können daher zuvor undefiniert aufgerufen werden!
    Toll!
    Und dann kann ich doch zb. für alle for-Schleifen unsigned i verwenden, oder?
    Ich definiere ja immer nur für eine Schleife und nicht global davor!



  • und die Idee mit der boolschen Variable ist auch gut!
    Wozu sonst sind True/False da!
    Dieses Programm ist ja förmlich prädestiniert um zu veranschaulichen wie man das verwenden kann in c++ 😃

    THX



  • Man könnte auch noch die Arrays(c) durch Vektoren(c++) ersetzen. Vektoren bieten eine viel höhere Funktionalität als Arrays.

    Wenn du mit Wahrheitswerten arbeiten willst, würde sich evtl. ein boolscher Vektor anbieten.
    Beispiel:

    #include <vector>             //notwendige Bibliothek
    
    std::vector<bool> myvector(n);     // n ist die Anzahl der Elemente, grds. 
                                       // alle auf false gesetzt.
    

    Zugreifen kann man wie bei Arrays über den Index oder aber besser über einen sogenannten Iterator. Da es neben Vektoren noch andere Datenstrukturen (Container) gibt, hat man Iteratoren eingerichtet, die als Zugriff auf diese die gleiche Schnittstelle verwenden.

    Ergänzung:

    //Iterator einrichten
    std::vector<bool>::iterator pos;
    //Gibt alle Elemente aus
    for(pos=myvector.begin();pos !=myvector.end();++pos)
     {
       cout<<" "<<*pos;
     }
    

    s. auch

    http://www.cplusplus.com/reference/stl/vector/
    http://www.cplusplus.com/reference/std/iterator/



  • MichaelMAS schrieb:

    Oder liegt das daran, dass ich DEV C++ verwende?

    Dazu möchte ich noch loswerden, dass DevC++ nicht empfehlenswert ist. Gründe findest du hier: http://www.c-plusplus.net/forum/237002



  • Als Ergänzung zu redrew99 sei noch der Container std::array erwähnt, der sich intern exakt wie ein rohes Array verhält, aber viel sicherer und komfortabler ist. Es gibt in modernem C++ eigentlich keinen Grund mehr, die Arrays aus C zu verwenden.

    int x[5];
    // wird zu
    std::array<int, 5> x;
    

    Ohne die Standardbibliothek von C++0x kann man auch std::tr1::array oder boost::array einsetzen.



  • Nexus schrieb:

    Als Ergänzung zu redrew99 sei noch der Container std::array erwähnt, der sich intern exakt wie ein rohes Array verhält, aber viel sicherer und komfortabler ist. Es gibt in modernem C++ eigentlich keinen Grund mehr, die Arrays aus C zu verwenden.

    int x[5];
    // wird zu
    std::array<int, 5> x;
    

    Ohne die Standardbibliothek von C++0x kann man auch std::tr1::array oder boost::array einsetzen.

    👍



  • Können wir bitte mal mit diesem sinnlosen "Gefällt mir" aufhören? Wenn du etwas zu meinem Post zu sagen hast, dann schreib einen Satz mit Aussagekraft dazu.



  • Nexus schrieb:

    Können wir bitte mal mit diesem sinnlosen "Gefällt mir" aufhören? Wenn du etwas zu meinem Post zu sagen hast, dann schreib einen Satz mit Aussagekraft dazu.

    👎



  • Nexus schrieb:

    Als Ergänzung zu redrew99 sei noch der Container std::array erwähnt, der sich intern exakt wie ein rohes Array verhält, aber viel sicherer und komfortabler ist. Es gibt in modernem C++ eigentlich keinen Grund mehr, die Arrays aus C zu verwenden.

    int x[5];
    // wird zu
    std::array<int, 5> x;
    

    Ohne die Standardbibliothek von C++0x kann man auch std::tr1::array oder boost::array einsetzen.

    std::array höre ich auch zum ersten Mal. Gibt es bei dieser Datenstruktur einen Vorteil gegenüber dem Vektor?



  • redrew99 schrieb:

    std::array höre ich auch zum ersten Mal. Hat diese Datenstruktur irgendeinen Vorteil gegenüber dem Vektor?

    Nein, std::array ist in der Größe nicht veränderbar und als Ersatz für "normale" Arrays wie char x[12]; gedacht, nicht als Ersatz für std::vector.



  • fdfdg schrieb:

    redrew99 schrieb:

    std::array höre ich auch zum ersten Mal. Hat diese Datenstruktur irgendeinen Vorteil gegenüber dem Vektor?

    Nein, std::array ist in der Größe nicht veränderbar und als Ersatz für "normale" Arrays wie char x[12]; gedacht, nicht als Ersatz für std::vector.

    Besser gesagt, std::array kapselt die normalen Arrays.



  • Ich finde std::array in manchen Situationen sehr nützlich, man kann es eben genau wie ein Array handhaben. Aber man kann auch wie bei einem vector durchiterieren, und wenn ich die Elemente nicht mittels Operator[] abrufe, sondern mit at( index ), dann bekomm ich wie beim Vektor, bei einem falschen Index eine OutOfRange exception.

    Ich habe da auch mal noch ne Frage, beim MinGw kann ich ja mittels Compiler-Flag die Unterstützung zum neuen Standard aktivieren, was ich sehr nützlich finde, denn abgesehen von den neuen Features, muss ich bei den Header-Dateien kein tr1/ davorschreiben und auch der namespace tr1 fällt weg. Das gleiche müsste doch auch mit MSVC 2010 gehen oder? Kann mir jemand sagen wo ich die Compilerflags finde?

    Lg freeG



  • Bei MSVC ist C++0x per default aktiviert.


Anmelden zum Antworten