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

Метод половинного деления

19.10.2015, 13:44. Показов 1622. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать код для решения заданного уравнения методом половинного деления. Получилось так. В реализации метода, видимо, ошибки, но как не исправлял - не получается реализовать метод нормально.



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "stdlib.h"
#include "math."
#include <conio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
double uravnenie (double );  //прототип функции
double met_polovinnogo_deleniya(double a, double b, double eps);
 
int main(int argc, char* argv[])
{
    double x_min=-2.0, x_max=1.0, h = 0.05;
    int steps =   (x_max - x_min)/h + 1;
    double * arg;
    arg = (double *)malloc(steps*sizeof(double)); 
    if(arg==NULL)
    {
        printf("Error in memory allocation");
        return -1;
    }
    double * func;
    func = (double *)malloc(steps*sizeof(double)); 
    if(func==NULL)
    {
        printf("Error in memory allocation");
        return -1;
    }
    int i=0;
    for(double x=x_min;x<=x_max; x+=h, i++)
    {
         arg[i] = x;
         func[i] = uravnenie(x);
    }
    printf ("X\tY\n", arg[i], func[i]);
 
    for(int i=0; i<steps; i++)
    {
        printf ("%lf\t%lf\n", arg[i], func[i]);
    }
     double eps = 0.001;
    double arg1 =  met_polovinnogo_deleniya(-0.95, -0.9,eps);
    printf(" arg1 = %lf \n", arg1);
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
 
dou double uravnenie (double a)
{
    double res;
    res = x*x-sin(5*x);
    return res;
}
double met_polovinnogo_deleniya(double a, double b, double eps)
{
    double res=0;
      double z;
                while (fabs(a-b)>=eps);
    {
        z=(a+b)/2;
        if (f(z)*f(a)<=0) b=z;
        else a=z;
 
        printf(" x = %lf \n", x);
        }
        system("pause");
    return res;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2015, 13:44
Ответы с готовыми решениями:

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

Метод половинного деления.
Нужно написать программу вводишь любые цифры она их сортирует по возрастанию и показывает использовать &quot;метод...

Метод половинного деления
Здравствуйте, многоуважаемая аудитория данного форума. И не сосчитать сколько раз киберфорум меня выручал. Надеюсь на вашу помощь еще раз. ...

2
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
19.10.2015, 13:48
Цитата Сообщение от Karichan Посмотреть сообщение
while (fabs(a-b)>=eps);
Точка с запятой в конце означает ПУСТОЕ тело цикла.
Пользуйтесь отладчикоом для нахождения таких ошибок.
https://www.cyberforum.ru/cpp-... 62479.html
1
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 4
19.10.2015, 14:17  [ТС]
Visual Studio, к сожалению, нет возможности пользоваться.

Добавлено через 22 минуты
Как-то странно элементы выделились.
Немного поправила. Была путаница в обозначениях.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include <conio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
double uravnenie (double );  //прототип функции
double met_polovinnogo_deleniya(double a, double b, double eps);
 
int main(int argc, char* argv[])
{
    double x_min=-2.0, x_max=1.0, h = 0.05;
    int steps =   (x_max - x_min)/h + 1;
    double * arg;
    arg = (double *)malloc(steps*sizeof(double)); //выделить память под массив аргументов функции
    if(arg==NULL)
    {
        printf("Error in memory allocation");
        return -1;
    }
    double * func;
    func = (double *)malloc(steps*sizeof(double)); //выделить память под массив аргументов функции
    if(func==NULL)
    {
        printf("Error in memory allocation");
        return -1;
    }
    int i=0;
    for(double x=x_min;x<=x_max; x+=h, i++)
    {
         arg[i] = x;
         func[i] = uravnenie(x);
    }
    printf ("X\tY\n", arg[i], func[i]);
 
    for(int i=0; i<steps; i++)
    {
        printf ("%lf\t%lf\n", arg[i], func[i]);
    }
     double eps = 0.001;
    double arg1 =  met_polovinnogo_deleniya(-0.95, -0.9,eps);
    printf(" arg1 = %lf \n", arg1);
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
 
double uravnenie (double a)
{
    double res;
    res = a*a-sin(5*a);
    return res;
}
double met_polovinnogo_deleniya(double a, double b, double eps)
{
    double res=0;
      double z;
                while (fabs(a-b)>=eps)
    {
        z=(a+b)/2;
        if (res(z)*res(a)<=0) b=z;
        else a=z;
 
        printf(" a = %lf \n", a);
        }
        system("pause");
    return res;
}
Добавлено через 3 минуты
C++
1
 if (res(z)*res(a)<=0) b=z;
Исправила на
C++
1
if (uravnenie(z)*uravnenie(a)<=0) b=z;
Вроде бы, теперь всё работает более-менее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2015, 14:17
Помогаю со студенческими работами здесь

Метод половинного деления.
Программа в 3-х файлах с «заглушками». Спецификация функций (заголовочный файл): 1. Печать сообщения о назначении программы и ее...

Метод половинного деления
Методом половинного деления найти решение следующих нелинейных уравнений с точностью e=0.01 e=0.001; e=0.0001;e=0.00001; e=0.00001; ...

Метод половинного деления
Методом половинного деления найти решение следующего нелинейного уравнения с точностью е=0,01; e=0,001; e=0,0001; e=0,00001; e=0,000001. ...

Метод половинного деления
Нужно решить код методом половинного деления. ответ неправильный выдается. Может кто-то подсказать, в чем ошибка? #include...

Метод половинного деления
Добрый вечер! значит так господа, помогите реализовать этакий метод вот в таком случае: вводится число и надо вычислить его корень...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru