program laba_4_a; uses crt; Type TType = Record name:string[20]; shayb:integer; peredach:integer; stime:integer; nkom:string[10]; score:integer; End; PTItem = ^TItem; TItem = Record Info: TType; next: PTItem; End; TList = Record first, last: PTItem; Exists: Boolean; End; TActionType = Procedure(Var X: TType); Procedure InitList(Var L: TList); Begin L.first := nil; L.last := nil; L.Exists := True; End; Procedure DestroyList(Var L: TList); Var p, T: PTItem; Begin p := L.first; While p <> nil Do Begin T := p; p := p^.next; dispose(T) End; L.Exists := False End; Procedure AppendList(Var L: TList; Var X: TType); Var p: PTItem; Begin new(p); p^.Info := X; p^.next := nil; If L.first = nil Then L.first := p Else L.last^.next := p; L.last := p; End; Procedure RemoveItem(Var L: TList; n: Integer); Var p, r: PTItem; Begin p := L.first; While n > 1 Do Begin p := p^.next; Dec(n) End; r := p^.next; p^ := r^; Dispose(r); r := nil End; Procedure ForEachList(Var L: TList; Action: TActionType); Var p: PTItem; Begin p := L.first; While p <> nil Do Begin Action(p^.Info); p := p^.Next; End; End; Var PlayList: TList; r: TType; f: File Of TType; min_score: Integer; Procedure WriteRec(Var X: TType); Far; Begin With X Do WriteLn(name, ' ', shayb, ' ', peredach, ' ', stime) End; Procedure WriteFile(Var X: TType); Far; Begin Write(f, X) End; Procedure WriteMin(Var X: TType); Far; Begin If X.score > min_score Then WriteRec(X) End; Var n, i, Choice: Integer; begin repeat; clrscr; writeln(' vvv....'); gotoxy (1,10); writeln ('1. VvoD DaHHbIX..........'); writeln ('2. View DaHHbIX..........'); writeln ('3. SaVe DaHHbIE..........'); writeln ('4. Load DaHHbIE..........'); writeln ('5. Delete................'); writeln ('9. BEST PLAYERS..........'); writeln (' '); writeln ('0. E-X-I-T'); writeln ('Press 1-4:'); readln (Choice); case Choice of 1: begin ClrScr; If not PlayList.Exists Then Begin Write('Amount: '); ReadLn(n); InitList(PlayList); For i := 1 To n Do With r Do Begin WriteLn('#', i); Write(' Name of player :'); ReadLn(name); Write(' Kol-vo shayb :'); ReadLn(shayb); Write(' Kol-vo peregach:'); ReadLn(peredach); Write(' Shtraf.time :'); ReadLn(stime); score := shayb + peredach; AppendList(PlayList, r); End; End Else WriteLn('List alredy exists ... '); end; 2: begin ClrScr; WriteLn('Name of player Kol-vo shayb' + ' Kol-vo peredach Shraf.Time'); ForEachList(PlayList, WriteRec); ReadLn; end; 3: begin Assign(f, 'FILE.DAT'); ReWrite(f); ForEachList(PlayList, WriteFile); Close(f); end; 4: begin If PlayList.Exists Then DestroyList(PlayList); Assign(f, 'FILE.DAT'); Reset(f); While not Eof(f) Do Begin Read(f, r); AppendList(PlayList, r); End; Close(f); end; 9: begin ClrScr; Write('Enter min. score'); ReadLn(min_score); WriteLn('Name of player Kol-vo shayb' + ' Kol-vo peredach Shraf.Time'); ForEachList(PlayList, WriteMin); end; 5: begin Write('Enter number'); ReadLn(n); RemoveItem(PlayList, n); end; end; until Choice = 0; If PlayList.Exists Then DestroyList(PlayList); end.