Вопрос задан 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
0 0
Перейти к ответам

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

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

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, я могу помочь вам написать программу на языке Pascal для решения данной задачи. Вот пример решения:

pascal
program 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.

Программа запрашивает арифметическое выражение от пользователя и проверяет корректность скобок в нем. Она использует стек для отслеживания открытых скобок. Если встречается открывающая скобка, она помещается в стек. Если встречается закрывающая скобка, проверяется, есть ли соответствующая открывающая скобка на вершине стека. Если это не так, выражение считается некорректным. По окончании проверки, если стек пуст, выражение считается корректным.

Надеюсь, это поможет! Если у вас возникнут ещё вопросы, не стесняйтесь спрашивать.

0 0

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

Последние заданные вопросы в категории Информатика

Задать вопрос