Strona główna » Algorytmy » Artykuły » Zgadnij liczbę

Zgadnij liczbę

Cel

Napisz aplikację uruchamianą w konsoli Windows, która po uruchomieniu przyjmie dwie liczby całkowite, które będą zakresem z którego zostanie wylosowana liczba, a następnie program podając proste wskazówki pomoże nam zgadnąć liczbę. Po wpisaniu prawidłowej liczby należy wypisać komunikat o wpisaniu poprawnej odpowiedzi.

Implementacja

Założenia

Do programu zostaną dołączone biblioteki ctime oraz cstdlib, które pozwolą na skorzystanie z funkcji rand(), która będzie generowała pseudolosowe liczby na podstawie czasu systemu.

Rozwiązanie

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main() {
  6.   setlocale(LC_ALL, "");
  7.   int a, b, r, g;
  8.   cout << "Podaj zakres:" << endl;
  9.   cin >> a >> b;
  10.   srand(time(NULL));
  11.   r = (rand() % (b - a)) + a;
  12.   cout << "Zgadnij liczbę" << endl;
  13.   do {
  14.     cin >> g;
  15.     if (r != g) cout << ((r < g) ? "za duża" : "za mała") << endl;
  16.   } while (r != g);
  17.   cout << "Brawo zgadłeś liczbę!" << endl;
  18.   system("PAUSE");
  19.   return 0;
  20. }

(9.) Na początek ustalamy kodowanie znaków w konsoli, dzięki temu polskie znaki nie będą pojawiały się w postaci znaczków. Następnie (10.) deklarujemy zmienne, które oznaczają kolejno: a - dolna granica zakresu, b - górna granica zakresu, g - ostatnie wpisane rozwiązanie i r oznaczające liczbę, którą użytkownik ma zgadnąć.

Po (12.) wprowadzeniu zmiennych (13.) uruchamia generator liczb losowych w zależności od czasu, a następnie (14.) losujemy liczbę do zgadnięcia. Należy pamiętać, że funkcja rand() zwróci wartości od 0 do RAND_MAX. W celu nie przekroczenia zakresu należy najpierw wyciągnąć modulo z dzielenia wylosowanej liczby przez różnice górnej granicy zakresu i dolnego. W ten sposób uzyskujemy liczbę z zakresu [0, b - a]. Teraz wystarczy dodać a, żeby mieć zakres [a, b].

Zasadnicze działanie ma (16.) pętla do ... while. To właśnie w niej odbywa się (17.) wczytanie kolejnej wpisanej odpowiedzi i o ile liczba (18.) nie została odgadnięta (19.) wypisany komunikat czy odpowiedź jest większa czy mniejsza. (20.) Pętla jest przerywana kiedy wpisana odpowiedź jest zgodna z wylosowaną wcześniej liczbą. Na sam koniec (21.) wypisujemy stosowny komunikat.