Примеры правлю
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 выделения памяти под динамический массив
|
||||
// Оператор 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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
// Ошибка невыделения памяти для динамического массива
|
||||
var a: array of integer;
|
||||
// Ошибка невыделения памяти для динамического массива
|
||||
|
||||
begin
|
||||
var a: array of integer;
|
||||
a[0] := 666;
|
||||
end.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
// Ошибка выхода за границы диапазона для динамического массива
|
||||
var a: array of integer;
|
||||
// Ошибка выхода за границы диапазона для динамического массива
|
||||
|
||||
begin
|
||||
var a: array of integer;
|
||||
SetLength(a,10);
|
||||
a[10] := 666;
|
||||
end.
|
||||
|
|
@ -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]<min then
|
||||
begin
|
||||
min := a[j];
|
||||
ind := j;
|
||||
end;
|
||||
a[ind] :=a [i];
|
||||
(min,ind) := (a[j],j);
|
||||
a[ind] := a[i];
|
||||
a[i] := min;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure WriteArr(a: array of real);
|
||||
begin
|
||||
foreach x: real in a do
|
||||
write(x,' ');
|
||||
writeln;
|
||||
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);
|
||||
var a := ArrRandomReal(20);
|
||||
Println('Содержимое массива: ');
|
||||
a.Println;
|
||||
SortByChoice(a);
|
||||
writeln('После сортировки выбором: ');
|
||||
WriteArr(a);
|
||||
Println('После сортировки выбором: ');
|
||||
a.Println;
|
||||
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, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению"
|
||||
uses MyUnit;
|
||||
|
||||
begin
|
||||
writeln('Основная программа')
|
||||
Println('Основная программа')
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
unit MyUnit;
|
||||
unit MyUnit;
|
||||
|
||||
initialization
|
||||
writeln('Секция инициализации. Выполняется до начала основной программы')
|
||||
Println('Секция инициализации. Выполняется до начала основной программы')
|
||||
finalization
|
||||
writeln('Секция финализации. Выполняется после окончания основной программы')
|
||||
Println('Секция финализации. Выполняется после окончания основной программы')
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
unit MyA;
|
||||
unit MyA;
|
||||
|
||||
procedure p;
|
||||
begin
|
||||
writeln('MyA.p');
|
||||
Println('MyA.p');
|
||||
end;
|
||||
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
unit MyB;
|
||||
unit MyB;
|
||||
|
||||
procedure p;
|
||||
begin
|
||||
writeln('MyB.p');
|
||||
Println('MyB.p');
|
||||
end;
|
||||
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
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