IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> строки, скобки....
Rom1k
сообщение 22.05.2007 22:36
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Строка символов представляет собой арифметическое выражение. Проверить правильность расстановки скобок в этом выражении. Скобки могут быть вложенными
пример работы программы:
Цитата
(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.



Сообщение отредактировано: Rom1k - 22.05.2007 22:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 22.05.2007 22:41
Сообщение #2


Гость






опять велосипеды? Даже соревнование проводилось на эту тему, есть ОЧЕНЬ много реализаций...
 К началу страницы 
+ Ответить 
Rom1k
сообщение 22.05.2007 22:45
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


я в поиске вбивал,не нашёл...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sto
сообщение 22.05.2007 22:58
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Илья

Репутация: -  2  +


Поробуй так
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.

Будут вопросы пиши.

Сообщение отредактировано: Sto - 22.05.2007 22:59
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2007 23:03
Сообщение #5


Гость






Задача на проверку баланса скобок в строке
 К началу страницы 
+ Ответить 
Rom1k
сообщение 22.05.2007 23:07
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


спасибо большое.ща разберусь.всё правильно работает!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2007 23:10
Сообщение #7


Гость






Sto, пример некорректной работы кода:
Введи )(4+5)(
 К началу страницы 
+ Ответить 
Sto
сообщение 22.05.2007 23:14
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Илья

Репутация: -  2  +


Цитата(volvo @ 22.05.2007 23:10) *

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

Точно, есть погрешность yes2.gif
Буду думать как поправить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sto
сообщение 25.05.2007 22:01
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Илья

Репутация: -  2  +


Исправил ошибку
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 21:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"