Опубликовано 03.01.2018 по предмету Информатика от Гость

Очень нужна помощь!( Помогите или хотя бы объясните, как из обычной получить постфиксную форму. Вот, задания, которые нужно переделать в постфиксной форме:

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 умножить, из запомненного вычесть. Все верно.





Не нашел нужный ответ?

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


Найти другие ответы
Самые новые вопросы