diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index f8382ee64..23e80953c 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "8"; public const string Build = "3"; - public const string Revision = "3226"; + public const string Revision = "3233"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 186615376..7b86a0824 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=3226 %MINOR%=8 +%REVISION%=3233 +%COREVERSION%=3 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 9ed6bc016..33663dced 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.3.3226 +3.8.3.3233 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 8873aa854..91f1778e0 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.3.3226' +!define VERSION '3.8.3.3233' diff --git a/ReleaseGenerators/RebuildStandartModules.pas b/ReleaseGenerators/RebuildStandartModules.pas index e0269523f..c12c0e5df 100644 --- a/ReleaseGenerators/RebuildStandartModules.pas +++ b/ReleaseGenerators/RebuildStandartModules.pas @@ -6,7 +6,7 @@ GraphABCHelper, GraphWPFBase, Graph3D, - GraphWPF, Turtle, + GraphWPF, Turtle, TurtleWPF, WPFObjects, NumLibABC, IniFile, PointerTools, PointRect, PT4, PT4MakerNetX, Robot, RobotField, diff --git a/ReleaseGenerators/sect_Core.nsh b/ReleaseGenerators/sect_Core.nsh index f120c132d..d2623abdb 100644 --- a/ReleaseGenerators/sect_Core.nsh +++ b/ReleaseGenerators/sect_Core.nsh @@ -138,6 +138,7 @@ File ..\bin\Lib\School.pcu File ..\bin\Lib\SF.pcu File ..\bin\Lib\Turtle.pcu + File ..\bin\Lib\TurtleWPF.pcu File ..\bin\Lib\LightPT.pcu File ..\bin\Lib\Tasks.pcu File ..\bin\Lib\TwoPanelsWindow.pcu @@ -146,13 +147,14 @@ File ..\bin\Lib\XLSX.pcu File ..\bin\Lib\Мозаика.pcu - File ..\bin\Lib\PABCRtl.dll File ..\bin\Lib\HelixToolkit.Wpf.dll File ..\bin\Lib\HelixToolkit.dll File ..\bin\Lib\nunit.framework.dll File ..\bin\Lib\InteractiveDataDisplay.WPF.dll + File ..\bin\Lib\turtle.png + ${AddFile} "__RedirectIOMode.pcu" ${AddFile} "__RunMode.pcu" ${AddFile} "ABCButtons.pcu" @@ -217,6 +219,7 @@ ${AddFile} "School.pcu" ${AddFile} "SF.pcu" ${AddFile} "Turtle.pcu" + ${AddFile} "TurtleWPF.pcu" ${AddFile} "LightPT.pcu" ${AddFile} "Tasks.pcu" ${AddFile} "TwoPanelsWindow.pcu" @@ -225,6 +228,7 @@ ${AddFile} "XLSX.pcu" ${AddFile} "Мозаика.pcu" + ${AddFile} "turtle.png" ${AddFile} "PABCRtl.dll" ${AddFile} "HelixToolkit.Wpf.dll" @@ -314,6 +318,7 @@ File ..\bin\Lib\School.pas File ..\bin\Lib\SF.pas File ..\bin\Lib\Turtle.pas + File ..\bin\Lib\TurtleWPF.pas File ..\bin\Lib\LightPT.pas File ..\bin\Lib\Tasks.pas File ..\bin\Lib\TwoPanelsWindow.pas @@ -387,6 +392,7 @@ ${AddFile} "School.pas" ${AddFile} "SF.pas" ${AddFile} "Turtle.pas" + ${AddFile} "TurtleWPF.pas" ${AddFile} "LightPT.pas" ${AddFile} "Tasks.pas" ${AddFile} "TwoPanelsWindow.pas" diff --git a/TestSuite/CompilationSamples/GraphWPF.pas b/TestSuite/CompilationSamples/GraphWPF.pas index 76400a0fd..a4e9ed2fc 100644 --- a/TestSuite/CompilationSamples/GraphWPF.pas +++ b/TestSuite/CompilationSamples/GraphWPF.pas @@ -96,6 +96,8 @@ type th: real := 1; fx,fy: real; rc: boolean := false; + public + ///-- function PenConstruct: GPen; begin Result := new GPen(GetBrush(c),th); @@ -110,6 +112,7 @@ type Result.StartLineCap := PenLineCap.Flat; Result.EndLineCap := PenLineCap.Flat; end; + Result.Freeze; end; public /// Цвет пера diff --git a/TestSuite/CompilationSamples/Robot.pas b/TestSuite/CompilationSamples/Robot.pas index 2ab7e87ba..b88e758ec 100644 --- a/TestSuite/CompilationSamples/Robot.pas +++ b/TestSuite/CompilationSamples/Robot.pas @@ -410,6 +410,12 @@ begin RegisterTask('pp7',pp7); RegisterTask('pp8',pp8); + RegisterTask('br1',br1); + RegisterTask('br2',br2); + RegisterTask('br3',br3); + RegisterTask('br4',br4); + RegisterTask('br5',br5); + RegisterTask('examen1',examen1); RegisterTask('examen2',examen2); RegisterTask('examen3',examen3); @@ -420,6 +426,7 @@ begin RegisterTask('examen8',examen8); RegisterTask('examen9',examen9); RegisterTask('examen10',examen10); + end; procedure Task(name: string); diff --git a/TestSuite/CompilationSamples/RobotZadan.pas b/TestSuite/CompilationSamples/RobotZadan.pas index 62ead6078..9d830139f 100644 --- a/TestSuite/CompilationSamples/RobotZadan.pas +++ b/TestSuite/CompilationSamples/RobotZadan.pas @@ -157,6 +157,12 @@ procedure pp6; procedure pp7; procedure pp8; +procedure br1; +procedure br2; +procedure br3; +procedure br4; +procedure br5; + procedure examen1; procedure examen2; procedure examen3; @@ -261,33 +267,30 @@ begin end; procedure c5; -var i: integer; begin TaskText('Задание c5. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(1,1,11,11); - for i:=1 to 10 do + for var i:=1 to 10 do Tag(i,i); end; procedure c6; -var i: integer; begin TaskText('Задание c6. Закрасить помеченные клетки'); Field(17,1); RobotBeginEnd(17,1,17,1); - for i:=1 to 8 do + for var i:=1 to 8 do Tag(2*i,1); end; procedure c7; -var i: integer; begin TaskText('Задание c7. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(2,1,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin VerticalWall(2*i,1,1); VerticalWall(2*i-1,2,1); @@ -295,23 +298,21 @@ begin end; procedure c8; -var i: integer; begin TaskText('Задание c8. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(1,1,11,1); - for i:=1 to 10 do + for var i:=1 to 10 do VerticalWall(i,1,1); end; procedure c9; -var i: integer; begin TaskText('Задание c9. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,2,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin Tag(2*i,1); Tag(2*i-1,2); @@ -376,13 +377,12 @@ begin end; procedure c16; -var i: integer; begin TaskText('Задание c16. Закрасить помеченные клетки'); Field(12,3); RobotBeginEnd(2,2,2,2); TagRect(2,2,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin HorizontalWall(2*i,1,1); HorizontalWall(1+2*i,2,1); @@ -393,14 +393,13 @@ begin end; procedure if1; -var r: integer; begin TaskText('Задание if1. Обойти препятствие и закрасить клетку'); Field(5,5); RobotBeginEnd(2,3,4,3); Tag(4,3); VerticalWall(3,3,1); - r:=random(2); + var r:=random(2); if r=0 then begin HorizontalWall(3,2,1); @@ -767,26 +766,26 @@ begin end; procedure w4; -var n,i: integer; +var n: integer; begin TaskText('Задание w4. Дойти до конца закрашенного ряда переменной длины'); n:=random(7)+3; Field(10,3); RobotBeginEnd(2,2,n+1,2); - for i:=3 to n do + for var i:=3 to n do MarkPainted(i,2); end; procedure w5; -var n,m,i,j: integer; +var n,m: integer; begin TaskText('Задание w5. Дойти до правого нижнего угла закрашенного прямоугольника переменного размера'); n:=random(7)+3; m:=random(6)+3; Field(10,9); RobotBeginEnd(2,2,n,m); - for j:=2 to m do - for i:=2 to n do + for var j:=2 to m do + for var i:=2 to n do MarkPainted(i,j); end; @@ -889,7 +888,7 @@ begin end; procedure w13; -var n,i,m: integer; +var n,m: integer; begin TaskText('Задание w13. Подняться до клетки, имеющей проход налево или проход направо'); n:=random(7)+2; @@ -897,7 +896,7 @@ begin VerticalWall(2,9,2); VerticalWall(3,9,2); RobotEnd(3,10-n-1); - for i:=0 to n-2 do + for var i:=0 to n-2 do begin m:=random(3); if m=0 then VerticalWall(2,10-n+i,1); @@ -913,14 +912,14 @@ begin end; procedure w14; -var n,m,i: integer; +var n,m: integer; begin TaskText('Задание w14. Подняться до клетки, имеющей проход налево и проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); VerticalWall(3,9,2); RobotEnd(3,10-n-1); - for i:=0 to n-2 do + for var i:=0 to n-2 do begin m:=random(4); if m=0 then @@ -938,7 +937,7 @@ begin end; procedure w15; -var n,z,i: integer; +var n,z: integer; begin TaskText('Задание w15. Закрасить клетку под первой закрашенной клеткой, под которой свободно'); Field(15,5); @@ -946,7 +945,7 @@ begin HorizontalWall(2,3,2); z:=14; MarkPainted(14,3); - for i:=3 to 12 do + for var i:=3 to 12 do begin n:=random(4); if n=0 then @@ -967,36 +966,36 @@ begin end; procedure w16; -var n,i: integer; +var n: integer; begin TaskText('Задание w16. Идти до конца забора переменной длины'); n:=random(6)+8; Field(15,5); RobotBeginEnd(2,3,n+1,3); - for i:=2 to n do + for var i:=2 to n do VerticalWall(i,3,1); end; procedure w17; -var n,i: integer; +var n: integer; begin TaskText('Задание w17. Идти до конца забора переменной длины'); n:=random(6)+1; Field(15,5); RobotBeginEnd(2,3,2*n+1,3); - for i:=1 to n do + for var i:=1 to n do VerticalWall(2*i,3,1); end; procedure cif1; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif1. Закрасить все клетки под стенами'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(2); if r=1 then @@ -1008,14 +1007,14 @@ begin end; procedure cif2; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif2. Закрасить помеченные клетки'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(3); if r=1 then @@ -1032,14 +1031,14 @@ begin end; procedure cif3; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif3. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(4); if r=1 then @@ -1056,14 +1055,14 @@ begin end; procedure cif4; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif4. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1077,14 +1076,14 @@ begin end; procedure cif5; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif5. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1098,14 +1097,14 @@ begin end; procedure cif6; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif6. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if r1=1 then @@ -1118,14 +1117,14 @@ begin end; procedure cif7; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif7. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1139,14 +1138,14 @@ begin end; procedure cif8; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif8. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if (r1=1) and (r2=0) then @@ -1163,14 +1162,14 @@ begin end; procedure cif9; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif9. Закрасить помеченные клетки, используя три условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if r1=1 then @@ -1187,14 +1186,14 @@ begin end; procedure cif10; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif10. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1211,14 +1210,14 @@ begin end; procedure cif11; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif11. Закрасить помеченные клетки, используя в условии две операции and'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1235,14 +1234,14 @@ begin end; procedure cif12; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif12. Закрасить помеченные клетки, используя в условии операции and и or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1259,14 +1258,14 @@ begin end; procedure cif13; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif13. Закрасить помеченные клетки, используя в условии две операции and и одну or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1280,7 +1279,7 @@ begin end; procedure cif14; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif14. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; @@ -1288,7 +1287,7 @@ begin RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); HorizontalWall(1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1302,7 +1301,7 @@ begin end; procedure cif15; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif15. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; @@ -1310,7 +1309,7 @@ begin RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); HorizontalWall(1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1369,14 +1368,14 @@ begin end; procedure cif18; -var n,c,i: integer; +var n,c: integer; begin TaskText('Задание cif18. Перейти в конец более короткого ряда'); Field(15,4); RobotBegin(2,2); c:=random(2); n:=random(11)+1; - for i:=3 to 3+n-1 do + for var i:=3 to 3+n-1 do begin MarkPainted(i,2);MarkPainted(i,3) end; @@ -1512,7 +1511,7 @@ begin end; procedure count3; -var n1,n2,m,t,i: integer; +var n1,n2,m,t: integer; begin TaskText('Задание count3. Переместить Робота в клетку, симметричную относительно диагонали'); m:=10; @@ -1527,7 +1526,7 @@ begin n1:=n2; n2:=t; end; - for i:=1 to m do + for var i:=1 to m do MarkPainted(i,i); RobotBeginEnd(n1,n2,n2,n1); end; @@ -1593,13 +1592,13 @@ begin end; procedure count8; -var i,r,cc: integer; +var r,cc: integer; begin TaskText('Задание count8. Остановиться на пятой закрашенной клетке'); Field(21,3); RobotBeginEnd(2,2,1,2); cc:=0; - for i:=2 to 20 do + for var i:=2 to 20 do begin if i<16 then r:=random(2) @@ -1620,13 +1619,13 @@ begin end; procedure count9; -var cc,i,r: integer; +var cc,r: integer; begin TaskText('Задание count9. Остановиться на третьей закрашенной подряд клетке'); Field(20,3); RobotBeginEnd(2,2,1,2); cc:=0; - for i:=2 to 19 do + for var i:=2 to 19 do begin if i<17 then r:=random(2) @@ -1678,58 +1677,58 @@ begin end; procedure count12; -var n,i: integer; +var n: integer; begin TaskText('Задание count12. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 do + for var i:=1 to n div 2 do Tag(i*2,1); end; procedure count13; -var n,i: integer; +var n: integer; begin TaskText('Задание count13. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 + 1 do + for var i:=1 to n div 2 + 1 do Tag(i*2-1,1); end; procedure count14; -var n,i: integer; +var n: integer; begin TaskText('Задание count14. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 3 do + for var i:=1 to n div 3 do Tag(i*3,1); end; procedure count15; -var n,i: integer; +var n: integer; begin TaskText('Задание count15. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 3 + 1 do + for var i:=1 to n div 3 + 1 do Tag(i*3-2,1); end; procedure count16; -var n,i,f,z: integer; +var n,f,z: integer; begin TaskText('Задание count16. Закрасить все нечетные пролеты между закрашенными клетками'); Field(25,3); RobotBeginEnd(2,2,25,2); n:=2+random(5); f:=0; - for i:=2 to 24 do + for var i:=2 to 24 do begin if i=n then begin @@ -1752,14 +1751,14 @@ begin end; procedure count17; -var n,i,f: integer; +var n,f: integer; begin TaskText('Задание count17. Остановиться на первой клетке, нарушающей закономерность'); Field(25,3); n:=random(20)+4; RobotBeginEnd(2,2,n,2); f:=0; - for i:=2 to 24 do + for var i:=2 to 24 do begin if i<>n then begin @@ -1773,24 +1772,23 @@ begin end; procedure cc1; -var i: integer; begin TaskText('Задание cc1. Закрасить помеченные клетки, используя вложенные циклы'); Field(31,7); RobotBeginEnd(1,1,31,7); - for i:=1 to 6 do + for var i:=1 to 6 do TagRect(5*i-4,i,5*i,i); end; procedure cc2; -var a,b,i: integer; +var a,b: integer; begin TaskText('Задание cc2. Закрасить помеченные клетки, используя вложенные циклы'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; b:=1; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(a,i,b,i); a:=b+1; @@ -1799,14 +1797,14 @@ begin end; procedure cc3; -var a,b,i: integer; +var a,b: integer; begin TaskText('Задание cc3. Закрасить помеченные клетки, используя вложенный цикл с downto'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; b:=6; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(a,i,b,i); a:=b+1; @@ -1815,23 +1813,21 @@ begin end; procedure cc4; -var i: integer; begin TaskText('Задание cc4. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(11,10); RobotBeginEnd(1,1,1,10); TagRect(1,1,11,9); - for i:=1 to 9 do + for var i:=1 to 9 do HorizontalWall(2,i,10); end; procedure cc5; -var i: integer; begin TaskText('Задание cc5. Пройти лабиринт, используя во внешнем цикле два вложенных цикла'); Field(14,9); RobotBeginEnd(1,1,1,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(1,2*i-1,13); HorizontalWall(2,2*i,13); @@ -1839,13 +1835,13 @@ begin end; procedure cc6; -var i,n,j: integer; +var n,j: integer; begin TaskText('Задание cc6. Закрасить помеченные клетки'); n:=10; Field(20,n); RobotBeginEnd(1,n,20,n); j:=1; - for i:=1 to 5 do + for var i:=1 to 5 do begin HorizontalWall(j,n-1,3); VerticalWall(j+3,1,n-1);Tag(j+3,1);j:=j+4; @@ -1853,33 +1849,30 @@ begin end; procedure cc7; -var i: integer; begin TaskText('Задание cc7. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(1,1,1,10); - for i:=1 to 9 do + for var i:=1 to 9 do TagRect(1,i,i,i); end; procedure cc8; -var i: integer; begin TaskText('Задание cc8. Закрасить помеченные клетки, используя цикл с downto'); Field(10,10); RobotBeginEnd(1,1,1,10); - for i:=1 to 9 do + for var i:=1 to 9 do TagRect(1,i,10-i,i); end; procedure cc9; -var i: integer; begin TaskText('Задание cc9. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(10,1,10,10); TagRect(10,1,10,9); - for i:=1 to 9 do + for var i:=1 to 9 do begin HorizontalWall(11-i,i,i); HorizontalWall(1,i,9-i); @@ -1887,33 +1880,31 @@ begin end; procedure cc10; -var i: integer; begin TaskText('Задание cc10. Закрасить помеченные клетки'); Field(15,8); RobotBeginEnd(1,1,1,8); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(1,i,2*i,i); end; procedure cc11; -var i: integer; begin TaskText('Задание cc11. Закрасить помеченные клетки'); Field(14,8); RobotBeginEnd(1,1,1,8); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(1,i,2*i-1,i); end; procedure cc12; -var i,p: integer; +var p: integer; begin TaskText('Задание cc12. Закрасить помеченные клетки'); Field(33,7); RobotBeginEnd(1,1,1,7); p:=1; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(1,i,p,i); p:=p*2; @@ -1921,12 +1912,11 @@ begin end; procedure cc13; -var i: integer; begin TaskText('Задание cc13. Закрасить помеченные клетки'); Field(14,9); RobotBeginEnd(1,1,9,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(2*i-1,2*i-1,15-2*i); HorizontalWall(2*i+2,2*i,13); @@ -1935,12 +1925,11 @@ begin end; procedure cc14; -var i: integer; begin TaskText('Задание cc14. Пройти лабиринт'); Field(14,9); RobotBeginEnd(1,1,5,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(i,2*i-1,15-2*i); HorizontalWall(i+2,2*i,14-2*i); @@ -1950,25 +1939,24 @@ begin end; procedure cc15; -var i,n: integer; +var n: integer; begin TaskText('Задание cc15. Закрасить помеченные клетки'); n:=8; Field(15,9); RobotBeginEnd(n,2,n,9); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(n-i+1,i+1,n+i-1,i+1); end; procedure cc16; -var i,k,j: integer; begin TaskText('Задание cc16. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(22,7); RobotBeginEnd(2,6,22,6); - j:=2; - for k:=1 to 4 do - for i:=1 to 5 do + var j:=2; + for var k:=1 to 4 do + for var i:=1 to 5 do begin TagRect(j,6-i+1,j,6); j:=j+1; @@ -1976,15 +1964,15 @@ begin end; procedure cc17; -var i,j,k: integer; +var j: integer; begin TaskText('Задание cc17. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(29,8); RobotBeginEnd(2,7,28,7); j:=2; - for k:=1 to 6 do + for var k:=1 to 6 do begin - for i:=1 to 6-k+1 do + for var i:=1 to 6-k+1 do begin TagRect(j,7-i+1,j,7); j:=j+1; @@ -1994,11 +1982,10 @@ begin end; procedure cc18; -var i: integer; begin TaskText('Задание cc18. Закрасить помеченные клетки, используя цикл while внутри цикла for'); Field(12,7); RobotBeginEnd(1,1,1,7); - for i:=1 to 8 do + for var i:=1 to 8 do HorizontalWall(2,i,12); VerticalWall(7,1,1);Tag(7,1); VerticalWall(9,2,1);Tag(9,2); @@ -2010,13 +1997,13 @@ begin end; procedure cc19; -var i,n: integer; +var n: integer; begin TaskText('Задание cc19. Закрасить помеченные клетки. Высота поля может меняться'); n:=random(4)+6; Field(11,n); RobotBeginEnd(1,1,1,n); - for i:=1 to n do + for var i:=1 to n do begin Tag(11,i); HorizontalWall(2,i,10); @@ -2036,7 +2023,7 @@ begin end; procedure mix2; -var n1,n2,m,i,j,ij: integer; +var n1,n2,m,ij: integer; begin TaskText('Задание mix2. Закрасить в шахматном порядке прямоугольник переменного размера'); m:=8; @@ -2044,9 +2031,9 @@ begin n1:=random(6)+2; n2:=random(6)+2; RobotBeginEnd(n1,n2,m,m); - for i:=n1 to m do + for var i:=n1 to m do begin - for j:=n2 to m do + for var j:=n2 to m do begin ij:=i+j-n1-n2; if ij mod 2 = 0 then @@ -2104,12 +2091,12 @@ begin end; procedure mix6; -var i,c: integer; +var c: integer; begin TaskText('Задание mix6. Закрасить те клетки у правой стены, для которых закрашены клетки левой стены'); Field(11,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 10 do + for var i:=1 to 10 do begin c:=random(2); if c=1 then @@ -2121,12 +2108,12 @@ begin end; procedure mix7; -var i,c1,c2: integer; +var c1,c2: integer; begin TaskText('Задание mix7. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки'); Field(11,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 10 do + for var i:=1 to 10 do begin c1:=random(2); if c1=1 then MarkPainted(1,i); @@ -2139,12 +2126,12 @@ begin end; procedure mix8; -var i,c1,c2,c3,c4: integer; +var c1,c2,c3,c4: integer; begin TaskText('Задание mix8. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки и еще ровно одна'); Field(11,15); RobotBeginEnd(1,1,1,15); - for i:=1 to 14 do + for var i:=1 to 14 do begin c1:=random(2); if c1=1 then @@ -2229,9 +2216,8 @@ end; procedure p2; procedure my(n: integer); - var i: integer; begin - for i:=1 to n do + for var i:=1 to n do TagRect(3*i-1,2,3*i,3); end; begin @@ -2242,12 +2228,11 @@ begin end; procedure p3; -var i: integer; begin TaskText('Задание p3. Закрасить помеченные клетки, используя процедуру Square2'); Field(12,12); RobotBeginEnd(11,11,1,1); - for i:=1 to 6 do + for var i:=1 to 6 do TagRect(2*i-1,2*i-1,2*i,2*i); end; @@ -2268,32 +2253,29 @@ begin end; procedure p6; -var i: integer; begin TaskText('Задание p6. Закрасить помеченные клетки, составив процедуру Row, в которой Робот закрашивает ряд и возвращается назад'); Field(9,9); RobotBeginEnd(1,2,1,8); - for i:=1 to 4 do + for var i:=1 to 4 do TagRect(1,2*i,11,2*i); end; procedure p7; -var i: integer; begin TaskText('Задание p7. Закрасить помеченные клетки, составив процедуру Column, в которой Робот закрашивает колонку и возвращается назад'); Field(9,9); RobotBeginEnd(2,1,8,1); - for i:=1 to 4 do + for var i:=1 to 4 do TagRect(2*i,1,2*i,11); end; procedure p8; -var i: integer; begin TaskText('Задание p8. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(9,9); RobotBeginEnd(1,2,8,1); - for i:=1 to 4 do + for var i:=1 to 4 do begin TagRect(1,2*i,11,2*i); TagRect(2*i,1,2*i,11); @@ -2301,13 +2283,12 @@ begin end; procedure p9; -var i,j: integer; begin TaskText('Задание p9. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(15,15); RobotBeginEnd(2,2,6,6); - i:=2; - for j:=1 to 3 do + var i:=2; + for var j:=1 to 3 do begin TagRect(i,i,i+8,i); TagRect(i,i,i,i+8);i:=i+2; @@ -2315,13 +2296,12 @@ begin end; procedure p10; -var i,j: integer; begin TaskText('Задание p10. Закрасить помеченные клетки, составив процедуру Contour'); Field(31,7); RobotBeginEnd(2,2,26,2); - i:=2; - for j:=1 to 5 do + var i:=2; + for var j:=1 to 5 do begin TagRect(i,2,i+4,2); TagRect(i,2,i,6); @@ -2332,24 +2312,22 @@ begin end; procedure p11; -var i,j: integer; begin TaskText('Задание p11. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do Tag(2*i-1,2*j-1); end; procedure p12; -var i,j: integer; begin TaskText('Задание p12. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do begin Tag(2*i,2*j); Tag(2*i+1,2*j+1); @@ -2357,13 +2335,12 @@ begin end; procedure p13; -var i,j: integer; begin TaskText('Задание p13. Закрасить помеченные клетки, используя процедуру Punktir'); Field(17,14); RobotBeginEnd(2,2,2,14); - for i:=1 to 5 do - for j:=1 to 4 do + for var i:=1 to 5 do + for var j:=1 to 4 do begin Tag(3*i-1,3*j-1); Tag(3*i,3*j); @@ -2372,27 +2349,26 @@ begin end; procedure p14; -var i: integer; begin TaskText('Задание p14. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); Field(17,15); RobotBeginEnd(2,2,2,14); - for i:=1 to 8 do + for var i:=1 to 8 do TagRect(2*i,2,2*i,13); - for i:=1 to 8 do + for var i:=1 to 8 do TagRect(2,2*i,16,2*i); end; procedure p15; -var i,j,n: integer; +var n: integer; begin TaskText('Задание p15. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); n:=14; Field(25,n+1); RobotBeginEnd(2,2,2,n); - for i:=1 to 8 do + for var i:=1 to 8 do begin TagRect(4*i-1,2,4*i-1,n); - for j:=1 to 6 do + for var j:=1 to 6 do begin Tag(4*i-2,2*j+1); Tag(4*i,2*j+1); @@ -2429,12 +2405,11 @@ begin end; procedure pp1; -var i: integer; begin TaskText('Задание pp1. Закрасить помеченные клетки, составив процедуры с параметром RightN(n) и LeftN(n)'); Field(12,7); RobotBeginEnd(1,1,1,7); - for i:=1 to 8 do + for var i:=1 to 8 do HorizontalWall(2,i,12); Tag(7,1);Tag(9,2);Tag(5,3);Tag(4,4);Tag(11,5);Tag(2,6);Tag(7,7); end; @@ -2452,13 +2427,13 @@ begin end; procedure pp3; -var i,d: integer; +var d: integer; begin TaskText('Задание pp3. Пройти лабиринт. Составить процедуры с параметрами RightN(n), LeftN(n), UpN(n), DownN(n)'); d:=9; Field(d,d); RobotBeginEnd(1,1,5,5); - for i:=1 to 4 do + for var i:=1 to 4 do begin VerticalWall(i,i,d+1-2*i); HorizontalWall(i+1,d-i,d-2*i); @@ -2519,29 +2494,108 @@ begin TagRect(13,1,13,7); TagRect(15,1,15,7); Tag(14,2); end; +procedure br1; +begin + TaskText('Задание break1. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + Tag(x,3) + else + begin + HorizontalWall(x,3,1); + RobotEnd(x,3); + break; + end; +end; + +procedure br2; +begin + TaskText('Задание break2. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + Tag(x,2) + else + begin + HorizontalWall(x,3,1); + RobotEnd(x,3); + break; + end; +end; + +procedure br3; +begin + TaskText('Задание break3. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + begin + Tag(x,2); + Tag(x,3); + end + else + begin + MarkPainted(x,3); + RobotEnd(x,3); + break; + end; +end; + +procedure br4; +begin + TaskText('Задание break4. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + if xx < 13 then + begin + HorizontalWall(xx,4,1); + Tag(xx,4); + RobotEnd(xx,4); + end; +end; + +procedure br5; +begin + TaskText('Задание break5. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + if xx < 13 then + begin + MarkPainted(xx,2); + RobotEnd(xx,2); + end; +end; + + procedure examen1; -var i,j: integer; begin TaskText('Задание examen1. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do Tag(2*i-1,2*j-1); end; procedure examen2; -var i,j: integer; begin TaskText('Задание examen2. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); - for i:=1 to 7 do + for var i:=1 to 7 do begin - for j:=1 to 5 do + for var j:=1 to 5 do begin - Tag(2*i,2*j); - Tag(2*i+1,2*j+1); + Tag(2*i,2*j); Tag(2*i+1,2*j+1); end end end; @@ -2579,25 +2633,25 @@ begin end; procedure examen5; -var i,n: integer; +var n: integer; begin TaskText('Задание examen5. Закрасить все клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 do + for var i:=1 to n div 2 do Tag(i*2,1); end; procedure examen6; -var i,n,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание examen6. Закрасить помеченные клетки, используя 2 условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -2615,14 +2669,14 @@ begin end; procedure examen7; -var i,n,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание examen7. Закрасить помеченные клетки, используя в условии "and" и "or"'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); diff --git a/TestSuite/CompilationSamples/WPFObjects.pas b/TestSuite/CompilationSamples/WPFObjects.pas index 1c6a41804..875540d69 100644 --- a/TestSuite/CompilationSamples/WPFObjects.pas +++ b/TestSuite/CompilationSamples/WPFObjects.pas @@ -169,13 +169,13 @@ type ob: FrameworkElement; gr: Grid; // Grid связан только с текстом t: TextBlock; + ChildrenWPF := new List; + procedure InitOb(x,y,w,h: real; o: FrameworkElement; SetWH: boolean := True; Hidden: boolean := False); + protected transfgroup: TransformGroup; rot: RotateTransform; sca: ScaleTransform; transl: TranslateTransform; - - ChildrenWPF := new List; - procedure InitOb(x,y,w,h: real; o: FrameworkElement; SetWH: boolean := True; Hidden: boolean := False); public /// Направление движения по оси X. Используется методом Move auto property Dx: real; @@ -1233,7 +1233,7 @@ type // ----------------------------------------------------- /// Класс графических объектов "Рисунок" PictureWPF = class(ObjectWPF) - private + protected function CreateBitmapImage(fname: string) := new BitmapImage(new System.Uri(fname,System.UriKind.Relative)); procedure Rest(x,y,w,h: real; b: BitmapImage); begin @@ -1244,6 +1244,7 @@ type InitOb(x,y,w,h,im); end; + private procedure InitOb3(x,y,w,h: real; fname: string); begin var b := CreateBitmapImage(fname); diff --git a/TestSuite/CompilationSamples/turtle.png b/TestSuite/CompilationSamples/turtle.png new file mode 100644 index 000000000..4562bc74b Binary files /dev/null and b/TestSuite/CompilationSamples/turtle.png differ diff --git a/VisualPascalABCNET/Workbench/UpdateService.cs b/VisualPascalABCNET/Workbench/UpdateService.cs index a06cd640b..551fc18df 100644 --- a/VisualPascalABCNET/Workbench/UpdateService.cs +++ b/VisualPascalABCNET/Workbench/UpdateService.cs @@ -53,7 +53,7 @@ namespace VisualPascalABC try { WebClient client = new WebClient(); - newVersion = client.DownloadString("http://pascalabc.net/downloads/pabcversion.txt").Trim(); + newVersion = client.DownloadString("https://pascalabc.net/downloads/pabcversion.txt").Trim(); curVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); if ((new Version(curVersion)).CompareTo(new Version(newVersion)) == -1) status = 0; diff --git a/VisualPascalABCNETLinux/Workbench/UpdateService.cs b/VisualPascalABCNETLinux/Workbench/UpdateService.cs index 8dd6fd7fc..9ca934a69 100644 --- a/VisualPascalABCNETLinux/Workbench/UpdateService.cs +++ b/VisualPascalABCNETLinux/Workbench/UpdateService.cs @@ -53,7 +53,7 @@ namespace VisualPascalABC try { WebClient client = new WebClient(); - newVersion = client.DownloadString("http://pascalabc.net/downloads/pabcversion.txt").Trim(); + newVersion = client.DownloadString("https://pascalabc.net/downloads/pabcversion.txt").Trim(); curVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); if ((new Version(curVersion)).CompareTo(new Version(newVersion)) == -1) status = 0; diff --git a/bin/Lib/GraphWPF.pas b/bin/Lib/GraphWPF.pas index dc367c52d..9bf70da28 100644 --- a/bin/Lib/GraphWPF.pas +++ b/bin/Lib/GraphWPF.pas @@ -96,6 +96,8 @@ type th: real := 1; fx,fy: real; rc: boolean := false; + public + ///-- function PenConstruct: GPen; begin Result := new GPen(GetBrush(c),th); @@ -110,6 +112,7 @@ type Result.StartLineCap := PenLineCap.Flat; Result.EndLineCap := PenLineCap.Flat; end; + Result.Freeze; end; public /// Цвет пера diff --git a/bin/Lib/NUnitABC.pas b/bin/Lib/NUnitABC.pas index 2dbaff08d..62db4591b 100644 --- a/bin/Lib/NUnitABC.pas +++ b/bin/Lib/NUnitABC.pas @@ -6,6 +6,7 @@ uses NUnit.Framework; procedure InitPABCSystem; begin __InitPABCSystem; + System.Console.OutputEncoding := Encoding.GetEncoding(866); end; type diff --git a/bin/Lib/Robot.pas b/bin/Lib/Robot.pas index 2ab7e87ba..b88e758ec 100644 --- a/bin/Lib/Robot.pas +++ b/bin/Lib/Robot.pas @@ -410,6 +410,12 @@ begin RegisterTask('pp7',pp7); RegisterTask('pp8',pp8); + RegisterTask('br1',br1); + RegisterTask('br2',br2); + RegisterTask('br3',br3); + RegisterTask('br4',br4); + RegisterTask('br5',br5); + RegisterTask('examen1',examen1); RegisterTask('examen2',examen2); RegisterTask('examen3',examen3); @@ -420,6 +426,7 @@ begin RegisterTask('examen8',examen8); RegisterTask('examen9',examen9); RegisterTask('examen10',examen10); + end; procedure Task(name: string); diff --git a/bin/Lib/RobotZadan.pas b/bin/Lib/RobotZadan.pas index 62ead6078..9d830139f 100644 --- a/bin/Lib/RobotZadan.pas +++ b/bin/Lib/RobotZadan.pas @@ -157,6 +157,12 @@ procedure pp6; procedure pp7; procedure pp8; +procedure br1; +procedure br2; +procedure br3; +procedure br4; +procedure br5; + procedure examen1; procedure examen2; procedure examen3; @@ -261,33 +267,30 @@ begin end; procedure c5; -var i: integer; begin TaskText('Задание c5. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(1,1,11,11); - for i:=1 to 10 do + for var i:=1 to 10 do Tag(i,i); end; procedure c6; -var i: integer; begin TaskText('Задание c6. Закрасить помеченные клетки'); Field(17,1); RobotBeginEnd(17,1,17,1); - for i:=1 to 8 do + for var i:=1 to 8 do Tag(2*i,1); end; procedure c7; -var i: integer; begin TaskText('Задание c7. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(2,1,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin VerticalWall(2*i,1,1); VerticalWall(2*i-1,2,1); @@ -295,23 +298,21 @@ begin end; procedure c8; -var i: integer; begin TaskText('Задание c8. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(1,1,11,1); - for i:=1 to 10 do + for var i:=1 to 10 do VerticalWall(i,1,1); end; procedure c9; -var i: integer; begin TaskText('Задание c9. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,2,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin Tag(2*i,1); Tag(2*i-1,2); @@ -376,13 +377,12 @@ begin end; procedure c16; -var i: integer; begin TaskText('Задание c16. Закрасить помеченные клетки'); Field(12,3); RobotBeginEnd(2,2,2,2); TagRect(2,2,11,2); - for i:=1 to 5 do + for var i:=1 to 5 do begin HorizontalWall(2*i,1,1); HorizontalWall(1+2*i,2,1); @@ -393,14 +393,13 @@ begin end; procedure if1; -var r: integer; begin TaskText('Задание if1. Обойти препятствие и закрасить клетку'); Field(5,5); RobotBeginEnd(2,3,4,3); Tag(4,3); VerticalWall(3,3,1); - r:=random(2); + var r:=random(2); if r=0 then begin HorizontalWall(3,2,1); @@ -767,26 +766,26 @@ begin end; procedure w4; -var n,i: integer; +var n: integer; begin TaskText('Задание w4. Дойти до конца закрашенного ряда переменной длины'); n:=random(7)+3; Field(10,3); RobotBeginEnd(2,2,n+1,2); - for i:=3 to n do + for var i:=3 to n do MarkPainted(i,2); end; procedure w5; -var n,m,i,j: integer; +var n,m: integer; begin TaskText('Задание w5. Дойти до правого нижнего угла закрашенного прямоугольника переменного размера'); n:=random(7)+3; m:=random(6)+3; Field(10,9); RobotBeginEnd(2,2,n,m); - for j:=2 to m do - for i:=2 to n do + for var j:=2 to m do + for var i:=2 to n do MarkPainted(i,j); end; @@ -889,7 +888,7 @@ begin end; procedure w13; -var n,i,m: integer; +var n,m: integer; begin TaskText('Задание w13. Подняться до клетки, имеющей проход налево или проход направо'); n:=random(7)+2; @@ -897,7 +896,7 @@ begin VerticalWall(2,9,2); VerticalWall(3,9,2); RobotEnd(3,10-n-1); - for i:=0 to n-2 do + for var i:=0 to n-2 do begin m:=random(3); if m=0 then VerticalWall(2,10-n+i,1); @@ -913,14 +912,14 @@ begin end; procedure w14; -var n,m,i: integer; +var n,m: integer; begin TaskText('Задание w14. Подняться до клетки, имеющей проход налево и проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); VerticalWall(3,9,2); RobotEnd(3,10-n-1); - for i:=0 to n-2 do + for var i:=0 to n-2 do begin m:=random(4); if m=0 then @@ -938,7 +937,7 @@ begin end; procedure w15; -var n,z,i: integer; +var n,z: integer; begin TaskText('Задание w15. Закрасить клетку под первой закрашенной клеткой, под которой свободно'); Field(15,5); @@ -946,7 +945,7 @@ begin HorizontalWall(2,3,2); z:=14; MarkPainted(14,3); - for i:=3 to 12 do + for var i:=3 to 12 do begin n:=random(4); if n=0 then @@ -967,36 +966,36 @@ begin end; procedure w16; -var n,i: integer; +var n: integer; begin TaskText('Задание w16. Идти до конца забора переменной длины'); n:=random(6)+8; Field(15,5); RobotBeginEnd(2,3,n+1,3); - for i:=2 to n do + for var i:=2 to n do VerticalWall(i,3,1); end; procedure w17; -var n,i: integer; +var n: integer; begin TaskText('Задание w17. Идти до конца забора переменной длины'); n:=random(6)+1; Field(15,5); RobotBeginEnd(2,3,2*n+1,3); - for i:=1 to n do + for var i:=1 to n do VerticalWall(2*i,3,1); end; procedure cif1; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif1. Закрасить все клетки под стенами'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(2); if r=1 then @@ -1008,14 +1007,14 @@ begin end; procedure cif2; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif2. Закрасить помеченные клетки'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(3); if r=1 then @@ -1032,14 +1031,14 @@ begin end; procedure cif3; -var n,i,r: integer; +var n,r: integer; begin TaskText('Задание cif3. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r:=random(4); if r=1 then @@ -1056,14 +1055,14 @@ begin end; procedure cif4; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif4. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1077,14 +1076,14 @@ begin end; procedure cif5; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif5. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1098,14 +1097,14 @@ begin end; procedure cif6; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif6. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if r1=1 then @@ -1118,14 +1117,14 @@ begin end; procedure cif7; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif7. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1139,14 +1138,14 @@ begin end; procedure cif8; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif8. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if (r1=1) and (r2=0) then @@ -1163,14 +1162,14 @@ begin end; procedure cif9; -var n,i,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание cif9. Закрасить помеченные клетки, используя три условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); if r1=1 then @@ -1187,14 +1186,14 @@ begin end; procedure cif10; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif10. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1211,14 +1210,14 @@ begin end; procedure cif11; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif11. Закрасить помеченные клетки, используя в условии две операции and'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1235,14 +1234,14 @@ begin end; procedure cif12; -var n,i,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание cif12. Закрасить помеченные клетки, используя в условии операции and и or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -1259,14 +1258,14 @@ begin end; procedure cif13; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif13. Закрасить помеченные клетки, используя в условии две операции and и одну or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1280,7 +1279,7 @@ begin end; procedure cif14; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif14. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; @@ -1288,7 +1287,7 @@ begin RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); HorizontalWall(1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1302,7 +1301,7 @@ begin end; procedure cif15; -var n,i,r2,r3: integer; +var n,r2,r3: integer; begin TaskText('Задание cif15. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; @@ -1310,7 +1309,7 @@ begin RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); HorizontalWall(1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r2:=random(2); r3:=random(2); @@ -1369,14 +1368,14 @@ begin end; procedure cif18; -var n,c,i: integer; +var n,c: integer; begin TaskText('Задание cif18. Перейти в конец более короткого ряда'); Field(15,4); RobotBegin(2,2); c:=random(2); n:=random(11)+1; - for i:=3 to 3+n-1 do + for var i:=3 to 3+n-1 do begin MarkPainted(i,2);MarkPainted(i,3) end; @@ -1512,7 +1511,7 @@ begin end; procedure count3; -var n1,n2,m,t,i: integer; +var n1,n2,m,t: integer; begin TaskText('Задание count3. Переместить Робота в клетку, симметричную относительно диагонали'); m:=10; @@ -1527,7 +1526,7 @@ begin n1:=n2; n2:=t; end; - for i:=1 to m do + for var i:=1 to m do MarkPainted(i,i); RobotBeginEnd(n1,n2,n2,n1); end; @@ -1593,13 +1592,13 @@ begin end; procedure count8; -var i,r,cc: integer; +var r,cc: integer; begin TaskText('Задание count8. Остановиться на пятой закрашенной клетке'); Field(21,3); RobotBeginEnd(2,2,1,2); cc:=0; - for i:=2 to 20 do + for var i:=2 to 20 do begin if i<16 then r:=random(2) @@ -1620,13 +1619,13 @@ begin end; procedure count9; -var cc,i,r: integer; +var cc,r: integer; begin TaskText('Задание count9. Остановиться на третьей закрашенной подряд клетке'); Field(20,3); RobotBeginEnd(2,2,1,2); cc:=0; - for i:=2 to 19 do + for var i:=2 to 19 do begin if i<17 then r:=random(2) @@ -1678,58 +1677,58 @@ begin end; procedure count12; -var n,i: integer; +var n: integer; begin TaskText('Задание count12. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 do + for var i:=1 to n div 2 do Tag(i*2,1); end; procedure count13; -var n,i: integer; +var n: integer; begin TaskText('Задание count13. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 + 1 do + for var i:=1 to n div 2 + 1 do Tag(i*2-1,1); end; procedure count14; -var n,i: integer; +var n: integer; begin TaskText('Задание count14. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 3 do + for var i:=1 to n div 3 do Tag(i*3,1); end; procedure count15; -var n,i: integer; +var n: integer; begin TaskText('Задание count15. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 3 + 1 do + for var i:=1 to n div 3 + 1 do Tag(i*3-2,1); end; procedure count16; -var n,i,f,z: integer; +var n,f,z: integer; begin TaskText('Задание count16. Закрасить все нечетные пролеты между закрашенными клетками'); Field(25,3); RobotBeginEnd(2,2,25,2); n:=2+random(5); f:=0; - for i:=2 to 24 do + for var i:=2 to 24 do begin if i=n then begin @@ -1752,14 +1751,14 @@ begin end; procedure count17; -var n,i,f: integer; +var n,f: integer; begin TaskText('Задание count17. Остановиться на первой клетке, нарушающей закономерность'); Field(25,3); n:=random(20)+4; RobotBeginEnd(2,2,n,2); f:=0; - for i:=2 to 24 do + for var i:=2 to 24 do begin if i<>n then begin @@ -1773,24 +1772,23 @@ begin end; procedure cc1; -var i: integer; begin TaskText('Задание cc1. Закрасить помеченные клетки, используя вложенные циклы'); Field(31,7); RobotBeginEnd(1,1,31,7); - for i:=1 to 6 do + for var i:=1 to 6 do TagRect(5*i-4,i,5*i,i); end; procedure cc2; -var a,b,i: integer; +var a,b: integer; begin TaskText('Задание cc2. Закрасить помеченные клетки, используя вложенные циклы'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; b:=1; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(a,i,b,i); a:=b+1; @@ -1799,14 +1797,14 @@ begin end; procedure cc3; -var a,b,i: integer; +var a,b: integer; begin TaskText('Задание cc3. Закрасить помеченные клетки, используя вложенный цикл с downto'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; b:=6; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(a,i,b,i); a:=b+1; @@ -1815,23 +1813,21 @@ begin end; procedure cc4; -var i: integer; begin TaskText('Задание cc4. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(11,10); RobotBeginEnd(1,1,1,10); TagRect(1,1,11,9); - for i:=1 to 9 do + for var i:=1 to 9 do HorizontalWall(2,i,10); end; procedure cc5; -var i: integer; begin TaskText('Задание cc5. Пройти лабиринт, используя во внешнем цикле два вложенных цикла'); Field(14,9); RobotBeginEnd(1,1,1,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(1,2*i-1,13); HorizontalWall(2,2*i,13); @@ -1839,13 +1835,13 @@ begin end; procedure cc6; -var i,n,j: integer; +var n,j: integer; begin TaskText('Задание cc6. Закрасить помеченные клетки'); n:=10; Field(20,n); RobotBeginEnd(1,n,20,n); j:=1; - for i:=1 to 5 do + for var i:=1 to 5 do begin HorizontalWall(j,n-1,3); VerticalWall(j+3,1,n-1);Tag(j+3,1);j:=j+4; @@ -1853,33 +1849,30 @@ begin end; procedure cc7; -var i: integer; begin TaskText('Задание cc7. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(1,1,1,10); - for i:=1 to 9 do + for var i:=1 to 9 do TagRect(1,i,i,i); end; procedure cc8; -var i: integer; begin TaskText('Задание cc8. Закрасить помеченные клетки, используя цикл с downto'); Field(10,10); RobotBeginEnd(1,1,1,10); - for i:=1 to 9 do + for var i:=1 to 9 do TagRect(1,i,10-i,i); end; procedure cc9; -var i: integer; begin TaskText('Задание cc9. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(10,1,10,10); TagRect(10,1,10,9); - for i:=1 to 9 do + for var i:=1 to 9 do begin HorizontalWall(11-i,i,i); HorizontalWall(1,i,9-i); @@ -1887,33 +1880,31 @@ begin end; procedure cc10; -var i: integer; begin TaskText('Задание cc10. Закрасить помеченные клетки'); Field(15,8); RobotBeginEnd(1,1,1,8); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(1,i,2*i,i); end; procedure cc11; -var i: integer; begin TaskText('Задание cc11. Закрасить помеченные клетки'); Field(14,8); RobotBeginEnd(1,1,1,8); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(1,i,2*i-1,i); end; procedure cc12; -var i,p: integer; +var p: integer; begin TaskText('Задание cc12. Закрасить помеченные клетки'); Field(33,7); RobotBeginEnd(1,1,1,7); p:=1; - for i:=1 to 6 do + for var i:=1 to 6 do begin TagRect(1,i,p,i); p:=p*2; @@ -1921,12 +1912,11 @@ begin end; procedure cc13; -var i: integer; begin TaskText('Задание cc13. Закрасить помеченные клетки'); Field(14,9); RobotBeginEnd(1,1,9,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(2*i-1,2*i-1,15-2*i); HorizontalWall(2*i+2,2*i,13); @@ -1935,12 +1925,11 @@ begin end; procedure cc14; -var i: integer; begin TaskText('Задание cc14. Пройти лабиринт'); Field(14,9); RobotBeginEnd(1,1,5,9); - for i:=1 to 4 do + for var i:=1 to 4 do begin HorizontalWall(i,2*i-1,15-2*i); HorizontalWall(i+2,2*i,14-2*i); @@ -1950,25 +1939,24 @@ begin end; procedure cc15; -var i,n: integer; +var n: integer; begin TaskText('Задание cc15. Закрасить помеченные клетки'); n:=8; Field(15,9); RobotBeginEnd(n,2,n,9); - for i:=1 to 7 do + for var i:=1 to 7 do TagRect(n-i+1,i+1,n+i-1,i+1); end; procedure cc16; -var i,k,j: integer; begin TaskText('Задание cc16. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(22,7); RobotBeginEnd(2,6,22,6); - j:=2; - for k:=1 to 4 do - for i:=1 to 5 do + var j:=2; + for var k:=1 to 4 do + for var i:=1 to 5 do begin TagRect(j,6-i+1,j,6); j:=j+1; @@ -1976,15 +1964,15 @@ begin end; procedure cc17; -var i,j,k: integer; +var j: integer; begin TaskText('Задание cc17. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(29,8); RobotBeginEnd(2,7,28,7); j:=2; - for k:=1 to 6 do + for var k:=1 to 6 do begin - for i:=1 to 6-k+1 do + for var i:=1 to 6-k+1 do begin TagRect(j,7-i+1,j,7); j:=j+1; @@ -1994,11 +1982,10 @@ begin end; procedure cc18; -var i: integer; begin TaskText('Задание cc18. Закрасить помеченные клетки, используя цикл while внутри цикла for'); Field(12,7); RobotBeginEnd(1,1,1,7); - for i:=1 to 8 do + for var i:=1 to 8 do HorizontalWall(2,i,12); VerticalWall(7,1,1);Tag(7,1); VerticalWall(9,2,1);Tag(9,2); @@ -2010,13 +1997,13 @@ begin end; procedure cc19; -var i,n: integer; +var n: integer; begin TaskText('Задание cc19. Закрасить помеченные клетки. Высота поля может меняться'); n:=random(4)+6; Field(11,n); RobotBeginEnd(1,1,1,n); - for i:=1 to n do + for var i:=1 to n do begin Tag(11,i); HorizontalWall(2,i,10); @@ -2036,7 +2023,7 @@ begin end; procedure mix2; -var n1,n2,m,i,j,ij: integer; +var n1,n2,m,ij: integer; begin TaskText('Задание mix2. Закрасить в шахматном порядке прямоугольник переменного размера'); m:=8; @@ -2044,9 +2031,9 @@ begin n1:=random(6)+2; n2:=random(6)+2; RobotBeginEnd(n1,n2,m,m); - for i:=n1 to m do + for var i:=n1 to m do begin - for j:=n2 to m do + for var j:=n2 to m do begin ij:=i+j-n1-n2; if ij mod 2 = 0 then @@ -2104,12 +2091,12 @@ begin end; procedure mix6; -var i,c: integer; +var c: integer; begin TaskText('Задание mix6. Закрасить те клетки у правой стены, для которых закрашены клетки левой стены'); Field(11,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 10 do + for var i:=1 to 10 do begin c:=random(2); if c=1 then @@ -2121,12 +2108,12 @@ begin end; procedure mix7; -var i,c1,c2: integer; +var c1,c2: integer; begin TaskText('Задание mix7. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки'); Field(11,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 10 do + for var i:=1 to 10 do begin c1:=random(2); if c1=1 then MarkPainted(1,i); @@ -2139,12 +2126,12 @@ begin end; procedure mix8; -var i,c1,c2,c3,c4: integer; +var c1,c2,c3,c4: integer; begin TaskText('Задание mix8. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки и еще ровно одна'); Field(11,15); RobotBeginEnd(1,1,1,15); - for i:=1 to 14 do + for var i:=1 to 14 do begin c1:=random(2); if c1=1 then @@ -2229,9 +2216,8 @@ end; procedure p2; procedure my(n: integer); - var i: integer; begin - for i:=1 to n do + for var i:=1 to n do TagRect(3*i-1,2,3*i,3); end; begin @@ -2242,12 +2228,11 @@ begin end; procedure p3; -var i: integer; begin TaskText('Задание p3. Закрасить помеченные клетки, используя процедуру Square2'); Field(12,12); RobotBeginEnd(11,11,1,1); - for i:=1 to 6 do + for var i:=1 to 6 do TagRect(2*i-1,2*i-1,2*i,2*i); end; @@ -2268,32 +2253,29 @@ begin end; procedure p6; -var i: integer; begin TaskText('Задание p6. Закрасить помеченные клетки, составив процедуру Row, в которой Робот закрашивает ряд и возвращается назад'); Field(9,9); RobotBeginEnd(1,2,1,8); - for i:=1 to 4 do + for var i:=1 to 4 do TagRect(1,2*i,11,2*i); end; procedure p7; -var i: integer; begin TaskText('Задание p7. Закрасить помеченные клетки, составив процедуру Column, в которой Робот закрашивает колонку и возвращается назад'); Field(9,9); RobotBeginEnd(2,1,8,1); - for i:=1 to 4 do + for var i:=1 to 4 do TagRect(2*i,1,2*i,11); end; procedure p8; -var i: integer; begin TaskText('Задание p8. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(9,9); RobotBeginEnd(1,2,8,1); - for i:=1 to 4 do + for var i:=1 to 4 do begin TagRect(1,2*i,11,2*i); TagRect(2*i,1,2*i,11); @@ -2301,13 +2283,12 @@ begin end; procedure p9; -var i,j: integer; begin TaskText('Задание p9. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(15,15); RobotBeginEnd(2,2,6,6); - i:=2; - for j:=1 to 3 do + var i:=2; + for var j:=1 to 3 do begin TagRect(i,i,i+8,i); TagRect(i,i,i,i+8);i:=i+2; @@ -2315,13 +2296,12 @@ begin end; procedure p10; -var i,j: integer; begin TaskText('Задание p10. Закрасить помеченные клетки, составив процедуру Contour'); Field(31,7); RobotBeginEnd(2,2,26,2); - i:=2; - for j:=1 to 5 do + var i:=2; + for var j:=1 to 5 do begin TagRect(i,2,i+4,2); TagRect(i,2,i,6); @@ -2332,24 +2312,22 @@ begin end; procedure p11; -var i,j: integer; begin TaskText('Задание p11. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do Tag(2*i-1,2*j-1); end; procedure p12; -var i,j: integer; begin TaskText('Задание p12. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do begin Tag(2*i,2*j); Tag(2*i+1,2*j+1); @@ -2357,13 +2335,12 @@ begin end; procedure p13; -var i,j: integer; begin TaskText('Задание p13. Закрасить помеченные клетки, используя процедуру Punktir'); Field(17,14); RobotBeginEnd(2,2,2,14); - for i:=1 to 5 do - for j:=1 to 4 do + for var i:=1 to 5 do + for var j:=1 to 4 do begin Tag(3*i-1,3*j-1); Tag(3*i,3*j); @@ -2372,27 +2349,26 @@ begin end; procedure p14; -var i: integer; begin TaskText('Задание p14. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); Field(17,15); RobotBeginEnd(2,2,2,14); - for i:=1 to 8 do + for var i:=1 to 8 do TagRect(2*i,2,2*i,13); - for i:=1 to 8 do + for var i:=1 to 8 do TagRect(2,2*i,16,2*i); end; procedure p15; -var i,j,n: integer; +var n: integer; begin TaskText('Задание p15. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); n:=14; Field(25,n+1); RobotBeginEnd(2,2,2,n); - for i:=1 to 8 do + for var i:=1 to 8 do begin TagRect(4*i-1,2,4*i-1,n); - for j:=1 to 6 do + for var j:=1 to 6 do begin Tag(4*i-2,2*j+1); Tag(4*i,2*j+1); @@ -2429,12 +2405,11 @@ begin end; procedure pp1; -var i: integer; begin TaskText('Задание pp1. Закрасить помеченные клетки, составив процедуры с параметром RightN(n) и LeftN(n)'); Field(12,7); RobotBeginEnd(1,1,1,7); - for i:=1 to 8 do + for var i:=1 to 8 do HorizontalWall(2,i,12); Tag(7,1);Tag(9,2);Tag(5,3);Tag(4,4);Tag(11,5);Tag(2,6);Tag(7,7); end; @@ -2452,13 +2427,13 @@ begin end; procedure pp3; -var i,d: integer; +var d: integer; begin TaskText('Задание pp3. Пройти лабиринт. Составить процедуры с параметрами RightN(n), LeftN(n), UpN(n), DownN(n)'); d:=9; Field(d,d); RobotBeginEnd(1,1,5,5); - for i:=1 to 4 do + for var i:=1 to 4 do begin VerticalWall(i,i,d+1-2*i); HorizontalWall(i+1,d-i,d-2*i); @@ -2519,29 +2494,108 @@ begin TagRect(13,1,13,7); TagRect(15,1,15,7); Tag(14,2); end; +procedure br1; +begin + TaskText('Задание break1. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + Tag(x,3) + else + begin + HorizontalWall(x,3,1); + RobotEnd(x,3); + break; + end; +end; + +procedure br2; +begin + TaskText('Задание break2. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + Tag(x,2) + else + begin + HorizontalWall(x,3,1); + RobotEnd(x,3); + break; + end; +end; + +procedure br3; +begin + TaskText('Задание break3. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + for var x:=3 to 12 do + if x <> xx then + begin + Tag(x,2); + Tag(x,3); + end + else + begin + MarkPainted(x,3); + RobotEnd(x,3); + break; + end; +end; + +procedure br4; +begin + TaskText('Задание break4. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + if xx < 13 then + begin + HorizontalWall(xx,4,1); + Tag(xx,4); + RobotEnd(xx,4); + end; +end; + +procedure br5; +begin + TaskText('Задание break5. Остановиться на указанной клетке. Использовать оператор break'); + Field(13,5); + RobotBeginEnd(2,3,12,3); + var xx := Random(3,17); + if xx < 13 then + begin + MarkPainted(xx,2); + RobotEnd(xx,2); + end; +end; + + procedure examen1; -var i,j: integer; begin TaskText('Задание examen1. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); - for i:=1 to 7 do - for j:=1 to 5 do + for var i:=1 to 7 do + for var j:=1 to 5 do Tag(2*i-1,2*j-1); end; procedure examen2; -var i,j: integer; begin TaskText('Задание examen2. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); - for i:=1 to 7 do + for var i:=1 to 7 do begin - for j:=1 to 5 do + for var j:=1 to 5 do begin - Tag(2*i,2*j); - Tag(2*i+1,2*j+1); + Tag(2*i,2*j); Tag(2*i+1,2*j+1); end end end; @@ -2579,25 +2633,25 @@ begin end; procedure examen5; -var i,n: integer; +var n: integer; begin TaskText('Задание examen5. Закрасить все клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); - for i:=1 to n div 2 do + for var i:=1 to n div 2 do Tag(i*2,1); end; procedure examen6; -var i,n,r1,r2: integer; +var n,r1,r2: integer; begin TaskText('Задание examen6. Закрасить помеченные клетки, используя 2 условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); @@ -2615,14 +2669,14 @@ begin end; procedure examen7; -var i,n,r1,r2,r3: integer; +var n,r1,r2,r3: integer; begin TaskText('Задание examen7. Закрасить помеченные клетки, используя в условии "and" и "or"'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); VerticalWall(n-1,2,1); - for i:=2 to n-1 do + for var i:=2 to n-1 do begin r1:=random(2); r2:=random(2); diff --git a/bin/Lib/TurtleWPF.pas b/bin/Lib/TurtleWPF.pas new file mode 100644 index 000000000..9d56f18bc --- /dev/null +++ b/bin/Lib/TurtleWPF.pas @@ -0,0 +1,170 @@ +unit TurtleWPF; + +{$resource 'turtle.png'} + +uses GraphWPF,WPFObjects,GraphWPFBase; +uses System.Windows.Media.Animation; +uses System.Windows.Media; +uses System.Windows.Media.Imaging; + +var + TurtleX: real := 400; + TurtleY: real := 300; + w := 24; // размер изображения Черепахи + +type + TurtleHelper = class(PictureWPF) + private + function CreateBitmapImageFromResource(resourcename: string): BitmapImage; + begin + var bi := new BitmapImage(); + bi.BeginInit(); + bi.StreamSource := GetResourceStream(resourcename); + bi.EndInit(); + Result := bi; + end; + procedure InitObFromResource(x,y,w,h: real; fname: string); + begin + var b := CreateBitmapImageFromResource(fname); + Rest(x,y,w,h,b); + end; + procedure AnimMoveByPE(a,b,sec: real); + begin + var v := CreateVisual; + var p := Center; + var (x,y) := (transl.X,transl.Y); + var ax := new DoubleAnimation(a + transl.X, System.TimeSpan.FromSeconds(sec)); + var ay := new DoubleAnimation(b + transl.Y, System.TimeSpan.FromSeconds(sec)); + ax.FillBehavior := FillBehavior.Stop; + ay.FillBehavior := FillBehavior.Stop; + var transl1 := transl; + ax.Completed += (o,e) -> begin + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(p.X + a,p.Y + b))); + transl1.X := x + a; // transl - ошибка с лямбдами! + end; + ay.Completed += (o,e) -> begin + transl1.Y := y + b; + end; + ax.CurrentTimeInvalidated += (o,e) -> + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(Center.X,Center.Y))); + transl.BeginAnimation(TranslateTransform.XProperty, ax, HandoffBehavior.Compose); + transl.BeginAnimation(TranslateTransform.YProperty, ay, HandoffBehavior.Compose); + end; + public + constructor (x,y,w,h: real; fname: string) := Invoke(InitObFromResource,x,y,w,h,fname); + procedure AnimMoveByE(a,b,sec: real); + begin + Invoke(AnimMoveByPE,a,b,sec); + Sleep(Round(sec*1000 + 50)); // 50 мс - За это время анимация должна закончиться + TurtleX += a; + TurtleY += b; + GraphWPF.MoveTo(TurtleX,TurtleY); + end; + procedure AnimRotateE(a,sec: real); + begin + AnimRotate(a,sec); + Sleep(Round(sec*1000 + 50)); + end; + end; + Colors = GraphWPF.Colors; + +var t: TurtleHelper; + +var + a: real := 0; + dr := False; + speed := 10; + +procedure SetSpeed(sp: integer); +begin + speed := sp; +end; + +var sl := 30; + +procedure Hide; +begin + t.Visible := False; +end; + +procedure Show; +begin + t.Visible := True; +end; + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); +begin + a += da; + if speed = 10 then + begin + t.Rotate(da); + Sleep(sl); + end + else + begin + if dr then + t.AnimRotateE(da,Abs(da/(60*speed))) + else + begin + t.AnimRotate(da,Abs(da/(60*speed))); + Sleep(Round(Abs(da/(60*speed))*1000)+50); + end; + end; +end; + +/// Продвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); +begin + var v := r * Vect(Cos(DegToRad(a)),Sin(DegToRad(a))); + if (speed = 10) or (r < 20) then + begin + TurtleX += v.X; + TurtleY += v.Y; + if dr then + LineTo(TurtleX,TurtleY) + else MoveTo(TurtleX,TurtleY); + t.MoveBy(v.X,v.Y); + Sleep(sl); + end + else + begin + if dr then + t.AnimMoveByE(v.X,v.Y,r/(50*speed)) // 450 в секунду при скорости 9 + else + begin + t.AnimMoveBy(v.X,v.Y,r/(50*speed)); + Sleep(Round(r/(50*speed)*1000)+50); + end; + end; +end; + +/// Опускает хвост Черепахи +procedure Down := dr := True; + +/// Поднимает хвост Черепахи +procedure Up := dr := False; + +/// Устанавливает ширину линии +procedure SetWidth(w: real) := GraphWPF.Pen.Width := w; + +/// Устанавливает цвет линии +procedure SetColor(c: GColor) := GraphWPF.Pen.Color := c; + +/// Перемещает Черепаху в точку (x,y) +procedure MoveTo(x,y: real); +begin + TurtleX := x; + TurtleY := y; + GraphWPF.MoveTo(x,y); + t.Center := Pnt(x,y); +end; + +begin + Window.Title := 'Исполнитель Черепаха WPF'; + + t := new TurtleHelper(TurtleX-w/2,TurtleY-w/2,w,w,'turtle.png'); + //Pen.RoundCap := True; + MoveTo(TurtleX,TurtleY); + a -= 90; +end. \ No newline at end of file diff --git a/bin/Lib/WPFObjects.pas b/bin/Lib/WPFObjects.pas index 1c6a41804..875540d69 100644 --- a/bin/Lib/WPFObjects.pas +++ b/bin/Lib/WPFObjects.pas @@ -169,13 +169,13 @@ type ob: FrameworkElement; gr: Grid; // Grid связан только с текстом t: TextBlock; + ChildrenWPF := new List; + procedure InitOb(x,y,w,h: real; o: FrameworkElement; SetWH: boolean := True; Hidden: boolean := False); + protected transfgroup: TransformGroup; rot: RotateTransform; sca: ScaleTransform; transl: TranslateTransform; - - ChildrenWPF := new List; - procedure InitOb(x,y,w,h: real; o: FrameworkElement; SetWH: boolean := True; Hidden: boolean := False); public /// Направление движения по оси X. Используется методом Move auto property Dx: real; @@ -1233,7 +1233,7 @@ type // ----------------------------------------------------- /// Класс графических объектов "Рисунок" PictureWPF = class(ObjectWPF) - private + protected function CreateBitmapImage(fname: string) := new BitmapImage(new System.Uri(fname,System.UriKind.Relative)); procedure Rest(x,y,w,h: real; b: BitmapImage); begin @@ -1244,6 +1244,7 @@ type InitOb(x,y,w,h,im); end; + private procedure InitOb3(x,y,w,h: real; fname: string); begin var b := CreateBitmapImage(fname); diff --git a/bin/Lib/turtle.png b/bin/Lib/turtle.png new file mode 100644 index 000000000..4562bc74b Binary files /dev/null and b/bin/Lib/turtle.png differ diff --git a/bin/Lib/МозаикаABC.pas b/bin/Lib/МозаикаABC.pas new file mode 100644 index 000000000..b58b2e694 --- /dev/null +++ b/bin/Lib/МозаикаABC.pas @@ -0,0 +1,478 @@ +unit МозаикаABC; + +interface + +uses GraphABC; + +var Window := GraphABC.Window; + +procedure п; + +procedure к; +procedure кк1; +procedure кк2; +procedure кк3; +procedure кк4; +procedure кт1; +procedure кт2; +procedure кт3; +procedure кт4; + +procedure ко; +procedure кок1; +procedure кок2; +procedure кок3; +procedure кок4; +procedure кот1; +procedure кот2; +procedure кот3; +procedure кот4; + +procedure ж; +procedure жк1; +procedure жк2; +procedure жк3; +procedure жк4; +procedure жт1; +procedure жт2; +procedure жт3; +procedure жт4; + +procedure г; +procedure гк1; +procedure гк2; +procedure гк3; +procedure гк4; +procedure гт1; +procedure гт2; +procedure гт3; +procedure гт4; + +procedure ч; +procedure чк1; +procedure чк2; +procedure чк3; +procedure чк4; +procedure чт1; +procedure чт2; +procedure чт3; +procedure чт4; + +procedure б; +procedure бт1; +procedure бт2; +procedure бт3; +procedure бт4; +procedure бк1; +procedure бк2; +procedure бк3; +procedure бк4; + +procedure з; +procedure зт1; +procedure зт2; +procedure зт3; +procedure зт4; +procedure зк1; +procedure зк2; +procedure зк3; +procedure зк4; + +procedure с; +procedure ст1; +procedure ст2; +procedure ст3; +procedure ст4; +procedure ск1; +procedure ск2; +procedure ск3; +procedure ск4; + +procedure се; +procedure сет1; +procedure сет2; +procedure сет3; +procedure сет4; +procedure сек1; +procedure сек2; +procedure сек3; +procedure сек4; + +procedure о; +procedure от1; +procedure от2; +procedure от3; +procedure от4; +procedure ок1; +procedure ок2; +procedure ок3; +procedure ок4; + +procedure р; +procedure рт1; +procedure рт2; +procedure рт3; +procedure рт4; +procedure рк1; +procedure рк2; +procedure рк3; +procedure рк4; + +procedure ф; +procedure фт1; +procedure фт2; +procedure фт3; +procedure фт4; +procedure фк1; +procedure фк2; +procedure фк3; +procedure фк4; + +procedure Ряд(p: procedure); +procedure НарисоватьРяд(p: procedure); + +implementation + +var + w := 50; + z := 2; + x := 1; + y := 1; + +procedure Draw(x, y: integer) := Rectangle(x * w, y * w, w - z, w - z); + +procedure D(c: Color); +begin + Brush.Color := c; + Draw(x, y); + x += 1; +end; + +procedure Ц1(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w + w - z,w-z,90,180); + x += 1; +end; +procedure Ц2(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w + w - z,w-z,0,90); + x += 1; +end; +procedure Ц3(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w,w-z,270,360); + x += 1; +end; +procedure Ц4(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w,w-z,180,270); + x += 1; +end; +procedure Тр1(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w + w - z),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр2(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w + w - z),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; +procedure Тр3(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр4(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; + +//------ Соответствие цветов +var КрасныйЦвет := Color.Red; +var ОранжевыйЦвет := RGB(255,127,$00); +var ЖелтыйЦвет := Color.Yellow; +var ЗеленыйЦвет := RGB($00,$99,$00); +var ГолубойЦвет := RGB($61,$c3,$ff); +var СинийЦвет := RGB(0,0,255); +var ФиолетовыйЦвет := RGB($94,$00,$d3); + +var РозовыйЦвет := Color.Magenta; +var КоричневыйЦвет := RGB($96,$4B,$00); +var СерыйЦвет := Color.Gray; +var БелыйЦвет := Color.White; +var ЧерныйЦвет := Color.Black; + +//---------------- + +procedure Пусто := x += 1; + +procedure НовыйРяд := (x, y) := (1, y + 1); + +procedure Серый := D(СерыйЦвет); +procedure СерыйЦКруг1 := Ц1(СерыйЦвет); +procedure СерыйЦКруг2 := Ц2(СерыйЦвет); +procedure СерыйЦКруг3 := Ц3(СерыйЦвет); +procedure СерыйЦКруг4 := Ц4(СерыйЦвет); +procedure СерыйТр1 := Тр1(СерыйЦвет); +procedure СерыйТр2 := Тр2(СерыйЦвет); +procedure СерыйТр3 := Тр3(СерыйЦвет); +procedure СерыйТр4 := Тр4(СерыйЦвет); + +procedure Оранжевый := D(ОранжевыйЦвет); +procedure ОранжевыйЦКруг1 := Ц1(ОранжевыйЦвет); +procedure ОранжевыйЦКруг2 := Ц2(ОранжевыйЦвет); +procedure ОранжевыйЦКруг3 := Ц3(ОранжевыйЦвет); +procedure ОранжевыйЦКруг4 := Ц4(ОранжевыйЦвет); +procedure ОранжевыйТр1 := Тр1(ОранжевыйЦвет); +procedure ОранжевыйТр2 := Тр2(ОранжевыйЦвет); +procedure ОранжевыйТр3 := Тр3(ОранжевыйЦвет); +procedure ОранжевыйТр4 := Тр4(ОранжевыйЦвет); + +procedure Коричневый := D(КоричневыйЦвет); +procedure КоричневыйЦКруг1 := Ц1(КоричневыйЦвет); +procedure КоричневыйЦКруг2 := Ц2(КоричневыйЦвет); +procedure КоричневыйЦКруг3 := Ц3(КоричневыйЦвет); +procedure КоричневыйЦКруг4 := Ц4(КоричневыйЦвет); +procedure КоричневыйТр1 := Тр1(КоричневыйЦвет); +procedure КоричневыйТр2 := Тр2(КоричневыйЦвет); +procedure КоричневыйТр3 := Тр3(КоричневыйЦвет); +procedure КоричневыйТр4 := Тр4(КоричневыйЦвет); + +procedure Белый := D(БелыйЦвет); +procedure БелыйЦКруг1 := Ц1(БелыйЦвет); +procedure БелыйЦКруг2 := Ц2(БелыйЦвет); +procedure БелыйЦКруг3 := Ц3(БелыйЦвет); +procedure БелыйЦКруг4 := Ц4(БелыйЦвет); +procedure БелыйТр1 := Тр1(БелыйЦвет); +procedure БелыйТр2 := Тр2(БелыйЦвет); +procedure БелыйТр3 := Тр3(БелыйЦвет); +procedure БелыйТр4 := Тр4(БелыйЦвет); + +procedure Синий := D(СинийЦвет); +procedure СинийЦКруг1 := Ц1(СинийЦвет); +procedure СинийЦКруг2 := Ц2(СинийЦвет); +procedure СинийЦКруг3 := Ц3(СинийЦвет); +procedure СинийЦКруг4 := Ц4(СинийЦвет); +procedure СинийТр1 := Тр1(СинийЦвет); +procedure СинийТр2 := Тр2(СинийЦвет); +procedure СинийТр3 := Тр3(СинийЦвет); +procedure СинийТр4 := Тр4(СинийЦвет); + +procedure Фиолетовый := D(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг1 := Ц1(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг2 := Ц2(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг3 := Ц3(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг4 := Ц4(ФиолетовыйЦвет); +procedure ФиолетовыйТр1 := Тр1(ФиолетовыйЦвет); +procedure ФиолетовыйТр2 := Тр2(ФиолетовыйЦвет); +procedure ФиолетовыйТр3 := Тр3(ФиолетовыйЦвет); +procedure ФиолетовыйТр4 := Тр4(ФиолетовыйЦвет); + +procedure Красный := D(КрасныйЦвет); +procedure КрасныйЦКруг1 := Ц1(КрасныйЦвет); +procedure КрасныйЦКруг2 := Ц2(КрасныйЦвет); +procedure КрасныйЦКруг3 := Ц3(КрасныйЦвет); +procedure КрасныйЦКруг4 := Ц4(КрасныйЦвет); +procedure КрасныйТр1 := Тр1(КрасныйЦвет); +procedure КрасныйТр2 := Тр2(КрасныйЦвет); +procedure КрасныйТр3 := Тр3(КрасныйЦвет); +procedure КрасныйТр4 := Тр4(КрасныйЦвет); + +procedure Черный := D(ЧерныйЦвет); +procedure Чёрный := D(ЧерныйЦвет); +procedure ЧерныйТр1 := Тр1(ЧерныйЦвет); +procedure ЧерныйТр2 := Тр2(ЧерныйЦвет); +procedure ЧерныйТр3 := Тр3(ЧерныйЦвет); +procedure ЧерныйТр4 := Тр4(ЧерныйЦвет); +procedure ЧерныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧерныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧерныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧерныйЦКруг4 := Ц4(ЧерныйЦвет); +procedure ЧёрныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧёрныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧёрныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧёрныйЦКруг4 := Ц4(ЧерныйЦвет); + +procedure Зелёный := D(ЗеленыйЦвет); +procedure ЗелёныйЦКруг1 := Ц1(ЗеленыйЦвет); +procedure ЗелёныйЦКруг2 := Ц2(ЗеленыйЦвет); +procedure ЗелёныйЦКруг3 := Ц3(ЗеленыйЦвет); +procedure ЗелёныйЦКруг4 := Ц4(ЗеленыйЦвет); +procedure ЗелёныйТр1 := Тр1(ЗеленыйЦвет); +procedure ЗелёныйТр2 := Тр2(ЗеленыйЦвет); +procedure ЗелёныйТр3 := Тр3(ЗеленыйЦвет); +procedure ЗелёныйТр4 := Тр4(ЗеленыйЦвет); + +procedure Голубой := D(ГолубойЦвет); +procedure ГолубойЦКруг1 := Ц1(ГолубойЦвет); +procedure ГолубойЦКруг2 := Ц2(ГолубойЦвет); +procedure ГолубойЦКруг3 := Ц3(ГолубойЦвет); +procedure ГолубойЦКруг4 := Ц4(ГолубойЦвет); +procedure ГолубойТр1 := Тр1(ГолубойЦвет); +procedure ГолубойТр2 := Тр2(ГолубойЦвет); +procedure ГолубойТр3 := Тр3(ГолубойЦвет); +procedure ГолубойТр4 := Тр4(ГолубойЦвет); + +procedure Розовый := D(РозовыйЦвет); +procedure РозовыйЦКруг1 := Ц1(РозовыйЦвет); +procedure РозовыйЦКруг2 := Ц2(РозовыйЦвет); +procedure РозовыйЦКруг3 := Ц3(РозовыйЦвет); +procedure РозовыйЦКруг4 := Ц4(РозовыйЦвет); +procedure РозовыйТр1 := Тр1(РозовыйЦвет); +procedure РозовыйТр2 := Тр2(РозовыйЦвет); +procedure РозовыйТр3 := Тр3(РозовыйЦвет); +procedure РозовыйТр4 := Тр4(РозовыйЦвет); + +procedure Желтый := D(ЖелтыйЦвет); +procedure Жёлтый := D(ЖелтыйЦвет); +procedure ЖелтыйЦКруг1 := Ц1(ЖелтыйЦвет); +procedure ЖелтыйЦКруг2 := Ц2(ЖелтыйЦвет); +procedure ЖелтыйЦКруг3 := Ц3(ЖелтыйЦвет); +procedure ЖелтыйЦКруг4 := Ц4(ЖелтыйЦвет); +procedure ЖелтыйТр1 := Тр1(ЖелтыйЦвет); +procedure ЖелтыйТр2 := Тр2(ЖелтыйЦвет); +procedure ЖелтыйТр3 := Тр3(ЖелтыйЦвет); +procedure ЖелтыйТр4 := Тр4(ЖелтыйЦвет); + +procedure п := пусто; + +procedure к := красный; +procedure кк1 := красныйцкруг1; +procedure кк2 := красныйцкруг2; +procedure кк3 := красныйцкруг3; +procedure кк4 := красныйцкруг4; +procedure кт1 := красныйТр1; +procedure кт2 := красныйТр2; +procedure кт3 := красныйТр3; +procedure кт4 := красныйТр4; + +procedure ко := коричневый; +procedure кок1 := коричневыйцкруг1; +procedure кок2 := коричневыйцкруг2; +procedure кок3 := коричневыйцкруг3; +procedure кок4 := коричневыйцкруг4; +procedure кот1 := коричневыйТр1; +procedure кот2 := коричневыйТр2; +procedure кот3 := коричневыйТр3; +procedure кот4 := коричневыйТр4; + +procedure ж := желтый; +procedure жк1 := желтыйцкруг1; +procedure жк2 := желтыйцкруг2; +procedure жк3 := желтыйцкруг3; +procedure жк4 := желтыйцкруг4; +procedure жт1 := желтыйТр1; +procedure жт2 := желтыйТр2; +procedure жт3 := желтыйТр3; +procedure жт4 := желтыйТр4; + +procedure г := голубой; +procedure гк1 := Голубойцкруг1; +procedure гк2 := Голубойцкруг2; +procedure гк3 := Голубойцкруг3; +procedure гк4 := Голубойцкруг4; +procedure гт1 := ГолубойТр1; +procedure гт2 := ГолубойТр2; +procedure гт3 := ГолубойТр3; +procedure гт4 := ГолубойТр4; + +procedure ч := черный; +procedure Чк1 := ЧЕРНыйцкруг1; +procedure Чк2 := ЧЕРНыйцкруг2; +procedure Чк3 := ЧЕРНыйцкруг3; +procedure Чк4 := ЧЕРНыйцкруг4; +procedure Чт1 := ЧЕРНыйТр1; +procedure Чт2 := ЧЕРНыйТр2; +procedure Чт3 := ЧЕРНыйТр3; +procedure Чт4 := ЧЕРНыйТр4; + +procedure б := белый; +procedure бт1 := белыйТр1; +procedure бт2 := белыйТр2; +procedure бт3 := белыйТр3; +procedure бт4 := белыйТр4; +procedure Бк1 := белыйцкруг1; +procedure Бк2 := белыйцкруг2; +procedure Бк3 := белыйцкруг3; +procedure Бк4 := белыйцкруг4; + +procedure з := зелёный; +procedure зт1 := зелёныйТр1; +procedure зт2 := зелёныйТр2; +procedure зт3 := зелёныйТр3; +procedure зт4 := зелёныйТр4; +procedure зк1 := зелёныйцкруг1; +procedure зк2 := зелёныйцкруг2; +procedure зк3 := зелёныйцкруг3; +procedure зк4 := зелёныйцкруг4; + +procedure с := синий; +procedure ст1 := синийТр1; +procedure ст2 := синийТр2; +procedure ст3 := синийТр3; +procedure ст4 := синийТр4; +procedure ск1 := синийцкруг1; +procedure ск2 := синийцкруг2; +procedure ск3 := синийцкруг3; +procedure ск4 := синийцкруг4; + +procedure се := серый; +procedure сет1 := серыйТр1; +procedure сет2 := серыйТр2; +procedure сет3 := серыйТр3; +procedure сет4 := серыйТр4; +procedure сек1 := серыйцкруг1; +procedure сек2 := серыйцкруг2; +procedure сек3 := серыйцкруг3; +procedure сек4 := серыйцкруг4; + +procedure о := оранжевый; +procedure от1 := оранжевыйТр1; +procedure от2 := оранжевыйТр2; +procedure от3 := оранжевыйТр3; +procedure от4 := оранжевыйТр4; +procedure ок1 := оранжевыйцкруг1; +procedure ок2 := оранжевыйцкруг2; +procedure ок3 := оранжевыйцкруг3; +procedure ок4 := оранжевыйцкруг4; + +procedure Р := розовый; +procedure Рт1 := розовыйТр1; +procedure Рт2 := розовыйТр2; +procedure Рт3 := розовыйТр3; +procedure Рт4 := розовыйТр4; +procedure Рк1 := розовыйцкруг1; +procedure Рк2 := розовыйцкруг2; +procedure Рк3 := розовыйцкруг3; +procedure Рк4 := розовыйцкруг4; + +procedure ф := фиолетовый; +procedure фт1 := фиолетовыйТр1; +procedure фт2 := фиолетовыйТр2; +procedure фт3 := фиолетовыйТр3; +procedure фт4 := фиолетовыйТр4; +procedure фк1 := фиолетовыйцкруг1; +procedure фк2 := фиолетовыйцкруг2; +procedure фк3 := фиолетовыйцкруг3; +procedure фк4 := фиолетовыйцкруг4; + +procedure Run(p: procedure) := p; + +procedure НарисоватьРяд(p: procedure) := Run(p + НовыйРяд); +procedure Ряд(p: procedure) := (p + НовыйРяд); + +begin + Window.SetSize(1024,768); + //SetStandardCoords(1 / 1.25, 0.5, 0.5); + //pen.Width := 1 / 1.25; +end. \ No newline at end of file