diff --git a/InstallerSamples/Algorithms/FloodFillTuple.pas b/InstallerSamples/Algorithms/FloodFillTuple.pas new file mode 100644 index 000000000..502830e0e --- /dev/null +++ b/InstallerSamples/Algorithms/FloodFillTuple.pas @@ -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. \ No newline at end of file diff --git a/InstallerSamples/Algorithms/SortArrays/QuickSort.pas b/InstallerSamples/Algorithms/SortArrays/QuickSort.pas index fe22f86be..67dd48b3c 100644 --- a/InstallerSamples/Algorithms/SortArrays/QuickSort.pas +++ b/InstallerSamples/Algorithms/SortArrays/QuickSort.pas @@ -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; + q.Enqueue((1,2)); + q.Enqueue((2,5)); + q.Println; + Println(q); + + var l := new Listinteger>; + 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. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ShortTypesInTemplateParams.pas b/TestSuite/CompilationSamples/ShortTypesInTemplateParams.pas new file mode 100644 index 000000000..3410bd26c --- /dev/null +++ b/TestSuite/CompilationSamples/ShortTypesInTemplateParams.pas @@ -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 Listinteger>; + 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. \ No newline at end of file