Problem z maszyną losującą
Ostatnio zmodyfikowano 2018-07-14 14:11
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:) |
|
YooSy |
» 2018-07-13 20:23:13 Pozbądź się zmiennych globalnych, a funkcję srand() daj na początku funkcji głównej. |
|
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 |
|
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). |
|
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#3Sam pomysł robienia pętli rekurencją jest też błędny, bo głębokość rekurencji jest ograniczona. |
|
« 1 » |