program laba_4_a; uses crt; Type R = Record uzel:string[20]; ustrois:string[20]; nomer_u:integer; kol_u:integer; ves:real; cena:real; End; PTItem = ^TItem; TItem = Object Info: R; next: PTItem; Constructor Init(const X: R; p: PTItem); End; TActionType = Procedure(Var X: R); TList = Object first, last: PTItem; Constructor Init; Procedure Destroy; Procedure Append(Var X: R); Procedure RemoveItem(n: Integer); Procedure ForEach(Action: TActionType); Function is_empty: boolean; Procedure sort; End; Constructor TItem.Init(const X: R; p: PTItem); begin Info := X; next := p; end; Constructor TList.Init; Begin first := nil; last := nil; End; Procedure TList.Destroy; Var p, T: PTItem; Begin p := first; While p <> nil Do Begin T := p; p := p^.next; dispose(T) End; End; Function TList.is_empty: boolean; begin is_empty := (first = nil); end; Procedure TList.Append(Var X: R); Var p: PTItem; Begin new(p, Init(X, nil)); If first = nil Then first := p Else last^.next := p; last := p; End; Procedure TList.RemoveItem(n: Integer); Var p, r1: PTItem; Begin p := first; While n > 1 Do Begin p := p^.next; Dec(n) End; r1 := p^.next; p^ := r1^; Dispose(r1); r1 := nil End; Procedure TList.ForEach(Action: TActionType); Var p: PTItem; Begin p := first; While p <> nil Do Begin Action(p^.Info); p := p^.Next; End; End; Var PlayList: TList; r1: R; f: File Of R; min_cena: Integer; Procedure WriteRec(Var X: R); Far; Begin With X Do WriteLn(uzel, ' ', ustrois, ' ', nomer_u, ' ', kol_u, ' ', ves, ' ',cena); End; procedure TList.sort; var temp: real; p,r1: PTItem; T: R; begin ClrScr; p := first; While p <> nil Do Begin with p^.Info do temp := kol_u; r1 := p; while r1 <> nil do begin with r1^.Info do if (temp < kol_u) then begin T := p^.Info; p^.info := r1^.Info; r1^.Info := T; end; r1 := r1^.next; end; p := p^.Next; end; End; Procedure WriteFile(Var X: R); Far; Begin Write(f, X) End; Var n, i, Choice: Integer; begin PlayList.Init; repeat; clrscr; gotoxy (1,10); writeln ('1. Загрузить данные из файла ......'); writeln ('2. Просмотр данных ................'); writeln ('3. Сортировать данные .............'); writeln ('4. Сохранить данные ...............'); writeln (' '); writeln ('0. Выход'); writeln ('Выберете 1-3:'); readln (Choice); case Choice of 2: begin ClrScr; WriteLn('Узел уст-ва | Устройство' + '| Номер узла | Кол-во узлов|'+ ' | Вес | Цена '); PlayList.ForEach(WriteRec); ReadLn; end; 4: begin Assign(f, 'FILE.DAT'); ReWrite(f); PlayList.ForEach(WriteFile); Close(f); end; 1: begin PlayList.Destroy; Assign(f, 'FILE.DAT'); Reset(f); While not Eof(f) Do Begin Read(f, r1); PlayList.Append(r1); End; Close(f); end; 3: begin PlayList.sort; end; end; until Choice = 0; PlayList.Destroy; end.