C'est mon premier message ici.

Je l'ai fait:

#include <iostream>
#include <ctime>
using namespace std;

const int width = 60;
const int height = 20;

void generujpole(char pole[][height])
{
for(int i=0; i<width; i++)
{
for(int j=0; j<height; j++)
    {
    int maluj = rand()%2;
    if(maluj == 0) pole[i][j] = ' ';
    else pole[i][j] = 'o';
    }
}
}

void wypiszpole(char pole[][height])
{
cout << "+------------------------------------------------------------+"<<endl;
for(int i=0; i<height; i++)
    {
    for(int j=0; j<width; j++)
    {
    cout << pole[i][j];
    }
cout << endl;
}
cout << "+------------------------------------------------------------+"<<endl;
}

int main()
{
srand(time(NULL));
char plansza[60][20];

generujpole(plansza);
wypiszpole(plansza);

return 0;
}

La langue est polonaise, alors ne vous méprenez pas avec la terminologie.

J'essaye de faire "Game of life" de Conway, ce n'est que le début pour l'instant, et je ne sais pas trop quoi faire ensuite. À l'heure actuelle, mon problème est de savoir comment définir une probabilité de dessiner "o" à 15% contre 85% pour l'espace vide ""?

Si c'est possible, je veux juste faire un petit changement dans mon code, ne pas faire quelque chose de vraiment ambitieux et inconnu, car probablement je ne le comprendrais pas.

J'espère qu'il y a quelqu'un qui est prêt à m'aider avec ça. :)

c++
0
obeeey 20 nov. 2018 à 17:41

3 réponses

Meilleure réponse

Vous l'avez déjà pratiquement compris, sauf pour le moment où vous vous limitez à 50% de probabilité avec la partie %2.

Essayez d'augmenter cela à % 100, et au lieu de comparer le résultat avec == 0, comparez avec < 15, ce qui se produira environ 15% du temps.

0
lxop 20 nov. 2018 à 14:45

Vous devez utiliser l'en-tête random (rand n'est pas conseillé):

#include <random>

Et puis dans votre fonction:

std::mt19937 rng;
rng.seed(std::random_device()());
std::uniform_int_distribution<std::mt19937::result_type> dist(0,99); // distribution in range [0, 100[

std::cout << dist(rng) << std::endl;

Vérifiez ensuite si dist(rng) est inférieur à 15 pour avoir votre pourcentage.

Bien sûr, le dist et le rng doivent être en dehors de votre fonction generujpole et être passés.

7
Matthieu Brucher 20 nov. 2018 à 15:22

À l'heure actuelle, mon problème est de savoir comment définir une probabilité de dessiner "o" à 15% contre 85% pour l'espace vide ""?

Une autre possibilité. J'aime ce qui suit car cette approche peut facilement afficher la distribution et est facilement modifiée.

#include <iostream>
using std::cout, std::endl;

#include <iomanip>
using std::setw;

#include <string>
using std::string;

#include <vector>
using std::vector;

#include <algorithm>
using std::shuffle;

#include <random>   // random_device
using std::random_device, std::mt19937_64;



class T990_t
{
   vector<char>::size_type     sz100;
   vector<char>::size_type percent15;  // 15 percent
   vector<char>::size_type percent85;  // 85 percent
   vector<char> gameBoard;

public:
   T990_t() : sz100 (20*60) , percent15 (0) , percent85 (0), gameBoard()
      {
         gameBoard.reserve(sz100);
      }

   ~T990_t() = default;

   int operator()() { return exec(); }

private: // methods

   int exec()
      {
         // initialize the gameBoard to DEAD state
         for (vector<char>::size_type  i=0; i < sz100; ++i)
            gameBoard.push_back('~'); // DEAD state (using visible char)

         // how might we set 15% of gameboard to ALIVE?
         setGameBoardAlive ( 15U );

         showGameBoard (" at 15% (note poor (but valid) sequence) ");

         // how 'distribute' the 15% ?
         shuffleGameBoard();

         showGameBoard(" after shuffle ");

         return 0;
      }

   void setGameBoardAlive(vector<char>::size_type percentAlive)
      {
         percent15 = ( sz100 * percentAlive ) / 100;  // 15 percent
         percent85 = ( sz100 - percent15    );        // 85 percent

         cout << "\n  100 percent: " << setw(5) << sz100
              << "\n   15 percent: " << setw(5) << percent15
              << "\n   85 percent: " << setw(5) << percent85
              << "\n         sum : " << setw(5) << (percent15 + percent85)
              << endl;

         for (vector<char>::size_type i = 0; i < percent15; i++) {
            gameBoard[i] = 'o'; // ALIVE state
         }
      }

   void showGameBoard(string lbl)
      {
         int ll = 0;
         cout << "\n  GameBoard " << lbl << ": \n  ";
         for (vector<char>::size_type i=0; i<sz100; i++)
         {
            cout << gameBoard[i];
            ll += 1;
            if (ll > 100) { cout << "\n  "; ll = 0; }
         }
         cout << endl;
      }

   void shuffleGameBoard()
      {
         cout << "\n  gameBoard std::shuffle \n  ";
         random_device rd;
         mt19937_64 gen(rd());
         shuffle (gameBoard.begin(), gameBoard.end(), gen);
         //cout << "\n  ";
      }


}; // class T990_t


int main(int , char**) { return T990_t()(); }

Avec sortie possible:

  100 percent:  1200
   15 percent:   180
   85 percent:  1020
         sum :  1200

  GameBoard  at 15% (note poor (but valid) sequence) : 
  ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
  ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  gameBoard std::shuffle 

  GameBoard  after shuffle : 
  ~~o~~~~~o~~~~~~~o~~~~~~~~~o~~~~~~o~o~o~~~~~~~~~~~~~~~o~~~~~~~o~~~~~~o~~~~~~~~~o~o~~~~~o~~~~o~~o~~~~~~
  ~oo~~o~~oo~o~~~~~oo~~~~~~o~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~o~~~~o~~~~o~~~~o~o~oo~~~o~~~~~o~~~~~~~~~~o~~o
  ~~~~o~~~~~o~~~~~~~~~~~~~o~~~oo~~~~~~~~~~~~~o~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~o~~o~~~~~~~
  ~~~~~~o~~~oo~~~~o~~~o~~~~~o~~~~~o~~o~~~~~~~~~~o~~~~~~~~~~o~~~~~~~~~~~o~~o~o~~~~~~~~~o~~~~~~o~~~~~~~~~
  ~o~~~~~~~~~~~~oo~~~~~~~~~~~o~~~~~~o~o~~o~~~~~~~~~oo~~~~~oo~~~~o~~~~~~~~o~~o~~~~~~~o~~~~~~~o~~~~~~~~o~
  ~~~~~~~~~~~~~~o~~~~o~~~~~o~~~~~oo~~~~~~o~~~~~~~~o~~~~~~oooo~~~~~~~o~~o~~~~~~~~~~~~~~~~~~~~o~~~~~o~~~~
  ~~~~~~~~~~~~~~o~oo~~~~~~~~~~~~o~~~~~~~~~o~oo~~~~~~~~~~~~~~o~~~~~o~~~~~~~~o~o~~~~~~~~~~~~~~~~~~o~~~~~~
  ~o~~~~~~~~~~~~~~~o~~~~~~o~o~~~o~~o~~o~~~~~~~~~~~~o~~~~o~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~
  o~~~o~~~~~~~~~~o~o~~o~~~~~o~~~o~~~~~~~~~~~~~~~~~~~~~o~~~o~~~~~~~o~~~~o~~~~~~~~~~~o~~~~~o~~~~~~~o~~~~~
  o~~~~~~~~~~~~~~~~~~~~~~~~~~~~oooo~~~o~~~~~~oo~~~~o~o~o~~~~~~o~~~~~~~~o~o~o~~~~~~~o~~~~~oo~~~~~~~~~~~~
  o~~~~~~~~~~~~~~~~~~o~~oo~~~~~o~~~~o~~o~~~oo~~~~~oo~~~~o~o~~~o~~~o~~~o~~~~~o~~~~o~~~~~o~~~o~~~~~oo~~~~
  ~~~o~~~~oo~~~~~~~~~~oo~~~~~~o~~~o~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~o
0
2785528 20 nov. 2018 à 17:41