Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
6063 / 1307 / 194
Регистрация: 12.12.2012
Сообщений: 1,023
1

Вычислить сумму A+B, используя только операцию умножения

02.04.2019, 13:03. Просмотров 725. Ответов 15
Метки нет (Все метки)

Здравствуйте, дорогие форумчане.
Вчера было первое апреля, день веселых шуток и розыгрышей. Долго думал-думал, как бы мне разыграть своих коллег по работе, и наконец придумал. Я предложил им найти сумму двух чисел A и B, используя только операцию умножения (то есть нельзя использовать ни операцию сложения, ни еще какие-нибудь другие операции, включая экспоненту и логарифм).

Но пока что мои коллеги эту задачу не решили. Может быть, это удастся вам? Надеюсь, эта задача (с небольшой долей шутки) поможет вам немного размять мозги и поднимет вам настроение .

С уважением,
Аксима
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2019, 13:03
Ответы с готовыми решениями:

Вычислить сумму ряда, как используя операцию возведения в степень, так и не используя ее
вычислить S=\sum_{i=1}^{6}{2}^{i} а) используя операцию возведения в степень; б) не используя...

Ввести два числа А и С. - Найти произведение этих чисел, используя только операцию сложения. - Вычислить АС, используя только операцию умножения
Ввести два числа А и С. - Найти произведение этих чисел, используя только операцию сложения....

Используя только операцию умножения вычислить а в степени к
Ребят, как решить задачу через for: Используя только операцию умножения вычислить а в степени к,...

Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и рекурсию
Помогите пожалуйста с рекурсией Написать функцию умножения двух,заданных с клавиатуры чисел,...

15
es geht mir gut
11208 / 4686 / 1177
Регистрация: 27.07.2011
Сообщений: 11,422
02.04.2019, 13:12 2
Аксима,
Значения A и B могут быть любыми ?
0
6063 / 1307 / 194
Регистрация: 12.12.2012
Сообщений: 1,023
02.04.2019, 15:38  [ТС] 3
SoftIce, да, любыми, как целыми так, и вещественными.
Но без длинной арифметики. Для определенности можно рассматривать диапазон чисел (-100.0, 100.0), например.
0
es geht mir gut
11208 / 4686 / 1177
Регистрация: 27.07.2011
Сообщений: 11,422
02.04.2019, 15:40 4
2*2 = 4
1
oh my god
1435 / 774 / 159
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2019, 15:50 5
сумма 2 x 2 = 4

Добавлено через 40 секунд
SoftIce, опередил

Добавлено через 5 минут
сумма 0 x 0= 0
1
5666 / 876 / 290
Регистрация: 25.02.2011
Сообщений: 1,236
Записей в блоге: 1
02.04.2019, 16:03 6
3 * 1,5 = 4,5
6 * 1,2 = 7,2
11 * 1,1 = 12,1
2
6063 / 1307 / 194
Регистрация: 12.12.2012
Сообщений: 1,023
02.04.2019, 16:06  [ТС] 7
Такие варианты мне в голову не пришли. Спасибо, выходит не только я вас развлек, но и вы меня заставили улыбнуться .
Вечером расскажу, какой вариант решения у меня был в голове.
0
5666 / 876 / 290
Регистрация: 25.02.2011
Сообщений: 1,236
Записей в блоге: 1
02.04.2019, 16:08 8
-1 * 0,5 = -0,5
-4 * 0,8 = -3,2
-9 * 0,9 = -8,1
0
oh my god
1435 / 774 / 159
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2019, 16:39 9
3 * 1,5 = 4,5
3 * 1,5 = 4,5
-1 * 0,5 = -0,5
0,5 * -1 = -0,5
2 * 2 = 4
-1 * 0,5 = -0,5
0 * 0 = 0
-1 * 0,5 = -0,5
0 * 0 = 0
0,5 * -1 = -0,5
0,5 * -1 = -0,5
1,5 * 3 = 4,5
1,5 * 3 = 4,5

Добавлено через 29 секунд
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub qwe()
    Dim i#, j#
    
    Randomize
    Do
        
        DoEvents
        i = FormatNumber(-100 + Rnd * 200, 1)
        j = FormatNumber(-100 + Rnd * 200, 1)
        
        If i + j = i * j Then
            
            Debug.Print i & " * "; j & " = " & i + j
        End If
    Loop
 
 
End Sub


Добавлено через 2 минуты
поставил на авто... долго вычисляет нового пока не найденно

Добавлено через 6 минут
0,8 * -4 = -3,2
26 * 1,04 = 27,04
-11,5 * 0,92 = -10,58
1,05 * 21 = 22,05
-24 * 0,96 = -23,04
0
5666 / 876 / 290
Регистрация: 25.02.2011
Сообщений: 1,236
Записей в блоге: 1
02.04.2019, 16:58 10
-9 * 0,9 = -8,1
-4 * 0,8 = -3,2
-1,5 * 0,6 = -0,9
-1 * 0,5 = -0,5
0 * 0 = 0
0,5 * -1 = -0,5
0,6 * -1,5 = -0,9
0,8 * -4 = -3,2
0,9 * -9 = -8,1
1,1 * 11 = 12,1
1,2 * 6 = 7,2
1,4 * 3,5 = 4,9
1,5 * 3 = 4,5
2 * 2 = 4
3 * 1,5 = 4,5
3,5 * 1,4 = 4,9
6 * 1,2 = 7,2
11 * 1,1 = 12,1

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub www()
    Dim a As Double, b As Double, i As Double
    For i = -100 To 100 Step 0.1
        a = Round(i, 1)
        If a <> 1 Then
            b = a / (a - 1)
            If Round(b, 10) = Round(b, 1) Then Debug.Print a & " * " & b & " = " & a * b
        End If
    Next i
End Sub
1
oh my god
1435 / 774 / 159
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2019, 17:06 11
Цитата Сообщение от Аксима Посмотреть сообщение
Вечером расскажу, какой вариант решения у меня был в голове
Похоже будет что-то уж совсем неожиданное
0
es geht mir gut
11208 / 4686 / 1177
Регистрация: 27.07.2011
Сообщений: 11,422
02.04.2019, 17:11 12
Цитата Сообщение от fever brain Посмотреть сообщение
Похоже будет что-то уж совсем неожиданное
И с юмором.

А из того что вы тут накидали только дважды два четыре более-менее имеет намёк на юмор
0
6063 / 1307 / 194
Регистрация: 12.12.2012
Сообщений: 1,023
02.04.2019, 20:28  [ТС] 13
Здравствуйте, друзья,

Моя шутка заключалась в том, что в условии не говорилось о том, что умножать нужно именно исходные числа. Можно, например, умножить саму на себя матрицу с этими числами.

Примерная реализация этой задумки:

Visual Basic
1
2
3
4
5
6
7
Sub Main()
    [A1] = Val(InputBox("Введите A", , 2))
    [A2] = 1
    [B1] = 0
    [B2] = Val(InputBox("Введите B", , 3))
    MsgBox ["Сумма " & A1 & " и " & B2 & " равна "] & Application.MMult([A1:B2], [A1:B2])(2, 1)
End Sub
Если вам любопытно, почему мне пришла в голову идея получать сумму именно таким образом, то скажу, что на прошлой неделе довольно долго занимался разработкой анимационных вставок для интерактивного программного продукта, а более-менее сложная анимация - она практически вся сводится к умножениям матриц, и чтобы понять принципы рисования анимации, пришлось изрядно поупражняться в ручном умножении матриц. Зато вот такая идея появилась на почве этих упражнений.

Математическое обоснование. Возьмем матрицу:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}a & b\\ c & d\end{pmatrix}

Если умножить ее саму на себя по правилам умножения матриц, то получим матрицу:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}{a}^{2}+bc & ab+bd\\ ca+dc & cb+{d}^{2}\end{pmatrix}

Заменив c на 0 и b на 1, получим:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}{a}^{2} & a+d\\ 0 & {d}^{2}\end{pmatrix}

Где верхняя правая ячейка содержит искомую сумму, что и требовалось доказать.

Если вместо замен c и b произвести замены a и d на нули, то умножением матрицы на саму себя можно получить произведение чисел c и b.

Можно найти еще кое-какие интересные закономерности при умножении матриц, вплоть до правила вычисления чисел Фиббоначи. Был бы интерес и желание.

С уважением,
Аксима
4
14936 / 6335 / 1724
Регистрация: 24.09.2011
Сообщений: 9,977
02.04.2019, 23:03 14
Аксима, красиво Еще можно комплексные числа использовать: если
z1=a1+ib1, z2=a2+ib2, то z1z2=(a1a2-b1b2)+i(a1b2+b1a2). Если взять b1=b2=1, то мнимая часть произведения равна сумме действительных частей исходных чисел.
Исходные числа в А1,В1
Код
=МНИМ.ЧАСТЬ(МНИМ.ПРОИЗВЕД(КОМПЛЕКСН(A1;1);КОМПЛЕКСН(B1;1)))
2
6063 / 1307 / 194
Регистрация: 12.12.2012
Сообщений: 1,023
03.04.2019, 07:57  [ТС] 15
Казанский, красивое и интересное решение.
0
5666 / 876 / 290
Регистрация: 25.02.2011
Сообщений: 1,236
Записей в блоге: 1
03.04.2019, 08:45 16
Цитата Сообщение от Аксима Посмотреть сообщение
Можно найти еще кое-какие интересные закономерности при умножении матриц
Можно так умножить матрицы (горизонтальный вектор умножить на вертикальный), и получить единственную сумму:
Код
=МУМНОЖ(ВЫБОР({1;2};A1;1);ВЫБОР({1:2};1;B1))
фактически вычисляется: A1*1 + 1*B1
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2019, 08:45

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

Вычислить сумму двух чисел, используя только операцию инкремента
Дано натуральные числа x, y. Обчислить суму этих чисел, используя только операцию добавления(+)

Дано целое число B. Получить B в третьей степени, используя только операцию умножения и только два раза
Дано целое число B. Получить B в третьей степени, используя только операцию умножения и только два...

Вычислить z=x^k, используя операцию умножения
Сделать программу с циклом с параметром. Вычислить z=x^k, используя операцию умножения, т. е....

Дано вещественное число а.Используя только операцию умножения, получить:
Долго думала вот накидала тут кое-что: b:=a*a; {a^2} c:=b*b; {a^4} d:=b*b*b;{a^6}...


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

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

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