Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.