Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 34

Изучаем С++ по книге Майкла Доусона

14.08.2018, 11:10. Показов 9977. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, недавно начал изучать C++ и начал я с книги (Майкл Доусон - Изучаем С++ через программирование игр)
по мере прочтения и выполняя задания в конце глав меня одолевали сомнения а так ли я сделал то или иное упражнение что и побудило меня создать данную тему.
Тема создана не с целью что бы кто то за меня делал эти самые задания, мне интересно узнать мнение и реализацию более опытных людей)

К чему я это всё, в конце главы 2 дают задание усовершенствовать игру Guess My Number - Это классическая
игра по угадыванию чисел.
Кликните здесь для просмотра всего текста
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
// Игра Guess My Number
// Классическая игра в угадывание чисел
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand(static_cast<unsigned int>(time(0))); // запускаем генератор случайных чисел
    int secretNumber = rand() % 100 + 1; //случайное число в деапазоне от 1 до 100
    int tries = 0;
    int guess;
    //cout << secretNumber;
    cout << "\tWelcome to Guess My Number\n\n";
    do
    {
        cout << "Enter a guess: ";
        cin >> guess;
        ++tries;
        if (guess > secretNumber)
        {
            cout << "Too high!\n\n";
        }
        else if (guess < secretNumber)
        {
            cout << "Too low!\n\n";
        }
        else
        {
            cout << "\nThat's it! You got it in " << tries << " guesses!\n";
        }
    } while (guess != secretNumber);
    system("pause");
    return 0;
}

Напишите новую версию программы Guess Му Number, где компьютер и игрок
меняются ролями: игрок выбирает число, а компьютер должен его угадать.
Кликните здесь для просмотра всего текста
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
// Игра Guess My Number 2.0
// Классическая игра в угадывание чисел где игрок и компьютер меняются местами
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand(static_cast<unsigned int>(time(0))); // запускаем генератор случайных чисел
    int tries = 0;
    int secretNumber;
    cout << "\tWelcome to Guess My Number\n\n";
    cout << "Enter secret number: ";
    cin >> secretNumber; cout << endl;
    do
    {
        int guess = rand() % 100 + 1; //случайное число в деапазоне от 1 до 100
        cout << "[Computer] Enter a guess: ";
        cout << guess;
        ++tries;
        if (guess > secretNumber)
        {
            cout << "\nToo high!\n\n";          
        }
        else if (guess < secretNumber)
        {
            cout << "\nToo low!\n\n";
        }
        else
        {
            cout << "\nThat's it! You got it in " << tries << " guesses!\n";
            break;
        }
    } while (true);
    system("pause");
    return 0;
}

я уверен такие мысли с прочтением каждой последующей главы будут посещать меня часто, рассчитываю на вашу помощь)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2018, 11:10
Ответы с готовыми решениями:

Задача из самоучителя Майкла Доусона
Условия: * Напишите программу «Кто твой папа?», в которой пользователь будет вводить имя человека, а программа - называть отца этого...

Не могу скачать материалы из книги Майкла Доусона "Программируем на Python"
В книге указан сайт с которого нужно скачивать задания - http://www.courseptr.com/downloads, он не работает или я разобраться не могу...

Исходники к книге Дэвида Гриффитса - Изучаем программирование на с
Может есть у кого-нибудь хоть какие-нибудь???

8
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
14.08.2018, 11:31
Во второй задаче я бысделала, чтоб ответ "Too high" или "Too low" влиял на следующую попытку. Ведь если "Too high", то не надо больше пробовать значения больше этого числа, а значит верхняя граница для генератора случайных чисел должна измениться. И, аналогично, сo случаем "Too low" - нижняя граница для генерации случайных чисел должна измениться
0
Заблокирован
14.08.2018, 11:45
Цитата Сообщение от HINCO Посмотреть сообщение
rand() % 100 + 1;
повторы же будут, комп прошлые ходы не запоминает, из ответов выводы не делает

Добавлено через 12 минут
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
...........
    int left=1;
    int right=100;
    do
    {
        int guess = rand() %(right-left+1)+left; //случайное число в деапазоне от 1 до 100
        cout << "[Computer] Enter a guess: ";
        cout << guess;
        ++tries;
        if (guess > secretNumber)
        {
            cout << "\nToo high!\n\n";
            right=guess-1;
        }
        else if (guess < secretNumber)
        {
            cout << "\nToo low!\n\n";
            left=guess+1;
        }
        else
        {
            cout << "\nThat's it! You got it in " << tries << " guesses!\n";
            break;
        }
    } while (true);
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
14.08.2018, 11:53
... была не права, удалила
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
14.08.2018, 11:55
Лучший ответ Сообщение было отмечено HINCO как решение

Решение

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
44
45
46
47
48
49
50
#include <iostream>
#include <set>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int main()
{
    srand(static_cast<unsigned int>(time(0)));
    int tries = 0;
    int secretNumber;
    cout << "\tWelcome to Guess My Number\n\n"
        << "Enter secret number: ";
    cin >> secretNumber;
    cout << endl;
    
    int lowerBound = 1;
    int upperBound = 100;
    std::set<int> data{};
    do
    {
        int guess{};
        while (true)
        {
            guess = lowerBound + rand() % (upperBound - lowerBound + 1); //случайное число в диапазоне от Нижней до Верхней границы
            if (data.count(guess) == 0) // если это число не отгадывалось
            {
                data.insert(guess); // запоминаем ход
                break; // покидаем while(true)
            }
        }
        cout << "[Computer] Enter a guess: " << guess;
        ++tries;
        if (guess > secretNumber)
        {
            upperBound = guess;
            cout << "\nToo high!\n\n";          
        }
        else if (guess < secretNumber)
        {
            lowerBound = guess;
            cout << "\nToo low!\n\n";
        }
        else
        {
            cout << "\nThat's it! You got it in " << tries << " guesses!\n";
        }
    } while (guess != secretNumber);
}
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 34
14.08.2018, 13:57  [ТС]
Я про верхнюю и нижнюю границы даже не подумал и ещё про повторение в ответах, спасибо за подсказки и интересные решения)
конструкция которую предложил anapshy интересная но пока не совсем понятна)
0
2 / 2 / 0
Регистрация: 27.03.2017
Сообщений: 14
15.08.2018, 10:20
Эта задача решается не так. Никакие rand() тут не нужны. Примерный алгоритм:
1) берем середину интервала (если от 1 до 100, то 50)
2) если меньше загаданного, интервал становится от 1 до 50, если больше то 50 до 100, если равно, угадали
3) идет в пункт 1, уже с новым интервалом, который опять делим пополам

C++
1
2
3
4
5
6
7
8
9
10
    int lower = 1, upper = 100;
    int secret = 33;
    int guess;
    do {
        guess = (upper - lower) / 2 + lower;
        if (guess > secret)
            upper = guess;
        else if (guess < secret)
            lower = guess;
    } while (guess != secret);
1
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 34
19.08.2018, 14:21  [ТС]
mailwl, Спасибо вам еще за вариант решения данной задачи)
Вопрос из той же оперы, после того как сменил систему и все проекты которые я выполнял из этой книги перестали функционировать - ошибки одни и те же во всех проектах, при создании нового проекта и использование этого же кода, проблем ни каких нет.
пс: при открытии этого же проекта допустим на ноутбуке проблема возвращается - каждый раз создавать новый проект? ну это не серьёзно)
псс: вспомнил ЛР в универе, если что то не работает делай это снова и может это заработает (с)Препод
Кликните здесь для просмотра всего текста
0
2 / 2 / 0
Регистрация: 27.03.2017
Сообщений: 14
20.08.2018, 09:13
пути к заголовочным файлам неправильные, нужно поправить в настройках проекта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.08.2018, 09:13
Помогаю со студенческими работами здесь

Обучение программированию по книге "Изучаем С#"
Я ничего не знал о С# и почемуто купил книгу &quot;Изучаем С#&quot; (3-е издание 2014) Эндрю Стиллмен и Дженифер Грин дочитал до 350 страницы и...

Задача из книги (М. Доусона)
Глава из книги посвящена ООП. В конце её такая задача: &quot;Создайте несложную объектно-ориент. приключенческую игру, в которой игрок сможет...

Из волос Майкла Джексона сделают бриллианты
Особая технология поможет превратить локоны звезды в многогранную блестящую память Из волос Майкла Джексона, оставшихся после жуткого...

Движение объекта! SCREEN 12. Майкла Джексон рулееез !!! ))))
Препод сказал сделать анимацию в QBasic а я плоховато с ним знаком Помогите пожалуйтся сделать Лунную походку Майкла Джексона в SCREEN...

Есть 3 книги Доусона, Лутца и Саммерфилда. С какой лучше начать?
Один человек говорит - с одной начать, другой - с другой, третий - с третьей. А книги то не малые, особенно Лутца, 1200 страниц. Но Лутц...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru