Решите ** паскаль плзЗадание 1. «Строки» Дано арифметическое выражение, требуется вывести...

0 голосов
151 просмотров

Решите на паскаль плз



Задание 1. «Строки»



Дано
арифметическое выражение, требуется вывести его корректность.



Корректность =
true если
скобки расставлены в нем верно, = false если неверно. На корректность
влияют только скобки.




Входные данные:





Арифметическое выражение в одну строку (до 255 символов)



Выходные данные:





Корректность



Пример:






Вход


Выход




1+5+(321-54*[321-321]+21)


true




1+5+(321-54*[321-321]+21


false



Информатика (647 баллов) | 151 просмотров
0

Ребят, быстрее плз! Плачу 30 Баллов!

0

Условие несколько непонятно. Т.е., как я понимаю, нужно проверить ТОЛЬКО корректность расставленных скобок, которые могут быть круглыми или квадратными?

0

Скобки могут быть и фигурными, и квадратными, и простыми. Загвоздка в том, что надо проверять расположение и направленность скобок

0

Круглые, квадратные и фигурные

0

Ага, хорошо

0

И надо проверять направленностьь скобок еще, т.е скобра открылась-закрылась, а не закрылась-открылась и.т.д

0

Да, я понимаю. Секунду, мне нужно некоторое время чтобы обдумать решение:)

0

Окей. Код скинте, если можно. На паскаль

0

А вас устроит код на скриншоте?:) Навряд ли объяснения влезут вместе с кодом в поле ответа

0

Благодарствую

Дан 1 ответ
0 голосов
Правильный ответ

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


image
(1.2k баллов)