К примеру дано выражение: (((5+2)*3+4)-7) Правильным скобочным выражением называется примерно следующее, если выкинуть все числа и арифметические знаки получаем ((())) Задание является следующим: Определить является ли введенное выражение правильным скобочным... На мой взгляд алгоритм прост кол-ву скобок ( должно соотвествовать кол-ву ) 1 можете подсказать коды клавиш ( и ) 2 и может быть какие-н сопутствующие команды в помощь подскажете...
n0name вполне с тобой согласен для начала прога ищет ( и ) в выражении а потом их сравнивает, как примерно организовать данный поиск?
хех, задача на первом курсе по программингу... если в результате надо выдать, правильное выражение или не правильное, то вроде так можно Код (Text): cnt:=0 For i:=1 to length(s) do begin If s[i] = '(' then inc(cnt); If s[i] = ')' then dec(cnt); end; If (cnt = 0) then Good else Bad
Если в выражении могут встречатся различные скобки (), {}. [] используем стек. Встретили открывающую скобку запихнули в стек, открывающую-> извлекаем, проверяем на парность.
Hellspawn в каждой итерации цикла надо проверять условие cnt>=0, а то для такого кода )( будет всё-таки правильным.
А может вот так? Код (Text): .model small .stack 100h .data x1 db 0 x2 db 0 .code start: ;xor ax, ax ;mov ds, offset mes ;mov ah, 09h ;int 21h mov CX, 0Dh vvod: xor al,al mov ah, 01h int 21h cmp al, 28h je uvel1 cmp al, 29h je uvel2 con_loop: loop vvod uvel1: inc x1 ; jmp vvod ret uvel2: inc x2 ;jmp vvod ret mov ax, 4C00h int 21h end start Здесь единственное что проблема немного с циклом... Если кто подскажет как можно испправить буду благодарен... И в конце проге сравнить x1 и x2
darkness Зачем два счетчика, когда можно обойтись одним (Hellspawn)? Плюс проверка, о которой сказал hamper.
crypto, тоже вариант... Какая разница? у меня проверяет каждый введённый байт .... Другое дело (уже стало самому интересно) с циклом не могу разобраться Подскажите в этом моменте. Почему при Код (Text): uvel1: inc x1 jmp con_loop ret У меня получается бесконечный цикл..... такое ощущение что в CX каждый раз прибаляютсят значения а не уменьшаются......
darkness Ты видимо не понял, о какой проверке идет речь - о том что на каждом шагу цикла мы проверяем условие, что содержимое счетчика >= 0. Если оно < 0, значит уже нарушен баланс скобок.
darkness Попробуй так Код (Text): mov CX, 0Dh vvod: xor al,al mov ah, 01h int 21h cmp al, '(' jne @1 inc x1 jmp con_loop @1: cmp al, ')' jne con_loop inc x2 con_loop: loop vvod mov ax, 4C00h int 21h