[C++] Problem z dodaniem zmniejszeniem kragu poszukiwan

Mam taki problem chciałbym zmniejszyć krąg poszukiwań liczby i mi wyskakuje błąd nie wiem jak go naprawić

Prawidłowy kod (działajcy)

#include 

#include 

#include 

#include 

using namespace std;


int main()

{

    int min = 0, max = 100, temp;

    bool odp = false;

    char Tak_lub_nie;

    srand((unsigned)time(NULL));

    cout << "Wymysl sobie jakas liczbe w przedziale od 0 do 100 i nacisnij dowolny klawisz." << endl;

    getch();

    while(!odp)

    {

          temp = (rand() % (max - min)) + min + 1;

          if(temp >= max) temp =1;

          cout << "Czy twoja liczba to " << temp << " ?\n[t/n]: " << endl;

          Tak_lub_nie = getch();

          if(Tak_lub_nie == 't' || Tak_lub_nie == 'T')

          {

                odp = true;

                break;

          }

          cout << "Czy twoja liczba jest wieksza od " << temp << " ?\n[t/n]: " << endl;

          Tak_lub_nie = getch();

          if(Tak_lub_nie == 't' || Tak_lub_nie == 'T') min = temp;

          if(Tak_lub_nie == 'n' || Tak_lub_nie == 'N') max = temp;

          if((min - max) == 1)

          {

                odp = true;

                temp = min + 1;

                break;

          }

    }

    cout << "A wiec twoja liczba to " << temp << " ! Wygralem !" << endl;

    getch(); [/code]




Kod po zmniejszeniu krągu poszukiwań (niepoprawny)

[code]#include #include #include #include using namespace std; int main() { cout << “Czy ta liczba jest mniejsza od 50? (t/n)\n”; char odp; cin >> odp; if (odp == ‘t’) int min = 50, max = 100, temp; bool odp = false; char Tak_lub_nie; srand((unsigned)time(NULL)); while(!odp) { temp = (rand() % (max - min)) + min + 1; if(temp >= max) temp =1; cout << "Czy twoja liczba to " << temp << " ?\n[t/n]: " << endl; Tak_lub_nie = getch(); if(Tak_lub_nie == ‘t’ || Tak_lub_nie == ‘T’) { odp = true; break; } cout << "Czy twoja liczba jest wieksza od " << temp << " ?\n[t/n]: " << endl; Tak_lub_nie = getch(); if(Tak_lub_nie == ‘t’ || Tak_lub_nie == ‘T’) min = temp; if(Tak_lub_nie == ‘n’ || Tak_lub_nie == ‘N’) max = temp; if((min - max) == 1) { odp = true; temp = min + 1; break; } } cout << "A wiec twoja liczba to " << temp << " ! Wygralem !!

po słowie kluczowym else nie masz klamry otwierającej więc wykonywana jest tylko pierwsza instrukcja a nie cały blok jak powinien.

Uwaga po obejrzeniu kodu - nie uruchamiałem, nie testowałem. Popraw tą klamerką jak będą nadal błędy będziemy patrzeć dalej

Ogólnie twój kod jest bardzo mało praktyczny, nie może liczba zależeć od szczęścia. Jeśli masz 50 liczb to masz za małe szanse na strzał by losować w takim przedziale. Najlepiej podzielić np:

50/2 = 25 // i już pytając o 25 zmiejszasz zakres o połowę (25 liczb do losowania mniej)

25/2 = 12,5~12||13 //w zależności od zaokrąglenia, oraz liczby usera usuwasz 12 lub 13 możliwości. przyjmijmy że będzie 12

12/2= 6 // zostaje ci 6 możliwości

6/2=3 //zostają ci 3 możliwości

I teraz masz 33% szans, najlepiej strzelać znów w środek bo wtedy w następnym kroku na pewno trafisz. Innymi sposobami się nie kalkuluje, masz 2% szans na trafienie w twoim wypadku. A to wymaga od ciebie w najgorszym wypadku około 40prób (czyli prawie 10x tyle co w przypadku dzielenia przez 2)

A co do sprawy samego kodu, powinieneś zawrzeć powtarzające się części w funkcje (miałbyś 2x mniej kodu)

daniello6-5 ,

Proszę poprawić pisownię w tytule tematu i w opisie problemu. W celu W celu dokonania zaleconej korekty proszę skorzystać z przycisku Edytuj przy poście otwierającym temat.

Zignorowanie zalecenia będzie skutkowało usunięciem tematu do Kosza.

Nadal jest błąd gdzieś w w części kodu

  • bool odp = false;

Nie wiem jak to naprawić

A co do kodu że jest mało praktyczny to prawda ale na razie chcę przynajmniej tyle zrobić dobrze później by się go przerobiło

Ucz się, nie masz klamry po if, nie deklaruj w jednym programie 2x tej samej zmiennej, nie deklarujesz odp gdy ją pobierasz. Na pierwszy rzut oka. Radzę napisać od nowa.