Odgadywanie liczb

System dwójkowy i operacje bitowe

Zapoznaj się z następującymi artykułami z naszego Serwisu Edukacyjnego:

Naturalny system dwójkowy
Operacje bitowe w C++

Program

Program działa następująco:

Gracz wymyśla liczbę z zakresu od 0 do 15. Następnie w 4 turach komputer prezentuje graczowi zestaw liczb i zadaje pytanie, czy wymyślona przez gracza liczba jest w tym zestawie. Prezentowane liczby posiadają taką cechę, iż wszystkie mają ustawiony na 1 określony bit w swoim zapisie binarnym. Komputer zbiera informację o tych bitach i na jej podstawie odtwarza wymyśloną liczbę.

Na przykład:

Wymyślam liczbę 13. Liczba ta w zapisie dwójkowym ma postać 1101. Komputer przygotowuje zmienną na odgadywaną liczbę i ustawia w niej bity na 0: 0000. Następnie 4 czterech turach zadaje pytanie, czy moja liczba jest wśród liczb przedstawionych w oknie konsoli.

 

Pierwsza tura - liczby 0...15, które w zapisie dwójkowym mają ustawiony na 1 bit b3:

1000 -  8
1001 -  9
1010 - 10
1011 - 11
1100 - 12
1101 - 13  - moja liczba!!!
1110 - 14
1111 - 15
Moja odpowiedź - TAK. Komputer ustawia w zmiennej bit b3 - 1000.

 

Druga tura - liczby 0...15, które w zapisie dwójkowym mają ustawiony na 1 bit b2:

0100 -  4
0101 -  5
0110 -  6
0111 -  7
1100 - 12
1101 - 13  - moja liczba!!!
1110 - 14
1111 - 15
Moja odpowiedź - TAK. Komputer ustawia w zmiennej bit b2 - 1100.

 

Trzecia tura - liczby 0...15, które w zapisie dwójkowym mają ustawiony na 1 bit b1:

0010 -  2
0011 -  3
0110 -  6
0111 -  7
1010 - 10
1011 - 11
1110 - 14
1111 - 15
Moja odpowiedź - NIE. Komputer pozostawia zmienną bez zmian - 1100.

 

Pierwsza tura - liczby 0...15, które w zapisie dwójkowym mają ustawiony na 1 bit b0:

0001 -  1
0011 -  3
0101 -  5
0111 -  7
1001 -  9
1011 - 11
1101 - 13  - moja liczba!!!
1111 - 15
Moja odpowiedź - TAK. Komputer ustawia w zmiennej bit b0 - 1101.

Zwróć uwagę, iż 1101 oznacza w systemie dwójkowym liczbę 13, czyli moją liczbę.

 

// Zgadywanka liczbowa
// (C)2008 Koło informatyczne w I LO w Tarnowie
// Kurs programowania w C++ dla początkujących
//--------------------------------------------

#include <iostream>
#include <iomanip>

using namespace std;

main() 
{
  
  int  v,i,m;
  char c;
  
  cout << "***************************\n"
          "*** Zgadywanka liczbowa ***\n"
          "***************************\n\n"
          "Wymysl sobie liczbe od 0 do 15\n\n";

  system("pause");

  cout << endl << endl;
  
// odgadujemy liczbę wymyśloną przez gracza

  for(m = 8, v = 0; m; m >>= 1)
  {
    for(i = 1; i < 16; i++)
      if(i & m) cout << setw(3) << i;

    cout << " : czy twoja liczba jest tutaj? (t = TAK) : ";

    cin >> c;

    cout << endl;

    if(c == 't') v += m;      
  }

  cout << "Twoja liczba to " << v << endl << endl;

  system("pause");
}
***************************
*** Zgadywanka liczbowa ***
***************************

Wymysl sobie liczbe od 0 do 15

Aby kontynuować, naciśnij dowolny klawisz . . .


  8   9  10  11  12  13  14  15 : czy twoja liczba jest tutaj? (t = TAK) : t

  4   5   6   7  12  13  14  15 : czy twoja liczba jest tutaj? (t = TAK) : t

  2   3   6   7  10  11  14  15 : czy twoja liczba jest tutaj? (t = TAK) : n

  1   3   5   7   9  11  13  15 : czy twoja liczba jest tutaj? (t = TAK) : t

Twoja liczba to 13

Aby kontynuować, naciśnij dowolny klawisz . . .

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.