Advertisement
feihung

sprawdzanie nawiasów

Jan 19th, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.68 KB | None | 0 0
  1. program sprawdzanie_nawiasow;
  2.  
  3. uses
  4. crt, DOS;
  5. type
  6. listPtr = ^list;
  7.  
  8. list = record
  9.    next: listPtr;
  10.    previous: listPtr;
  11.    x: String;
  12. end;
  13.  
  14. procedure push(var listStart: listPtr; var listEnd: listPtr; y: String);
  15. var
  16. newElement: listPtr;
  17. begin
  18.  if listEnd = NIL then
  19.  begin
  20.       newElement := listStart;
  21.       new(newElement);
  22.  
  23.       newElement^.x := y;
  24.       newElement^.next := NIL;
  25.       newElement^.previous := NIL;
  26.       listEnd := newElement;
  27.       listStart := newElement;
  28.  end else
  29.  begin
  30.       newElement := listEnd;
  31.       New(newElement^.next);
  32.       newElement := newElement^.next;
  33.       newElement^.x := y;
  34.  
  35.       newElement^.next := NIL;
  36.       newElement^.previous := listEnd;
  37.       listEnd := newElement;
  38.  end;
  39. end;
  40.  
  41.  
  42. function pop(var listStart: listPtr; var listEnd: listPtr): String;
  43. var
  44. pointer: listPtr;
  45. begin
  46.  if listStart^.next = NIL then
  47.  begin
  48.       pointer := listStart;
  49.       pop := pointer^.x;
  50.       dispose(pointer);
  51.       listStart := NIL;
  52.       listEnd := NIL;
  53.  end else
  54.  begin
  55.       pointer := listEnd;
  56.       listEnd := pointer^.previous;
  57.       listEnd^.next := NIL;
  58.       pop := pointer^.x;
  59.       dispose(pointer);
  60.  end;
  61. end;
  62.  
  63.  
  64. function isEmpty(var listStart: listPtr): Boolean;
  65. begin
  66.  if listStart = NIL then
  67.      isEmpty := True
  68.  else
  69.      isEmpty := False;
  70. end;
  71.  
  72.  
  73.  
  74. procedure readBracket(var listStart: listPtr; var listEnd: listPtr);
  75. var
  76.    line: String;
  77.    i: Integer;
  78.    good: Boolean;
  79. begin
  80.      writeLn('Wprowadz wyrazenie nawiasowe : ');
  81.      ReadLn(line);
  82.      good := True;
  83.  
  84.      for i := 1 to Length(line) do
  85.      begin
  86.           if (line[i] = '{') or (line[i] = '(') then
  87.           begin
  88.                push(listStart, listEnd, line[i]);
  89.           end else if (line[i] = ')') then
  90.           begin
  91.                if not isEmpty(listStart) then
  92.                begin
  93.                     if pop(listStart, listEnd) <> '(' then
  94.                     begin
  95.                          writeLn('Wyrazenie nawiasowe bledne!');
  96.                          writeLn('Wyrazenie nawiasowe bledne!');
  97.                          writeLn('Blad na pozycji: ', i);
  98.                          good := False;
  99.                          break;
  100.                     end;
  101.                end else
  102.                begin
  103.                     writeLn('Wyrazenie nawiasowe bledne!');
  104.                     writeLn('Niepotrzebne zamkniecie na pozycji: ', i);
  105.                     good := False;
  106.                     break;
  107.                end;
  108.           end else if (line[i] = '}') then
  109.           begin
  110.                if not isEmpty(listStart) then
  111.                begin
  112.                     if pop(listStart, listEnd) <> '{' then
  113.                     begin
  114.                          writeLn('Wyrazenie nawiasowe bledne!');
  115.                          writeLn('Blad na pozycji: ', i);
  116.                          good := False;
  117.                          break;
  118.                     end;
  119.                end else
  120.                begin
  121.                     writeLn('Wyrazenie nawiasowe bledne!');
  122.                     writeLn('Niepotrzebne zamkniecie na pozycji: ', i);
  123.                     good := False;
  124.                     break;
  125.                end;
  126.           end;
  127.      end;
  128.      if isEmpty(listStart) and good then
  129.      begin
  130.           writeLn('Nawiasowanie poprawne!');
  131.      end else if not isEmpty(listStart) and good then
  132.      begin
  133.           writeLn('Wyrazenie bledne - brak zamkniecia!');
  134.      end;
  135. end;
  136.  
  137. var
  138.    listStart, listEnd: listPtr;
  139.    go: Boolean;
  140. begin
  141.      listEnd:= NIL;
  142.      listStart := NIL;
  143.  
  144.      readBracket(listStart, listEnd);
  145.  
  146.      writeln;
  147.      writeLn('Nacisnij dowolny klawisz aby wyjsc...');
  148.  
  149.      ReadKey;
  150. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement