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

Округление значений при выводе

30.04.2024, 21:18. Показов 1002. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужен вывод при значениях от -0.9 до 0.9 с шагом 0.1 и eps 0.001. Ломается аргумент "0". Как это можно исправить?
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
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <math.h>
#include <limits.h>
#include <locale.h>
#include <iomanip>
using namespace std;
double riad(double, double, int& n);
//main_beg________________________________________________________________
int main()
{
    setlocale(LC_ALL, "Russian");
    int vid,
        n; //число слагаемых, попавших в сумму
    double x, xn, xk, //текущее, начальное и конечное значения аргумента
        h; //шаг изменения значения аргумента
    double eps, //точность вычисления суммы
        rez; //результат вычисления суммы ряда
    for (;;)
    {//Ввод исходных данных
        cout << "\n Вид действия:" << endl;
        cout << " 1 - получение таблицы значений" << endl;
        cout << " 2 - завершение работы программы" << endl;
        cout << " Выберите вид действия -> ";
        cin >> vid;
        if (vid == 1) {
            cout << " Введите начальное значение аргумента ";
            cin >> xn; // x не ограничен
            cout << " Введите конечное значение аргумента ";
            cin >> xk;
            if ((xk < xn)) {
                cout << " Ошибка! Значение д.б. 0<xk<1 и xk>=xn";
                continue;
            }
            cout << " Введите шаг изменения аргумента h ";
            cin >> h;
            if (h <= 0) {
                cout << " Ошибка! Значение h д.б. >0";
                continue;
            }
            cout << " Введите точность вычисления eps ";
            cin >> eps;
            if ((eps <= 0) || (eps > 0.1)) {
                cout << " Ошибка! Значение eps д.б. >0 и <=0.1";
                continue;
            }
            //Вывод заголовка
            cout << "\n Аргумент| Сумма |Кол.слаг.|Контрольное значение" << endl;
            x = xn;
            do {
                n = 0;
                rez = riad(x, eps, n);
                cout << " "; cout.width(6); cout.precision(2);
                cout.setf(ios::left); cout << x;
                if (n < INT_MAX) {
                    cout.width(11); cout.precision(5); cout.setf(ios::left); cout << rez;
                    cout.width(8); cout << n;
                    cout.width(15); cout.precision(5); cout.setf(ios::left);
                    cout << (exp(-1 * x * x)) << endl;
                }
                else cout << " Точность не достигнута" << endl;
                x += h;
            } while (x <= xk);
        }
        else break;
    }
    return 0;
}
//main_end________________________________________________________________
//riad_beg________________________________________________________________
//Вычисление суммы
double riad(double x, double eps, int& n)
{
    double rez = 0; //результат вычисления
    double pr = 1; //величина текущего слагаемого
    n = 0; //номер текущего слагаемого
    while (fabs(pr) > eps && n < INT_MAX) {
        rez += pr;
        n++;
        pr *= -x * x / n;
    }
    return rez;
}
//riad_end________________________________________________________________
Миниатюры
Округление значений при выводе  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.04.2024, 21:18
Ответы с готовыми решениями:

Ошибка при выводе значений в классе
Объявляю класс таким образом. Вывожу данный о нём. Но на выходе ничего нет, кроме типа транспортного средства, так как это виртуальная...

Округление в выводе дробных чисел
#include &lt;stdio.h&gt; int main() { int d = 2; int Pi = 3.14; int L = Pi * d; ...

Округление значений в двумерной динамической матрице
Как сделать так, чтобы при делении, вычитании и прочих действий между значениями двумерной матрицы - все они округлялись до 0.001? У меня...

13
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,989
30.04.2024, 21:42
Лучший ответ Сообщение было отмечено zss как решение

Решение

Как вариант:
C++
52
53
                cout << " "; cout.width(6); cout.precision(1);
                cout.setf(ios::left); cout << fixed << x;
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 -0.9  0.44451    6       0.44486
 -0.8  0.52810    5       0.52729
 -0.7  0.61284    5       0.61263
 -0.6  0.69702    4       0.69768
 -0.5  0.77865    4       0.77880
 -0.4  0.85280    3       0.85214
 -0.3  0.91405    3       0.91393
 -0.2  0.96000    2       0.96079
 -0.1  0.99000    2       0.99005
 -0.0  1.00000    1       1.00000
 0.1   0.99000    2       0.99005
 0.2   0.96000    2       0.96079
 0.3   0.91405    3       0.91393
 0.4   0.85280    3       0.85214
 0.5   0.77865    4       0.77880
 0.6   0.69702    4       0.69768
 0.7   0.61284    5       0.61263
 0.8   0.52810    5       0.52729
 0.9   0.44451    6       0.44486
Так пойдет?
0
0 / 0 / 0
Регистрация: 30.04.2024
Сообщений: 6
30.04.2024, 21:44  [ТС]
Нет, так я пробовал, мне сказали сделать иначе
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,989
30.04.2024, 21:48
Иначе - это как? Пример имеется? Или нужно пальцем в небо наугад "тыкать"?
Говорят, что printf больше возможностей для форматирования вывода имеет.
0
0 / 0 / 0
Регистрация: 30.04.2024
Сообщений: 6
30.04.2024, 21:53  [ТС]
Можете показать вывод через printf?
Нужен такой вывод, чистый, без ненужных минусов перед "0"
...
-0.2 0.96 2 0.96079
-0.1 0.99 2 0.99005
0 1 1 1
0.1 0.99 2 0.99005
0.2 0.96 2 0.96079
...
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,989
30.04.2024, 22:00
Про printf не я говорил, лишь "процитировал".

Но можно(?) использовать "чит-код":
C++
53
                cout.setf(ios::left); cout << (fabs(x) < eps ? 0 : x);
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 -0.9  0.44451    6       0.44486
 -0.8  0.5281     5       0.52729
 -0.7  0.61284    5       0.61263
 -0.6  0.69702    4       0.69768
 -0.5  0.77865    4       0.7788
 -0.4  0.8528     3       0.85214
 -0.3  0.91405    3       0.91393
 -0.2  0.96       2       0.96079
 -0.1  0.99       2       0.99005
 0     1          1       1
 0.1   0.99       2       0.99005
 0.2   0.96       2       0.96079
 0.3   0.91405    3       0.91393
 0.4   0.8528     3       0.85214
 0.5   0.77865    4       0.7788
 0.6   0.69702    4       0.69768
 0.7   0.61284    5       0.61263
 0.8   0.5281     5       0.52729
 0.9   0.44451    6       0.44486
0
0 / 0 / 0
Регистрация: 30.04.2024
Сообщений: 6
30.04.2024, 22:08  [ТС]
Нет. Так тоже к сожалению не примут. Если вводить x меньше eps, то все будет нулями
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,989
30.04.2024, 22:17
Вместо eps можно использовать для сравнения, например, малую величину вроде 1e-6

Добавлено через 1 минуту
Тогда изучай printf. Или вдруг кто поможет.
Royal_X, я вызываю тебя.

Добавлено через 3 минуты
Цитата Сообщение от Jaroslaww Посмотреть сообщение
Если вводить x меньше eps, то все будет нулями
А тут не ясно. Я же привел пример вывода (для указанных в первом посте входных данных).

Добавлено через 54 секунды
И про малую величину я для кого написал?
0
0 / 0 / 0
Регистрация: 30.04.2024
Сообщений: 6
30.04.2024, 22:17  [ТС]
Ну программа должна работать и с другими вводными
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,989
30.04.2024, 22:19
И что? x заменяется на 0, только если он достаточно мал. Ни на что другое это не влияет.
Короче, я пас. На этом мои полномочия всё, окончены (с).
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6102 / 2798 / 1037
Регистрация: 01.06.2021
Сообщений: 10,222
30.04.2024, 22:24
Цитата Сообщение от gunslinger Посмотреть сообщение
я вызываю тебя
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cstdio> // printf
 
int main()
{
    double d = -1.4e-161;
    std::cout << d << std::endl; // -1.4e-161
    std::printf("%.1f", d); // -0.0
}
1
0 / 0 / 0
Регистрация: 30.04.2024
Сообщений: 6
30.04.2024, 22:32  [ТС]
как интегрировать printf в мой код, чтобы все работало? Мне не нужны минусы перед аргументом "0"
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6102 / 2798 / 1037
Регистрация: 01.06.2021
Сообщений: 10,222
30.04.2024, 22:45
Цитата Сообщение от Jaroslaww Посмотреть сообщение
Мне не нужны минусы перед аргументом "0"
я тебе показал, как регулировать количество цифр после запятой. А минус перед нулем из-за того, что число отрицательное (там не 0). Соответственно, если ты хочешь, чтобы -1.4e-161 выводило как 0.0, то значит нужно округлять.

Добавлено через 8 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
значит нужно округлять
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdio> // printf
 
double r(double x)
{
    return (x > -0.05 && x < 0.) ? 0. : x;
}
 
int main()
{
    double a = -0.04;
    double b = -0.05;
    std::printf("%.1f\n", r(a)); // 0.0
    std::printf("%.1f\n", r(b)); // -0.1
    
}
таким образом -0.0 больше не появится
0
Заблокирован
30.04.2024, 23:05
Я Вася. Я даблёп.
Jaroslaww, не будьте как Вася.

Добавлено через 16 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
double d = -1.4e-161;
Что это ?
У него там -1.38778e-16 вместо нуля получился ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2024, 23:05
Помогаю со студенческими работами здесь

Округление значений при выводе в консоль
gpsTextView.setText(&quot;Высота : &quot; + String.format(&quot;%.0f&quot;+&quot; m&quot;,location.getAltitude()) + &quot;\nДолгота : &quot; +...

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

Округление при выводе вещественного результата
Здравствуйте,помогите пожалуйста с программой,она написана на Jave. Вот дано задание:Дана квадратная матрица размером n x n, содержащая...

Обработка всех значений при выводе из БД с JOIN при наличии одноименных полей
Имеем таблицу table id (первичный ключ) name kod mainid (может содержать id другой записи из этой же таблицы) пишу SELECT *...

Странный символ при выводе значений
Есть код по блок схеме, при запуске и выводе данных, все данные пишутся через странный символ как через пробел. Помогите убрать. ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
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