Форум программистов, компьютерный форум CyberForum.ru

Программа не обрабатывает условие while() - C++

Восстановить пароль Регистрация
 
Killan
 Аватар для Killan
4 / 4 / 0
Регистрация: 28.09.2009
Сообщений: 52
15.12.2011, 12:26     Программа не обрабатывает условие while() #1
Не работает условие остановки цикла, методом проб выяснилось что while не нравится тип переменной float, но у меня не целые числа, и int не подходит. Первый раз сталкиваюсь с подобным, как можно это обойти ?
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
float n,y,x;
int main(int argc, char *argv[])
{
n=-0.1;
y=-0.1;
    while ( n != -1.9 ) // Не работает
    {
          cout << "N=" << n << endl; // входное значение
          if (n < 0)
          {
                y=y+0.6;
                n=n+y;
                cout << n << endl; 
                system("PAUSE");
          }
          else
          {
               y=y+0.6;
               n=n-y;
               cout << n << endl; 
               system("PAUSE");
          }
          
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
15.12.2011, 12:49     Программа не обрабатывает условие while() #2
У вас все равно n будет равно -1.9 по этому в условии цикла поставьте знак >.
Killan
 Аватар для Killan
4 / 4 / 0
Регистрация: 28.09.2009
Сообщений: 52
15.12.2011, 12:57  [ТС]     Программа не обрабатывает условие while() #3
Ставил, результат тот же.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
15.12.2011, 13:02     Программа не обрабатывает условие while() #4
изменил на double
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
double n,y,x;
int main(int argc, char *argv[])
{
n=-0.1;
y=-0.1;
     // Не работает
    do{
          cout << "N=" << n << endl; // входное значение
          if (n < 0)
          {
                y=y+0.6;
                n=n+y;
                cout << n << endl; 
                system("PAUSE");
          }
          else
          {
               y=y+0.6;
               n=n-y;
               cout << n << endl; 
               system("PAUSE");
          }
          
    }while ( n > -1.9 );
    system("PAUSE");
    return EXIT_SUCCESS;
}
Этот код у меня работет на ура
Killan
 Аватар для Killan
4 / 4 / 0
Регистрация: 28.09.2009
Сообщений: 52
15.12.2011, 13:10  [ТС]     Программа не обрабатывает условие while() #5
Да, с double заработало спасибо.
Но все равно не понятно почему float не работает.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
15.12.2011, 13:15     Программа не обрабатывает условие while() #6
Сам не знаю. Может сюда заглянет тот кто знает и узнаем)
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.12.2011, 13:23     Программа не обрабатывает условие while() #7
Цитата Сообщение от Killan Посмотреть сообщение
Но все равно не понятно почему float не работает.
Специфика чисел с плавающей точкой. Прямые сравнения следует избегать, обычно сравнивают модуль разности чисел с некоторым пороговым значением (погрешностью), если разность меньше порога, то числа считаются равными. Дополнительно почитать можно тут Неочевидные ответы на простые вопросы 5 раздел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2011, 13:46     Программа не обрабатывает условие while()
Еще ссылки по теме:

Программа на языке С++, которая вычисляет условие: C++
Создание динамического массива, передача аргументов функции по ссылке. Программа обрабатывает результаты матча C++
C++ Программа не обрабатывает файлы больше 100 килобайт

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

Или воспользуйтесь поиском по форуму:
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
15.12.2011, 13:46     Программа не обрабатывает условие while() #8
Проблема в том что на самом деле n = 1.899904 както так..поетому не срабатывает оператор !=

Вот рабочий вариант:

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
using namespace std;
float n,y,x;
int main(int argc, char *argv[])
{
n=-0.1;
y=-0.1;
    while ( (n + 1.9 ) > 0.001) // Уже работает
    {
          cout << "N=" << n << endl; // входное значение
          if (n < 0)
          {
                y=y+0.6;
                n=n+y;
                cout << n << endl;
                system("PAUSE");
          }
          else
          {
               y=y+0.6;
               n=n-y;
               cout << n << endl;
               system("PAUSE");
          }
 
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
Yandex
Объявления
15.12.2011, 13:46     Программа не обрабатывает условие while()
Ответ Создать тему
Опции темы

Текущее время: 03:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru