Добавил пару примеров

This commit is contained in:
miks1965 2016-04-26 09:05:23 +03:00
parent c785cafe68
commit 0e9f711dae
5 changed files with 116 additions and 16 deletions

View file

@ -0,0 +1,70 @@
uses GraphABC;
procedure DrawCell(a: array [,] of integer; x,y: integer);
var sz := 30;
begin
case a[y,x] of
0: Brush.Color := Color.White;
1: Brush.Color := Color.Black;
2: Brush.Color := Color.Chocolate;
end;
Rectangle(x*sz,y*sz,x*sz+sz-1,y*sz+sz-1)
end;
procedure AddToQueue(a: array [,] of integer; x,y: integer; q: Queue<(integer,integer)>);
begin
if a[y,x] = 0 then
begin
q.Enqueue(new Point(x,y));
a[y,x] := 2;
Sleep(200);
DrawCell(a,x,y);
end;
end;
procedure FloodFill(a: array [,] of integer; x,y: integer);
begin
var q := new Queue<(integer,integer)>;
AddToQueue(a,x,y,q);
while not (q.Count=0) do
begin
(x,y) := q.Dequeue();
AddToQueue(a,x+1,y,q);
AddToQueue(a,x-1,y,q);
AddToQueue(a,x,y+1,q);
AddToQueue(a,x,y-1,q);
end;
end;
procedure ReadFromFile(fname: string; var a: array [,] of integer);
begin
var f := OpenRead(fname);
var dimx,dimy: integer;
readln(f,dimy,dimx);
SetLength(a,dimy,dimx);
for var y := 0 to dimy-1 do
begin
for var x := 0 to dimx-1 do
begin
var c := f.ReadChar;
a[y,x]:= c='*' ? 1 : 0;
end;
readln(f)
end;
f.Close;
end;
procedure Draw(a: array [,] of integer);
begin
for var y := 0 to a.GetLength(1)-1 do
for var x := 0 to a.GetLength(0)-1 do
DrawCell(a,x,y);
end;
begin
Window.Title := 'Èëëþñòðàöèÿ àëãîðèòìà FloodFill';
var a: array [,] of integer;
ReadFromFile('field.txt',a);
Draw(a);
FloodFill(a,4,4);
end.

View file

@ -1,6 +1,4 @@
// Быстрая сортировка Ч. Хоара
uses ArrayLib;
// Быстрая сортировка Ч. Хоара
/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r]
function Partition(a: array of integer; l,r: integer): integer;
begin
@ -10,10 +8,10 @@ begin
while True do
begin
repeat
Inc(i);
i += 1;
until a[i]>=x;
repeat
Dec(j);
j -= 1;
until a[j]<=x;
if i<j then
Swap(a[i],a[j])
@ -36,10 +34,8 @@ end;
const n = 20;
var a: array of integer;
begin
CreateRandom(a,n);
var a := ArrRandom(n);
writeln('До сортировки: ');
Writeln(a);
QuickSort(a,0,a.Length-1);

View file

@ -1,6 +1,4 @@
// Сортировка выбором
uses ArrayLib;
// Сортировка выбором
procedure SelectionSort(a: array of real);
begin
for var i:=0 to a.Length-2 do
@ -25,13 +23,11 @@ begin
Result[i] := Random(100);
end;
var a: array of real;
begin
a := CreateRandomArr(20);
var a := ArrRandomReal(20);
writeln('Содержимое массива: ');
Writeln(a);
a.Println;
SelectionSort(a);
writeln('После сортировки выбором: ');
Writeln(a);
a.Println;
end.

View file

@ -0,0 +1,19 @@
begin
var q := new Queue<(integer,integer)>;
q.Enqueue((1,2));
q.Enqueue((2,5));
q.Println;
Println(q);
var l := new List<integer->integer>;
l.Add(x->x);
l.Add(x->x*x);
l.ForEach(f->Print(f(5)));
Println;
var l1 := new List<(integer,integer)->integer>;
l1.Add((x,y)->x+y);
l1.Add((x,y)->x-y);
l1.Add((x,y)->x*y);
l1.ForEach(f->Print(f(2,3)));
end.

View file

@ -0,0 +1,19 @@
begin
var q := new Queue<(integer,integer)>;
q.Enqueue((1,2));
q.Enqueue((2,5));
q.Println;
Println(q);
var l := new List<integer->integer>;
l.Add(x->x);
l.Add(x->x*x);
l.ForEach(f->Print(f(5)));
Println;
var l1 := new List<(integer,integer)->integer>;
l1.Add((x,y)->x+y);
l1.Add((x,y)->x-y);
l1.Add((x,y)->x*y);
l1.ForEach(f->Print(f(2,3)));
end.