Program zgadujący liczbę

0

Mam do napisania program, który będzie zgadywał liczby pomyślane przez użytkownika. Mam coś takiego (tylko nie krzyczcie ;)):

#include <stdio.h>
#include <stdlib.h>
/*Napisz program zgadujący liczbę wymyśloną przez użytkownika. Zastosuj metodę bisekcji (połowienia).
Użytkownik może odpowiadać tylko czy liczba (jego) jest mniejsza lub większa od proponowanej przez program*/
int main()
{
    int poczatek=1;
    int koniec=1000;
    int x, zgadywana;
    char odpowiedz;
    printf("Pomysl liczbe od 1 do 1000...\n");
    printf("Jesli podana liczba za mala - wcisnij n, za duza - d, wlasciwa - w\n");
    srand(time(0));
    zgadywana = rand() % 1000 + 1;
    printf("%d\n", zgadywana);
    odpowiedz = getchar();
    while (odpowiedz != 'w')
    {
        if (odpowiedz == 'w')
    {
        odpowiedz = getchar();
    }
    else if (odpowiedz== 'm')
    {
        poczatek=zgadywana+1;
        x=rand() % koniec + 1;
        x>poczatek;
        printf("Hmm.. A moze %d \n", x);
        odpowiedz = getchar();
    }
    else if (odpowiedz =='d')
    {
        koniec= zgadywana-1;
        x=rand() % koniec + 1;
        x>poczatek;
        printf("Hmm.. A moze %d \n", x);
        odpowiedz = getchar();
    }
    else
        printf("Jesli podana liczba za mala - wcisnij n, za duza - d, wlasciwa - w");
        odpowiedz = getchar();

    }
   


    return 0;
}

i właśnie nie wiem dlaczego ja wpisuję, że liczba jest za mała, a program podaje jeszcze mniejszą. Co jest nie tak?

0
  1. A co wpisujesz, kiedy liczba jest za mała? W każesz wpisać 'n' a sprawdzasz 'm'..
  2. x>poczatek; -> co to?
  3. Sprawdź nawiasy {} w ostatnim bloku
  4. Po co takie cos:
 if (odpowiedz == 'w')
    {
        odpowiedz = getchar();
    }
0

Przykładowy kod, nie jestem pewien czy działa dobrze:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define MAX 1000

int main(int arc,char **argv){
    int last_number = 0,actual_number,block_size = 0;
    int counter = 0;
    char chr,c,last_chr = 0;

    srand(time(0));
    actual_number = rand() % MAX + 1;

    printf("w - większa, m- mniejsza, d - dobrze\n");

    do{
        printf("\nliczba: %d? ",actual_number);
        chr = getchar();
        while((c = getchar()) != '\n' || c == EOF);                         //wyczyść bufor

        if(chr == 'w' || chr == 'm'){                                       //przeprowadz tylko dla znakow
            if(chr == 'w' && last_number == 0) last_number = MAX;           //jesli jest to pierwsze przejscie
            block_size = abs(last_number - actual_number) % 2 ? 1 : 0;      //wyrownanie jesli dzielenie z reszta
            block_size += last_chr != chr                                   //oblicz wielkosc bloku
                ? abs(last_number - actual_number) / 2                      //wybierz zakres w zaleznosci co bylo wczesniej
                : abs(last_number - actual_number) -1 ;
            last_number = actual_number;                                    //aktualna do poprzedniej
        }

        switch(chr){
            case 'd': break;
            case 'w': actual_number += block_size; break;                   //dodaj wielkosc bloku do liczby
            case 'm': actual_number -= block_size; break;                   //odejmij wielkosc bloku
        }

        last_chr = chr;
        ++counter;
    }while(chr != 'd' && counter < MAX/2);                                  //sprwadz czy dobrze lub licznik

    if(counter < MAX/2 && chr == 'd')
        printf("Prawidłowa wartość po %d próbie, liczba to: %d\n",counter,actual_number);
    else
        printf("Nie udało się odgadnąć liczby\n");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1