Задать вопрос
6 июля, 13:10

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

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

+1
Ответы (1)
  1. 6 июля, 15:14
    0
    Постфиксная (она же - обратная польская запись, польская - потому что введена польским математиком Яном Лукашевичем) - это запись, в которой сначала следуют операнды, а затем знаки операций. Удобна для организации вычислений, потому что не требует для записи скобок и может вычисляться по мере считывания. Для преобразования обычной записи в польскую удобно использовать логическую структуру, называемую стеком (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 умножить, из запомненного вычесть. Все верно.
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Очень нужна помощь! (Помогите или хотя бы объясните, как из обычной получить постфиксную форму. Вот, задания, которые нужно переделать в ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы