Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 15
1

Найти согласованность расстановленных скобок в текстовом файле

31.05.2016, 13:08. Показов 530. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача состоит в том, что нужно что бы данные вводились с файла в программу! И шла дальнейшая обработка.
Сама программа, ищет согласованность расстановленных скобок.

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.
Добавлено через 1 час 0 минут
Задача состоит в том, что нужно что бы данные вводились с файла в программу! Как подключить текстовый файл, что бы с него считывался текст?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2016, 13:08
Ответы с готовыми решениями:

Работа со строками в С++ проверка на согласованность скобок
В арифметическом выражении проверить согласованность скобок, правильность их расположения и выдать...

Работа со строками на С++ проверка на согласованность скобок.
В арифметическом выражении проверить согласованность скобок, правильность их расположения и выдать...

Проверить баланс скобок в текстовом файле
1. из файла f1 выводится текст (текст со скобками) 2. проверяется соответствие скобок 3. если не...

Замена слов в одном текстовом файле словами, записанными в другом текстовом файле
Кто-нибудь пожалуйста приведете пример реализации следующей программы имеются два тектовых файла -...

0
31.05.2016, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2016, 13:08
Помогаю со студенческими работами здесь

Найти в текстовом файле строку по заданному слову и заменить ей определённую часть строки в другом файле
Всех с Новым Годом! Наверное избитая тема, но все же... Задача такая: Существует два файла:...

В текстовом файле найти строку с наибольшим количеством символов (считать, что такая строка в файле одна)
Всем привет)) В текстовом файле найти строку с наибольшим количеством символов (считать, что...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется...

Найти самое длинное и самое короткое из всех слов, записанных в текстовом файле WORDS.DAT, и записать их в файле LANG и KURZ
Найти самое длинное и самое короткое из всех слов, записанных в текстовом файле WORDS.DAT, и...

Найти количество квадратных скобок (открывающих и закрывающих) в файле символов
Дан файл тхт в нем есть текст в котором также присутствуют скобки

Найти строку в текстовом файле
Добрый день. подскажите пожалуйста как найти определенную строку в текстовом файле, например мне...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru