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

Вычисление корня квадратного функции f(x)

06.11.2015, 02:03. Показов 3489. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа на вычисление корня квадратного функции f(x) в пределе <a, b> методом бисекции.

Помогите найти ошибку в коде. Корень квадратный должен получится 0,917481. Еще нужно посчитать количество шагов цикла (должно быть 24), это вообще не знаю как воплотить.

#include
#include "conio.h"
#define _USE_MATH_DEFINES
#include
using namespace std;

int main()
{
int a, b;
int c, eps;
double koren;

cout << "a: "; cin >> a;
cout << "b: "; cin >> b;
cout << "eps: "; cin >> eps;

if (exp(-1.5 * a) - 0.3 * a * a == 0) koren = sqrt (a);
else if (exp(-1.5 * b) - 0.3 * b * b == 0) koren = sqrt (b);
else (c = (a + b) / 2);
do
{
if (exp(-1.5 * c) - 0.3 * c * c == 0) koren = sqrt (c);
else if (((exp(-1.5 * a) - 0.3 * a * a == 0) * (exp(-1.5 * c) - 0.3 * c * c == 0) < 0)) b = c;
else (a == c);
}
while ((a - b) < eps); koren = sqrt (c);

cout << "koren: " << koren;

_getch();
}
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2015, 02:03
Ответы с готовыми решениями:

Вычисление квадратного корня из числа
Здравствуйте. Помогите пожалуйста написать код вычисления квадратного корня из числа. Среда программирования Dev-C++ #include...

Вычисление корня квадратного из комплексного числа
Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как...

Вычисление квадратного корня без cmath
Всем привет. Сделал простенький калькулятор без cmath, &quot;+,-,*,/,степень и квадратный корень&quot;. вопрос такой case 's': if...

19
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 02:18
C++
1
else (a == c);
Это не присвоение, а проверка равенства. Что, соответственно, бессмысленно.
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 02:23  [ТС]
исправила на: else (a = c);
результата нет
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 02:24
Далее... Сколько раз вы написали в коде конструкцию вида (exp(-1.5 * a) - 0.3 * a * a - неужеле не надоело?
Почему не сделать:
float f(float a)
{
return (exp(-1.5 * a) - 0.3 * a * a);
}

Далее...Почему у вас a, b , с , eps - целочисленные?

И напоследок - c = (a + b) / 2 нужно внести в цикл.
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 02:34  [ТС]
Простите, но я мало что поняла из Вашего ответа. Задачу нужно решить двумя способами (без функции и с ней). Пока я пытаюсь сделать первый вариант, поэтому пришлось много раз писать это выражение.
float a,b,c,eps - так правильно?
что значит внести c = (a + b) / 2 в цикл?
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 02:38
И еще косяк:
C++
1
while ((a - b) < eps)
Вы уверены, что у вас а будет больще b?
Тут либо наоборот, либо, что более правильно:
C++
1
while (abs(a - b) < eps)
Добавлено через 3 минуты
Без функций - можно использовать макрос:
#define f(x) (exp(-1.5 * x) - 0.3 * x * x)

float a,b,c,eps - так правильно?
Да.

что значит внести c = (a + b) / 2 в цикл?
Смысл в самом методе.
Вы итеративно должны "сужать" границы a и b, в зависимости от условия присваивая серединке диапазона то a, то b. То есть саму "серидинку" диапазона вы тоже должны менять в цикле. В вашем случае это переменная "c".
А у вас она один раз присвоилась значению (a + b) / 2 до входа в цикл, а в нем - не меняется.
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 02:39  [ТС]
о, начало что-то считать, но пока не верно.
и все-таки, как внести c = (a + b) / 2 в цикл?
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 02:41
и все-таки, как внести c = (a + b) / 2 в цикл?
А это по-вашему что за конструкция такая?
C++
1
2
3
do{
//.....
}while()
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 02:45  [ТС]
да, это цикл, но я не могу понять в какое место и в каком виде вставить c = (a + b) / 2.
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 03:12
Кстати, что значит "корень квадратный функции в пределах а и b"?
Может, речь все-таки просто о "корне функции в пределах а и b"?

да, это цикл, но я не могу понять в какое место и в каком виде вставить c = (a + b) / 2
В начало.

И еще - поиск происходит до тех пор, пока разница границ БОЛЬШЕ eps, а не меньше.
Вы нарисуйте графическое отображение этого алгоритма, и сразу все ясно станет.
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 03:22  [ТС]
Я явно что-то сделала не так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
         if (exp(-1.5 * a) - 0.3 * a * a == 0) koren = sqrt (a);
        else if (exp(-1.5 * b) - 0.3 * b * b == 0) koren = sqrt (b);
        else (c = (a + b) / 2);
        do
        {
            c = (a + b) / 2;
            if (exp(-1.5 * c) - 0.3 * c * c == 0) koren = sqrt (c);
            else if ((exp(-1.5 * a) - 0.3 * a * a == 0) * (exp(-1.5 * c) - 0.3 * c * c == 0) < 0) b = c;
            else (a = c);
        } 
        while (abs(a - b) < eps); 
        koren = sqrt(c);
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 03:34
А зачем вы делаете вот это?
C++
1
koren = sqrt (...);
Ответьте все-таки:
Кстати, что значит "корень квадратный функции в пределах а и b"?
Может, речь все-таки просто о "корне функции в пределах а и b"?
Добавлено через 5 минут
Ваш код каждый раз перечитываю - и каждый раз нахожу что-нибудь "эдакое" - просто бездонный кладезь находк
Вот, откопал:
C++
1
if (((exp(-1.5 * a) - 0.3 * a * a == 0) * (exp(-1.5 * c) - 0.3 * c * c == 0) < 0))
Это выражение никогда не будет меньше нуля. Так как слева либо 1*0, либо 1*1, либо 0*0.
Скорее всего, имелось в виду что-то другое, не?

И первые три строки перед циклом - вообще лишние по сути..
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 03:34  [ТС]
Возможно речь шла о корне функции в пределах а и b, я переводила задание с другого языка, поэтому не уверена.

А что написать вместо этого sqrt? В ответе должны получить корень.
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 03:35
А что написать вместо этого sqrt? В ответе должны получить корень.
Так просто значение. В вашем случае - a, b или с, смотря что вы в качестве результата хотте вернуть - край диапазона, или серединку
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 03:37  [ТС]
Цитата Сообщение от Dreamer_0x01 Посмотреть сообщение
Вот, откопал:
C++
1
if (((exp(-1.5 * a) - 0.3 * a * a == 0) * (exp(-1.5 * c) - 0.3 * c * c == 0) < 0))
Это выражение никогда не будет меньше нуля. Так как слева либо 1*0, либо 1*1, либо 0*0.
Скорее всего, имелось в виду что-то другое, не?
тут имелось в виду, что f(a)*f(c)<0. Я просто расписала. Но видимо == 0 стоило опустить.
0
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 03:44  [ТС]
вот есть алгоритм
Миниатюры
Вычисление корня квадратного функции f(x)  
0
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 03:45  [ТС]
Цитата Сообщение от Dreamer_0x01 Посмотреть сообщение
Так просто значение. В вашем случае - a, b или с, смотря что вы в качестве результата хотте вернуть - край диапазона, или серединку
В качестве результата нужно получить корень функции.
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 04:21
Лучший ответ Сообщение было отмечено Kvitkaa как решение

Решение

В качестве результата нужно получить корень функции.
А что такое корень функции? Это то значение аргумента, при котором функция принимает значение 0.
Поскольку данный метод дает не точное, а приближенное вычисление - то в качестве корня возвращается либо одна из границ вашего сужающегося диапазона, либо его серединка.

Добавлено через 17 минут
Ладно, не буду вас больше мучить.
Держите.

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
float f(float x)
{
    return (exp(-1.5 * x) - 0.3 * x * x);
}
 
float find_koren(float a,float b,float eps)
{
    float c;
    do{
        float rez_a = f(a);
        float rez_b = f(b);
        if(rez_a ==0) return a;
        if(rez_b ==0) return b;
 
        if(rez_a * rez_b > 0) //если одного знака - то на этом промежутке корня н найти.
        {
            printf("На данном промежутке нет изменения знака функции, данный метод поиска не применим, либо корней нет.");
            return 0;
        }
        c = (a+b)/2;
        float rez_c = f(c);
        if(rez_a * rez_c > 0) a=c;
        else b=c;
    }while(fabs(a-b) > eps);
    return c;
}
1
0 / 0 / 2
Регистрация: 11.10.2015
Сообщений: 42
06.11.2015, 06:11  [ТС]
Спасибо, что подробно объясняли, а не выдали сразу готовый ответ. А это я так поняла уже с функцией? Не все правда тут понимаю, например, printf и fabs. Еще раз спасибо!

Добавлено через 17 минут
увы, выдает ошибку "LNK1561 entry point must be defined"

Добавлено через 16 секунд
увы, выдает ошибку "LNK1561 entry point must be defined"

Добавлено через 7 минут
увы, выдает ошибку "LNK1561 entry point must be defined"

Добавлено через 1 час 2 минуты
все, разобралась
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
06.11.2015, 11:10
LNK1561 entry point must be defined
Имелось в виду, что мой код идет в дополнение к вашему, а не как полная его замена

Не все правда тут понимаю, например, printf и fabs.
printf, это вывод на устройство вывода. В вашем случае нужно применить cout << ... .

fabs - это аналог функции abs, но для вещественных чисел (float). (Это взятие функции по модулю) Так как если примените abs, то аргументы преобразуются к int и функция будет возвращать не верный результат.
Можно ее не использовать, написав вместо нее вот такой макрос:
C++
1
#define ABS(x) (x > 0 ? x : -x)
А это я так поняла уже с функцией?
А что значит "уже"? Вполне логично, что логически обособленные действия желательно выделять в функции. Иначе получается легендарный "индусо-код".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2015, 11:10
Помогаю со студенческими работами здесь

Вычисление квадратного корня с применением рекурсии
Здравствуйте. Помогите, пожалуйста, задача такая: Вычислить значение x = корень(а), используя формулу , xn=1/2(xn-1+a/xn-1 ) в качестве...

Вычисление корня квадратного из комплексного числа
Всем доброго время суток. Вычислить корень квадратный из комплексного числа z = x + i*y. такая операция на множестве комплексных чисел, как...

Вычисление квадратного корня, не применяя функцию sqrt
составить программу вычисления квадратного корня ведённого числа, не применяя функцию sqrt().

Вычисление квадратного корня четных элементов массива
помогите улучшить код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; class Kvadrat { ...

Многопоточность (вычисление корня квадратного уравнения, используя несколько независимых потоков)
Уважаемые программисты! Сможет ли кто-нибудь хотя бы примерно объяснить, как реализовать, например, вычисление корня квадратного уравнения,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru