A task: bracketed expression test

Имеется текстовая строка, которая содержит произвольное скобочное выражение (brackets (), [], or {}). Необходимо создать функцию check(), which will check it for correctness bracket expression:

check(“Y(x)”) -> true
check(“[(]”) -> false
check(“[{}]”) -> true
check(“)(“) -> false
check(“”) -> true
check(“b([{}-()]{a})”) -> true

With the decision of the need to tinker. But when it exists – It is concise and compact (10 – 15 strings). Options there may be many solutions.


Its solutions add in a comment (to the code in the comments displayed correctly, place it between the tags <code> </code>).

Newsletter of programming:

A task: bracketed expression test
Rate this article

About Olej

practical experience about software development 40 years. Teacher Global Logic international software company. IBM Developer Works Permanent author of publications. Scientific editor of the computer literature publishing house "Symbol-Plus", St. Petersburg.

12 thoughts on “A task: bracketed expression test

  1. Something like that (код не проверял, могут быть опечатки). Можно всяко- разно украшать и делать гибче, но суть та же, что и в случае одного вида скобокблок-схема алгоритма есть тут: http://pro-prof.com/archives/578

  2. > код не проверял
    А напрасно ;-) …

    1. вместо if (c == “(“) должно if (c == ‘()
    ну и во всех подобных ветках
    (и то если только это компилировать с опциями стандарта C++11)

    2. но и это не будет работать без:

    по крайней мере, до тех пор, пока это (bct1, bct2, bct3) – локальные переменные.

    3. and, finally, это никогда не будет работать просто алгоритмически, потому что вот такое скобочное выражение тоже будет совершенно корректным:

    1. >> потому что вот такое скобочное выражение тоже будет совершенно корректным: ( 1 [ 2 { 3 ) 4 ] }

      Я не считаю такое выражение корректным. В условиях задачи написанопроверять на правильность”. “правильностьвы никак не формализовали, приведенные в задаче примеры не содержат вроде бы ни одной группы скобок, внутри которой нарушается баланс других скобок. Ну и вообще, не понятно что именно задается (может задаваться) разными видами скобок.

      С кавычками и инициализацией переменных я накосячил, yes. Еще конструкцию do while(false) я тут зря применил, профита с нее в этом случае не будет.

      Приведи свое решение со стеками, интересно посмотреть (я по твоему описанию профита с них не вижу).

      1. > Я не считаю такое выражение корректным.
        Вот и я не считаю.
        А код показанныйсчитает. ;-)

      2. > Приведи свое решение со стеками, интересно посмотреть
        А оно с 1-го для лежит под спойлером “Decision”.
        И даже не одно решение

      3. > Ну и вообще, не понятно что именно задается (может задаваться) разными видами скобок.

        Что такое правильное скобочное выражение (и для разных видов скобок тоже) дети учат в 4-м классе начальной школы.

  3. Actually, это в закамуфлированной форме задача вычисления вложенных скобочных выражений (how, for example, в LISP lambda-выраженийили в калькуляторе), но специально в очень упрщённой формулировке. В общем виде задача таких вычислений решается рекурсивно: при открытии очередного скобочного выражениязаталкиваем параметры в стек и вызываем нижний уровень рекурсии, а при завершении обработки скобочного уровнявозврат из рекурсивного вызова и выталкивание переметров и стека обратно.
    Но в такой формулировке задачи вычисление на уровне рекурсии вырожденное (ничего не делать), поэтому рекурсия отпала, а стек остался.

  4. Я хочу разработать программу компютерная диагностики аудио видео радио аппаратуры описание программы там есть окошко где можно писаить пишем того что будем проверять и программа знает все параметры радио деталь в савляем щупы в вуковую карту и проверяем радио детали если горит зеленым цветом то радио деталь рабочая если горит желтым то радио деталь полу рабочая тоест луче поменять если горит красным то радио деталь не рабочая.Нужна помочт раработки?

    1. 1. это будет очень непростая по коду и размеру программа
      2. просто со входа звуковой карты (микрофонный?) так проверить не получитсяэто вход АЦП, на него можно подавать напряжение, но без external источника напряжения подключать тударадиодетальбессмысленно
      3. даже решив вопрос с источником напряжения, так проверять параметры вы сможете очень немногих простейших радиодеталей: диода, некоторых резисторовтранзистор вы уже не проверите, не говоря уже о более сложных устройствах.
      4. такая программа (даже если бы вы её при всех ограничениях возможностей сделали) will be зависимой от операционной системы: работающая под Windows не будет работать под Linux, если вы сделаете под Linuxона не будет работать под FreeBSD, сделаете под FreeBSDне будет работать под Solaris и т.д.

      В сети есть довольно много программ компьютерных осциллографов, подключаемых ко входу аудиокарты. Многие из нихс открытым кодом. Возьмите код таких программ и смотрите как они работают с аудиовходом.

  5. Я начинающий программист С++ и возможно код будет громоздкий, но как получилось.

  6. Hello. Help, you are welcome. Распишите как работает каждая строка в решении (первый вариант).

Leave a Reply

Your email address will not be published. Required fields are marked *