Presentation is loading. Please wait.

Presentation is loading. Please wait.

Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:

Similar presentations


Presentation on theme: "Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:"— Presentation transcript:

1 Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum: integer; end;

2 Объекты - списки 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.

3 Объекты – списки (вариант 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;

4 Формирование списка 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);...

5 Вывод и уничтожение списка 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; readln end.

6 Списки: наследование и полиморфизм 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;

7 Списки: наследование и полиморфизм 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.

8 Формирование списка (тип 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);

9 Вывод и уничтожение списка (тип 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.

10 Задача о ферзях Ф Ф Ф Ф

11 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;

12 Задача о ферзях 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;

13 Задача о ферзях 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.

14 Задача о ферзях 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); readln end.

15 Задача о ферзях: решение на основе алгоритма генерации перестановок чисел Диагонали: правые: (столбец – строка) левые: (столбец + строка) 2345 3456 4567 5678 0123 012 -201 -3-20

16 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); readln end.

17 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;


Download ppt "Объекты - списки unit List; interface type TElem = class public p: TElem; s: integer; constructor Create(r: TElem); function Len: integer; function Sum:"

Similar presentations


Ads by Google