Примеры правлю
This commit is contained in:
parent
e0a2854a8e
commit
444637a9a5
12
InstallerSamples/!Tutorial/08_ProcFunc/ProcToFun2.pas
Normal file
12
InstallerSamples/!Tutorial/08_ProcFunc/ProcToFun2.pas
Normal file
|
|
@ -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.
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
// Использование динамического массива.
|
// Использование динамического массива.
|
||||||
// Процедура SetLength выделения памяти под динамический массив
|
// Процедура SetLength выделения памяти под динамический массив
|
||||||
// Оператор foreach (массив доступен только на чтение)
|
// Оператор foreach (массив доступен только на чтение)
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
var n := 20;
|
var n := 20;
|
||||||
|
var a: array of integer;
|
||||||
SetLength(a,n);
|
SetLength(a,n);
|
||||||
for var i:=0 to a.Length-1 do
|
for var i:=0 to a.Length-1 do
|
||||||
a[i] := Random(1,99);
|
a[i] := Random(1,99);
|
||||||
writeln('Содержимое случайного динамического массива целых: ');
|
Println('Содержимое случайного динамического массива целых: ');
|
||||||
foreach var x in a do
|
foreach var x in a do
|
||||||
Print(x);
|
Print(x);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,17 +1,16 @@
|
||||||
// Использование динамического массива.
|
// Использование динамического массива
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:');
|
Println('При присваивании динамических массивов две переменные начинают указывать на одну память:');
|
||||||
var n := 20;
|
var n := 20;
|
||||||
a := new integer[n]; // Другой способ выделения памяти
|
var a := new integer[n]; // Другой способ выделения памяти
|
||||||
for var i:=0 to a.Length-1 do
|
for var i:=0 to a.Length-1 do
|
||||||
a[i] := i;
|
a[i] := i;
|
||||||
|
|
||||||
writeln('До присваивания b[5]: a[5]=',a[5]);
|
Println('До присваивания b[5]: a[5]=',a[5]);
|
||||||
|
|
||||||
var b: array of integer;
|
var b: array of integer;
|
||||||
b := a;
|
b := a;
|
||||||
b[5] := 666;
|
b[5] := 666;
|
||||||
writeln('После присваивания b[5]: a[5]=',a[5]);
|
Println('После присваивания b[5]: a[5]=',a[5]);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Использование динамического массива.
|
// Использование динамического массива
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('SetLength при повторном вызове не портит старые элементы:');
|
Println('SetLength при повторном вызове не портит старые элементы:');
|
||||||
|
var a: array of integer;
|
||||||
SetLength(a,5);
|
SetLength(a,5);
|
||||||
for var i:=0 to a.Length-1 do
|
for var i:=0 to a.Length-1 do
|
||||||
a[i] := i+1;
|
a[i] := i+1;
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,24 @@
|
||||||
// Передача динамического массива в качестве параметра
|
// Передача динамического массива в качестве параметра
|
||||||
|
|
||||||
procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект
|
procedure WriteArr(a: array of integer);
|
||||||
|
// var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект
|
||||||
begin
|
begin
|
||||||
foreach x: integer in a do
|
foreach var x in a do
|
||||||
write(x,' ');
|
Print(x);
|
||||||
writeln;
|
Println;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив
|
procedure CreateRandomArr(var a: array of integer; n: integer);
|
||||||
|
// var указывать нужно, т.к. в процедуре создается новый динамический массив
|
||||||
begin
|
begin
|
||||||
a := new integer[n];
|
a := new integer[n];
|
||||||
for var i:=0 to a.Length-1 do
|
for var i:=0 to a.Length-1 do
|
||||||
a[i] := Random(10);
|
a[i] := Random(10);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Случайный целый массив: ');
|
Println('Случайный целый массив: ');
|
||||||
|
var a: array of integer;
|
||||||
CreateRandomArr(a,30);
|
CreateRandomArr(a,30);
|
||||||
WriteArr(a);
|
WriteArr(a);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Ошибка невыделения памяти для динамического массива
|
// Ошибка невыделения памяти для динамического массива
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
var a: array of integer;
|
||||||
a[0] := 666;
|
a[0] := 666;
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Ошибка выхода за границы диапазона для динамического массива
|
// Ошибка выхода за границы диапазона для динамического массива
|
||||||
var a: array of integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
var a: array of integer;
|
||||||
SetLength(a,10);
|
SetLength(a,10);
|
||||||
a[10] := 666;
|
a[10] := 666;
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,42 +1,22 @@
|
||||||
// Сортировка выбором
|
// Сортировка выбором
|
||||||
procedure SortByChoice(a: array of real);
|
procedure SortByChoice(a: array of real);
|
||||||
begin
|
begin
|
||||||
for var i:=0 to a.Length-2 do
|
for var i:=0 to a.Length-2 do
|
||||||
begin
|
begin
|
||||||
var min := a[i];
|
var (min,ind) := (a[i],i);
|
||||||
var ind := i;
|
|
||||||
for var j:=i+1 to a.Length-1 do
|
for var j:=i+1 to a.Length-1 do
|
||||||
if a[j]<min then
|
if a[j]<min then
|
||||||
begin
|
(min,ind) := (a[j],j);
|
||||||
min := a[j];
|
a[ind] := a[i];
|
||||||
ind := j;
|
|
||||||
end;
|
|
||||||
a[ind] :=a [i];
|
|
||||||
a[i] := min;
|
a[i] := min;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure WriteArr(a: array of real);
|
|
||||||
begin
|
begin
|
||||||
foreach x: real in a do
|
var a := ArrRandomReal(20);
|
||||||
write(x,' ');
|
Println('Содержимое массива: ');
|
||||||
writeln;
|
a.Println;
|
||||||
end;
|
|
||||||
|
|
||||||
function CreateRandomArr(n: integer): array of real;
|
|
||||||
begin
|
|
||||||
Result := new real[n];
|
|
||||||
for var i:=0 to Result.Length-1 do
|
|
||||||
Result[i] := Random(100);
|
|
||||||
end;
|
|
||||||
|
|
||||||
var a: array of real;
|
|
||||||
|
|
||||||
begin
|
|
||||||
a := CreateRandomArr(20);
|
|
||||||
writeln('Содержимое массива: ');
|
|
||||||
WriteArr(a);
|
|
||||||
SortByChoice(a);
|
SortByChoice(a);
|
||||||
writeln('После сортировки выбором: ');
|
Println('После сортировки выбором: ');
|
||||||
WriteArr(a);
|
a.Println;
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
// Использование массива
|
|
||||||
const n=10;
|
|
||||||
|
|
||||||
var a: array [1..n] of real;
|
|
||||||
|
|
||||||
begin
|
|
||||||
for var i:=1 to n do
|
|
||||||
a[i] := Random*10;
|
|
||||||
writeln('Содержимое случайного массива вещественных: ');
|
|
||||||
foreach x: real in a do
|
|
||||||
write(x:4:2,' ');
|
|
||||||
end.
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
// Передача массива как параметра подпрограмм
|
|
||||||
const n=10;
|
|
||||||
|
|
||||||
type RealArr = array [1..n] of real;
|
|
||||||
|
|
||||||
procedure FillArrByRandom(var a: RealArr; n: integer);
|
|
||||||
begin
|
|
||||||
for var i:=1 to n do
|
|
||||||
a[i] := Random*10;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure PrintArr(const a: RealArr; n: integer);
|
|
||||||
begin
|
|
||||||
foreach x: real in a do
|
|
||||||
write(x:4:2,' ');
|
|
||||||
end;
|
|
||||||
|
|
||||||
var a: RealArr;
|
|
||||||
|
|
||||||
begin
|
|
||||||
FillArrByRandom(a,n);
|
|
||||||
writeln('Содержимое случайного массива вещественных: ');
|
|
||||||
PrintArr(a,n);
|
|
||||||
end.
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
// Процедура exit выхода из подпрограммы
|
|
||||||
const n=10;
|
|
||||||
|
|
||||||
type IntArr = array [1..n] of integer;
|
|
||||||
|
|
||||||
procedure FillArrByRandom(var a: IntArr; n: integer);
|
|
||||||
begin
|
|
||||||
for var i:=1 to n do
|
|
||||||
a[i] := Random(10);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure PrintArr(const a: IntArr; n: integer);
|
|
||||||
begin
|
|
||||||
foreach x: integer in a do
|
|
||||||
write(x,' ');
|
|
||||||
writeln;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function IndexOf(const a: IntArr; n: integer; k: integer): integer;
|
|
||||||
begin
|
|
||||||
Result := 0;
|
|
||||||
for var i := 1 to n do
|
|
||||||
if a[i]=k then
|
|
||||||
begin
|
|
||||||
Result := i;
|
|
||||||
exit; // выход из процедуры
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var a: IntArr;
|
|
||||||
|
|
||||||
begin
|
|
||||||
FillArrByRandom(a,n);
|
|
||||||
writeln('Случайный массив целых: ');
|
|
||||||
PrintArr(a,n);
|
|
||||||
|
|
||||||
var ind := IndexOf(a,n,7);
|
|
||||||
if ind>0 then
|
|
||||||
writeln('Индекс первого элемента 7 равен ', ind)
|
|
||||||
else writeln('Элемент 7 отсутствует');
|
|
||||||
end.
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Демонстрация секций инициализации и финализации модулей
|
// Демонстрация секций инициализации и финализации модулей
|
||||||
// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению"
|
// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению"
|
||||||
uses MyUnit;
|
uses MyUnit;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Основная программа')
|
Println('Основная программа')
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
unit MyUnit;
|
unit MyUnit;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
writeln('Секция инициализации. Выполняется до начала основной программы')
|
Println('Секция инициализации. Выполняется до начала основной программы')
|
||||||
finalization
|
finalization
|
||||||
writeln('Секция финализации. Выполняется после окончания основной программы')
|
Println('Секция финализации. Выполняется после окончания основной программы')
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
unit MyA;
|
unit MyA;
|
||||||
|
|
||||||
procedure p;
|
procedure p;
|
||||||
begin
|
begin
|
||||||
writeln('MyA.p');
|
Println('MyA.p');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
unit MyB;
|
unit MyB;
|
||||||
|
|
||||||
procedure p;
|
procedure p;
|
||||||
begin
|
begin
|
||||||
writeln('MyB.p');
|
Println('MyB.p');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,10 @@
|
||||||
uses MyUnit; // подключили модуль
|
uses MyUnit; // подключили модуль
|
||||||
|
|
||||||
const Sz = 10;
|
const Sz = 10;
|
||||||
|
|
||||||
var a: IntArr;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Assert(sz<=Size,'Размер массива должен быть <='+Size.ToString);
|
var a: IntArr := FillArr(Sz);
|
||||||
FillArr(a,Sz);
|
Println('Содержимое массива:');
|
||||||
writeln('Содержимое массива: ');
|
a.Println;
|
||||||
WriteArr(a,Sz);
|
Println('Минимальный элемент:',Min(a));
|
||||||
writeln('Минимальный элемент: ',Min(a,Sz));
|
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,27 @@
|
||||||
/// Модуль упрощенной структуры
|
/// Модуль упрощенной структуры
|
||||||
unit MyUnit; // имя модуля должно совпадать с именем файла
|
unit MyUnit; // имя модуля должно совпадать с именем файла
|
||||||
|
|
||||||
const Size = 100;
|
const Size = 100;
|
||||||
|
|
||||||
type IntArr = array [1..Size] of integer;
|
type IntArr = array of integer;
|
||||||
|
|
||||||
var Delimiter: string := ' ';
|
var Delimiter: string := ' ';
|
||||||
|
|
||||||
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
||||||
/// Заполняет массив случайными числами
|
/// Заполняет массив случайными числами
|
||||||
procedure FillArr(var a: IntArr; n: integer);
|
function FillArr(n: integer): IntArr;
|
||||||
begin
|
begin
|
||||||
for var i:=1 to n do
|
Result := new integer[n];
|
||||||
a[i] := Random(100);
|
for var i:=0 to Result.Length-1 do
|
||||||
end;
|
Result[i] := Random(100);
|
||||||
|
|
||||||
/// Выводит массив
|
|
||||||
procedure WriteArr(const a: IntArr; n: integer);
|
|
||||||
begin
|
|
||||||
for var i:=1 to n do
|
|
||||||
write(a[i],Delimiter);
|
|
||||||
writeln;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Возвращает минимальный элемент в массиве
|
/// Возвращает минимальный элемент в массиве
|
||||||
function Min(const a: IntArr; n: integer): integer;
|
function Min(a: IntArr): integer;
|
||||||
begin
|
begin
|
||||||
Result := a[1];
|
Result := a[0];
|
||||||
for var i:=1 to n do
|
for var i:=1 to a.Length-1 do
|
||||||
if Result>a[i] then
|
if Result > a[i] then
|
||||||
Result := a[i];
|
Result := a[i];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
begin
|
||||||
// Заполнение матрицы m x n случайными числами
|
var a := new integer[3,4];
|
||||||
for var i := 1 to m do
|
|
||||||
for var j := 1 to n do
|
|
||||||
matr[i,j] := Random(100);
|
|
||||||
|
|
||||||
// Вывод матрицы
|
for var i:=0 to a.RowCount-1 do
|
||||||
for var i := 1 to m do
|
for var j:=0 to a.ColCount-1 do
|
||||||
begin
|
a[i,j] := i + j;
|
||||||
for var j := 1 to n do
|
|
||||||
write(matr[i,j]:3);
|
|
||||||
writeln;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Есть ли в матрице элемент 5?
|
a.Println;
|
||||||
var found5 := False;
|
Println(a);
|
||||||
for var i := 1 to m do
|
// 3 позиции под каждое значение
|
||||||
for var j := 1 to n do
|
a.Println(3);
|
||||||
if matr[i,j]=5 then
|
|
||||||
begin
|
var mr := MatrRandomReal(3,4);
|
||||||
found5 := True;
|
mr.Println;
|
||||||
goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу
|
Println(mr);
|
||||||
end;
|
// 6 позиций под каждое значение и 1 под дробную часть
|
||||||
1:
|
mr.Println(6,1);
|
||||||
if found5 then
|
|
||||||
writeln('Элемент 5 найден')
|
|
||||||
else writeln('Элемент 5 не найден')
|
|
||||||
end.
|
end.
|
||||||
|
|
@ -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
|
begin
|
||||||
var m := 5;
|
// Создающая функция Matr
|
||||||
var n := 7;
|
var a := Matr([1,2,3,4],[5,6,7,8],[9,10,11,12]);
|
||||||
matr := CreateMatrix(m,n);
|
a.Println(3);
|
||||||
|
Println;
|
||||||
|
|
||||||
FillMatrByRandom(matr);
|
// Создающая функция MatrGen
|
||||||
WriteMatrix(matr);
|
var a1 := MatrGen(3,4,(i,j)->i+j+0.5);
|
||||||
|
a1.Println(5,1);
|
||||||
end.
|
end.
|
||||||
25
InstallerSamples/!Tutorial/10_Matrices/Matr3.pas
Normal file
25
InstallerSamples/!Tutorial/10_Matrices/Matr3.pas
Normal file
|
|
@ -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.
|
||||||
25
InstallerSamples/!Tutorial/10_Matrices/Matr4.pas
Normal file
25
InstallerSamples/!Tutorial/10_Matrices/Matr4.pas
Normal file
|
|
@ -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.
|
||||||
Loading…
Reference in a new issue