Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 11.01.2015
Сообщений: 29

Не могу правильно запустить цикл

09.03.2015, 19:20. Показов 1752. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие форумчане!!!

загвоздка вот в чём,
нужно вот что
2. Написать приложение, которое «угадывает» задуманное пользователем число от 1 до 100. Для запроса к пользователю использовать окна сообщений. После того, как число отгадано, необходимо вывести количество попыток, потребовавшихся для этого, и предоставить пользователю возможность сыграть еще раз, не завершая программу.
Я всё это написал вот мой код
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <windows.h>
#include <tchar.h>
 
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine,                 int nCmdShow)
{
    TCHAR ar[50];
    TCHAR ar2[50];
    bool otvet=0;
     int begin=1;
     int end=100;
     int counter=1;
     int chislo=(begin+end)/2;
     int res;
     
     
    wsprintf(ar,TEXT("Ваше число %d "),chislo);
    wsprintf(ar2,TEXT("Ура угадал количество попыток %d"),counter);
    
MessageBox(
0,
TEXT("Загадайте число от 0 до 100"),
TEXT("Игра Угадай число"),
MB_OK | MB_ICONINFORMATION);
   
while(!otvet){
    wsprintf(ar,TEXT("Ваше число %d "),chislo);
res=MessageBox(
0,
ar,
TEXT("Игра Угадай Число  "),
MB_YESNO | MB_ICONQUESTION);
 
if(res==IDYES)
{
    otvet=1;
    MessageBox(
0,
ar2,
TEXT("Игра Угадай число"),
MB_OK | MB_ICONINFORMATION);
   
}
 
if(res==IDNO){
    
res=MessageBox(
0,
TEXT("Ваше число больше?"),
TEXT("Игра Угадай число"),
MB_YESNO | MB_ICONQUESTION);
    }
wsprintf(ar,TEXT("Ваше число %d "),chislo);
wsprintf(ar2,TEXT("Ура угадал количество попыток %d"),counter);
 if(res==IDYES){
    counter++;
begin=chislo;
 
chislo=(begin+end)/2;
}
 wsprintf(ar2,TEXT("Ура угадал количество попыток %d"),counter);
if(res==IDNO){
    wsprintf(ar2,TEXT("Ура угадал количество попыток %d"),counter);
counter++;
end=chislo;
 
chislo=(end+begin)/2;
wsprintf(ar,TEXT("Ваше число %d "),chislo);
}
 
 
 
 
 
}
return 0;
    
 
 
}


НЕ могу осуществить вот что "предоставить пользователю возможность сыграть еще раз, не завершая программу."
не могу понять как правильно запустить цикл
Может кто поможет хотя бы на словах ,как это лучше сделать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2015, 19:20
Ответы с готовыми решениями:

Не могу запустить цикл с данными из таблицы БД
Добрый день. Пример, приложил - в архиве. Пожалуйста, подскажите: 1. Не могу запустить цикл по &quot;Кнопке1&quot; из Формы. 2. Как...

Не могу запустить цикл, выполняется 1 раз и всё
Sub mac() Sheets(&quot;ЛИСТ3&quot;).Select i = 1 If IsEmpty(Cells(8, i)) = True Then MsgBox &quot;пустая&quot; Else x =...

Не могу понять как правильно описать цикл
Помогите пожалуйста. Не могу понять как правильно описать цикл. С помощью метода: Найти количество столбцов, начинающихся с ...

3
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
09.03.2015, 19:40
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
//Написать приложение, которое «угадывает» задуманное пользователем число от 1 до 100.
//Для запроса к пользователю использовать окна сообщений.После того, как число отгадано,
//необходимо вывести количество попыток, потребовавшихся для этого,
//и предоставить пользователю возможность сыграть еще раз, не завершая программу.
//Окна сообщений следует оформить кнопками и иконками в соответствии с конкретной ситуацией.
 
#include <Windows.h>
 
#define  CREATEBUTTON(name, id, x, y) \
    CreateWindow(TEXT("BUTTON"), name, WS_CHILD | BS_USERBUTTON | WS_VISIBLE, \
    x, y, 90, 35, hMainWind, (HMENU)id, (HINSTANCE)lParam, NULL)
 
#define  APPNAME    TEXT("QUEST")
#define  IDC_SMALL  100
#define  IDC_BIG    101
#define  IDC_ANSWER 102
 
int  first_n = 1;
int  last_n = 100;
 
void  AnswerCPU(HWND, int, int, char);
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hMainWind;
    TCHAR szClassName[] = TEXT("MyClass");
    MSG msg = { 0 };
    WNDCLASSEX wc;
 
    wc.cbSize = sizeof(wc);
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_QUESTION);
    wc.hCursor = LoadCursor(NULL, IDC_CROSS);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szClassName;
    wc.hIconSm = NULL;
 
    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, TEXT("Азаза!"), TEXT("Азаза!"), MB_OK);
        return 0;
    }
 
    hMainWind = CreateWindow(szClassName, APPNAME, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
    if (!hMainWind)
    {
        MessageBox(NULL, TEXT("Азаза!"), TEXT("Азаза!"), MB_OK);
        return 0;
    }
 
    ShowWindow(hMainWind, nCmdShow);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hMainWind, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HWND bbig = NULL;
    static HWND bsmall = NULL;
    HDC hDC;
    PAINTSTRUCT ps;
    RECT  rc;
 
    switch (msg){
    case WM_CREATE:
        GetClientRect(hMainWind, &rc);
        bsmall = CREATEBUTTON(TEXT("Меньше"), IDC_SMALL, rc.right / 2 - 90, rc.bottom / 2 - 20);
        bbig = CREATEBUTTON(TEXT("Больше"), IDC_BIG, rc.right / 2 + 50, rc.bottom / 2 - 20);
        SendMessage(hMainWind, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
        break;
    case WM_COMMAND:
 
        switch (LOWORD(wParam)) {
        case IDC_SMALL:
            AnswerCPU(hMainWind, first_n, last_n, '<');
            break;
        case IDC_BIG:
            AnswerCPU(hMainWind, first_n, last_n, '>');
            break;
        case IDC_ANSWER:  // ответ компьютера
            MessageBox(hMainWind, TEXT("Загадайте число от 1 до 100"), APPNAME, MB_OK | MB_ICONINFORMATION);
            AnswerCPU(hMainWind, first_n, last_n, 0);
            break;
        }
 
        break;
    case WM_DESTROY:
        DestroyWindow(bsmall);
        DestroyWindow(bbig);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hMainWind, msg, wParam, lParam);
    }
    return 0;
}
 
 
void  AnswerCPU(HWND hMainWind, int _first, int _last, char ch) {
    static int first = _first;
    static int last = _last;
    static int cnt = 0;
    static int num = 0;
    TCHAR buf[64];
    int   id;
 
    switch (ch) {
    case '<':  // меньше
        last = num;
        break;
    case '>':  // больше
        first = num + 1;
        break;
    }
 
    cnt++;
    num = (first + last) / 2;
 
    wsprintf(buf, TEXT("Вы задумали это число - %d. Да или Нет ?"), num);
    id = MessageBox(hMainWind, buf, APPNAME, MB_YESNO | MB_ICONQUESTION);
    if (id != IDYES)
        return;
 
    wsprintf(buf, TEXT("Я угадал Ваше число за %d попытки(ок).\nПродолжить."), cnt);
    id = MessageBox(hMainWind, buf, APPNAME, MB_OKCANCEL | MB_ICONINFORMATION);
    if (id == IDCANCEL) // выйти
        SendMessage(hMainWind, WM_DESTROY, 0, 0);
    else {  // начать заново
        first = _first;
        last = _last;
        cnt = num = 0;
        SendMessage(hMainWind, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
    }
}
Добавлено через 7 минут
При нажатии на кнопки больше и меньше запускается функция AnswerCPU.
Которая угадывает число и ведет подсчет попыток (строки 121 -131), после этого запускает MessageBox, сохраняя его результат в id, если ответ !Да, то происходит return и повторная отработка функции после нажатия кнопки в родительском окне(133-136).
Если ответ Да, показываем число, количество попыток, и запрашиваем будет ли человек еще играть.
Анализируя ответ или начинаем заново или уничтожаем окно 138-146.
0
2 / 2 / 0
Регистрация: 11.01.2015
Сообщений: 29
09.03.2015, 19:45  [ТС]
спасибо за готовую программу ,но у меня ещё нет таких знаний...
Преподаватель это не примет.
мне лиш нужно доделать мою программу .чтоб можно было играть сколько хочешь раз не завершая программу
0
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
10.03.2015, 09:50
hatir, ну тогда по идее надо сделать рекурсивную функцию вроде такой:
C++
1
2
3
4
5
6
7
8
9
10
11
void Recurs ( )
{
    while(!otvet){
    ... // здесь вся логика работы
    }
    res=MessageBox(0,TEXT("Сыграть еще раз? "),TEXT("Игра Угадай Число  "),MB_YESNO | MB_ICONQUESTION);
    if(res==IDYES) 
    {
      Recurs ( );
    } 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2015, 09:50
Помогаю со студенческими работами здесь

Цикл: Не могу создать цикл для switch
не могу создать цикл для switch

Не могу запустить сервер через python manage.py runserver. Не могу понять в чем проблема. Кто может подсказать?
сделал миграцию но все равно не помогает. Не могу открыть сервер в браузере (venv) C:\Users\Admin\PycharmProjects\Pyshop&gt;python...

Запустить цикл
Здравствуйте, я загрузил некоторый текст в массив d как можно запустить цикл что бы он выполнялся пока не дойдет до конца массива

Запустить цикл в фоне
Всем привет! Кому будет интересно, попрошу помочь с заданием. Написать программу, которая бы: - запускала в памяти ещё один процеcc...

Запустить цикл с контрольной точки
Всем доброго времени суток! Задача. Имеется просто двухмерный массив. Он проганяется в цыкле и выводится на экран значения. ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru