2011-01-02 29 views
0

Hintergrund: Ich bin ein ziemlich Anfänger bei der Programmierung. Das ist, was ich bisher in meinem groben Entwurf für das Spiel des Lebens haben.Probleme mit Anfänger C++ Spiel des Lebens Programm

#include <iostream> 

using namespace std; 

int main() 
{ 

    //INTRODUCTION 

    int arraySize; 
    cout << "What is the length of your square-shaped grid? Enter an integer value greater than 0. Too big will cause problems."; 
    cin >> arraySize; 
    int original[arraySize][arraySize]; 

    //REQUESTS INPUT FOR ARRAY 

    for (int n = 0; n < arraySize; n++) 
    { 
     for (int x = 0; x < arraySize; x++) 
     { 
      bool ValInput; 
      cout << "\n" << n << "," << x << "..."; 
      cin >> ValInput; 
      original[n][x] = ValInput; 
     } 
    } 

    cout << "\n\n\n"; 

    //DISPLAYS ARRAY 

    for (int row = 0; row < arraySize; row++) 
    { 
     for (int column = 0; column < arraySize; column++) 
     { 
      cout << original[row][column] << " "; 
      if (column == arraySize - 1) 
      { 
       cout << "\n"; 
      } 
     } 
    } 

    cout << "Next frame.\n\n"; 

    //FORMS NEXT FRAME WITH VALUES OF # OF LIVE NEIGHBORS 

    int liveNeighbors = 0; 

    for (int z = 0; z < arraySize; z++) 
    { 
     for (int h = 0; h < arraySize; h++) 
     { 
      liveNeighbors = 0; 
      if (z - 1 > -1) 
       liveNeighbors += original[z - 1][h]; 
      if (z + 1 < arraySize) 
       liveNeighbors += original[z + 1][h]; 
      if (h - 1 > -1) 
       liveNeighbors += original[z][h - 1]; 
      if (h + 1 < arraySize) 
       liveNeighbors += original[z][h + 1]; 
      if (z - 1 > -1, h - 1 > -1) 
       liveNeighbors += original[z - 1][h -1]; 
      if (z - 1 > -1, h + 1 < arraySize) 
       liveNeighbors += original[z - 1][h + 1]; 
      if (z + 1 < arraySize, h - 1 > -1) 
       liveNeighbors += original[z + 1][h - 1]; 
      if (z + 1 < arraySize, h + 1 < arraySize) 
      { 
       liveNeighbors += original[z + 1][h + 1]; 
      } 
      cout << liveNeighbors << " "; 

     } 
    } 

} 

Das Problem scheint in der letzten Schritt, den ich bisher gemacht haben (was zeigt, wie viele lebende Nachbarn hat jede Zelle

Beispiel: Wenn der Sampling-Eingang zuerst "4" für ein 4x4-Gitter ist und Sie dann eine Vielzahl von 1s und 0s eingeben, ist der liveNeighbors-Wert nicht realistisch.Es kann in den Hunderten sein, wenn das Maximum nur 8 sein sollte .

Wenn Sie mir helfen könnten, eine Lösung für mein Problem zu finden, wäre das nett, aber denken Sie bitte daran, dass ich ein Neuling bin.

Danke

+0

Bitte aktualisieren Sie Ihre Frage mit GENAU, welche Probleme Sie haben. "Die Anzahl der lebenden Nieghbors funktioniert nur für Daten in der Mitte" sagt nur, was funktioniert, nicht was nicht. Sie sollten Ihren Code in Ihrer Frage (kein Link dazu) posten, und etwas, das vorzugsweise komplibar ist, veröffentlichen und genau zeigen, welches Problem Sie haben. Wenn du das nicht kannst. Geben Sie uns einige Beispieleingaben und -ausgaben. – Falmarri

Antwort

5

Einige Ihrer Bedingungen sind falsch :):

if (z - 1 > -1, h - 1 > -1) /* ... */ 
if (z - 1 > -1, h + 1 < arraySize) /* ... */ 
if (z + 1 < arraySize, h - 1 > -1) /* ... */ 
if (z + 1 < arraySize, h + 1 < arraySize) /* ... */ 

Das Komma nicht tut, was Sie erwarten, brauchen, was Sie ist wahrscheinlich eine logische ‚und‘ die in C++ ist der Betreiber &&:

if ((z - 1 > -1) && (h - 1 > -1)) /* ... */ 
if ((z - 1 > -1) && (h + 1 < arraySize)) /* ... */ 
if ((z + 1 < arraySize) && (h - 1 > -1)) /* ... */ 
if ((z + 1 < arraySize) && (h + 1 < arraySize)) /* ... */ 

zusätzliche Klammer zur besseren Lesbarkeit nur hinzugefügt, sie sind nicht erforderlich.

Nur damit Sie wissen, ist dies die Standarddefinition des Komma-Operator:

Ein Paar von Ausdrücken durch ein Komma getrennt wird von links nach rechts und der Wert des linken Ausdrucks ausgewertet ist verworfen.

In Ihrem Fall spielten die Vergleiche auf der linken Seite des Kommas im if Zustand keine Rolle.

+0

Es hat funktioniert! Vielen Dank. Das freut mich sehr.:) – Guest

+1

Guten alten komma operator streikt wieder ... (und gegeben C Cs seltsamen Betreiber Vorrang, ich würde nicht wollen, dass die Parens optional sein ^^) – delnan

1

Ich denke, dass Ihr Problem in diesem Code ist:

if (z - 1 > -1, h - 1 > -1) 

Ihre Intuition ist völlig richtig hier, aber die Art und Weise, wie Sie dies in Code geschrieben haben, bedeutet nicht, was Sie wollen. In C++ ist der Komma-Operator ein esoterischer Operator, der "beides tun, aber das Ergebnis der ersten Operation verwerfen" bedeutet. In diesem Fall heißt das: "Prüfe, ob z - 1> -1 ist, dann verwerfe dieses Ergebnis komplett, dann schaue ob h - 1> -1," was überhaupt nicht das ist, was du willst. Um zu überprüfen und festzustellen, ob diese beiden Bedingungen zutreffen, verwenden Sie die & & Betreiber:

if (z - 1 > -1 && h - 1 > -1) 

, die helfen sollten Ihre Fehler zu beheben.

Hoffe, das hilft!

Verwandte Themen