Решите на паскаль плз 1. «строки» дано арифметическое выражение, требуется вывести его корректность. корректность = true если скобки расставлены в нем верно, = false если неверно. на корректность влияют только скобки. входные данные: арифметическое выражение в одну строку (до 255 символов) выходные данные: корректность пример: вход выход 1+5+(321-54*[321-321]+21) true 1+5+(321-54*[321-321]+21 false

jil356 jil356    3   05.06.2019 14:10    1

Ответы
Регина56797 Регина56797  06.07.2020 01:13
Идея алгоритма заключается в том, что для проверки корректности строки мы заводим стек, содержащий в себе открывающие скобки.
Посмотрим конкретно на вашем примере:)
1+5+(321-54*[321-321]+21)
Мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял)
Затем, натыкаясь на открывающую скобку, добавляем её в стек.
В нашем стеке: "("
Идём дальше, находим открывающую квадратную скобку, кладём в стек
В нашем стеке: "(["
Дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её.
В нашем стеке: "("
Аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна:)
В остальных случаях:
Если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. Само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным.
Я не мастер объяснять, но надеюсь, что мой разбор вам:)  Исходный код вложен в ответ.

Решите на паскаль плз 1. «строки» дано арифметическое выражение, требуется вывести его корректность.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика