[C++] Problem z dodaniem zmniejszeniem kragu poszukiwan


(Daniello6 5) #1

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 <> 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 !!


(Grzelix) #2

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


(Drobok) #3

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)


(Agatonster) #4

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.


(Daniello6 5) #5

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


(Drobok) #6

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.