Очень нужна помощь!( Помогите или хотя бы объясните, как из обычной получить постфиксную форму. Вот, задания, которые нужно переделать в постфиксной форме:
10-11 класс
|
1. (a+b)*(c+2*d)
2.(2*a-3*d)*c+2*b
3.(a+b+2*c)*d
4. 3*a - (2*b+c) * d
Постфиксная (она же - обратная польская запись, польская - потому что введена польским математиком Яном Лукашевичем) - это запись, в которой сначала следуют операнды, а затем знаки операций. Удобна для организации вычислений, потому что не требует для записи скобок и может вычисляться по мере считывания. Для преобразования обычной записи в польскую удобно использовать логическую структуру, называемую стеком (stack).
Поскольку нам не надо составлять алгоритм, а только перевести привычную запись в постфиксную, при переводе будем просто рассуждать.
1. (a+b)*(c+2*d)
Первая операция - a+b. Её постфиксная запись (далее - ПЗ) выглядит как ab+
и понимается так: "взять а, взять b, сложить"
Следующая операция 2*d, в ПЗ это 2d*. Т.е по сути мы меняем местами знак операции и второй операнд.
Третья операция - вычисление c+2*d. В ПЗ мы запишем (с учетом предыдущего) 2d*c+. У нас уже была операция 2d*, теперь мы прибавляем к результату c.
Содержимое обоих скобок вычислено, осталось выполнить умножение.
Получаем в ПЗ: ab+2d*c+*
Как это будет вычисляться?
Считываем a. Считываем b. Считываем знак операции +. Выполняем операцию, получая a+b. Обозначим результат R и тогда текущее состояние вычисляемого выражения будет R2d*c+*
Считываем 2. Считываем d. Считываем знак операции * (заметим, что читать надо, пока не встретим знак операции). Перемножаем два операнда, предшествующие операции. Получаем S=2*d. Текущее состояние вычисляемого выражения будет RSc+*
Считываем операнд с. Считываем знак операции +. Складываем два операнда, предшествующие операции. Получаем S=S+c. Почему не вводим новой переменной? Потому что один из операндов - временная переменная, следовательно её прежнее значение не нужно. Текущее состояние вычисляемого выражения будет RS*
Считываем знак операции *. Перемножаем два операнда, предшествующие операции. Получаем R=R*S. Все выражение просмотрено, следовательно вычисление завершено.
Второй пример не будем столь подробно разбирать.
2. (2*a-3*d)*c+2*b
Тут операции в ПЗ будут 2a*, 3d*, 2a*3d*- (первая скобка), далее 2a*3d*-с*, 2b* и окончательно 2a*3d*-c*2b*+
Читаем: 2 и a умножить, 3 и d умножить, из первого произведения вычесть второе, результат и с умножить, 2 и b умножить и два последних результат сложить. Все верно.
3. (a+b+2*c)*d
ab+, 2c*, вся скобка ab+2c*+, окончательно ab+2c*+d*
4. 3*a-(2*b+c)*d
В ПЗ: 3a*2b*c+d*-
Проверим: 3 и a умножить, запомнить, 2 и b умножить, с прибавить, на d умножить, из запомненного вычесть. Все верно.
Другие вопросы из категории
две логические функции, зависящие от трех аргументов A, B и C.
В пакете лежат фрукты. Все, кроме двух, персики. Все, кроме двух, яблоки. Все, кроме двух, груши. Сколько фруктов в пакете? Каких?
ПОМОГИТЕ СРОЧНО!!!
a) доступ к нему занимает меньше времени;
b) он в большей степени удобен для редактирования;
c) он легче защищается от вирусов;
d) он легче защищается от несанкционированного доступа;
e) он занимает меньше места
Читайте также
вертикально вверх со скоростью 40 км/ч. Найти значение проекции скорости этого тела в течении 6 секунд, через каждые 0,5 секунд
Надо решить в электронной таблице HELP PLEASE!
Задача 1. Ввести три вещественных числа: длины сторон треугольника. а) Напечатать существует ли треугольник с такими длинами сторон; б) Если треугольник существует, то напечатать тип треугольника: остроугольный,
прямоугольный или тупоугольный.
Задача 2. Компьютер в первую секунду печатает на экране 1, во вторую – число 12, в третью – число 23. То есть, в каждую следующую секунду – на 11 больше, чем в предыдущую. В
какую секунду впервые появится число, делящееся на 2009?
Задача 3. Текст состоит из слов, разделенных пробелом. Найти самое длинное слово. Если таких слов несколько, то напечатать последнее. Задача 4. Ввести натуральное число N. Это число записывается в виде суммы нескольких неубывающих натуральных слагаемых. Например, 5=1+4=2+3=1+1+3=1+1+1+2=1+1+1+1+1
Напечатать количество таких изложений (при n=5, ответ 5);
Или хотя бы ход решения, какие операторы использовать и т. п.