С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
1

Программа выводит только 1 знак после запятой, хотя должна выводить больше

22.09.2015, 20:09. Показов 2049. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    double a = -4.9; // граница a
    double b = 5;   // граница b
    double h = 0.1; // шаг
    double x1, x2, y1, y2, y, c, a1, b1, f1, f2;
    double d;
 
    d = pow(10, -6);
 
 
    x1 = a;
    x2 = a + h;
 
 
    while (x2 <= b){
        y1 = log10(x1 + 5) - cos(x1);
        y2 = log10(x2 + 5) - cos(x2);
        y = y1*y2;
 
 
        if (y < 0){
            cout << "Корни уравнения лежат на отрезках: ";
            cout << fixed << setprecision(1) << x1 << " : " << fixed << setprecision(1) << x2 << endl;
            
            a1 = x1; b1 = x2;
 
            double modrazn = abs(a1 - b1);
 
            while (modrazn >= d){
                modrazn = abs(a1 - b1);
                c = (a1 + b1) / 2;
                f1 = log10(a1 + 5) - cos(a1);
                f2 = log10(c + 5) - cos(c);
 
                if ((f1*f2) < 0){
                    b1 = c;
                }
                else{
                    a1 = c;
                }
            }
            
            c = (a1 + b1) / 2;
            cout << "Корень уравнения с точностью d=10^(-6): " << c << endl;
            cout << endl;
        }
        x1 = x2;
        x2 = x1 + h;
    }
    system("pause");
}

Программа вычисляет интервалы, где находятся корни уравнения (18 - 30 строка) + определяет в этом интервале корень с точностью до 10^(-6) (36 - 53 строка).

Программа должна выводить примерно такие значения:

1) Промежуток (-4,5 : - 4.4). С точностью : -4,44985825177762
2) Промежуток (-1.0 : -0.9). С точностью: -0,912955978347418
3) Промежуток (0.7 : 0.8). C точностью: 0,712368042777207

Промежутки программа находит нормально, но вот ответы получаются такие
1) -4,4
2) -0,9
3) 0,7

Вроде верные, но округленные.
Подскажите, где возможна ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2015, 20:09
Ответы с готовыми решениями:

Программа не принимает больше одного значения, хотя должна
Написал прогу по мотивам этого https://code-live.ru/post/cpp-classes/ урока. Ошибок вроде нет, но...

Функция stod() выводит только 4 знака после запятой
Как сделать так, чтобы функция stod() при преобразовании строки string в число double не...

Почему у меня все метки выходят по очереди...хотя должна выводить только 1
label m1,m2,m3; var a,b,h : Integer; s : real; g : string; begin...

Программа должна считать количество символов до первого восклицательного знака, если знак отсутствует выводить соответствующее сообщение.
Программа должна считать количество символов до первого восклицательного знака, если знак...

4
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
22.09.2015, 20:36 2
C++
1
cout << "Корень уравнения с точностью d=10^(-6): " << fixed << setprecision(5) << c << endl;
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
22.09.2015, 20:50  [ТС] 3
Да, программа теперь выводит точность, с несколькими знаками после запятой, но в тоже время, и промежутки записываются с нулями
Миниатюры
Программа выводит только 1 знак после запятой, хотя должна выводить больше  
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
22.09.2015, 21:04 4
Лучший ответ Сообщение было отмечено Frip как решение

Решение

Frip,
нужно исправить:
C++
1
cout << "Корень уравнения с точностью d=10^(-6): " << fixed << setprecision(5) << c << endl;
но оставить
C++
1
cout << fixed << setprecision(1) << x1 << " : " << fixed << setprecision(1) << x2 << endl;
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
22.09.2015, 21:28  [ТС] 5
Даценд,

Спасибо, вы очень помогли!
0
22.09.2015, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2015, 21:28
Помогаю со студенческими работами здесь

Функция должна выводить несколько значений, но выводить только одно. Почему?
Здравствуйте! Мне нужно создать рекурсивную функцию, которая выводит на экран все простые...

Function go() не чего не выводит, а должна выводить текст сообщения
Немогу разобраться в чем дело, почему не выводит. Пожалуйста подскажите // Допустим, что...

Программа выводит ответ и в консоль и в файл, хотя нужно только в консоль
когда выбираю вывести в консоль, программа выводит ответ и в консоль, и в файл #include...

Запрос 5-й знак после запятой
Смотрите мне нужно,у числа проверить 5-й знак после запятой ,что бы он был равен 0 или 5 ,и если он...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru