Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
maven
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 93
#1

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

29.12.2012, 14:54. Просмотров 2092. Ответов 7
Метки нет (Все метки)

Есть программа
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 минут
народ че кто нибуть поможет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 14:54
Ответы с готовыми решениями:

Вывести числа, которые почти равны друг другу (их разность меньше 0,01)
Здравствуйте. Занимаюсь С++ по книге Бьерна Страуструпа. Помогите решить...

Разработать программу, чтобы она выводила через запятую все четные числа диапазона
Разработать программу, чтобы она выводила через запятую все четные числа...

Равны ли строки друг другу
Пользователь вводит две строки если они равны друг другу значит вывести YES...

Проверить равны ли строки друг другу
Пользователь вводит три строки программа выводит YES если они все равны друг...

Переменная и clock() равны друг другу
Есть переменная t отвечающая за последнее время. После куска кода мне нужно...

7
Catstail
Модератор
23575 / 11676 / 2043
Регистрация: 12.02.2012
Сообщений: 19,051
29.12.2012, 17:40 #2
Цитата Сообщение от maven Посмотреть сообщение
Измените программу так, чтобы она выводила числа, которые почти равны друг другу
- а разве эта программа не будет выводить почти равные числа? Или нужно, чтобы программа выводила только близкие числа?
0
pavlovnik
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 11:37 #3
не очень пойму что происходит, а нельзя ли сделать какую-то константу и с ней сравнивать число?
то есть ввели Х=10.
константа хх=0,1

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

просто не пойму вообще что хотят и что вводят и что должно вывести)
0
Catstail
Модератор
23575 / 11676 / 2043
Регистрация: 12.02.2012
Сообщений: 19,051
30.12.2012, 11:54 #4
Цитата Сообщение от pavlovnik Посмотреть сообщение
просто не пойму вообще что хотят и что вводят и что должно вывести)
- при такой постановке что же программировать?
0
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.
0
UnsKneD
алкокодер
155 / 151 / 41
Регистрация: 27.12.2012
Сообщений: 550
21.08.2014, 19:54 #6
ABS(A) - ABS(B) < 1.0/10000000
ВЫВОД A B
0
Pashtets
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 77
30.12.2016, 18:07 #7
C++
1
2
3
4
5
6
7
8
double con1 = 1/10000;
double con2 = -1/10000;
if (val_1 - val_2 <= cons1 && val_1 != val_2) {
cout << "почти равны";
}
else if (val_1 - val_2 <= cons2 && val_1 != val_2) {
cout << "почти равны";
}
0
_Valery_
2 / 2 / 0
Регистрация: 15.08.2015
Сообщений: 29
31.03.2017, 14:54 #8
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
int main()
{
    system("color E0");
    setlocale(0, "");
    cout << endl;
 
    vector<double> numbers;
    double temp = 0;
    // cout << "Введите числа через пробел: \n";
    // ручной ввод данных
    /*while (cin >> temp) // чтение чисел разделенных пробелами
        numbers.push_back(temp);       // внесение их в vector*/
 
    // заполняем vector случайными значениями 
    srand(time(0)); // каждый раз новыми
    for (int i = 0; i<13; i++)
        numbers.push_back(0.01 * (rand() % 101));
    // выводим на экран 
    cout << "Значения вектора : \n";
    for (int i = 0; i<numbers.size(); i++)
        cout << numbers[i] << "  ";
    cout << endl;
 
 
    sort(numbers.begin(), numbers.end());    // Сортировка  чисел
 
    cout << "После сортировки: \n";
    for (int i = 0; i < numbers.size(); ++i)
        cout << numbers[i] << "  ";
 
 
    cout << "\nНаименьшее значение равно: " << numbers[0]
        << "\nНаибольшее значение равно: " << numbers[numbers.size()-1];
    
    // выводим на экран обычным циклом
    for (int i = 0; i < numbers.size(); ++i)
    {
        if (i == 0) cout << "\nчисла почти равны: ";
        else if (numbers[i - 1] == numbers[i]
            || numbers[i - 1] + 0.01 == numbers[i]
            || numbers[i - 1] - 0.01 == numbers[i])
            cout << '\n' << numbers[i] << ' ' << numbers[i - 1] << '\n';
    }
 
    cout << "\n\n";
    system("pause");
    return 0;
}
0
Миниатюры
Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу  
31.03.2017, 14:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2017, 14:54

Измените программу так, чтобы массив Y заполнялся значениями функции
Измените программу так, чтобы массив Y заполнялся значениями функции. ...

Определить какое наибольшее число подряд идущих элементов последовательности равны друг другу
Добрый вечер, решил задачку, но выдаёт ошибку на пятом тесте. У меня два...

Написать программу, реализующую способ передачи книги таким образом, чтобы она переходя от друга к другу побывала в руках у каждого
Помогите вкурить в задание, кому не влом. Т.е. к примеру наше N = 100,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru