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

Цикл do.while не идет на следующую итерацию

26.06.2018, 21:56. Показов 1628. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи форумчане.
Появилась проблема. Делая задание по одному предмету, наткнулся на проблему с циклом.
Кто может объяснить, почему при проверке условий цикл не идет на следующую итерацию, хотя по идее должен
если первое условие:
C++
1
abs(vmid - vmax) < e
и второе
C++
1
abs(vmid - vmin) < e)
по нулям, то почему он не входит на следующий шаг, а начинает выдавать результаты?
Может я где-то что-то напутал? Подскажите пожалуйста.
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
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    ////////////
    int m, n;
    double e;                           //точность вычислений
    int bmin;
    double amax;
    double vmax;
    double vmid;
    double vmin;
    cout << "Программа нахождения решения матричной игры m x n" << endl;
    cout << "Введите количество строк m: ";
    cin >> m;
    cout << "Введите количество столбцов n: ";
    cin >> n;
    int **pay_matrix = new int* [m];    //массив платежной матрицы
    for (int i = 0; i < m; i++)
        pay_matrix[i] = new int[n];
    int *lose2_matrix = new int[m];     //массив накопленных проигрышей Игрока 2
                                        //(соответствует значениям Ai в таблице)
    int *win1_matrix = new int[n];      //массив накопленных выигрышей Игрока 1
                                        //(соответствует значениям Bi в таблице)
    int *pa = new int[m];               //массив, в элементах которого подсчитывается количество
                                        //выпадения соответствующей(по номеру) стратегии Игрока 1
    int *pb = new int[n];               //то же для игрока 2
    for(int i = 0; i < m; i++)
        for (int g = 0; g < n; g++)
        {
            cout << "h(" << i + 1 << ", " << g + 1 << "):";
            cin >> pay_matrix[i][g];
        }
    
    //Предварительно обнуляем значения массивов a и pa
    for (int i = 0; i < m; i++)
    {
        lose2_matrix[i] = 0;
        pa[i] = 0;
    }
    for (int i = 0; i < n; i++)
    {
        win1_matrix[i] = 0;
        pb[i] = 0;
    }
    cout << "Введите точность вычислений (например: 0,001): ";
    cin >> e;
    
    //рандомизация
    srand(time(0));
    int g = 1 + (rand() % 1) * (n - 1); //Первый ход Игрока 1 определяем случайным образом
    int k = 0;                          //Вводим счетчик итераций
    do                                  //Начало итерационного процесса
    {
        k++;
 
        //Определяем очередную строку значений Bi и выбираем минимальное из них в переменную j
        //Для этого сначала вычисляем первый элемент считаем его минимальным
        bmin = pay_matrix[g][1] + win1_matrix[1];
 
        //Номер минимального элемента сначала равен 1
        int j = 1;
        win1_matrix[1] = bmin;
        for (int i = 1; i < n; i++)
        {           
            //Далее, все остальные элементы Bi определяются и если очередное значение Bi меньше 
            //минимального, то это значение объявляется минимальным и в j запоминается номер i этого Bi
            win1_matrix[i] = pay_matrix[g][i] + win1_matrix[i];
            if (win1_matrix[i] < bmin)
            {
                bmin = win1_matrix[i];
                j = i;                  
            }
        }
        //Подсчет количества применения j - стратегии Игроком 2 в j-элементе массива pb
        pb[j]++;
        vmin = bmin / k;
        //Используя найденное значение j аналогично определяем amax, g и vmax
        amax = pay_matrix[1][j] + lose2_matrix[1];
        lose2_matrix[1] = amax;
        g = 1;
        for (int i = 1; i < m; i++)
        {
            lose2_matrix[i] = pay_matrix[i][j] + lose2_matrix[i];
            if (lose2_matrix[i] > amax)
            {
                amax = lose2_matrix[i];
                g = i;
            }
        }
        pa[g]++;                    //Подсчет количества применения g - стратегии игроком 1
        vmax = amax / k;
        vmid = (vmin + vmax) / 2;
 
        /*
        Проверка
        cout << endl << endl;
        cout << (abs(vmid - vmax) < e) << endl;
        cout << (abs(vmid - vmin) < e) << endl;
        cout << ((abs(vmid - vmax) < e) && (abs(vmid - vmin) < e)) << endl;
        */
 
    } while ((abs(vmid - vmax) < e) && (abs(vmid - vmin) < e));
    //Конец итерационного процесса определяется условием близости средних значений 
    //выигрыша и проигрыша к их среднему значению с заданной точностью e 
    cout << "При точности " << e << " за " << k << " партий:\n";
    cout << " накопительный выигрыш " << amax << ", накопительный проигрыш " << bmin << endl;
    cout << "Цены игры:" << endl;
    cout << "\tсредняя максимальная " << vmax << endl;
    cout << "\tсредняя минимальная " << vmin << endl;
    cout << "\tсредняя " << vmid << endl;
    cout << "Оптимальная стратегия Игрока 1" << endl;
    for (int i = 0; i < m; i++)
        cout << i << "-" << pa[i] / k << endl;
    cout << "Оптимальная стратегия Игрока 2" << endl;
    for (int i = 0; i < n; i++)
        cout << i << "-" << pb[i] / k << endl;
    ////////////
    system("pause");
    return EXIT_SUCCESS;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2018, 21:56
Ответы с готовыми решениями:

Как реализовать переход на следующую итерацию внешнего цикла из вложенного?
Есть ли способ завершить или продолжить внешний цикл из вложенного? Пример : for (i = 0; i &lt; 10; i++) { for (j = 0; j &lt; 10; j++)...

Как реализовать переход на следующую итерацию внешнего цикла из вложенного?
Добрый вечер. Возможен ли в C++ переход на следующую итерацию внешнего цикла из вложенного? например: for(int i=0;i&lt;n;i++) ...

Цикл не делает последнюю итерацию
for(x=1;x&lt;=4;x+=0.2) { cout&lt;&lt;x&lt;&lt;endl; } Почему последнее число которое выводит это 3.8, а не 4?

3
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
26.06.2018, 22:23
Какие там начальные значения забивать?
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
26.06.2018, 23:14
поставь брейкпойнт на 107 строку и посмотри, почему выражение даёт false.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
26.06.2018, 23:19
ну потому и не идёт, что разница ещё не достигла e
цикл должен крутиться, пока она больше e, а не меньше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2018, 23:19
Помогаю со студенческими работами здесь

Выход из цикла и переход на следующую итерацию
как в в 1С сделать выход из цикла или перейти на следующую итерацию в цикле??... в С++ это делается командами break и continue... а как...

Не осуществляется переход на следующую итерацию цикла
Здравствуйте! Сделал простейший калькулятор на C#, чтобы вспомнить основы языка. В конце, вместо перехода на следующую итерацию цикла...

Почему для перехода на следующую итерацию надо нажимать enter?
Почему в консоли переход на новую итерацию цикла надо жать интер? Как сделать, чтобы после запуска программы консоль сразу выдавала...

Цикл не переходит на вторую итерацию
Доброго времени суток! пишу следующий код: for ($i = 0; $i &lt; 2; $i++) { // условие выхода исправить echo &quot;&lt;br...

Не идет цикл For в VBscript :)
&lt;html&gt; &lt;head&gt; &lt;!--ниже инструкция необходимая для работы VBScript в браузере Internet Explorer 11--&gt; &lt;meta...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru