Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ОТДЕЛ ОПН;
- ПЕР
- Стек: РЯД 20H ИЗ ЗНАК;
- ЗАДАЧА Преимущество(зн: ЗНАК): ЦЕЛ;
- УКАЗ
- ВЫБРАТЬ зн ИЗ
- '*', '/': ВОЗВРАТ 3
- | '-', '+': ВОЗВРАТ 2
- | '(', ')': ВОЗВРАТ 1
- ИНАЧЕ
- ВОЗВРАТ 0
- КОН
- КОН Преимущество;
- ЗАДАЧА Добавить(зн: ЗНАК);
- УКАЗ
- ЕСЛИ ДЛИНА(Стек) = РАЗМЕР(Стек) ТО
- Вывод.Цепь("Ошибка: стек переполнен.");
- СТОП(0)
- КОН;
- Стек[ДЛИНА(Стек)] := зн
- КОН Добавить;
- ЗАДАЧА Удалить(): ЗНАК;
- ПЕР
- зн: ЗНАК;
- УКАЗ
- ЕСЛИ ДЛИНА(Стек) = 0 ТО
- Вывод.Цепь("Ошибка: стек пуст.");
- СТОП(0)
- КОН;
- зн := Стек[ДЛИНА(Стек)-1];
- Стек[ДЛИНА(Стек)-1] := 0X;
- ВОЗВРАТ зн
- КОН Удалить;
- ЗАДАЧА Перевести(вход-, выход+: РЯД ИЗ ЗНАК);
- ПЕР
- сч1, сч2: УЗКЦЕЛ;
- зн: ЗНАК;
- УКАЗ
- зн := 0X; сч2 := 0;
- ОТ сч1 := 0 ДО ДЛИНА(вход)-1 ВЫП
- ЕСЛИ вход[сч1] = ")" ТО
- ПОКА Стек[ДЛИНА(Стек)-1] # "(" ВЫП
- выход[сч2] := Удалить();
- УВЕЛИЧИТЬ(сч2)
- КОН;
- зн := Удалить()
- АЕСЛИ вход[сч1] = "(" ТО
- Добавить(вход[сч1])
- АЕСЛИ (вход[сч1] = "+") ИЛИ (вход[сч1] = "-") ИЛИ (вход[сч1] = "/") ИЛИ (вход[сч1] = "*") ТО
- ЕСЛИ ДЛИНА(Стек) = 0 ТО Добавить(вход[сч1]) ИНАЧЕ
- ЕСЛИ Преимущество(вход[сч1]) > Преимущество(Стек[ДЛИНА(Стек)-1]) ТО
- Добавить(вход[сч1])
- ИНАЧЕ
- ПОКА (ДЛИНА(Стек) # 0) И (Преимущество(вход[сч1]) <= Преимущество(Стек[ДЛИНА(Стек)-1])) ВЫП
- выход[сч2] := Удалить(); УВЕЛИЧИТЬ(сч2)
- КОН;
- Добавить(вход[сч1])
- КОН
- КОН
- АЕСЛИ Знак.Буква(вход[сч1]) ТО
- выход[сч2] := вход[сч1];
- УВЕЛИЧИТЬ(сч2)
- КОН
- КОН;
- ПОКА ДЛИНА(Стек) # 0 ВЫП
- выход[сч2] := Удалить();
- УВЕЛИЧИТЬ(сч2)
- КОН
- КОН Перевести;
- КОН ОПН.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement