Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
EnjoyC
2 / 2 / 0
Регистрация: 04.11.2016
Сообщений: 28
1

разобраться с WHILE и DO WHILE

19.11.2016, 23:30. Просмотров 760. Ответов 5
Метки нет (Все метки)

Почему если я x+=0.1 ставлю вначале цикла то все норм работает, только вот значение в точке х=1 оно пропускает(ну понятно почему)
А вот если я ставлю x+=0.1 вконце цикла, то оно после х=5 больше не выводит значений
В for же все работает отлично.
0
Миниатюры
разобраться с WHILE и DO WHILE   разобраться с WHILE и DO WHILE   разобраться с WHILE и DO WHILE  

Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2016, 23:30
Ответы с готовыми решениями:

Не могу разобраться разобраться с кодом меню
Добрый день. Я понимаю, что тут все, наверное, элементарно. Но я только начала изучение js и пока...

Задали работу, не могу разобраться. Используется делфи 10, не могу разобраться, как это сделать
В одномерном массиве, состоящем из n вещественных элементов, вычислить: минимальный элемент массива...


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

Или воспользуйтесь поиском по форуму:
5
deepz
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 263
20.11.2016, 01:01 2
Тут дело не в while, он отробатывает так, как нужно, это все из-за не совсем удачного решения на проверку делимости на ноль. Дело в том, что
while (x <= 20)
{
if ((fabs(x - 5)) < 0.01)То тут |4.99999999(9) - 5|=0.0000000(0)1 2
{
continue;и из-за этого continue, до x просто алгоритм не доходит

}
else
{
y = 1.0 / (x - 5);
printf("x=%f\ty=%f", x, y);
}
x += 0.1;когда здесь у нас доходит до 4.9999999(9) 1
}
0
EnjoyC
2 / 2 / 0
Регистрация: 04.11.2016
Сообщений: 28
20.11.2016, 01:02  [ТС] 3
Это я понял, но как мне решить то эту проблему? С for же все нормально работает
0
deepz
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 263
20.11.2016, 01:06 4
Лучший ответ Сообщение было отмечено EnjoyC как решение

Решение

C
1
2
3
4
5
6
7
8
9
while (x <= 20)
            {
                if ((fabs(x - 5)) >= 0.01)
                {
                    y = 1.0 / (x - 5);
                    printf("x=%f\t y=%f", x, y);
                }
                x += 0.1;                
            }
0
EnjoyC
2 / 2 / 0
Регистрация: 04.11.2016
Сообщений: 28
20.11.2016, 01:15  [ТС] 5
Спасибо. Так и не понял почему с continue не работало. В for же все работало. Как я понимаю, continue просто пропускает 1 цикл, так почему же дальше не выводились значения?
0
deepz
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 263
20.11.2016, 15:08 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
while (x <= 20)
{
   if ((fabs(x - 5)) < 0.01)
    {
        continue;
    }
   else
    {
        y = 1.0 / (x - 5);
        printf("x=%f\ty=%f", x, y);
    }
  x += 0.1;
}
нет, continue передает управление следующей итерации, continue всегда будет прерывать цикл, и всё, что находится ниже него не выполняется, а просто начинается с самого начала, и по сколько x+=0.01 находился после continue, то до этой операции не доходило дело.
В for-е работало потому, что в самой конструкции есть инкремент (i++), и он выполняется до continue, и он выполняется всегда
C
1
2
3
4
5
6
7
for(int i = 0; i < 20; i++)
{
   if(fabs(x-5)<0.01)
    {
       continue;
    }
}
Если и сейчас не понятно, посмотрите на msdn
Цитата Сообщение от EnjoyC Посмотреть сообщение
так почему же дальше не выводились значения?
потому что было зацикливание,

1.У вас стоит значение x=4.999(9)
2. while(x<20) 4.9999<20 верное утверждение true;
3. При проверки if(fabs(x-5)<0.01) |4,999(9)-5| = 0.00...01 < 0.01, это условие сработает потому, что 0.0000001<0.01 true
3. А внутри if-а у вас стоит continue; следовательно переходим к 1. пункту
1
20.11.2016, 15:08
Ответ Создать тему
Опции темы

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