Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z maszyną losującą

Ostatnio zmodyfikowano 2018-07-14 14:11
Autor Wiadomość
MaikelRR
Temat założony przez niniejszego użytkownika
Problem z maszyną losującą
» 2018-07-13 20:12:09
Witam. Otóż robię na tej stronie powoli kursy z C++ i robiąc jedno z zadań napotkałem się na problem. Jak po tytule można stwierdzić chodzi o maszynę losującą.


#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int wylosowana_liczba = ( rand() % 1001 ) + 1;
int strzaly = 0;

int main()
{
    int traf;
    cout << "Program wylosowal liczbe od 1 do 1000" << endl;
    cout << "Zgadnij jaka jest to liczba" << endl;
    cout << "Zgaduje, ze jest to liczba : ";
    cin >> traf;
    if(traf < wylosowana_liczba)
    {
        cout << "Nie udalo ci sie! Ta liczba jest wieksza niz ta co podales, sprobuj jeszcze raz!" << endl;
        strzaly++;
        main();

    }
    if(traf > wylosowana_liczba)
    {
        cout << "Nie udalo ci sie! Ta liczba jest mniejsza niz ta co podales, sprobuj jeszcze raz!" << endl;
        strzaly++;
        main();

    }
    if(traf == wylosowana_liczba)
    {
        cout << "Gratulacje! To ta liczba" << endl;
        cout << "Liczba strzalow: " << strzaly << endl;
    }
    return 0;
}

Ma ona polegać, że program losuje liczbe, którą my mamy zgadnąć. Jeśli podamy liczbę większą niż ta którą mamy zgadnąć to program nam mówi, że liczba, której szukamy jest mniejsza i adekwatnie w drugim przypadku. No i fajnie. Program działa, ale nie wiem jak mam zrobić tak by liczba, którą mamy zgadnąć była za każdym razem inna (za każdym razem czyt. za każdym odpaleniem programu, a nie próbą zgadnięcia). Wiesz, że istnieje zapis "srand( time( NULL ) );", ale nie wiem jak go w tym zadania konkretnie użyć i co więcej gdzie. Prosiłbym o pomoc i nakierowanie mnie na odpowiedź. Jeśli ktoś tu widzi jakieś inne błędy w programie to także bardzo bym prosił o wskazanie:)
P-171848
YooSy
» 2018-07-13 20:23:13
Pozbądź się zmiennych globalnych, a funkcję
srand()
 daj na początku funkcji głównej.
P-171849
MaikelRR
Temat założony przez niniejszego użytkownika
» 2018-07-13 20:36:08
Jak pozbędę się zmiennych globalnych to biorąc pod uwagę zapis mojej funkcji, w której co każdy "strzał" moja liczba, którą mam wylosować będzie się zmieniać - a to chyba jest najmniej pożądane w tym momencie :P
P-171850
YooSy
» 2018-07-13 20:41:58
Przecież ten program wykonuje się liniowo. Nie ma w nim żadnej pętli.
Zmienne globalne do niczego nie są potrzebne. Lepiej ich unikać.
Poza tym nie dajesz możliwości skonfigurować maszyny losującej przed inicjalizacją zmiennej
wylosowana_liczba
.

edit: Nie dopatrzyłem. Jest pętla w formie rekurencyjnej funkcji
main()
 co jest dość lekkomyślne.
(Nie spodziewałem się - zaskoczony).
P-171851
pekfos
» 2018-07-14 14:11:52
Nie dopatrzyłem. Jest pętla w formie rekurencyjnej funkcji
main()
 co jest dość lekkomyślne.
Nie lekkomyślne, tylko błędne. Nie można wywoływać funkcji main().
http://eel.is/c++draft​/basic.start.main#3
Sam pomysł robienia pętli rekurencją jest też błędny, bo głębokość rekurencji jest ograniczona.
P-171856
« 1 »
  Strona 1 z 1