
Вопрос задан 18.03.2021 в 01:30.
Предмет Информатика.
Спрашивает Блиндовская Анастасия.
Решите на паскаль плз Задание 1. «Строки» Дано арифметическое выражение, требуется
вывести его корректность. Корректность = true если скобки расставлены в нем верно, = false если неверно. На корректность влияют только скобки. Входные данные: Арифметическое выражение в одну строку (до 255 символов) Выходные данные: Корректность Пример: Вход Выход 1+5+(321-54*[321-321]+21) true 1+5+(321-54*[321-321]+21 false

Ответы на вопрос

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




Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Конечно, я могу помочь вам написать программу на языке Pascal для решения данной задачи. Вот пример решения:
pascalprogram CheckBrackets; const MAX_LENGTH = 255; type String255 = string[255]; function CheckBracketExpression(expression: String255): Boolean; var stack: array[1..MAX_LENGTH] of Char; top: Integer; i: Integer; begin top := 0; // инициализация вершины стека for i := 1 to Length(expression) do begin if expression[i] = '(' then begin Inc(top); stack[top] := '('; end else if expression[i] = ')' then begin if (top = 0) or (stack[top] <> '(') then begin CheckBracketExpression := False; Exit; end else Dec(top); end; end; CheckBracketExpression := top = 0; end; var expression: String255; correctness: Boolean; begin // Ввод выражения WriteLn('Введите арифметическое выражение:'); ReadLn(expression); // Проверка корректности скобок correctness := CheckBracketExpression(expression); // Вывод результата if correctness then WriteLn('Корректность: true') else WriteLn('Корректность: false'); end.
Программа запрашивает арифметическое выражение от пользователя и проверяет корректность скобок в нем. Она использует стек для отслеживания открытых скобок. Если встречается открывающая скобка, она помещается в стек. Если встречается закрывающая скобка, проверяется, есть ли соответствующая открывающая скобка на вершине стека. Если это не так, выражение считается некорректным. По окончании проверки, если стек пуст, выражение считается корректным.
Надеюсь, это поможет! Если у вас возникнут ещё вопросы, не стесняйтесь спрашивать.


Топ вопросов за вчера в категории Информатика

Информатика 566

Информатика 25

Информатика 22

Информатика 27

Информатика 34

Информатика 58

Информатика 63

Информатика 23
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili