Program losujący i wyświetlający wynik po uwzględnieniu warunku

0

Otóż mam problem z programem ponieważ nie wiem za bardzo jak go zrobić według moich założeń czyli "Stworzyc program ktory losuje nam liczby tyle razy ile chcemy przedtem nas o to pytając i nam to wyswietli przy uwzględnieniu warunku"

Na wstępie mogę powiedzieć,że próbowałem wielu metod np. z voidem lecz nie zdało to rezultatu,a sam program losuje tylko z zakresu dwóch liczb więc działa to na zasadzie np.chcemy wylosować 10 liczb więc program zaczyna od losowania pierwszej wyświetla komunikat z warunku który ustawiłem przedtem i losuje kolejną liczbę i ją wyświetla uwzględniając warunek.

P.S.Myślałem o pętli while albo for z inkrementacją lecz niezbyt to wyszło więc zostawiłem tak jak jest

Tu wstawiam kod:

//Zalozenie :
///Stworzyc program ktory losuje nam liczby tyle razy ile chcemy i nam to wyswietli przy uwzględnieniu warunku

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

main()
{

    const string white = "\033[0m"; //kolory tekstu
    const string red = "\033[91m"; //kolory tekstu

    srand(time(NULL)); ///losowanie zacznie sie od zera czyli NULLa

    /// int x;

    ///    cout << "na ilu ludziach chcesz przeprowadzic test?" << endl;
    ///    cin >> x; ///wypisanie przez uzytkownika ile razy ma sie losowac i wyswietlic na ekranie

    int proba = (rand() % 2) + 0; //zadeklarowanie zmiennej ktora,pozniej wykorzystujemy do sprawdzenia warunku

    if (proba == 0) //gdy wylosuje sie 0
    {
        cout << "Dead ;(" << endl; //to wtedy wyswietla nam sie odpowiedni komunikat
    }

    if (proba == 1) //a gdy 1
    {
        cout << red << "Live!" << white << endl; //to wyswietla nam sie inny komunikat…
    }
    ///Proba 1 zakonczona
    proba = (rand() % 2) + 0;

    if (proba == 0) //gdy wylosuje sie 0
    {
        cout << "Dead ;(" << endl; //to wtedy wyswietla nam sie odpowiedni komunikat
    }

    if (proba == 1) //a gdy 1
    {
        cout << red << "Live!" << white << endl; //to wyswietla nam sie inny komunikat…
    }
    ///Proba 2 zakonczona

    proba = (rand() % 2) + 0;

    if (proba == 0) //gdy wylosuje sie 0
    {
        cout << "Dead ;(" << endl; //to wtedy wyswietla nam sie odpowiedni komunikat
    }

    if (proba == 1) //a gdy 1
    {
        cout << red << "Live!" << white << endl; //to wyswietla nam sie inny komunikat…
    }

    ///Proba 3 zakonczona

    return 0;
}

 
1
srand(time(NULL)); ///losowanie zacznie sie od zera czyli NULLa
  

NULL w tym przypadku to tylko argument funkcji time(), a to co zwraca funkcja time() jest ziarnem (bynajmniej nie jest to zero).

Pomysł z pętlą jest OK. Poszukaj jakiekolwiek tutka o pętlach i dasz radę napisać.

1

Nie wiem czy dobrze rozumiem, ale chcesz pobrać liczbę od użytkownika i wylosować tyle liczb? W każdym razie:

  1. Tak, tutaj powinieneś użyć pętli
  2. rand() jest złym pomysłem https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
0

Ok,zrobiłem już program tak jak chciałem i działa,ale głupio mi że nie wpadłem na to,że to takie łatwe…

P.S.Jeżeli ma ktoś do mnie jakąś radę odnośnie tego kodu to śmiało proszę pisać ! :)

//Zalozenie :
///Stworzyc program ktory losuje nam liczby tyle razy ile chcemy i nam to wyswietli przy uwzględnieniu warunku

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

main()
{

	const string white  ="\033[0m"; //kolory tekstu
	const string red  ="\033[91m";  //kolory tekstu

srand ( time( NULL ) ); 

 int count;
 int live=0; //zmienna do ktorej zostanie wpisana liczba tych ktorzy przezyli eksperyment
 int dead=0; //a tu tych ktorzy nie ;(

   cout << "na ilu ludziach chcesz przeprowadzic test?" << endl;
   cin >> count; ///wypisanie przez uzytkownika ile razy ma sie losowac i wyswietlic na ekranie

for(int i = 0;i<count;i++)
{
    int number = (rand()%2)+0; //zadeklarowanie zmiennej ktora,pozniej wykorzystujemy do sprawdzenia warunku

       if(number == 0)   
    {
    cout<<"Dead ;("<<endl; 
    dead++;
    }
    else

    if(number == 1) 
    {
    cout<<red<<"Live!"<<white<<endl; 
    live++;
    }
    
}

cout<<"Zmarlo: "<<dead<<endl;
cout<<"Przezylo: "<<live<<endl;

return 0;
}

 
0

Jeżeli ma ktoś do mnie jakąś radę odnośnie tego kodu to śmiało proszę pisać

  1. Komentuj tylko te fragmenty kodu, które są niejasne i do których zrozumienia komentarz jest wymagany. Naprawdę nie wiesz, co zrobi if(proba == 0), gdyby nie komentarz gdy wylosuje sie 0?
  2. Twoja zmienna proba tak naprawdę oznacza próbkę, a nie numer próby (tak jak zmienna i). Poza tym ponazywaj wszystkie zmienne sensownie. x -> count, proba -> number, trzymając się angielskiego nazewnictwa.
  3. Zastosuj else, zwiększa to przejrzystość kodu.
0

time()
NULL nie oznacza rozpoczęcia losowania od zera.

1

Funkcja time() może przyjąć adres zmiennej typu time_t lub nic nie przyjmować, wtedy przekazujemy wartość zero (NULL).
Równie dobrze można tak napisać:

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

int main()
{
    time_t tm = time(0); // funkcja time(0) zwraca aktualny czas, a NULL (0) to brak zmiennej w argumencie
    srand(tm); // tutaj funkcja srand() używa wartości tm jako ziarna
    // srand(time(0)); - to skrócona wersja powyższego zapisu
    for (int i = 0; i < 10; ++i) {
        cout << rand() << '\n';
    }
} 

Najlepiej zaznajomić się z <random>.

0

Prosiłbym o ewentualne porady jeżeli coś źle zrozumiałem albo jakiś "krzaczek" jest w kodzie a go nie zauważyłem ;)
P.S.Jeżeli dobrze udało mi się zrozumieć to ten generator jest mniej "przewidywalny" od tego z języka C
Edit. Oto mój obecny kod:

//Zalozenie :
///Stworzyc program ktory losuje nam liczby tyle razy ile chcemy i nam to wyswietli przy uwzględnieniu warunku
#include <random>
#include <iostream>
using namespace std;

main()
{

	const string white  ="\033[0m"; //kolory tekstu
	const string red  ="\033[91m";  //kolory tekstu

  random_device rd;   // generator liczb losowych (przynajmniej tak zrozumiałem z tłumaczenia) ;)
  mt19937 gen(rd());  // to seed mersenne twister. - do zasiania mersenne twister
  uniform_int_distribution<> dist(1,2); // zakres losowania wyłącznie pomiędzy 1 a 2.

 int count;
 int live=0; //zmienna do ktorej zostanie wpisana liczba tych ktorzy przezyli eksperyment
 int dead=0; //a tu tych ktorzy nie ;(

   cout << "na ilu ludziach chcesz przeprowadzic test? ";
   cin >> count; ///wypisanie przez uzytkownika ile razy ma sie losowac i wyswietlic na ekranie

for(int i = 0;i<count;i++)
{

        switch (dist(gen)) {
        case 1:
            cout << "Dead ;(" << endl;
            dead++;
            break;
        case 2:
            cout << red << "Live!" << white << endl;
            live++;
            break;
        default:
            cerr << "Jakis nieokreslony przypadek\n";
        }

}

cout<<"\nZmarlo: "<<dead<<endl;
cout<<"Przezylo: "<<live<<endl;

return 0;
}
 
0

switch wydaj się być fajniejszy.

for (int i = 0; i<count; i++)
    {        
        switch (dist(gen)) {
        case 1:
            cout << "Dead ;(" << endl;
            dead++;
            break;
        case 2:
            cout << red << "Live!" << white << endl;
            live++;
            break;
        default:
            cerr << "Jakis nieokreslony przypadek\n";
        }        
    } 
0

Ok,to można/trzeba jeszcze coś zmieniać w tym programie?

Edit:
Zastanawiam się co zrobić aby powracał do pętli a mój sposób nie bardzo działa…

//Zalozenie :
///Stworzyc program ktory losuje nam liczby tyle razy ile chcemy i nam to wyswietli przy uwzględnieniu warunku
#include <random>
#include <iostream>
using namespace std;

main()
{

	const string white  ="\033[0m"; //kolory tekstu
	const string red  ="\033[91m";  //kolory tekstu

  random_device rd;   // generator liczb losowych (przynajmniej tak zrozumiałem z tłumaczenia) ;)
  mt19937 gen(rd());  // to seed mersenne twister. - do zasiania mersenne twister
  uniform_int_distribution<> dist(1,2); // zakres losowania wyłącznie pomiędzy 1 a 2.

 int count,num;
 char odp;
 int live=0; //zmienna do ktorej zostanie wpisana liczba tych ktorzy przezyli eksperyment
 int dead=0; //a tu tych ktorzy nie ;(

   cout << "na ilu ludziach chcesz przeprowadzic test? ";
   cin >> count; ///wypisanie przez uzytkownika ile razy ma sie losowac i wyswietlic na ekranie

while(num < count )
{ 
menu:
    num++;

        switch (dist(gen)) {
        case 1:
            cout << "Dead ;(" << endl;
            dead++;
            break;
        case 2:
            cout << red << "Live!" << white << endl;
            live++;
            break;
        default:
            cerr << "Jakis nieokreslony przypadek\n";
        }

}

cout<<"\nZmarlo: "<<dead<<endl;
cout<<"Przezylo: "<<live<<endl;

cout<<"\nCzy chcesz kontynuowac ? ";
cin>>odp;

if(odp == 't' || odp == 'T')
{
goto menu;
}

return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1