PROGRAM VAR5_9; TYPE UK = ^QUERE; QUERE = RECORD NAME: STRING[10]; {Элемент} NEXT: UK {За кем стоит} END; VAR TOP, BOT, TEK: UK; I, J, L:BYTE; V:INTEGER; A: ARRAY[1..40] OF STRING[10]; F:BOOLEAN; FUNCTION EMPTY:BOOLEAN; BEGIN IF (TOP=NIL) AND (BOT=NIL) THEN EMPTY:=TRUE {Очередь пустая} ELSE EMPTY:=FALSE {Очередь не пустая} END; {FUNCTION EMPTY} FUNCTION SYZE: INTEGER; VAR M:INTEGER; BEGIN M:=0; TEK:=TOP; WHILE TEK<>NIL DO BEGIN M:=M+1; TEK:= TEK^.NEXT; END; SYZE:=M END; {FUNCTION SYZE} FUNCTION CONTRL:BOOLEAN; {Проверка на наличие в очереди одинаковых элементов} VAR M:INTEGER; BEGIN M:=0; TEK:=TOP; WRITELN('В очереди расположены элементы:'); WHILE TEK<>NIL DO BEGIN M:=M+1; A[M]:= TEK^.NAME; TEK:= TEK^.NEXT; WRITELN(A[M]) END; {Проверка на повторение} CONTRL:=FALSE; FOR I:=1 TO M-1 DO FOR J:= I+1 TO M DO IF A[I]=A[J] THEN BEGIN CONTRL:=TRUE; BREAK END; END; {FUNCTION CONTRL} PROCEDURE REMOVEALL; {Обнуление очереди} BEGIN IF NOT EMPTY THEN BEGIN WRITELN('Обнуление очереди!'); WHILE TOP<>NIL DO BEGIN TEK:= TOP; TOP:=TEK^.NEXT; DISPOSE(TEK) END; BOT:=NIL END END; {PROCEDURE REMOVEALL} PROCEDURE INSERT; {Добавление нового элемента} BEGIN WRITELN('Укажите число новых элементов'); READLN(V); WRITELN('Укажите имена новых элементов:'); FOR I:=1 TO V DO BEGIN IF EMPTY THEN BEGIN {Создание новой очереди} NEW(TOP); BOT:=TOP; TOP^.NEXT:=NIL END ELSE BEGIN {Постановка в очередь} TEK:=TOP; NEW(TOP); TOP^.NEXT:=TEK END; READLN(TOP^.NAME) END END; {PROCEDURE INSERT} BEGIN BOT:=NIL; TOP:=NIL; L:=1; REPEAT WRITELN('Укажите режим: 1 - Добавление в очередь нового элемента'); WRITELN(' 2 - Проверка очереди на одинаковые элементы'); WRITELN(' 3 - Обнуление очереди'); WRITELN(' 4 - Размер очереди'); WRITELN(' 0 - Завершение работы'); READLN(L); CASE L OF 0: HALT; 1: INSERT; 2: IF CONTRL THEN WRITELN('В очереди есть повторяющиеся элементы!') ELSE WRITELN('В очереди нет повторяющихся элементов!'); 3: REMOVEALL; 4: Begin V:=SYZE; WRITELN('Текущий размер очереди - ',V:1); END END {CASE} UNTIL FALSE END.