Используя стек, проверить правильность вложений операторных скобок (begin - end) в программе на Паскале - Free Pascal

Узнай цену своей работы

Формулировка задачи:

В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе.

Решение задачи: «Используя стек, проверить правильность вложений операторных скобок (begin - end) в программе на Паскале»

textual
Листинг программы
  1. type stack = record
  2.       data : array [0..100000] of char;
  3.       size : longint;
  4. end;
  5.  
  6. var
  7.    Myst : stack;
  8.    i : longint;
  9.    fin, fout : text;
  10.    tmp : char;
  11.    line, row : longint;
  12.    Flag : boolean;
  13.  
  14. procedure push(ch : char; var st : stack);
  15. begin
  16.  inc(st.size);
  17.  st.data[st.size] := ch;
  18. end;
  19.  
  20. function isempty(st : stack) : boolean;
  21. begin
  22.  if (st.size = 0) then
  23.         isempty := true
  24.  else
  25.         isempty := false;
  26. end;
  27.  
  28. procedure pop(var st : stack);
  29. begin
  30.         if(NOT isempty(st)) then begin
  31.                 st.data[st.size] := ' ';
  32.                 dec(st.size);
  33.         end else
  34.                 writeln('Stack is empty!');
  35. end;
  36.  
  37. procedure OpenFileIn(var f : text);
  38. var
  39.     NameF : string;
  40. begin
  41.   write('Введите название проверяемого файла');
  42.   readln(NameF);
  43.   assign(f, NameF);
  44.   reset(f);
  45. end;
  46.  
  47. procedure OpenFileOut(var f : text);
  48. var
  49.     NameF : string;
  50. begin
  51.  NameF := 'result.txt';
  52.  writeln('Результат в файле: ',NameF);
  53.  assign(f, NameF);
  54.  rewrite(f);
  55. end;
  56. function compare(ch : char) : boolean;
  57. begin
  58.  if (ch = '(') or (ch = '[') or (ch = '{') then
  59.     push(ch, Myst)
  60.  else begin
  61.     if(ch = ')') then
  62.      if (Myst.data[Myst.size] = '(') then
  63.        pop(Myst)
  64.      else
  65.       compare := false;
  66.  
  67.     if(ch = ']') then
  68.      if (Myst.data[Myst.size] = '[') then
  69.        pop(Myst)
  70.      else
  71.       compare := false;
  72.  
  73.     if(ch = '}') then
  74.      if (Myst.data[Myst.size] = '{') then
  75.        pop(Myst)
  76.      else
  77.       compare := false;
  78.  end;
  79.  
  80. end;
  81. BEGIN
  82.  row := 1;
  83.  line := 1;
  84.  Flag := true;
  85.  OpenFileIn(fin);
  86.  while (NOT EOF(fin)) do begin
  87.         while(NOT EOLn(fin)) do begin
  88.                 read(fin, tmp);
  89.                 Flag := compare(tmp);
  90.                 if (Flag = false) then begin
  91.                   OpenFileOut(fout);
  92.                   writeln(fout, 'Error: ', line, ' ', row);
  93.                   close(fout);
  94.                   exit();
  95.                 end;
  96.                 inc(row);
  97.         end;
  98.         readln(fin);
  99.         row := 1;
  100.         inc(line);
  101.  end;
  102.  OpenFileOut(fout);
  103.  if (isempty(Myst)) then
  104.         writeln(fout, 'No errors!')
  105.  else
  106.         writeln(fout, 'Not enough of closing brackets');
  107.  Close(fout);
  108.  Close(fin);
  109. END.

Объяснение кода листинга программы

  1. Тип данных переменной Myst — stack (стек), она содержит массив символов и счетчик размера.
  2. Вложенные функции и процедуры: a. Push — добавляет символ в стек. b. Isempty — проверяет, пуст ли стек. c. Pop — удаляет и возвращает последний добавленный в стек символ (предполагая, что стек не пуст). d. OpenFileIn — открывает файл для чтения и сохраняет его имя в переменной f. e. OpenFileOut — открывает файл для записи и сохраняет его имя в переменной f. f. Compare — сравнивает последний символ в стеке со введенным символом и, если необходимо, удаляет соответствующие скобки из стека.
  3. Основная программа: a. Создает файл для записи результатов. b. Открывает файл для чтения и начинает его обрабатывать построчно. c. Проверяет каждый символ в строке на соответствие скобкам '(' и ')', '[' и ']', '{ и }'. d. Если символ не соответствует, записывает информацию об ошибке в файл результатов и выводит сообщение об ошибке. e. Если все символы проверены и ошибок не найдено, выводит сообщение об успешном завершении.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы