Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
SmiThUa
0 / 0 / 0
Регистрация: 15.10.2009
Сообщений: 8
#1

Игра "Угадай число" - C++

18.04.2010, 13:37. Просмотров 2832. Ответов 8
Метки нет (Все метки)

Нужно доделать код программы... (Желательно до 24-го числа.. но можно и позже)

Задание:
напишите программу, которая будет уметь играть (за кого-либо из игроков) в такую игру. Один игрок загадывает натуральное число от 1 до N, другой должен его угадать, задавая вопрос вида "Это число ...?" и получая один из ответов "да", "загаданное число больше" или "загаданное число меньше. Программа должна играть оптимально (угадывать за наименьшее количество вопросов, то есть нужно применить бинарный поиск. Программа должна работать правильно, независимо от того, оптимальным образом ставит вопрос игрок-человек дал ссуперечни ответа (например, один раз сказал, что число больше 100, а через несколько ходов - что меньше 101), программа должна подробно об этом рассказать.

Вот мои наработки, но тут не все предусмотрено..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
    srand(time(NULL));
    int number = rand() % 100 + 1;
    int num;
    int points = 10;
    cout << "I know a number (1..100)" << endl;
m1:
    cout << "Enter this number: ";
    cin >> num;
    if (num == number)
    {
        cout << "You are WINNER!!! You have "
            << points << " points!" << endl;
        goto m2;
    }
    else
    {
        if (num < number)
            cout << "Your number is too small("
            << points << " points)" << endl;
        else
            cout << "Your number is too big("
            << points << " points)" << endl;
}
    if (points == 0)
    {
        cout << "You are loser..." << endl;
        goto m2;
    }
    goto m1;
m2:
    system("PAUSE");
    return 0;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2010, 13:37     Игра "Угадай число"
Посмотрите здесь:

Готовая игра "угадай число" - C++
#include &lt;iostream.h&gt; int main () { int x=rnd%256; int d; int masks={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; ...

Игра "Угадай число" - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main(){ setlocale(LC_ALL,&quot;rus&quot;); int num, ques, i, menu=1,...

Игра "Угадай число" - C++
Написал программу угадывания числа. Программа работает, но есть проблема повторного вызова игры. Когда мы угадываем число, программа нам...

Игра "Угадай число" - C++
2)Написать программу, которая &quot;задумывает&quot; число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 5 попыток. Ниже...

Игра "Угадай число" - C++
Пожайлуста, решите задачу на С++ с условием:написать программу, которая &quot;задумывает&quot; число в диапазоне от 1 до 10 и предлагает пользователю...

Игра "Угадай число" - C++
Здравствуйте,помогите у кого есть время и возможность вообщем задание такое: нужно написать прогу,где юзер вводит любое число ...

Игра "Угадай число" - C++
Помогите написать программу!!!Вот задание: Игра «Угадай число»: составьте программу определения компьютером задуманного человеком числа от...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
18.04.2010, 13:41     Игра "Угадай число" #2
Первое же замечание, старайтесь не использовать оператор goto.
Ведь, всегда можно вместо него воспользоваться, к примеру, break/continue, или чем-то еще.
Когда вернусь домой, напишу вам без goto, если меня никто не опередит.
broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
18.04.2010, 14:05     Игра "Угадай число" #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{ 
    int k;
    bool done;
    char c;
            //cout << rand() << endl;
            //cout << i << endl;
    cout << "GAME" << endl;
    int x;
        for ( ; ; )
        {   
            srand(time(0));
            int i = rand()%100;
            cout << "Ya zagadal chislo, ti ego otgaday!" << endl;
        //do 
        //{   
            {for ( ; ; )
            {
            cin >> x;
            if (x<i)
            cout << "Moe chislo bolshe!" << endl;
            else
            {if (x>i)
            cout << "Moe chislo men'she!"<< endl;
            else
                {cout << "Ti ugadal!" << endl;
                break;}
            }
            }
            }
        cout << "Prodolshit?" << endl << "1 - YES" << endl << "2 - NO" << endl;
        cin >> k;
                if (k == 1)
                    continue;
                else
                    break;
        }
}
Что-то типа того) соответственно сам можешь диапазоны в этой строке поменять(int i = rand()%100
А neske совершенно прав, не используй лучше goto. Вещь такая заразная, с моей точки зрения тупеешь с ним. Сначала тупеешь, а потом запутываешься в своей проге так, что начинаешь её с нуля писать)
Morfiy
5 / 5 / 0
Регистрация: 16.04.2010
Сообщений: 64
18.04.2010, 14:13     Игра "Угадай число" #4
ну я когдато делал подобную програму у меня она осталась но там число задаетса автоматичиски а пользователь его угадует
сотри сам мож ищо добавить вариант задать самому число или пусть задаетса автоматом)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
main(){
clrscr();
float a,b;
int i=0;
randomize();
a=random(100)+1;
  do
  {
  cout<<"vvesti b=";
  cin>>b;
  i++;
  if(b>a)cout<<"menshe vvedi\n";
  if(b<a)cout<<"bolshe vedi\n";
  }
while(b-a);
cout<<"you are right\n";
cout<<"zatra4eno poputok>"<<i;
 
getch();
return 0;
}
да кстати тут от 1 до 100 думаю тебе ета прога будет хорошым примером чоб самому розобраса
SmiThUa
0 / 0 / 0
Регистрация: 15.10.2009
Сообщений: 8
18.04.2010, 14:14  [ТС]     Игра "Угадай число" #5
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Что-то типа того) соответственно сам можешь диапазоны в этой строке поменять(int i = rand()%100
А neske совершенно прав, не используй лучше goto. Вещь такая заразная, с моей точки зрения тупеешь с ним. Сначала тупеешь, а потом запутываешься в своей проге так, что начинаешь её с нуля писать)
Ок, приму к сведенью! ))
Evg
Эксперт CАвтор FAQ
17539 / 5777 / 370
Регистрация: 30.03.2009
Сообщений: 15,909
Записей в блоге: 26
18.04.2010, 15:57     Игра "Угадай число" #6
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
А neske совершенно прав, не используй лучше goto

Не по теме:

Если человек имеет желание самому писать программу - так пусть хоть всё обтыкает goto'ами. Для начала он научится писать "хоть как-то", а потом по мере совершенства своих знаний будет писать более оптимально. А если посмотреть на код SmiThUa, то все goto очень понятно сделаны и сразу видно, что да как работает. А если посмотреть твой код, то надо сидеть и курить, как устроена логика программы (ибо в этих break'ах и continue'ах без поллитры одним взглядом не разобраться). Просто вопрос про goto поднимался не раз, а тут образовался наглядный конкретный пример, когда умеренное использование goto гораздо предпочтительнее (по крайней мере на мой взгляд), чем break'и и continue'ы

neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
18.04.2010, 17:01     Игра "Угадай число" #7
Этот код к первому посту, без goto:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <time.h>
 
int main ()
{
    setlocale( LC_ALL,"Russian" );
    
    int player_num=-1;
    int computer_num;
    size_t attempts=0; // попытки.
    
        std::cout << "Игра началась, удачи!\n";
        srand(time(0));
        computer_num=rand()%100;
 
        while (computer_num!=player_num)
        {
                        std::cout << "Введите число: ";
            std::cin >> player_num;
            if (computer_num>player_num) std::cout << "Загаданное число больше!\n";
            else std::cout << "Загаданное число меньше!\n";
            ++attempts;
        }
 
        std::cout << "Поздравляю! Вы выиграли!\n";
        std::cout << "Попытки: " << attempts << "\n";
 
    system("pause");
    return 0;
}

Evg, может-быть и так, но я все же останусь при своем мнении.
Evg
Эксперт CАвтор FAQ
17539 / 5777 / 370
Регистрация: 30.03.2009
Сообщений: 15,909
Записей в блоге: 26
18.04.2010, 18:04     Игра "Угадай число" #8
neske, опять-таки оффтоп, но применительно к твоему случаю концептуально более правильным было бы использовать цикл do-while вместо while-do. Потому как надо "вводить числа до тех пор пока не угадали". А вот "пока не угадали, вводить числа" - это немного неправильно, ибо числа сначала вводятся и лишь потом проверяются.

Т.е. (схематически) вместо:

C++
1
2
3
4
5
6
player_num=-1; // <--- хак, чтобы при первом сравнении ушли вовнутрь цикла
computer_num=rand()%100;
while (computer_num!=player_num)
{
  cin >> player_num;
}
было бы идеологически правильно:

C++
1
2
3
4
5
6
// хак не нужен
computer_num=rand()%100;
do
{
  cin >> player_num;
} while (computer_num!=player_num)
Но это так, лирическое отступление. Уж коль скоро речь зашла о том, как правильно, а как нет

Добавлено через 1 минуту
По поводу goto. Я сравнивал коды из постов #1 и #3. И код из поста #3 выглядит более запутанным, чем код из поста #1. Твой код из поста #7, разумеется, написан "хорошо" (т.е. более предпочтителен, чем код с goto)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 18:46     Игра "Угадай число"
Еще ссылки по теме:

Игра "Угадай число" - C++
Ребят крч сегодня начал учить c++, задача была сделать игру &quot;Угадай число&quot; с фиксированным числом. Вроде начал делать и я не понимаю просто...

Игра "Угадай слова" через массивы! - C++
Получил такое задание! Помогите разобраться! Хотя бы какие то наброски подскажите! Написать игру! Создать массив с 20 словами. В...

"Угадай число" (напишите программу, хочу проверить со своей). - C++
&quot;Угадай число&quot;. Пользователю предлагается отгадать число за 10 попыток. Программа даёт подсказки вида больше, меньше.

Реализовать генерацию случайных чисел для игры "Угадай число" - C++
Всем привет!написал код для игры. По условию компьютер должен загадать число от 1 до 100 и пользователь должен отгадать это число за 6...

Исправить ошибки в программе "угадай число" - C++
суть программы, генерирует случайное число от 1 до 1000, запрашивает число и говорит больше или меньше, если введено не число выдаёт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
18.04.2010, 18:46     Игра "Угадай число" #9
Evg, ты прав, do/while было бы логичнее использовать
Yandex
Объявления
18.04.2010, 18:46     Игра "Угадай число"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru