Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rom1k
Строка символов представляет собой арифметическое выражение. Проверить правильность расстановки скобок в этом выражении. Скобки могут быть вложенными
пример работы программы:
Цитата
(3+5)-4(4+1

ответ:
Цитата
не хватает закрывающей скобки


Программа.Но она неправильная и не правильно работает.исправьте плиз!!!!

Program stroka;
uses crt;
var
st,st1:string;
i,l,r,k:integer;
begin
clrscr;
write(' Задайте строку содержащую скобки: ');
readln(st);
l:=0;
r:=0;
i:=1;
while i<=length(st) do
begin
while ((st[i]<>'(') or (st[i]<>')')) and (i<=length(st)) do
i:=i+1;
if st[i]='(' then
l:=l+1;
if st[i]=')' then
r:=r+1;
if i>=length(st) then
writeln(' В строке нет скобок')
else
writeln(' Левых скобок: ',l);
writeln(' Правых скобок: ',r);
end;
repeat until keypressed
end.

volvo
опять велосипеды? Даже соревнование проводилось на эту тему, есть ОЧЕНЬ много реализаций...
Rom1k
я в поиске вбивал,не нашёл...
Sto
Поробуй так
Uses
Crt;
Var
st : String;
ch : Char;
i, Left, Right : Integer;
Begin
ClrScr;
Write('Enter string -> ');
ReadLn(st);
For i := 1 To Length(st) Do
Begin
ch := st[i];
If ch = '(' Then Left := Left + 1;
If ch = ')' Then Right := Right + 1;
End;
WriteLn('Left : ',Left);
WriteLn('Right : ',Right);
If Left > Right Then WriteLn('Left > Right, on ',Left - Right);
If Left < Right Then WriteLn('Left < Right, on ',Right - Left);
If Left = Right Then WriteLn('OK');
ReadKey;
End.

Будут вопросы пиши.
Rom1k
спасибо большое.ща разберусь.всё правильно работает!
volvo
Sto, пример некорректной работы кода:
Введи )(4+5)(
Sto
Цитата(volvo @ 22.05.2007 23:10) *

Sto, пример некорректной работы кода:
Введи )(4+5)(

Точно, есть погрешность yes2.gif
Буду думать как поправить.
Sto
Исправил ошибку
Uses
Crt;
Var
st, Ans : String;
i, Left, Right, sw : Integer;
Begin
ClrScr;
Write('Enter string -> ');
ReadLn(st);
Ans := 'Ok';
For i := 1 To Length(st) Do
Begin
If st[i] = '(' Then Begin Left := Left + 1; sw := sw + 1 End;
If st[i] = ')' Then Begin Right := Right + 1; sw := sw - 1 End;
If sw < 0 Then Ans := 'Error';
End;
WriteLn('Left : ',Left);
WriteLn('Right : ',Right);
If Left > Right Then WriteLn('Left > Right, on ',Left - Right);
If Left < Right Then WriteLn('Left < Right, on ',Right - Left);
If Left = Right Then WriteLn(Ans);
ReadKey;
End.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.