diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/ProcToFun2.pas b/InstallerSamples/!Tutorial/08_ProcFunc/ProcToFun2.pas new file mode 100644 index 000000000..726fe5274 --- /dev/null +++ b/InstallerSamples/!Tutorial/08_ProcFunc/ProcToFun2.pas @@ -0,0 +1,12 @@ +// Функция, возвращающая кортеж + +function DivMod(a,b: integer): (integer,integer) := (a div b, a mod b); + +begin + var (a,b) := (7,3); + var (d,m) := DivMod(a,b); + Println($'{a} div {b} = {d}; {a} mod {b} = {m}'); + (a,b) := (23,5); + (d,m) := DivMod(a,b); + Println($'{a} div {b} = {d}; {a} mod {b} = {m}'); +end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas index 3fc2eafc6..8640ba052 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas @@ -1,14 +1,14 @@ -// Использование динамического массива. +// Использование динамического массива. // Процедура SetLength выделения памяти под динамический массив // Оператор foreach (массив доступен только на чтение) -var a: array of integer; begin var n := 20; + var a: array of integer; SetLength(a,n); for var i:=0 to a.Length-1 do a[i] := Random(1,99); - writeln('Содержимое случайного динамического массива целых: '); + Println('Содержимое случайного динамического массива целых: '); foreach var x in a do Print(x); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas index b5e877dc4..845232783 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas @@ -1,17 +1,16 @@ -// Использование динамического массива. -var a: array of integer; +// Использование динамического массива begin - writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); + Println('При присваивании динамических массивов две переменные начинают указывать на одну память:'); var n := 20; - a := new integer[n]; // Другой способ выделения памяти + var a := new integer[n]; // Другой способ выделения памяти for var i:=0 to a.Length-1 do a[i] := i; - writeln('До присваивания b[5]: a[5]=',a[5]); + Println('До присваивания b[5]: a[5]=',a[5]); var b: array of integer; b := a; b[5] := 666; - writeln('После присваивания b[5]: a[5]=',a[5]); + Println('После присваивания b[5]: a[5]=',a[5]); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas index 8c7e97bc4..c5423c3b3 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas @@ -1,8 +1,8 @@ -// Использование динамического массива. -var a: array of integer; +// Использование динамического массива begin - writeln('SetLength при повторном вызове не портит старые элементы:'); + Println('SetLength при повторном вызове не портит старые элементы:'); + var a: array of integer; SetLength(a,5); for var i:=0 to a.Length-1 do a[i] := i+1; diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas index 47fb8c953..af7167538 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas @@ -1,23 +1,24 @@ -// Передача динамического массива в качестве параметра +// Передача динамического массива в качестве параметра -procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект +procedure WriteArr(a: array of integer); +// var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект begin - foreach x: integer in a do - write(x,' '); - writeln; + foreach var x in a do + Print(x); + Println; end; -procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив +procedure CreateRandomArr(var a: array of integer; n: integer); +// var указывать нужно, т.к. в процедуре создается новый динамический массив begin a := new integer[n]; for var i:=0 to a.Length-1 do a[i] := Random(10); end; -var a: array of integer; - begin - writeln('Случайный целый массив: '); + Println('Случайный целый массив: '); + var a: array of integer; CreateRandomArr(a,30); WriteArr(a); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas index f8e2d5104..15aa9d145 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas @@ -1,6 +1,6 @@ -// Ошибка невыделения памяти для динамического массива -var a: array of integer; +// Ошибка невыделения памяти для динамического массива begin + var a: array of integer; a[0] := 666; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas index cd1da4b02..8b388d5cb 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas @@ -1,7 +1,7 @@ -// Ошибка выхода за границы диапазона для динамического массива -var a: array of integer; +// Ошибка выхода за границы диапазона для динамического массива begin + var a: array of integer; SetLength(a,10); a[10] := 666; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas b/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas index a0f618c87..488f3afd7 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas @@ -1,42 +1,22 @@ -// Сортировка выбором +// Сортировка выбором procedure SortByChoice(a: array of real); begin for var i:=0 to a.Length-2 do begin - var min := a[i]; - var ind := i; + var (min,ind) := (a[i],i); for var j:=i+1 to a.Length-1 do if a[j]0 then - writeln('Индекс первого элемента 7 равен ', ind) - else writeln('Элемент 7 отсутствует'); -end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas index fb2a6d4f2..a241e428e 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas @@ -1,7 +1,7 @@ -// Демонстрация секций инициализации и финализации модулей +// Демонстрация секций инициализации и финализации модулей // Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению" uses MyUnit; begin - writeln('Основная программа') + Println('Основная программа') end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas index 1887dbc7f..833764e18 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas @@ -1,7 +1,7 @@ -unit MyUnit; +unit MyUnit; initialization - writeln('Секция инициализации. Выполняется до начала основной программы') + Println('Секция инициализации. Выполняется до начала основной программы') finalization - writeln('Секция финализации. Выполняется после окончания основной программы') + Println('Секция финализации. Выполняется после окончания основной программы') end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitNames/MyA.pas b/InstallerSamples/!Tutorial/09_Units/UnitNames/MyA.pas index 7c8a67ab7..0fda854cb 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitNames/MyA.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitNames/MyA.pas @@ -1,8 +1,8 @@ -unit MyA; +unit MyA; procedure p; begin - writeln('MyA.p'); + Println('MyA.p'); end; begin diff --git a/InstallerSamples/!Tutorial/09_Units/UnitNames/MyB.pas b/InstallerSamples/!Tutorial/09_Units/UnitNames/MyB.pas index a33cebbf7..051ba124e 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitNames/MyB.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitNames/MyB.pas @@ -1,8 +1,8 @@ -unit MyB; +unit MyB; procedure p; begin - writeln('MyB.p'); + Println('MyB.p'); end; begin diff --git a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas index 09db6bfe0..06951743e 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas @@ -1,13 +1,10 @@ -uses MyUnit; // подключили модуль +uses MyUnit; // подключили модуль const Sz = 10; -var a: IntArr; - begin - Assert(sz<=Size,'Размер массива должен быть <='+Size.ToString); - FillArr(a,Sz); - writeln('Содержимое массива: '); - WriteArr(a,Sz); - writeln('Минимальный элемент: ',Min(a,Sz)); + var a: IntArr := FillArr(Sz); + Println('Содержимое массива:'); + a.Println; + Println('Минимальный элемент:',Min(a)); end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas index 87c14332c..cda7aad14 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas @@ -1,34 +1,27 @@ -/// Модуль упрощенной структуры +/// Модуль упрощенной структуры unit MyUnit; // имя модуля должно совпадать с именем файла const Size = 100; -type IntArr = array [1..Size] of integer; +type IntArr = array of integer; var Delimiter: string := ' '; // Документирующие комментарии отображаются при наведении на имя курсора мыши /// Заполняет массив случайными числами -procedure FillArr(var a: IntArr; n: integer); +function FillArr(n: integer): IntArr; begin - for var i:=1 to n do - a[i] := Random(100); -end; - -/// Выводит массив -procedure WriteArr(const a: IntArr; n: integer); -begin - for var i:=1 to n do - write(a[i],Delimiter); - writeln; + Result := new integer[n]; + for var i:=0 to Result.Length-1 do + Result[i] := Random(100); end; /// Возвращает минимальный элемент в массиве -function Min(const a: IntArr; n: integer): integer; +function Min(a: IntArr): integer; begin - Result := a[1]; - for var i:=1 to n do - if Result>a[i] then + Result := a[0]; + for var i:=1 to a.Length-1 do + if Result > a[i] then Result := a[i]; end; diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas index 9033bd4d8..4f6a1cc56 100644 --- a/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas @@ -1,40 +1,20 @@ -// Поиск значения в случайной матрице. Использование оператора goto -const - sz = 10; - m = 4; - n = 5; - -type Matrix = array [1..sz,1..sz] of integer; - -label 1; - -var matr: Matrix; +// Заполнение и вывод случайной матрицы begin - // Заполнение матрицы m x n случайными числами - for var i := 1 to m do - for var j := 1 to n do - matr[i,j] := Random(100); + var a := new integer[3,4]; - // Вывод матрицы - for var i := 1 to m do - begin - for var j := 1 to n do - write(matr[i,j]:3); - writeln; - end; + for var i:=0 to a.RowCount-1 do + for var j:=0 to a.ColCount-1 do + a[i,j] := i + j; - // Есть ли в матрице элемент 5? - var found5 := False; - for var i := 1 to m do - for var j := 1 to n do - if matr[i,j]=5 then - begin - found5 := True; - goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу - end; -1: - if found5 then - writeln('Элемент 5 найден') - else writeln('Элемент 5 не найден') + a.Println; + Println(a); + // 3 позиции под каждое значение + a.Println(3); + + var mr := MatrRandomReal(3,4); + mr.Println; + Println(mr); + // 6 позиций под каждое значение и 1 под дробную часть + mr.Println(6,1); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas index 42df846a3..69559cd63 100644 --- a/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas @@ -1,37 +1,12 @@ -// Матрица как динамический массив массивов -type Matrix = array of array of integer; - -function CreateMatrix(m,n: integer): Matrix; -begin - SetLength(Result,m); - for var i:=0 to m-1 do - SetLength(Result[i],n); -end; - -procedure FillMatrByRandom(matr: Matrix); -begin - for var i:=0 to matr.Length-1 do - for var j:=0 to matr[0].Length-1 do - matr[i][j] := Random(100); -end; - -procedure WriteMatrix(matr: Matrix); -begin - for var i := 0 to matr.Length-1 do - begin - for var j := 0 to matr[0].Length-1 do - write(matr[i,j]:3); - writeln; - end; -end; - -var matr: Matrix; +// Заполнение матрицы begin - var m := 5; - var n := 7; - matr := CreateMatrix(m,n); + // Создающая функция Matr + var a := Matr([1,2,3,4],[5,6,7,8],[9,10,11,12]); + a.Println(3); + Println; - FillMatrByRandom(matr); - WriteMatrix(matr); + // Создающая функция MatrGen + var a1 := MatrGen(3,4,(i,j)->i+j+0.5); + a1.Println(5,1); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr3.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr3.pas new file mode 100644 index 000000000..2839ed434 --- /dev/null +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr3.pas @@ -0,0 +1,25 @@ +// Строки и столбцы + +begin + var a := MatrRandomInteger(3,4); + a.Println; + Println; + + // Цикл для вывода k-той строки + var k := 1; + for var j:=0 to a.ColCount-1 do // foreach var x in a.Row(k) do Print(x); + Print(a[k,j]); + Println; + + // a.Row(k) возвращает одномерный массив - k-тую строку + a.Row(k).Println; + + // Цикл для вывода k-того столбца + k := 2; + for var i:=0 to a.RowCount-1 do + Print(a[i,k]); + Println; + + // a.Col(k) возвращает одномерный массив - k-тый столбец + a.Col(k).Println; +end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr4.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr4.pas new file mode 100644 index 000000000..3d37af5bc --- /dev/null +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr4.pas @@ -0,0 +1,25 @@ +// Строки и столбцы + +begin + var a := MatrRandomInteger(3,4); + a.Println; + Println; + + // Цикл для вывода k-той строки + var k := 1; + for var j:=0 to a.ColCount-1 do // foreach var x in a.Row(k) do Print(x); + Print(a[k,j]); + Println; + + // Срез a[k,:] возвращает одномерный массив - k-тую строку + a[k,:].Println; + + // Цикл для вывода k-того столбца + k := 2; + for var i:=0 to a.RowCount-1 do + Print(a[i,k]); + Println; + + // Срез a[:,k] возвращает одномерный массив - k-тый столбец + a[:,k].Println; +end. \ No newline at end of file