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

Цикл не делает последнюю итерацию

22.06.2016, 14:57. Показов 2612. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
    for(x=1;x<=4;x+=0.2)
    {
        cout<<x<<endl;
    }
Почему последнее число которое выводит это 3.8, а не 4?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2016, 14:57
Ответы с готовыми решениями:

Функции. Не считает последнюю итерацию в цикле
Добрый вечер. Не могу понять, почему в цикле не считает 12 итерацию. Ниже строка с комментарием. #include &lt;iostream&gt; #include...

Цикл do.while не идет на следующую итерацию
Товарищи форумчане. Появилась проблема. Делая задание по одному предмету, наткнулся на проблему с циклом. Кто может объяснить, почему...

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

33
92 / 81 / 57
Регистрация: 19.02.2016
Сообщений: 336
22.06.2016, 15:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от elvik Посмотреть сообщение
Последним выводит 4.4
4.2

Ну так на шаге 3.8, x еще не > 4, поэтому выполняется условие, к нему добавляется 0.4, вот тут уже 4.2, поэтому условие не выполняется и мы выходим из цикла

Добавлено через 57 секунд
Цитата Сообщение от _liv_ Посмотреть сообщение
а Вы попробуйте не до 4, а до 2! И увидите, что ваш код отработает до 2.2!!!
Почитайте мой пост выше...
Странно, и как с этим бороться именно в цикле?
В универе пару раз встречалось, делал так, как описал выше и все работало.

Добавлено через 3 минуты
И да, мой вариант был
C++
1
2
3
4
for (x = 1; x < 4.2; x += 0.2)
    {
        cout << x << endl;
    }
0
8 / 8 / 0
Регистрация: 01.03.2016
Сообщений: 23
22.06.2016, 15:53  [ТС]
Цитата Сообщение от nstwf Посмотреть сообщение
4.2
Ну так на шаге 3.8, x еще не > 4, поэтому выполняется условие, к нему добавляется 0.4, вот тут уже 4.2, поэтому условие не выполняется и мы выходим из цикла
Да, 4.2 я там исправил потом. Я понял) спасибо)
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 15:57
Цитата Сообщение от nstwf Посмотреть сообщение
Странно, и как с этим бороться именно в цикле?
nstwf, так и бороться: избегать сравнения на равенство!
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
22.06.2016, 17:19
Наберите код программы

C++
1
2
3
4
5
6
7
for(float x=2.0; x<=4.0; x=x+0.2, cout <<x << "***")
    {
        cout << endl;
        cout<<x<<"----";
        cout<<endl;
    }
  getch();
увидите и поймете как работает цикл
0
92 / 81 / 57
Регистрация: 19.02.2016
Сообщений: 336
22.06.2016, 17:27
Цитата Сообщение от мановар Посмотреть сообщение
Наберите код программы
C++
1
x < 4.0
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 17:45
Цитата Сообщение от мановар Посмотреть сообщение
увидите и поймете как работает цикл
мановар, это к чему, собственно? И кому адресовано?
Недавно узнали, как работает цикл, и решили поделиться с нами?
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
22.06.2016, 17:53
При x=3.0 работает, что то с типами данных что ли?

Добавлено через 2 минуты
Liv никого не хотел обидеть, может не правильно высказал свою мысль. Самому уже интересно стало.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 18:01
мановар, найдите мое сообщение на предыдущей странице, там все объяснено

Добавлено через 7 минут
Повторю еще раз: вещественные числа - приближенные!
Нельзя их сравнивать на буквальное совпадение! Разве что, на то, что модуль разности меньше малой величины!
В цикле надо избегать сравнения на равенство, только надо задавать заведомо большую величину и сравнивать на строгое неравенство!
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
22.06.2016, 18:24
Liv, почему же до этого все сравнивается и считается кроме последней итерации?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 18:29
мановар, 3.9999999 != 4.0
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
22.06.2016, 18:47
Скорее 4.0000001 != 4.0 поэтому последнюю и не выводит
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 19:12
мановар, даже не так. Как раз 3.999999 вполне бы отработало!
Там 4.00000000001 !!!, т.е. > 4.0

Добавлено через 36 секунд
Цитата Сообщение от мановар Посмотреть сообщение
Скорее 4.0000001 != 4.0 поэтому последнюю и не выводит
именно!

Добавлено через 11 минут
И это касается не только циклов. Везде, где требуется сравнение на равенство вещественных чисел,
нельзя проверять на буквальное равенство! Необходимо сравнивать модуль разности чисел с маленьким числом!
И только так!

Добавлено через 12 минут
Мне думается, надо, по возможности, избегать использовать вещественные числа, как индекс цикла.
Строго говоря, даже цикл
for(x=N; x< Max; x+=step)
может привести к неправильному результату!
Сработает случай, например, 3.999999 < 4.0 !!!! Чего не должно быть!
Лучше всего использовать для индексов целые числа (третий пример на предыдущей странице )
1
92 / 81 / 57
Регистрация: 19.02.2016
Сообщений: 336
22.06.2016, 19:24
Цитата Сообщение от _liv_ Посмотреть сообщение
Лучше всего использовать для индексов целые числа (третий пример на предыдущей странице )
Ну в большинстве случаев там именно целые числа, ибо матрицы, структуры и т.д.
А кто изучает и пишет другое, тот об этом знаком будет уже.
Мне так кажется
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.06.2016, 19:30
nstwf, да, и новички должны знать почему так лучше!
И какие есть подводные рифы при некорректном использовании вещественных чисел...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2016, 19:30
Помогаю со студенческими работами здесь

Что делает данный цикл?
void startAgain() { int i = 0, j = 0, n = 3; for (i = 0; i &lt; 3; i++) { for (j = 0; j &lt; 3; j++) { fields = n; n++; ...

Что делает данный цикл ?
ребят что делает данный цикл ? { for (int j=0; j&lt;5; j++) std::cout &lt;&lt;std::setw(3) &lt;&lt;a; std::cout...

Не понимаю что делает этот цикл
k2 = 0: k4 = 0: k5 = 0 For j = 1 To 5 If Cells(i, j + 2) = 2 Then k2 = k2 + 1 If Cells(i, j + 2) = 4 Then k4 = k4 + 1 ...

Не понимаю, что делает приведенный цикл for
Вот код, не совсем понимаю, что тут делает цикл for, объясните пожалуйстаю:cry: #include &lt;iostream&gt; void compress(char...

Объяснить, что делает каждый цикл в программе
Объясните пожалуйста что делает каждый цикл for (i = 0; i &lt; n; i++) cout &lt;&lt; a &lt;&lt; &quot; &quot;;//выводим последовательность cout &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
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