0 / 0 / 0
Регистрация: 14.01.2019
Сообщений: 2
1

Два действительных числа, заменить меньшее средним арифметическим, а большее - произведением

14.01.2019, 16:38. Показов 1565. Ответов 10
Метки нет (Все метки)

Заданы два действительных числа, не равные друг другу (если введены два одинаковых числа, попросить повторить ввод). Меньшее из этих чисел заменить их средним арифметическим, а большее – их произведением.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2019, 16:38
Ответы с готовыми решениями:

[Code review] Даны два числа. Заменить большее число тройным произведением, меньшее - полусуммой
Вести два числа а и b. Число, которое больше заменить тройным произведением, число которое меньше...

Меньшее из заданных действительных чисел заменить их полусуммой, а большее их удвоенным произведением
Задача. Ввести действительные числа x, y (x не равняется y). Меньшее из этих двух чисел заменить их...

Даны 2 действительных числа, меньшее из них заменить полусуммой этих чисел, а большее их произведением.
Даны 2 действительных числа, меньшее из них заменить полусуммой этих чисел, а большее их...

Даны два числа. Большее из них заменить полусуммой, а меньшее заменить удвоенным произведением
Даны два числа. Большее из них заменить полусуммой, а меньшее заменить удвоенным произведением.

10
74 / 74 / 96
Регистрация: 29.09.2012
Сообщений: 232
15.01.2019, 11:47 2
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
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            bool q = true;
            double a = 0, b = 0;
            while (q)
            {
                Console.WriteLine("Введите первое действительное число");
                a = double.Parse(Console.ReadLine());
                Console.WriteLine("Введите второе действительное число");
                b = double.Parse(Console.ReadLine());
                if (a == b)
                {
                    q = true;
                    Console.WriteLine("Повторите ввод");
                }
                else q = false;
            }
 
            if (a < b)
            {
                a = (a + b) / 2;
                b = a * b;
            }
            else
            {
                b = (b + a) / 2;
                a = a * b;
            }
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.ReadKey();                        
        }
    }
}
0
Модератор
Эксперт .NET
12884 / 9242 / 2488
Регистрация: 21.04.2018
Сообщений: 27,441
Записей в блоге: 2
15.01.2019, 15:53 3
Andrey_sava, в Вашем решении будет ошибка. Запустите проверьте. Произведение считается неправильно.
Можно сделать так (C# 7.1):
C#
25
26
27
28
            if (a < b)
               (a, b)  = ((a + b) / 2, a * b);
            else
               (b, a)  = ((a + b) / 2, a * b);
0
74 / 74 / 96
Регистрация: 29.09.2012
Сообщений: 232
16.01.2019, 11:28 4
Действительно не правильно можно и вот так
C#
1
2
3
4
5
6
7
8
9
10
if (a < b)
            {               
                    a = (a + b) / 2;                             
                    b *= 2*a - b;               
            }
            else
            {
                b = (b + a) / 2;
                a *= 2*b - a;
            }
0
Модератор
Эксперт .NET
12884 / 9242 / 2488
Регистрация: 21.04.2018
Сообщений: 27,441
Записей в блоге: 2
16.01.2019, 12:46 5
Цитата Сообщение от Andrey_sava Посмотреть сообщение
Действительно не правильно можно и вот так
Так тоже нельзя. При арифметических операциях с double может быть потеря точности. Если разница между числами большая, Вы не сможете из результата восстановить первоначальные числа. Это одна из причин по которым в реальных приложениях приходится вместо прямого сравнение a==b использовать сравнение с учётом погрешности Math.Abs(a-b) <= e, где е - допустимая погрешность.
Для Вашего случая проверьте с такими данными а=1е-5 и b=1e+5, среднее геометрическое должно получиться 1, а у Вас выйдет уже с ошибкой. А начиная с а=1е-9 и b=1e+9, будете получать ноль.
0
74 / 74 / 96
Регистрация: 29.09.2012
Сообщений: 232
16.01.2019, 14:12 6
Понял
0
0 / 0 / 0
Регистрация: 18.06.2018
Сообщений: 35
17.01.2019, 15:06 7
Вот ещё, довольно несложный способ реализации:
Здесь textBox это компоненты WinForms, при желании, можно заменить на Console.WriteLine();
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
double a = Convert.ToDouble(textBox1.Text);
            double b = Convert.ToDouble(textBox2.Text);
 
 
            int res = a.CompareTo(b);
 
            if(res < 0)
            {
                textBox3.Text = "a " +  (a + b) / 2;
                
                textBox4.Text = "b " + (a * b);
            }
            if(res == 0)
            {
                textBox1.Clear();
                textBox2.Clear();
                textBox3.Clear();
            }
            if(res > 0)
            {
               textBox4.Text = "b "+ (b + a) / 2;
 
                textBox3.Text = "a " + (b * a);
            }
0
314 / 243 / 149
Регистрация: 03.10.2017
Сообщений: 885
Записей в блоге: 1
17.01.2019, 15:19 8
FeDDoS_from_UA, там он строку формирует

Добавлено через 1 минуту
Можно так

C#
1
2
3
4
5
6
if (a != b)
{               
        double temp newA=a;
        a = (a + b) / 2;                             
        b *= 2*newA - b;               
}
0
0 / 0 / 0
Регистрация: 18.06.2018
Сообщений: 35
17.01.2019, 19:02 9
Masson1848, Согласен)
Вообще, тут куча методов реализации)
0
Модератор
Эксперт .NET
12884 / 9242 / 2488
Регистрация: 21.04.2018
Сообщений: 27,441
Записей в блоге: 2
17.01.2019, 19:10 10
Цитата Сообщение от Masson1848 Посмотреть сообщение
Можно так
Решение неверно!
  • Прочитайте ТЗ - надо запись значений производить в зависимости от того какое из начальных значений больше/меньше. Проверки просто на неравно мало.
  • Вторая ошибка, я уже объяснял в пост #5. Операции с double приводят к потери точности. Нельзя восстанавливать значения double из результатов промежуточных значений!
  • И что это за строка double temp newA=a;?
0
314 / 243 / 149
Регистрация: 03.10.2017
Сообщений: 885
Записей в блоге: 1
17.01.2019, 20:23 11
Элд Хасп, Да, намудрил я, конечно, сильно. Невнимательность...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2019, 20:23
Помогаю со студенческими работами здесь

Ввести два числа. Меньшее заменить их полусуммой, а большее - удвоенным произведением
.Ввести два числа. Меньшее заменить их полусуммой, а большее - удвоенным произведением.(в с++)

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

Ввести два числа. Меньшее заменить полусуммой, а большее – удвоенным произведением этих чисел
Ввести два числа. Меньшее заменить полусуммой, а большее – удвоенным произведением этих чисел.

Даны два действительных числа x и y. Меньшее из этих чисел заменить удвоенным произведением
Здравствуйте,помогите пожалуйста решить задачи в Pascal. 8)даны два действительных числа x и y,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru