Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Lina7
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 5
1

Расставить знаки арифметических операций для получения тождества

15.10.2017, 13:19. Просмотров 374. Ответов 5
Метки нет (Все метки)

Надо вывести все варианты соответсвующие выражению ((((1 2) 3 ) 4 ) 5 ) 6 = 35
Вместо пробелов должны быть знаки
Например : ((((1+2)*3)*4)+5)+6=35
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2017, 13:19
Ответы с готовыми решениями:

Как подключить модуль математического сопроцессора FPU emu8086 для выполнения арифметических операций
Как подключить модуль математического сопроцессора FPU для выполнения арифметических операции над...

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

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

Расставить между цифрами знаки арифметических операций и скобки
Даны пять пятерок (5 5 5 5 5), нужно расставить между цифрами знаки арифметических операций ('+',...

Расставить знаки арифметических операций так, чтобы сошелся результат
Разработать программу, отыскивающую такую расстановку знаков арифметических операций +, -, *, /...

5
ФедосеевПавел
Модератор
5592 / 2817 / 1143
Регистрация: 01.02.2015
Сообщений: 9,149
Записей в блоге: 1
15.10.2017, 13:27 2
Объединяйтесь с коллегой - быстрее будет Расставить знаки арифметических операций для получения тождества
Тут изначально нужен алгоритм и лишь потом ассемблер.
0
Lina7
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 5
15.10.2017, 13:34  [ТС] 3
Павел пожалуйста решите тут алгоритм простой тупой перебор всех вариантов , могла на с++ решить просто emu8086 реализовать не могу

Добавлено через 1 минуту
И еще незнаю как же я должна потом знаки вывести вообще не понятно , если не сложно решите пожалуйста
0
ФедосеевПавел
Модератор
5592 / 2817 / 1143
Регистрация: 01.02.2015
Сообщений: 9,149
Записей в блоге: 1
15.10.2017, 14:06 4
Так сделайте на С++. Будет алгоритм и несколько найденных решений.
Потом реализуете то же самое на асме.

Не по теме:

Я не буду выполнять это задание. Т.к. ваш сокурсник Nigina8 получит решение вместе с вами. А у меня личная неприязнь к этому человеку.
Может быть кто-нибудь другой сможет вам помочь...



Если будете выполнять - попробую помочь советами, но полным кодом - нет.
0
Lina7
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 5
16.10.2017, 22:08  [ТС] 5
Надо вывести все варианты соответсвующие выражению ((((1 2) 3 ) 4 ) 5 ) 6 = 35
Вместо пробелов должны быть знаки
Например : ((((1+2)*3)*4)+5)+6=35
Павел помогите пожалуйста я искренне извиняюсь все совершают ошибки но честно сам пробовал решить но не получилось хоть с началом помогите сделать цикл

Добавлено через 14 минут
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
49
50
51
52
53
54
55
56
57
#include <stdio.h>
 
int calc(int operator1, char operation, int operator2)
{
    int res;
 
    switch (operation)
    {
    case '+':
        res = operator1 + operator2;
        break;
    case '-':
        res = operator1 - operator2;
        break;
    case '*':
        res = operator1 * operator2;
        break;
    case '/':
        res = operator1 / operator2;
        break;
    }
 
    return res;
}
 
int expr(char op1, char op2, char op3, char op4, char op5)
{
    return calc(calc(calc(calc(calc(1, op1, 2), op2, 3), op3, 4), op4, 5), op5, 6);
}
 
int main()
{
    char ops[4] = {'+', '-', '*', '/'};
    int result;
 
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            for (int k = 0; k < 4; k++)
            {
                for (int l = 0; l < 4; l++)
                {
                    for (int t = 0; t < 4; t++)
                    {
                        result = expr(ops[i], ops[j], ops[k], ops[l], ops[t]);
 
                        if (result == 35)
                            printf("((((1 %c 2) %c 3) %c 4) %c 5) %c 6 = 35\n", ops[i], ops[j], ops[k], ops[l], ops[t]);
                    }
                }
            }
        }
    }
 
    return 0;
}
Добавлено через 1 минуту
Вот код на с++ есть всего 3 варианта решения
((((1 + 2) + 3) * 4) + 5) + 6 = 35
((((1 + 2) * 3) * 4) + 5) - 6 = 35
((((1 * 2) * 3) * 4) + 5) + 6 = 35

Помогите пожалуйста реализовать на ассемблере если не сложно

Добавлено через 2 минуты
Рекурсивная фунция нужна на асме вообще не понятно как делается может быть вы знаете Павел
0
ФедосеевПавел
Модератор
5592 / 2817 / 1143
Регистрация: 01.02.2015
Сообщений: 9,149
Записей в блоге: 1
16.10.2017, 22:46 6
Если делать перебором без рекурсии, то код будет очень близок к варианту на C/C++.
Т.е. будут процедуры calc и expr.
Циклы можно реализовать командами loop.
Вложенные - сохранением cx в стеке и восстановлением после завершения вложенного цикла
Assembler
1
2
3
4
5
6
7
8
9
10
11
        mov cx, 4
        @@ForI:
                push cx
 
                mov cx, 4
                @@ForJ:
                        тело цикла
                loop @@ForJ
 
                pop cx
        loop @@ForI
Единственно, я бы выполнял частичные вычисления в начале каждого из вложенных циклов, а не всё сразу внутри самого глубокого - и на этом основании обошёлся бы без expr, но добавил бы переменных. Этот вариант был бы быстрее и проще в реализации на ассемблере.

Почитайте в Электронный учебник о циклах.
0
16.10.2017, 22:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2017, 22:46

В выражении расставить знаки арифметических операций, чтобы получилось заданное число
В арифметическом выражении 1*2*3*4*5 вместо звездочек расставить арифметические операции + , -...

Расставить знаки арифметических операций между цифрами числа A, чтобы получить число B
Заданы два целых положительных числа A и B. Расставьте знаки арифметических операций (+, -, *, /)...

Расставить среди цифр знаки арифметических операций и скобки, чтобы получить необходимый результат
Собственно, вот задача: Вводится строка не более чем из 6 цифр и некоторое целое число R....


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

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

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