//: C02:HiLo.cpp {RunByHand}
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Na ukázku invariantu cyklu hraje hru Větší-menší.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int main() {
  cout << "Mysli si číslo od 1 do 100" << endl
        << "Budu hádat; "
        << "řekni mi jestli jsem (N)ad nebo (P)od" << endl;
  int spodni = 1, horni = 100;
  bool uhodnuto = false;
  while(!uhodnuto) {
    // Invariant: the number is in the range [spodni, horni]
    if(spodni > horni) {  // Invariant violation
      cout << "Ty jsi podváděl! Končím" << endl;
      return EXIT_FAILURE;
    }
    int tip = (spodni + horni) / 2;
    cout << "Můj typ je: " << tip << ". ";
    cout << "(N)ad, (P)od nebo (S)právně? ";
    string odpoved;
    cin >> odpoved;
    switch(toupper(odpoved[0])) {
      case 'N':
        horni = tip - 1;
        break;
      case 'P':
        spodni = tip + 1;
        break;
      case 'S':
        uhodnuto = true;
        break;
      default:
        cout << "Neplatná odpoved" << endl;
        continue;
    }
  }
  cout << "Uhodl jsem!" << endl;
  return EXIT_SUCCESS;
} ///:~
