Форум программистов, компьютерный форум CyberForum.ru

Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан массив из 10 элементов (заполнить вручную). Найти все четные элементы массива находящиеся на нечетных местах http://www.cyberforum.ru/cpp-beginners/thread749571.html
Дан массив из 10 элементов (заполнить вручную). Найти все четные элементы массива находящиеся на нечетных местах. В случае отсутствия таких элементов вывести на экран надпись: «These elements are not found».* const int size=10; int ar={2,32,69,35,48,78,95,21,25,12}; for (int i=0; i<size; i++) if (ar%2==0 && i%2!=0)
C++ Поиск подстроки в строке(алгоритм Бойера-Мура) Программа находит шаблоны в строке алгоритмом Бойера-Мура и находить должна в строке которая находится в файле. Сам код работает и находит все как надо, кроме разве что того, что если в строке есть пробел он ничего не ищет, а сразу return 0... Возможно ли, что это глюк компилятора или все же ошибка в коде? Помогите, пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread749560.html
Нужен совет: Какую библиотетеку подключить, чтобы в консоли русские символы были C++
Какую библиотетеку подключить что бы в консоли русские символы были ?
Файл в vector<int> C++
Как более удачно записать файл в вектор. С помощью чего открыт файл не имеет значения. Заранее спасибо.
C++ В массиве целых чисел из 20 элементов найти все элементы, значение которых больше среднего арифметического массива http://www.cyberforum.ru/cpp-beginners/thread749541.html
В массиве целых чисел из 20 элементов найти все элементы, значение которых больше среднего арифметического массива. Вывести на кран значения и позиции этих элементов. Подскажите, пожалуйста, как вывести позиции элементов? Заранее спасибо. Вот мое решение: const int size=20; int ar={2,4,5,3,6,15,2,36,4,2,3,65,4,1,2,3,6,5,7,10}; int sredn=0; int sum=0;
C++ инвертировать инвертировать 3-ий и 5-ый бит в слове. как это сделать? какие команды использовать? подробнее

Показать сообщение отдельно
Tatsuran
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 1
21.08.2014, 18:33     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу
Я решил задачу следующим образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "../../std_lib_facilities.h"
int main()
{
    double val1, val2, val1_mul, val2_mul;
    double diff;
    const double max_diff = 1000.0;
    const double min_diff = 1.0;
    cout << "\nWARNING! Double value should not have more than\n15 digits fraction and exponent more than 10^308 and less than 10^-308 or you will not get correct result";
    cout << "\n\nEnter two equal double values separated by whitespace:\n";
    while (cin >> val1 >> val2)
    {
        val1_mul = val1 * 10000000;
        val2_mul = val2 * 10000000;
        diff = fabs(val1_mul - val2_mul);
        if (diff < max_diff && diff >= min_diff) cout << fixed << setprecision(15) << '\n' << val1 << ' ' << val2 << endl;
        else if (diff < min_diff)
        {
            if (val1 > val2) cout << fixed << setprecision(15) << '\n' << val2 << ' ' << val1 << endl;
            else if (val1 < val2) cout << fixed << setprecision(15) << '\n' << val1 << ' ' << val2 << endl;
        }
    }
}
В качестве порога, после которого числа считаются "почти равными" друг другу - я взял одну десятитысячную (0.0001). От балды.

Из того, что я использовал, и чего не было в книге до 4 главы включительно:
fixed и setprecision служат для корректного отображения дроби в командной строке (иначе будет экспоненциальное отображение вида 1.1123+E123 или что-нибудь в этом роде)

fabs - получение модуля числа

Так же double не так-то просто сравнивать (особенно на равенство, см. http://rsdn.ru/forum/cpp/2640596.1) - поэтому я умножаю все числа на 10 млн., чтобы при сравнении оперировать числами больше 1.
 
Текущее время: 13:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru