Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 12:18   #1
nikozavr
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 140
По умолчанию Метод деления пополам Си++

Ребят, написал программку, но она не работает. Никак не могу понять в чем дело. Помогите пожалуйста.
Вот код:

Код:
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

double f(double x)
{
 return sinh(x)+2*x-1; 
}

int main(int argc, char *argv[])
{ int eps; float a,b,c,x,del,y;
               cout <<"vvedite a ";cin>>a;
               cout <<"vvedite b ";cin>>b;
               cout <<"vvedite eps ";cin
       while ((b-a)>=eps)
          {
               c=(a+b)/2;
               if (f(a)*f(c)<0)
               b=c;
               else a=c;
             
                         
           }      
       cout<<"c= "<<c;
       system("PAUSE");
       return EXIT_SUCCESS; 
}
Хочу шарить как Daramant!!!

Последний раз редактировалось Stilet; 11.02.2011 в 21:28.
nikozavr вне форума Ответить с цитированием
Старый 11.02.2011, 12:25   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

cout <<"vvedite eps ";cin>>eps;

Ошибка в этой строчке. В цикле while она сравниват с произвольным числом, которое случайно оказалось в памяти.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.02.2011, 12:33   #3
nikozavr
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 140
По умолчанию

Интересная мысль, об этом не подумал. Проверим. Задать постоянное значение этой переменной?

блин, все равно не работает. В чем же дело?
Хочу шарить как Daramant!!!

Последний раз редактировалось Stilet; 11.02.2011 в 21:34.
nikozavr вне форума Ответить с цитированием
Старый 11.02.2011, 12:36   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Допустим зарплата у вас пусть 123 456 р. 57 к.
Вам выдают её с заданной точностью. Если точность 0.01, то выдадут 123 456 р. 57 к., а если точность 100 000, то выдадут 100 000. Разница примерно понятна?
В программе же точность вообще явление случайное, т.е. она может стать и 1 000 000, тогда зарплата будет 0.
Все еще считаете, что задавать точность не надо?

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

Еще можно попробовать изменить
Код:
if (f(a)*f(c)<0)
b=c;
else a=c;
на
Код:
if (f(a)*f(c)<0)
{
b=c;
}
else 
{
a=c;
}
И используйте тег
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 11.02.2011 в 12:42.
Vanta11a вне форума Ответить с цитированием
Старый 11.02.2011, 12:43   #5
nikozavr
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 140
По умолчанию

Спасибо. Про точность теперь понял. Хотя считал что можно ввести с клавиатуры. Я только начал изучать программирование на си++
А вот дальше не понял. Подскажите кодом.

А программа зацикливается, зависает. Если вывод с задать в цикле, то она бесконечно его выводит, то есть тоже циклится.

Код с if менял. безрезультатно.
Что такое #?

Может кто то может написать свою прогу для моего уравнения? Посмотрим чем работоспособный код от моего отличается?
Хочу шарить как Daramant!!!

Последний раз редактировалось Stilet; 11.02.2011 в 21:35.
nikozavr вне форума Ответить с цитированием
Старый 11.02.2011, 12:51   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Код:
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

double f(double x)
{
return sinh(x)+2*x-1;
}

int main(int argc, char *argv[])
{ int eps; float a,b,c,x,del,y;
cout <<"vvedite a ";cin>>a;
cout <<"vvedite b ";cin>>b;
cout <<"vvedite eps ";cin>>eps;
while ((b-a)>=eps)
{
c=(a+b)/2;
if (f(a)*f(c)<0)
{
b=c;
}
else 
{
a=c;
}
cout<<"a= "<<a<<" b= "<<b<<" c= "<<c;
}
cout<<"c= "<<c;
system("PAUSE");
return EXIT_SUCCESS;
}
Т.е. с клавиатуры вводится точность, потом с её использованием гоняется цикл. При каждом проходе выводятся текущие значения a, b и c.
В работе проверить сейчас не могу, компилятор не стоит.
- тег для кода. Обеспечивает большую читаемость.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 11.02.2011 в 12:54.
Vanta11a вне форума Ответить с цитированием
Старый 11.02.2011, 12:53   #7
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

у тебя написано
Код:
cout <<"vvedite eps ";cin
т.е. ты забыл ввести значение eps
Нужно написать
Код:
cout <<"vvedite eps ";cin>>eps;
о чем тебе уважаемый Smitt&Wesson уже написал, но ты проигнорировал его ответ.
ну и вмето
Код:
int eps;
нужно
Код:
float eps;
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 11.02.2011, 17:31   #8
nikozavr
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 140
По умолчанию

Всем спасибо, ошибка была в том, что я точность описал как int.
Надо было естественно float.
Только почему компилятор ничего не сказал? он принял точность за ноль вот и гонял цикл.
Хочу шарить как Daramant!!!
nikozavr вне форума Ответить с цитированием
Старый 11.02.2011, 21:09   #9
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

ну извините, компилятор вам обязан только код компилировать, доводить его до ума - ваша задача
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 12.02.2011, 11:16   #10
nikozavr
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 140
По умолчанию

Спасибо за предложение, но хочется все самому сделать. Хотя досадные ошибки бывают.
Хочу шарить как Daramant!!!
nikozavr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод деления отрезка пополам Витяака Помощь студентам 2 23.12.2010 11:42
Найти корни заданного уравнения методом Золотого сечения, Фибоначи и деления отрезка пополам. Сравнить эф Nik0919 Помощь студентам 2 16.02.2010 19:14
Метод деления отрезка пополам Delphi lordve Помощь студентам 0 06.12.2009 23:57
поиск корня методом деления пополам jewels Общие вопросы C/C++ 2 16.11.2009 01:09
Вычисление корня уравнения методом деления отрезка пополам Absent Помощь студентам 12 25.11.2007 17:54