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

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

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

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

18.04.2010, 13:37. Просмотров 2869. Ответов 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;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2010, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Игра "Угадай число" (C++):

Готовая игра "угадай число" - 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++
Здравствуйте,помогите у кого есть время и возможность вообщем задание такое: нужно написать прогу,где юзер вводит любое число ...

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

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

Игра "Угадай число" - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() { srand(static_cast &lt;unsigned int&gt;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
18.04.2010, 13:41 #2
Первое же замечание, старайтесь не использовать оператор goto.
Ведь, всегда можно вместо него воспользоваться, к примеру, break/continue, или чем-то еще.
Когда вернусь домой, напишу вам без goto, если меня никто не опередит.
0
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. Вещь такая заразная, с моей точки зрения тупеешь с ним. Сначала тупеешь, а потом запутываешься в своей проге так, что начинаешь её с нуля писать)
0
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 думаю тебе ета прога будет хорошым примером чоб самому розобраса
0
SmiThUa
0 / 0 / 0
Регистрация: 15.10.2009
Сообщений: 8
18.04.2010, 14:14  [ТС] #5
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Что-то типа того) соответственно сам можешь диапазоны в этой строке поменять(int i = rand()%100
А neske совершенно прав, не используй лучше goto. Вещь такая заразная, с моей точки зрения тупеешь с ним. Сначала тупеешь, а потом запутываешься в своей проге так, что начинаешь её с нуля писать)
Ок, приму к сведенью! ))
0
Evg
Эксперт CАвтор FAQ
17808 / 6014 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
18.04.2010, 15:57 #6
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
А neske совершенно прав, не используй лучше goto

Не по теме:

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

0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
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, может-быть и так, но я все же останусь при своем мнении.
0
Evg
Эксперт CАвтор FAQ
17808 / 6014 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 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)
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
18.04.2010, 18:46 #9
Evg, ты прав, do/while было бы логичнее использовать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 18:46
Привет! Вот еще темы с ответами:

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

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

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

Game "Угадай число" как зделать запрет на "букви" ???? - C++
Привет всем кто решил помочь. Написал прогру, но есть проблемка, когда ввожу &quot;букву&quot; вся прога беситса как мне зделать так что б он...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.04.2010, 18:46
Ответ Создать тему
Опции темы

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