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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
#1

Почему зацикливается??? - C++

05.12.2010, 01:04. Просмотров 687. Ответов 14
Метки нет (Все метки)

Доброе время суток. Прошу объяснить или дать ссылку где такое описывается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main(){
    double const h=0.01;
    double x;
    x=2.0;
    do{
        cout<<x<<"\n";
        x+=h;
    } while (x!=3);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2010, 01:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему зацикливается??? (C++):

Почему зацикливается? - C++
Такая программка: #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void strCon(char...

Почему зацикливается программа? - C++
Нужно найти сумму элементов матрицы 4x4 на побочной диагонали. Если поразмышлять, любой элемент побочной диагонали удовлетворяет уравнению...

Программа зацикливается. Почему? - C++
Когда заполняю матрицу с клавиатуры - работает нормально. Когда заполняю случайными числами она зацикливается. #include &lt;iostream&gt; ...

Почему зацикливается код? (найти причины возникновения ошибок в коде) - C++
почему зацикливается? #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;windows.h&gt; using namespace std; int main() { ...

Добрый день!(а точнее вечер) Немогли бы объяснить почему зацикливается программа? - C++
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. F= a*x*x +b*x +c(при a&lt;0 и с...

Почему программа себя странно ведет: зацикливается после ввода значений? - C++
Зацикливается после воода значений. Подскажите пожалуйста в чем может быть проблема. #include &lt;fstream&gt; #include &lt;iostream&gt; ...

14
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.12.2010, 01:07 #2
float x никогда не будет точно равен трем. Это ошибка архитектуры 86 в работе с числами с плавающей запятой.
x>3 скорее всего пройдет.
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
05.12.2010, 01:11 #3
lfin, Из-за представления дробных чисел в компьютере.

Добавлено через 1 минуту
Цитата Сообщение от lemegeton Посмотреть сообщение
x>3 скорее всего пройдет.
Меньше тогда уж.
1
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 01:19  [ТС] #4
Спасибо большое!
А в таком случае что делать?
Даны две функции у1 и у2. распечатывать значения функции, пока не будет достигнуто пересечение графиков
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
using namespace std;
 
int main(){
    double const h=0.01;
    double x,y1,y2;
    x=2.0;
    do{
        y1=2*x*x*x-x*x+2;
        y2=2*exp(x/3);
        cout<<x<<"\t"<<y1<<"\t"<<y2<<"\n";
        x+=h;
    } while (y1=y2);
    return 0;
}
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.12.2010, 01:28 #5
Примерно тот же случай.
Для проверки на равенство, сравнивай разницу с некой точностью.
y1-y2 < 0.001, например.
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.12.2010, 01:48 #6
Обычно принято сравнивать с 1E-6 - 1E-8, это считается приемлемой точностью.
1
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 01:50  [ТС] #7
Программа выдает все равно не верный ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
using namespace std;
 
int main(){
    double const h=0.01;
    double x,y1,y2;
    x=2.0;
    do{
        y1=2*x*x*x-x*x+2;
        y2=2*exp(x/3);
        cout<<x<<"\t"<<y1<<"\t"<<y2<<"\n";
        x+=h;
    } while (abs(y1-y2)>1E-8);
    return 0;
}
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.12.2010, 01:53 #8
lfin, abs - для целочисленных, попробуйте fabs
1
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 01:57  [ТС] #9
fasked, теперь опять зациклилось. значение второй функции намного больше становится. хотя я график строил, пересекаются функции.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.12.2010, 02:01 #10
попробуйте вывести значения на каждой итерации цикла, может что и прояснится
0
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 02:16  [ТС] #11
fasked, из 8 строчки кода видно что x=2.0;

Добавлено через 12 минут
fasked, что может проясниться???? 100000 итереций и не известно сколько еще будет???
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.12.2010, 03:56 #12
Сразу ответ не скажу, но дам большу подсказку. Функции пересекаются при x = 30.7980679958266
0
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 12:56  [ТС] #13
kazak, но это самая верхняя точка пересечения. Помимо ее есть еще 3 точки в которых пересекаются функции

Добавлено через 27 минут
kazak, а, все понял. Шаг слишком маленький
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.12.2010, 13:05 #14
Цитата Сообщение от lfin Посмотреть сообщение
Шаг слишком маленький
Слишком большой, у меня для точности 1Е-8 пришлось сделать шаг 1Е-12
0
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
05.12.2010, 13:24  [ТС] #15
kazak, ой конечно же большой))) я это и имел ввиду)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 13:24
Привет! Вот еще темы с ответами:

Цикл "зацикливается", неизвестно почему - C++
Программа представляет собой демонстрацию движений двух &quot;йо-йо&quot; (катушечных маятников, маятников Максвелла - называйте как хотите) вот...

Программа зацикливается - C++
всё описание я зделал в коде #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; using namespace std; int main()...

Не нормально зацикливается Do - C++
Нужно написать процедуру, которая сравнивает каждое слово из текстового файла с каждым словом из словаря (слова уже забиты в список) и...

Multimap зацикливается - C++
Всем добрый вечер, Помогите, пожалуйста разобраться с зацикленным &quot;Not found&quot;. Поиск по названию блюда происходит нормально, а вот...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
05.12.2010, 13:24
Ответ Создать тему
Опции темы

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