Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program sprawdzanie_nawiasow;
- uses
- crt, DOS;
- type
- listPtr = ^list;
- list = record
- next: listPtr;
- previous: listPtr;
- x: String;
- end;
- procedure push(var listStart: listPtr; var listEnd: listPtr; y: String);
- var
- newElement: listPtr;
- begin
- if listEnd = NIL then
- begin
- newElement := listStart;
- new(newElement);
- newElement^.x := y;
- newElement^.next := NIL;
- newElement^.previous := NIL;
- listEnd := newElement;
- listStart := newElement;
- end else
- begin
- newElement := listEnd;
- New(newElement^.next);
- newElement := newElement^.next;
- newElement^.x := y;
- newElement^.next := NIL;
- newElement^.previous := listEnd;
- listEnd := newElement;
- end;
- end;
- function pop(var listStart: listPtr; var listEnd: listPtr): String;
- var
- pointer: listPtr;
- begin
- if listStart^.next = NIL then
- begin
- pointer := listStart;
- pop := pointer^.x;
- dispose(pointer);
- listStart := NIL;
- listEnd := NIL;
- end else
- begin
- pointer := listEnd;
- listEnd := pointer^.previous;
- listEnd^.next := NIL;
- pop := pointer^.x;
- dispose(pointer);
- end;
- end;
- function isEmpty(var listStart: listPtr): Boolean;
- begin
- if listStart = NIL then
- isEmpty := True
- else
- isEmpty := False;
- end;
- procedure readBracket(var listStart: listPtr; var listEnd: listPtr);
- var
- line: String;
- i: Integer;
- good: Boolean;
- begin
- writeLn('Wprowadz wyrazenie nawiasowe : ');
- ReadLn(line);
- good := True;
- for i := 1 to Length(line) do
- begin
- if (line[i] = '{') or (line[i] = '(') then
- begin
- push(listStart, listEnd, line[i]);
- end else if (line[i] = ')') then
- begin
- if not isEmpty(listStart) then
- begin
- if pop(listStart, listEnd) <> '(' then
- begin
- writeLn('Wyrazenie nawiasowe bledne!');
- writeLn('Wyrazenie nawiasowe bledne!');
- writeLn('Blad na pozycji: ', i);
- good := False;
- break;
- end;
- end else
- begin
- writeLn('Wyrazenie nawiasowe bledne!');
- writeLn('Niepotrzebne zamkniecie na pozycji: ', i);
- good := False;
- break;
- end;
- end else if (line[i] = '}') then
- begin
- if not isEmpty(listStart) then
- begin
- if pop(listStart, listEnd) <> '{' then
- begin
- writeLn('Wyrazenie nawiasowe bledne!');
- writeLn('Blad na pozycji: ', i);
- good := False;
- break;
- end;
- end else
- begin
- writeLn('Wyrazenie nawiasowe bledne!');
- writeLn('Niepotrzebne zamkniecie na pozycji: ', i);
- good := False;
- break;
- end;
- end;
- end;
- if isEmpty(listStart) and good then
- begin
- writeLn('Nawiasowanie poprawne!');
- end else if not isEmpty(listStart) and good then
- begin
- writeLn('Wyrazenie bledne - brak zamkniecia!');
- end;
- end;
- var
- listStart, listEnd: listPtr;
- go: Boolean;
- begin
- listEnd:= NIL;
- listStart := NIL;
- readBracket(listStart, listEnd);
- writeln;
- writeLn('Nacisnij dowolny klawisz aby wyjsc...');
- ReadKey;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement