Есть ответ 👍

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

228
494
Посмотреть ответы 2

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


Идея алгоритма заключается в том, что для проверки корректности строки мы заводим стек, содержащий в себе открывающие скобки. посмотрим конкретно на вашем примере: ) 1+5+(321-54*[321-321]+21) мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял) затем, натыкаясь на открывающую скобку, добавляем её в стек. в нашем стеке: "(" идём дальше, находим открывающую квадратную скобку, кладём в стек в нашем стеке: "([" дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её. в нашем стеке: "(" аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна: ) в остальных случаях: если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным. я не мастер объяснять, но надеюсь, что мой разбор вам: )  исходный код вложен в ответ.
kir1kir1
4,6(74 оценок)

  program al;   var   a: array[1..32000] of integer;     buf: integer;     i,n,min,max: integer; begin    writeln('n=');   readln(n);     writeln('vvedite massiv=');   for i : = 1 to n do    readln(a[i]);   min: =1;   max: =1;     for i: =2 to n do      begin        if a[min]> a[i] then          min: =i;       if a[max]< a[i] then        max: =i;       end;   buf: =a[min];   a[min]: =a[max];   a[max]: =buf;   writeln('massiv posle obmena max< -> min');     for i: =1 to n do    write(a[i]: 4);   writeln;     end.

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS