Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
-26 / 0 / 0
Регистрация: 10.02.2012
Сообщений: 119
1

Проверить правильность расстановки круглых и квадратных скобок в выражениях

29.06.2012, 16:44. Просмотров 1902. Ответов 7
Метки нет (Все метки)


2 дана строка символов проверить правильность расстановки круглых и квадратных скобок в выражениях
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2012, 16:44
Ответы с готовыми решениями:

Проверить правильность расстановки круглых скобок
Разработать программу, которая в заданной строке, представляющей собой некоторое арифметическое...

Проверить правильность расстановки круглых скобок в строке
Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в данной строке.

Проверить правильность расстановки скобок
Строка содержит арифметическое выражение, в котором используются круглые скобки. Проверить...

Стек. Проверить правильность расстановки скобок
Дан текст, в нём присутствует 3 вида скобок, проверить правильность расстановки скобок. Например...

7
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
29.06.2012, 17:31 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Var s:string;
    a,b,i:integer;
 
BEGIN
 
Read(s);
For i:=1 to Length(s) do
 Begin
   Case ord(s[i]) of
     40:inc(a);
     41:dec(a);
     91:inc(b);
     93:dec(b);
    end;
   If (a=-1) or (a=2) or (b=-1) or (b=2) then Break;
 End;
 
If (a=0) and (b=0) then Writeln('Верно')
 else Writeln('Неверно');
 
END.
0
153 / 153 / 81
Регистрация: 16.06.2012
Сообщений: 314
29.06.2012, 18:25 3
ARTYRXOX, разве (()) - неверно ?

Добавлено через 4 минуты
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Uses Crt;
 
Var top , i : integer;
    s : string;
    ok : boolean;
    st : array[1..1000] of char;
 
Begin
    ClrScr;
    top := 0;
    ReadLn(s);
    ok := true;
    for i := 1 to length(s) do begin
        if (s[i] = '(') or (s[i] = '[') then begin
            top := top + 1;
            st[top] := s[i];
        end else begin
            if top = 0 then begin
                ok := false;
                break;
            end;
            if s[i] = ')' then begin
                if st[top] <> '(' then begin
                    ok := false;
                    break;
                end;
                top := top - 1;
            end;
            if s[i] = ']' then begin
                if st[top] <> '[' then begin
                    ok := false;
                    break;
                end;
                top := top - 1;
            end;
        end;
    end;
    ok := ok and (top = 0);
    if ok then
        WriteLn('Верно')
    else
        WriteLn('Не верно');
    ReadKey;    
End.
0
-26 / 0 / 0
Регистрация: 10.02.2012
Сообщений: 119
05.07.2012, 18:13  [ТС] 4
igor_kz, че то при проверке вот такого теста 112232332(ычпыапмп)ваппа
пишет неверно а должно быть верно
переделай пож
0
43 / 43 / 33
Регистрация: 05.12.2011
Сообщений: 201
05.07.2012, 19:04 5
что хоть ты такой немощный
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  s: string;
  i,count: integer;
begin
  ReadLn(s);
  count := 0;
  for i := 1 to Length(s) do
  begin
    if (s[i] = '(') and (count >= 0) then
      Inc(count);
    if s[i] = ')' then
      Dec(count);
  end;
  if count = 0 then
    WriteLn('Yes')
  else
    WriteLn('No');
  ReadLn
end.
2 минуты поиска по форуму, и задача у меня

Добавлено через 5 минут
2 вариант со стеками от Mawrat'а
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
program Project1;
 
const
  //Глубина стека. Т. е. максимальное количество элементов,
  //которое может поместиться в стек.
  N = 100;
  //Множество открывающих скобок.
  D1 = ['(', '[', '{'];
  //Множество закрывающих скобок.
  D2 = [')', ']', '}'];
 
type
  //Тип, описывающий стек.
  TStack = record
    //Указатель вершины стека. Это индекс последнего добавленного элемента.
    Pnt : Integer;
    //Контейнер данных стека.
    Data : array[1..N] of Char;
  end;
 
//Добавить в стек элемент.
function StackPush(var aStack : TStack; const aCh : Char) : Boolean;
begin
  StackPush := False;
  with aStack do begin
    if Pnt < High(Data) then begin
      //Индекс добавляемого элемента.
      Inc(Pnt);
      //Добавляем элемент в массив (т. е. в стек).
      Data[Pnt] := aCh;
      StackPush := True;
    end;
  end;
end;
 
//Взять из стека элемент.
function StackPop(var aStack : TStack; var aCh : Char) : Boolean;
begin
  StackPop := False;
  with aStack do begin
    if Pnt >= Low(Data) then begin
      aCh := Data[Pnt];
      Dec(Pnt);
      StackPop := True;
    end;
  end;
end;
 
//Для закрывающей скобки возвращает соответствующую открывающую скобку.
function GetOpen(const aCh : Char) : Char;
begin
  GetOpen := #0;
  case aCh of
    ')' : GetOpen := '(';
    ']' : GetOpen := '[';
    '}' : GetOpen := '{';
  else
    //Ошибка.
    Writeln('function GetOpen. Ошибка! Незарегистрированное значение.');
  end;
end;
 
//Исследование строки на предмет согласованности скобок.
function ParsePh(const aStr : String) : Integer;
var
  Stack : TStack;
  i, Res : Integer;
  Ch : Char;
begin
  //Инициализируем стек.
  Stack.Pnt := 0;
 
  Res := 1;
  for i := 1 to Length(aStr) do begin
    if aStr[i] in D1 then begin
      //Нашли открывающую скобку - добавляем её в стек.
      if not StackPush(Stack, aStr[i]) then begin
        Res := -1;
        Break;
      end;
    end else if aStr[i] in D2 then begin;
      //Нашли закрывающу скобку - берём элемент из вершины стека.
      if StackPop(Stack, Ch) then begin
        //Стек не пуст.
        if Ch <> GetOpen(aStr[i]) then begin
          //Взятая из вершины стека скобка не соответствует текущей закрывающей скобке.
          //Согласованность нарушена.
          Res := 0;
          Break;
        end;
      end else begin
        //Стек пуст. Значит нет соответствия для текущей закрывающей скобки.
        //Согласованность нарушена.
        Res := 0;
        Break;
      end;
    end;
  end;
 
  if Res = 1 then begin
    //Если стек не пуст - скобки не согласованы. Иначе - согласованы.
    if StackPop(Stack, Ch) then
      ParsePh := 0
    else
      ParsePh := 1
    ;
  end else
    ParsePh := Res
  ;
end;
 
var
  S : String;
begin
  repeat
    Writeln('Введите строку:');
    Readln(S);
    case ParsePh(S) of
      -1 : Writeln('Ошибка! Переполнение стека.');
      0  : Writeln('Скобки не согласованы.');
      1  : Writeln('Скобки согласованы.');
    end;
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
0
153 / 153 / 81
Регистрация: 16.06.2012
Сообщений: 314
05.07.2012, 19:04 6
morgan57, видишь ли в чем проблема, сейчас появится вопрос, а где квадратные скобки ))
0
43 / 43 / 33
Регистрация: 05.12.2011
Сообщений: 201
05.07.2012, 19:06 7
Цитата Сообщение от igor_kz Посмотреть сообщение
morgan57, видишь ли в чем проблема, сейчас появится вопрос, а где квадратные скобки ))
в варианте от Mawrat'а они учитываются
0
153 / 153 / 81
Регистрация: 16.06.2012
Сообщений: 314
05.07.2012, 19:08 8
Цитата Сообщение от morgan57 Посмотреть сообщение
в варианте от Mawrat'а они учитываются
просто писал до того как ты его выложил
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2012, 19:08

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

Проверить правильность расстановки скобок в строке символов
Доброе время суток, помогите пожалуйста написать программу, за ранее большое спасибо. Строка...

Проверить правильность расстановки скобок вида (), {}, [] в выражении.
Скобки считаются сбалансированными, если: а) при подсчете скобок слева направо количество...

Правильность расстановки скобок
В строке записано математическое выражение с круглыми скобками. Проверить правильность расстановки...

Используя Стек, Определить Правильность Расстановки Скобок
С Клавиатуры Вводится Арифметическое Выражение С Использование Круглых, Квадратных И Фигурных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.