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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
maven
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 93
29.12.2012, 14:54     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #1
Есть программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main ()
{
 
double val_1 = 0.0;
double val_2 = 0.0;
 
cout << "Введите 2 числа - " ;
while(cin >> val_1 >> val_2) 
{
cout << "Наименьшее из 2х значений равно - ";
if(val_1 > val_2)
cout << val_2 <<"; " << val_1;
else
cout << val_1 <<"; " << val_2 << endl;
}
А вот задача --- Измените программу так, чтобы она выводила числа, которые почти равны друг другу. При этом, если числа отличаются меньше, чем на 1.0/10000000, то сначала следует вывести меньшее число, а затем большее.


Я вообше не пойму как решить не обьясните?

Добавлено через 12 минут
И вообше народ че такое в 4 главе задачи вообше не могу решить после 4
Вот у чувака аналогичная тема Задача из книги Б.Страуструпа.

Добавлено через 12 минут
народ че кто нибуть поможет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 14:54     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу
Посмотрите здесь:

C++ исправить программу, чтобы выводила результаты в два столбца. (простые числа близнецы)
C++ Разработать программу, чтобы она выводила через запятую все четные числа диапазона
C++ Определить, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
C++ Измените программу так, чтобы массив Y заполнялся значениями функции. Функция, отрезок и количество элементов выбирается из таблицы в соответствии с
Написать программу, реализующую способ передачи книги таким образом, чтобы она переходя от друга к другу побывала в руках у каждого C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
29.12.2012, 17:40     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #2
Цитата Сообщение от maven Посмотреть сообщение
Измените программу так, чтобы она выводила числа, которые почти равны друг другу
- а разве эта программа не будет выводить почти равные числа? Или нужно, чтобы программа выводила только близкие числа?
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 11:37     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #3
не очень пойму что происходит, а нельзя ли сделать какую-то константу и с ней сравнивать число?
то есть ввели Х=10.
константа хх=0,1

и если число в этом диапазоне, выводить его. Х-хх и Х+хх

просто не пойму вообще что хотят и что вводят и что должно вывести)
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
30.12.2012, 11:54     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #4
Цитата Сообщение от pavlovnik Посмотреть сообщение
просто не пойму вообще что хотят и что вводят и что должно вывести)
- при такой постановке что же программировать?
Tatsuran
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 1
21.08.2014, 18:33     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #5
Я решил задачу следующим образом:

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.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
21.08.2014, 19:54     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу #6
ABS(A) - ABS(B) < 1.0/10000000
ВЫВОД A B
Yandex
Объявления
21.08.2014, 19:54     Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу
Ответ Создать тему
Опции темы

Текущее время: 01:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru