Объекты - списки unit list; interface type telem = class public p: telem; s: integer;...
TRANSCRIPT
![Page 1: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/1.jpg)
Объекты - списки
unit List;
interface
type TElem = class
public
p: TElem;
s: integer;
constructor Create(r: TElem);
function Len: integer;
function Sum: integer;
end;
![Page 2: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/2.jpg)
Объекты - списки
implementation constructor TElem.Create(r: TElem); begin inherited Create; p:=r; end; function TElem.Len: integer; begin if p = nil then Result := 1 else Result := 1 + p.Len; end; function TElem.Sum: integer; begin if p = nil then Result := s else Result := s + p.Sum; end;end.
![Page 3: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/3.jpg)
Объекты – списки (вариант 2)
function TElem.Len: integer; var p1: TElem; d:integer; begin d:=1; p1:=p; while p<>nil do begin d:=d+1; p1:=p1+1 end; Result:=d end; function TElem.Sum: integer; var p1: TElem; d:integer; begin d:=s; p1:=p; while p<>nil do begin d:=d+p.s; p1:=p1+1 end; Result:=d end;
![Page 4: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/4.jpg)
Формирование списка
program TestList;{$APPTYPE CONSOLE}Uses List;var p1, p2: TElem; i, n: integer;
begin readln(n); p1 := nil; for i := 1 to n do begin p1 := TElem.Create(p1); readln(p1.s) end; writeln('len = ',p1.Len); writeln('sum = ',p1.Sum);. . .
![Page 5: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/5.jpg)
Вывод и уничтожение списка
p2 := p1; while p2 <> nil do begin write(p2.s:8); p2 := p2.p end; writeln; p2 := p1; while p2 <> nil do begin p2 := p2.p; p1.Destroy; p1 := p2; end; readlnend.
![Page 6: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/6.jpg)
Списки: наследование и полиморфизм
unit List2; interface type TElem = class public p: TElem; function Len: integer; end; TElemI = class(TElem) public s: integer; function Sum: integer; end; TElemR = class(TElem) public s: real; function Sum: real; end;
![Page 7: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/7.jpg)
Списки: наследование и полиморфизм
implementation function TElem.Len: integer; begin if p = nil then Result := 1 else Result := 1 + p.Len; end; function TElemI.Sum: integer; begin if p = nil then Result := s else Result := s + (p as TElemI).Sum; end; function TElemR.Sum: real; begin if p = nil then Result := s else Result := s + (p as TElemR).Sum; end;end.
![Page 8: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/8.jpg)
Формирование списка (тип TElemI)
program TestList2;{$APPTYPE CONSOLE}uses List2;var p1, p2: TElemI; i, n: integer;begin readln(n); p1 := nil; for i := 1 to n do begin p2 := TElemI.Create; p2.p := p1; readln(p2.s); p1 := p2; end; writeln('len = ',p1.Len); writeln('sum = ',p2.Sum);
![Page 9: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/9.jpg)
Вывод и уничтожение списка (тип TElemI)
p2 := p1; while p2 <> nil do begin write(p2.s:8); p2 := (p2.p as TElemI); end; writeln; p2 := p1; while p2 <> nil do begin p2 := (p2.p as TElemI); p1.Destroy; p1 := p2; end;end.
![Page 10: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/10.jpg)
Задача о ферзях
ФФ
ФФ
![Page 11: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/11.jpg)
Задача о ферзях
unit Queens;interface var n,ch: integer; type TQueen = class public i,j:integer; p:TQueen; function TestQ:boolean; procedure PrintQ; end; procedure GenQ(q:TQueen);
implementation procedure TQueen.PrintQ; begin if p<>nil then p.PrintQ; write(i:3) end;
![Page 12: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/12.jpg)
Задача о ферзях
function TQueen.TestQ:boolean; var p1:Tqueen; b:boolean; begin if p=nil then Result:=true else begin p1:=p; b:=true; while b and(p1<>nil) do begin if (i=p1.i)or((j-p1.j)=abs(i-p1.i)) then b:=false; p1:=p1.p end; Result:=b; end; end;
![Page 13: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/13.jpg)
Задача о ферзях
procedure GenQ(q:TQueen); var q1:TQueen; t:integer; begin for t:=1 to n do begin q.i:=t; if q.TestQ then begin if q.j=n then begin ch:=ch+1; q.PrintQ; writeln; end else begin q1:=TQueen.Create; q1.j:=q.j+1; q1.p:=q; GenQ(q1); q1.Destroy; end; end; end; end;end.
![Page 14: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/14.jpg)
Задача о ферзях
program Queen;{$APPTYPE CONSOLE}uses Queens;var p: TQueen;
begin readln(n); p := TQueen.Create; p.j := 1; p.p := nil; GenQ(p); p.Destroy; writeln(ch); readlnend.
![Page 15: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/15.jpg)
Задача о ферзях: решение на основе алгоритма генерации перестановок чисел
Диагонали:
правые: (столбец – строка) левые: (столбец + строка)
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
0 1 2 3
-1 0 1 2
-2 -1 0 1
-3 -2 -1 0
![Page 16: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/16.jpg)
program TestQueen;{$APPTYPE CONSOLE}var S,Q:array[1..20]of integer; R:array[-19..19]of integer; L:array[2..40]of integer; n,i,ch:integer;procedure Queen(j:integer); . . .begin readln(n); for i:=1 to n do S[i]:=0; for i:=1-n to n-1 do R[i]:=0; for i:=2 to 2*n do L[i]:=0; ch:=0; Queen(1); writeln('var=', ch); readlnend.
![Page 17: Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:](https://reader036.vdocument.in/reader036/viewer/2022082518/5697bfbb1a28abf838ca0e11/html5/thumbnails/17.jpg)
procedure Queen(j:integer); var i,k:integer; begin for i:=1 to n do if (S[i]=0)and(R[j-i]=0)and(L[j+i]=0) then begin S[i]:=1; R[j-i]:=1; L[j+i]:=1; Q[j]:=i; if j=n then begin ch:=ch+1; for k:=1 to n do write(Q[k]:3); writeln end else Queen(j+1); S[i]:=0; R[j-i]:=0; L[j+i]:=0; end; end;