lock
This commit is contained in:
parent
82de4615a5
commit
128600a1b3
11
!MainFeatures/01_First/Amp.pas
Normal file
11
!MainFeatures/01_First/Amp.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Пример иллюстрирует использование знака "&" для снятия атрибута ключевого слова
|
||||||
|
|
||||||
|
var
|
||||||
|
&begin,&end: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
&begin := 1;
|
||||||
|
&end := 2;
|
||||||
|
var t: System.Type := &begin.GetType; // в System.Type использовать & не надо
|
||||||
|
write(&begin,' ',&end,' ',t);
|
||||||
|
end.
|
29
!MainFeatures/01_First/Amp2.pas
Normal file
29
!MainFeatures/01_First/Amp2.pas
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Пример иллюстрирует использование знака "&" для явного указания шаблонного типа подпрограммы
|
||||||
|
|
||||||
|
function GetDefault<T>: T :=
|
||||||
|
default(T);
|
||||||
|
|
||||||
|
type
|
||||||
|
GenericType<T> = class
|
||||||
|
constructor := exit;
|
||||||
|
static procedure p1 := writeln(typeof(T));
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
// var o := GetDefault<byte>; //Ошибка: Встречено ';', а ожидалось выражение
|
||||||
|
// компилятор не отличает знак сравнения < от открытия угловой скобки
|
||||||
|
// и поэтому видит эту строчку как "(GetDefault < byte) > ;"
|
||||||
|
// ";" там оказывается неожиданно, потому что компилятор ожидал ещё какое то выражение для сравнения
|
||||||
|
|
||||||
|
// но, знаком "&" можно экранировать "<"
|
||||||
|
// то есть переключить значение "<" со знака сравнения на открывающуюся скобочку:
|
||||||
|
var o := GetDefault&<byte>;
|
||||||
|
|
||||||
|
// в случае с шаблонными типами - обычно "&" не нужен
|
||||||
|
var a := new GenericType<word>;
|
||||||
|
|
||||||
|
// однако для вызова статичного метода - его так же надо поставить
|
||||||
|
GenericType&<real>.p1;
|
||||||
|
|
||||||
|
end.
|
18
!MainFeatures/01_First/AssignExt.pas
Normal file
18
!MainFeatures/01_First/AssignExt.pas
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Присваивания += -= *= /=
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
r: real;
|
||||||
|
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
writeln('i := 1; i = ',i);
|
||||||
|
i += 2; // Увеличение на 2
|
||||||
|
writeln('i += 2; i = ',i);
|
||||||
|
i *= 3; // Умножение на 3
|
||||||
|
writeln('i *= 3; i = ',i);
|
||||||
|
writeln;
|
||||||
|
r := 6;
|
||||||
|
writeln('r := 6; r = ',r);
|
||||||
|
r /= 2;
|
||||||
|
writeln('r /= 2; r = ',r);
|
||||||
|
end.
|
10
!MainFeatures/01_First/AutoVars.pas
Normal file
10
!MainFeatures/01_First/AutoVars.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Автоопределение типа переменной
|
||||||
|
// Описание переменной в заголовке цикла for
|
||||||
|
begin
|
||||||
|
var x := 2;
|
||||||
|
for var i:=1 to 10 do
|
||||||
|
begin
|
||||||
|
write(x,' ');
|
||||||
|
x += 2;
|
||||||
|
end;
|
||||||
|
end.
|
11
!MainFeatures/01_First/BlockVar.pas
Normal file
11
!MainFeatures/01_First/BlockVar.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Перемена местами значений двух переменных с использованием третьей
|
||||||
|
var x,y: real;
|
||||||
|
|
||||||
|
begin
|
||||||
|
write('Введите x,y: ');
|
||||||
|
readln(x,y);
|
||||||
|
var v: real := x; // вспомогательная переменная
|
||||||
|
x := y;
|
||||||
|
y := v;
|
||||||
|
writeln('Новые значения x,y: ',x,' ',y);
|
||||||
|
end.
|
24
!MainFeatures/01_First/Foreach.pas
Normal file
24
!MainFeatures/01_First/Foreach.pas
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Пример иллюстрирует возможности оператора foreach
|
||||||
|
var
|
||||||
|
a: array [1..5] of integer := (1,3,5,7,9);
|
||||||
|
s: set of integer;
|
||||||
|
l: List<integer>;
|
||||||
|
|
||||||
|
begin
|
||||||
|
write('foreach по обычному массиву: ':35);
|
||||||
|
foreach x: integer in a do
|
||||||
|
Print(x);
|
||||||
|
writeln;
|
||||||
|
|
||||||
|
s := [2..5,10..14];
|
||||||
|
write('foreach по множеству: ':35);
|
||||||
|
foreach var x in s do
|
||||||
|
Print(x);
|
||||||
|
writeln;
|
||||||
|
|
||||||
|
l := new List<integer>;
|
||||||
|
l.Add(7); l.Add(2); l.Add(5);
|
||||||
|
write('foreach по динамическому массиву: ':35);
|
||||||
|
foreach var x in l do
|
||||||
|
Print(x);
|
||||||
|
end.
|
4
!MainFeatures/01_First/Print.pas
Normal file
4
!MainFeatures/01_First/Print.pas
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/// Вывод с помощью Print
|
||||||
|
begin
|
||||||
|
Print(1,2,3)
|
||||||
|
end.
|
5
!MainFeatures/01_First/RandomDiap.pas
Normal file
5
!MainFeatures/01_First/RandomDiap.pas
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// Генерация случайного числа в заданном диапазоне
|
||||||
|
begin
|
||||||
|
var i := Random(2,5);
|
||||||
|
writeln('Случайное целое в диапазоне 2..5: ',i);
|
||||||
|
end.
|
5
!MainFeatures/01_First/RealExtNums.pas
Normal file
5
!MainFeatures/01_First/RealExtNums.pas
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// При работе с вещественными числами невозможно получить ошибку выполнения
|
||||||
|
begin
|
||||||
|
writeln(1/0);
|
||||||
|
writeln(sqrt(-1));
|
||||||
|
end.
|
27
!MainFeatures/01_First/SimpleNewFeatures.pas
Normal file
27
!MainFeatures/01_First/SimpleNewFeatures.pas
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Простейшие новые возможности языка PascalABC.NET
|
||||||
|
|
||||||
|
// Инициализация переменной при описании
|
||||||
|
var i: integer := 1;
|
||||||
|
|
||||||
|
// Автоопределение типа переменной при инициализации
|
||||||
|
var r := 2.5;
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Внутриблочные описания переменных
|
||||||
|
var s: real := 1.0;
|
||||||
|
|
||||||
|
// Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла)
|
||||||
|
for j: integer := 1 to 10 do
|
||||||
|
s += j; // Операция += для чисел
|
||||||
|
|
||||||
|
var p := 1;
|
||||||
|
|
||||||
|
// Описание переменной в заголовке цикла с автоопределением типа
|
||||||
|
for var j := 1 to 10 do
|
||||||
|
p *= j; // Операция *=
|
||||||
|
|
||||||
|
var str := '';
|
||||||
|
for c: char := 'a' to 'z' do
|
||||||
|
str += c; // Операция += для строк
|
||||||
|
|
||||||
|
end.
|
33
!MainFeatures/01_First/StandardTypes.pas
Normal file
33
!MainFeatures/01_First/StandardTypes.pas
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/// Стандартные размерные типы данных и их размер
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
j: shortint;
|
||||||
|
k: smallint;
|
||||||
|
l: longint; // синоним integer
|
||||||
|
i64: int64;
|
||||||
|
b: byte;
|
||||||
|
w: word;
|
||||||
|
lw: longword;
|
||||||
|
car: cardinal; // синоним longword
|
||||||
|
ui64: uint64;
|
||||||
|
r: real;
|
||||||
|
d: double; // синоним real
|
||||||
|
sn: single;
|
||||||
|
c: char;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln('sizeof(integer) = ':20, sizeof(integer));
|
||||||
|
writeln('sizeof(shortint) = ':20,sizeof(shortint));
|
||||||
|
writeln('sizeof(smallint) = ':20,sizeof(smallint));
|
||||||
|
writeln('sizeof(longint) = ':20, sizeof(longint));
|
||||||
|
writeln('sizeof(int64) = ':20, sizeof(int64));
|
||||||
|
writeln('sizeof(byte) = ':20, sizeof(byte));
|
||||||
|
writeln('sizeof(word) = ':20, sizeof(word));
|
||||||
|
writeln('sizeof(longword) = ':20,sizeof(longword));
|
||||||
|
writeln('sizeof(cardinal) = ':20,sizeof(cardinal));
|
||||||
|
writeln('sizeof(uint64) = ':20, sizeof(uint64));
|
||||||
|
writeln('sizeof(real) = ':20, sizeof(real));
|
||||||
|
writeln('sizeof(double) = ':20, sizeof(double));
|
||||||
|
writeln('sizeof(single) = ':20, sizeof(single));
|
||||||
|
writeln('sizeof(char) = ':20, sizeof(char));
|
||||||
|
end.
|
16
!MainFeatures/01_First/WriteAll.pas
Normal file
16
!MainFeatures/01_First/WriteAll.pas
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/// Вывод различных типов процедурой write
|
||||||
|
begin
|
||||||
|
// Вывод, целого, строки, вещественного
|
||||||
|
Writeln(1,' ',2.5);
|
||||||
|
// Вывод множества
|
||||||
|
Writeln([1..10]);
|
||||||
|
// Вывод логического
|
||||||
|
Writeln(True);
|
||||||
|
var a: array [1..10] of integer;
|
||||||
|
// Вывод статического массива
|
||||||
|
Writeln(a);
|
||||||
|
// Вывод динамического массива
|
||||||
|
Writeln(Arr(2,3,5));
|
||||||
|
// Вывод кортежа
|
||||||
|
Writeln(('Иванов',16));
|
||||||
|
end.
|
11
!MainFeatures/01_First/WriteFormat.pas
Normal file
11
!MainFeatures/01_First/WriteFormat.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/// Использование процедуры WritelnFormat
|
||||||
|
begin
|
||||||
|
// Вывод в обратном порядке
|
||||||
|
WritelnFormat('{2},{1},{0}',1,2,3);
|
||||||
|
// Вывод фигурных скобочек
|
||||||
|
WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке');
|
||||||
|
// Задание ширины поля вывода
|
||||||
|
WritelnFormat('{0,10:f}',3.1415);
|
||||||
|
// Задание количества знаков после запятой для вещественного числа
|
||||||
|
WritelnFormat('{0:f3}',3.1415);
|
||||||
|
end.
|
19
!MainFeatures/02_Types/CharFunc.pas
Normal file
19
!MainFeatures/02_Types/CharFunc.pas
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Стандартные функции Ord, Chr, OrdAnsi, ChrAnsi
|
||||||
|
var
|
||||||
|
c: char;
|
||||||
|
i: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln('sizeof(char) = ',sizeof(char));
|
||||||
|
writeln;
|
||||||
|
c := 'Ж';
|
||||||
|
i := Ord(c);
|
||||||
|
writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i);
|
||||||
|
c := Chr(i);
|
||||||
|
writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c);
|
||||||
|
writeln;
|
||||||
|
i := OrdAnsi(c);
|
||||||
|
writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i);
|
||||||
|
c := ChrAnsi(i);
|
||||||
|
writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c);
|
||||||
|
end.
|
24
!MainFeatures/02_Types/Dynarray.pas
Normal file
24
!MainFeatures/02_Types/Dynarray.pas
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Процедуры и методы работы с динамическим массивом
|
||||||
|
|
||||||
|
begin
|
||||||
|
var a := ArrRandom(10);
|
||||||
|
|
||||||
|
// Вывод всех элементов массива
|
||||||
|
a.Println;
|
||||||
|
|
||||||
|
// Сортировка массива
|
||||||
|
a.Sort;
|
||||||
|
a.Println;
|
||||||
|
|
||||||
|
// Обращение массива
|
||||||
|
a.Reverse;
|
||||||
|
a.Println;
|
||||||
|
|
||||||
|
// Изменение размерамассиав с сохранением элементов. То же делает SetLength
|
||||||
|
a.Resize(a.Length+2);
|
||||||
|
a.Println;
|
||||||
|
|
||||||
|
// Поиск вхождения элемента в массив
|
||||||
|
var i := a.IndexOf(50);
|
||||||
|
Writeln(i);
|
||||||
|
end.
|
25
!MainFeatures/02_Types/Enum.pas
Normal file
25
!MainFeatures/02_Types/Enum.pas
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Перечислимый тип
|
||||||
|
type Months = (January,February,March,April,May,June,July,August,September,October,November,December);
|
||||||
|
|
||||||
|
var m: Months;
|
||||||
|
|
||||||
|
begin
|
||||||
|
m := February;
|
||||||
|
writeln(m);
|
||||||
|
// Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант
|
||||||
|
m := Months.April;
|
||||||
|
writeln('Следующий месяц: ',m);
|
||||||
|
Inc(m);
|
||||||
|
writeln('Следующий месяц: ',m);
|
||||||
|
m := Succ(m);
|
||||||
|
writeln('Следующий месяц: ',m);
|
||||||
|
m := Pred(m);
|
||||||
|
writeln('Предыдующий месяц: ',m);
|
||||||
|
Dec(m);
|
||||||
|
writeln('Предыдующий месяц: ',m);
|
||||||
|
writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m));
|
||||||
|
// Ошибки нет
|
||||||
|
writeln('Месяц перед январем - выход за границы: ',pred(Months.January));
|
||||||
|
// Ошибки нет
|
||||||
|
writeln('Месяц после декабря - выход за границы: ',succ(Months.December));
|
||||||
|
end.
|
15
!MainFeatures/02_Types/InitRecords.pas
Normal file
15
!MainFeatures/02_Types/InitRecords.pas
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Инициализаторы полей записи
|
||||||
|
type
|
||||||
|
Frac = record
|
||||||
|
num: integer := 0;
|
||||||
|
denom := 1; // автоопределеине типа - denom: integer
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
f: Frac;
|
||||||
|
f1: Frac := (num: 2; denom: 3);
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln(f.num,'/',f.denom);
|
||||||
|
writeln(f1.num,'/',f1.denom);
|
||||||
|
end.
|
10
!MainFeatures/02_Types/PointerToRef.pas
Normal file
10
!MainFeatures/02_Types/PointerToRef.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
|
||||||
|
type
|
||||||
|
A = class
|
||||||
|
i: integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var p: ^record field: A; end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
43
!MainFeatures/02_Types/PointersVsRef/Pointers.pas
Normal file
43
!MainFeatures/02_Types/PointersVsRef/Pointers.pas
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Выделение динамической памяти
|
||||||
|
// Использование указателей для создания односвязного списка
|
||||||
|
type
|
||||||
|
PNode = ^TNode;
|
||||||
|
TNode = record
|
||||||
|
data: integer;
|
||||||
|
next: PNode;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function NewNode(d: integer; n: PNode): PNode;
|
||||||
|
begin
|
||||||
|
New(Result);
|
||||||
|
Result^.data := d;
|
||||||
|
Result^.next := n;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var first: PNode;
|
||||||
|
|
||||||
|
begin
|
||||||
|
first := nil;
|
||||||
|
// Добавляем в начало односвязного списка
|
||||||
|
first := NewNode(3,first);
|
||||||
|
first := NewNode(7,first);
|
||||||
|
first := NewNode(5,first);
|
||||||
|
|
||||||
|
// Вывод односвязного списка
|
||||||
|
writeln('Содержимое односвязного списка: ');
|
||||||
|
var p := first;
|
||||||
|
while p<>nil do
|
||||||
|
begin
|
||||||
|
write(p^.data,' ');
|
||||||
|
p := p^.next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Разрушение односвязного списка
|
||||||
|
p := first;
|
||||||
|
while p<>nil do
|
||||||
|
begin
|
||||||
|
var p1 := p;
|
||||||
|
p := p^.next;
|
||||||
|
Dispose(p1); // Память обязательно возвращать
|
||||||
|
end;
|
||||||
|
end.
|
35
!MainFeatures/02_Types/PointersVsRef/References.pas
Normal file
35
!MainFeatures/02_Types/PointersVsRef/References.pas
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Использование ссылок вместо указателей для создания односвязного списка
|
||||||
|
// Мы рекомендуем именно этот способ
|
||||||
|
type
|
||||||
|
Node = class
|
||||||
|
data: integer;
|
||||||
|
next: Node;
|
||||||
|
constructor (d: integer; n: Node);
|
||||||
|
begin
|
||||||
|
data := d;
|
||||||
|
next := n;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором
|
||||||
|
var first: Node;
|
||||||
|
|
||||||
|
begin
|
||||||
|
first := nil;
|
||||||
|
// Добавляем в начало односвязного списка
|
||||||
|
first := new Node(3,first);
|
||||||
|
first := new Node(7,first);
|
||||||
|
first := new Node(5,first);
|
||||||
|
|
||||||
|
// Вывод односвязного списка. ^ отсутствуют
|
||||||
|
writeln('Содержимое односвязного списка (использование ссылок вместо указателей): ');
|
||||||
|
var p := first;
|
||||||
|
while p<>nil do
|
||||||
|
begin
|
||||||
|
write(p.data,' ');
|
||||||
|
p := p.next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Разрушение односвязного списка
|
||||||
|
first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает
|
||||||
|
end.
|
15
!MainFeatures/02_Types/Sets.pas
Normal file
15
!MainFeatures/02_Types/Sets.pas
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Работа с множествами
|
||||||
|
// Базовый тип для множества может быть произвольным
|
||||||
|
var
|
||||||
|
s1: set of string := ['Иванов','Попов','Сидорова','Петров'];
|
||||||
|
s2: set of string := ['Козлов','Петров','Иванов'];
|
||||||
|
begin
|
||||||
|
writeln('Множество s1: ',s1);
|
||||||
|
writeln('Множество s2: ',s2);
|
||||||
|
writeln('Объединение множеств s1 и s2: ',s1+s2);
|
||||||
|
writeln('Пересечение множеств s1 и s2: ',s1*s2);
|
||||||
|
writeln('Разность множеств s1 и s2: ',s1-s2);
|
||||||
|
Include(s1,'Умнов');
|
||||||
|
Exclude(s1,'Иванов');
|
||||||
|
writeln('Множество s1: ',s1);
|
||||||
|
end.
|
16
!MainFeatures/02_Types/StringInteger.pas
Normal file
16
!MainFeatures/02_Types/StringInteger.pas
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Преобразование целое <-> строка в новом стиле
|
||||||
|
var
|
||||||
|
s: string;
|
||||||
|
i: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Преобразование целого в строку
|
||||||
|
i := 234;
|
||||||
|
s := i.ToString;
|
||||||
|
writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
||||||
|
|
||||||
|
// Преобразование строки в целое
|
||||||
|
s := '567';
|
||||||
|
if integer.TryParse(s,i) then
|
||||||
|
writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
||||||
|
end.
|
18
!MainFeatures/02_Types/StringMethods.pas
Normal file
18
!MainFeatures/02_Types/StringMethods.pas
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Строки. Методы класса string
|
||||||
|
var
|
||||||
|
s: string := ' Pascal__NET ';
|
||||||
|
s1: string := 'NET';
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln('Исходная строка: ''',s,'''');
|
||||||
|
s := s.Trim;
|
||||||
|
writeln('После вызова s.Trim: ''',s,'''');
|
||||||
|
var p := s.IndexOf(s1); // Индексация - с нуля
|
||||||
|
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
||||||
|
s := s.Remove(6,2);
|
||||||
|
writeln('После удаления символов __: ',s);
|
||||||
|
s := s.Insert(6,'ABC.');
|
||||||
|
writeln('После вставки подстроки ''ABC.'': ',s);
|
||||||
|
writeln('Первая часть строки: ',s.Substring(0,9));
|
||||||
|
writeln('Последняя часть строки: ',s.Substring(10,3));
|
||||||
|
end.
|
17
!MainFeatures/02_Types/StringTypes.pas
Normal file
17
!MainFeatures/02_Types/StringTypes.pas
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Строки string, string[n], shortstring
|
||||||
|
var
|
||||||
|
s: string; // память, занимаемая s, зависит от ее длины
|
||||||
|
s10: string[10]; // память под ss фиксирована
|
||||||
|
ss: shortstring := s;
|
||||||
|
f: file of string[10];
|
||||||
|
// f: file of string; - ошибка
|
||||||
|
|
||||||
|
begin
|
||||||
|
s := '12345678901234567890';
|
||||||
|
s10 := s; // обрезание
|
||||||
|
writeln(s10);
|
||||||
|
s += s; s += s;
|
||||||
|
s += s; s += s;
|
||||||
|
writeln(s);
|
||||||
|
writeln('Длина строки = ',s.Length);
|
||||||
|
end.
|
23
!MainFeatures/02_Types/StructTypeEquiv.pas
Normal file
23
!MainFeatures/02_Types/StructTypeEquiv.pas
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность
|
||||||
|
var
|
||||||
|
a: array of integer;
|
||||||
|
a1: array of integer;
|
||||||
|
s: set of real;
|
||||||
|
s1: set of real;
|
||||||
|
p: procedure (i: integer);
|
||||||
|
p1: procedure (i: integer);
|
||||||
|
r: ^integer;
|
||||||
|
r1: ^integer;
|
||||||
|
|
||||||
|
procedure proc(aa: array of integer; ss: set of real; pp: procedure (i: integer); rr: ^integer);
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
a := a1;
|
||||||
|
s := s1;
|
||||||
|
p := p1;
|
||||||
|
r := r1; // В Delphi ни одно из этих присваиваний не сработает
|
||||||
|
proc(a,s,p,r); // Этот вызов - тоже
|
||||||
|
end.
|
19
!MainFeatures/02_Types/UntypedFile.pas
Normal file
19
!MainFeatures/02_Types/UntypedFile.pas
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Бестиповые файлы
|
||||||
|
var
|
||||||
|
f: file;
|
||||||
|
i: integer;
|
||||||
|
r: real;
|
||||||
|
s: string;
|
||||||
|
|
||||||
|
begin
|
||||||
|
assign(f,'a.dat');
|
||||||
|
rewrite(f);
|
||||||
|
// Записываем в файл данные любых типов
|
||||||
|
write(f,1,2.5,'Hello');
|
||||||
|
close(f);
|
||||||
|
reset(f);
|
||||||
|
// Считываем эти данные из файла
|
||||||
|
read(f,i,r,s);
|
||||||
|
write(i,' ',r,' ',s);
|
||||||
|
close(f);
|
||||||
|
end.
|
12
!MainFeatures/03_Subroutines/FuncParams.pas
Normal file
12
!MainFeatures/03_Subroutines/FuncParams.pas
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Переменное число параметров
|
||||||
|
function Sum(params arg: array of integer): integer;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
foreach var x in arg do
|
||||||
|
Result += x;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln(Sum(1,2,3));
|
||||||
|
writeln(Sum(4,5,6,7));
|
||||||
|
end.
|
21
!MainFeatures/03_Subroutines/Overload.pas
Normal file
21
!MainFeatures/03_Subroutines/Overload.pas
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Перегрузка имен подпрограмм
|
||||||
|
procedure proc(i: integer);
|
||||||
|
begin
|
||||||
|
writeln('integer');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure proc(c: char);
|
||||||
|
begin
|
||||||
|
writeln('char');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure proc(r: real);
|
||||||
|
begin
|
||||||
|
writeln('real');
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
proc(1);
|
||||||
|
proc(2.5);
|
||||||
|
proc('d');
|
||||||
|
end.
|
39
!MainFeatures/03_Subroutines/ProcVars.pas
Normal file
39
!MainFeatures/03_Subroutines/ProcVars.pas
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Все возможные способы инициализации поцедурной переменной
|
||||||
|
// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -=
|
||||||
|
|
||||||
|
procedure pp;
|
||||||
|
begin
|
||||||
|
writeln('Вызов обычной процедуры');
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
A = class
|
||||||
|
private
|
||||||
|
x: integer;
|
||||||
|
public
|
||||||
|
constructor Create(xx: integer);
|
||||||
|
begin
|
||||||
|
x := xx;
|
||||||
|
end;
|
||||||
|
procedure pp;
|
||||||
|
begin
|
||||||
|
writeln('Вызов метода класса, значение поля равно ',x);
|
||||||
|
end;
|
||||||
|
class procedure ppstatic;
|
||||||
|
begin
|
||||||
|
writeln('Вызов классового метода класса');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var p: procedure;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p := pp;
|
||||||
|
var a1: A := new A(5);
|
||||||
|
p += a1.pp;
|
||||||
|
p += A.ppstatic;
|
||||||
|
p;
|
||||||
|
writeln;
|
||||||
|
p -= pp;
|
||||||
|
p;
|
||||||
|
end.
|
23
!MainFeatures/03_Subroutines/SwapT.pas
Normal file
23
!MainFeatures/03_Subroutines/SwapT.pas
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Обобщенные функции
|
||||||
|
// Выведение типа T по типам параметров
|
||||||
|
|
||||||
|
procedure Swap<T>(var a,b: T);
|
||||||
|
begin
|
||||||
|
var v := a;
|
||||||
|
a := b;
|
||||||
|
b := v;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var a := 2;
|
||||||
|
var b := 3;
|
||||||
|
writelnFormat('До Swap a={0}, b={1}',a,b);
|
||||||
|
Swap(a,b);
|
||||||
|
writelnFormat('После Swap a={0}, b={1}',a,b);
|
||||||
|
var c := 2.5;
|
||||||
|
var d := 3.3;
|
||||||
|
writeln;
|
||||||
|
writelnFormat('До Swap c={0}, d={1}',c,d);
|
||||||
|
Swap(c,d);
|
||||||
|
writelnFormat('После Swap c={0}, d={1}',c,d);
|
||||||
|
end.
|
9
!MainFeatures/04_Units/CallC#/CallCS.pas
Normal file
9
!MainFeatures/04_Units/CallC#/CallCS.pas
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1
|
||||||
|
// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C#
|
||||||
|
|
||||||
|
{$reference ClassLibrary1.dll}
|
||||||
|
uses ClassLibrary1;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln(Class1.add(2,3));
|
||||||
|
end.
|
BIN
!MainFeatures/04_Units/CallC#/ClassLibrary1.dll
Normal file
BIN
!MainFeatures/04_Units/CallC#/ClassLibrary1.dll
Normal file
Binary file not shown.
BIN
!MainFeatures/04_Units/DllTest/MyDll.dll
Normal file
BIN
!MainFeatures/04_Units/DllTest/MyDll.dll
Normal file
Binary file not shown.
16
!MainFeatures/04_Units/DllTest/MyDll.pas
Normal file
16
!MainFeatures/04_Units/DllTest/MyDll.pas
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Dll-библиотека
|
||||||
|
library MyDll;
|
||||||
|
|
||||||
|
const n = 10;
|
||||||
|
|
||||||
|
function add(a,b: integer): integer;
|
||||||
|
begin
|
||||||
|
Result := a + b;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure PrintPascalABCNET;
|
||||||
|
begin
|
||||||
|
writeln('PascalABC.NET');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
10
!MainFeatures/04_Units/DllTest/main.pas
Normal file
10
!MainFeatures/04_Units/DllTest/main.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Это - главная программа
|
||||||
|
// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться,
|
||||||
|
// не подключая пространства имен
|
||||||
|
{$reference mydll.dll}
|
||||||
|
|
||||||
|
begin
|
||||||
|
PrintPascalABCNET;
|
||||||
|
writeln(n);
|
||||||
|
writeln(add(2,3));
|
||||||
|
end.
|
7
!MainFeatures/04_Units/NativeDll/CallNative.pas
Normal file
7
!MainFeatures/04_Units/NativeDll/CallNative.pas
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{$platformtarget x86}
|
||||||
|
// Вызов функции из обычной dll
|
||||||
|
function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции
|
||||||
|
|
||||||
|
begin // основная программа
|
||||||
|
writeln(add(2,3));
|
||||||
|
end.
|
BIN
!MainFeatures/04_Units/NativeDll/NativeDll.dll
Normal file
BIN
!MainFeatures/04_Units/NativeDll/NativeDll.dll
Normal file
Binary file not shown.
13
!MainFeatures/04_Units/NativeDll/NativeDll.dpr
Normal file
13
!MainFeatures/04_Units/NativeDll/NativeDll.dpr
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Îòêîìïèëèðîâàòü â Delphi
|
||||||
|
library NativeDll;
|
||||||
|
|
||||||
|
function add(a,b: integer): integer; stdcall;
|
||||||
|
begin
|
||||||
|
Result := a+b;
|
||||||
|
end;
|
||||||
|
|
||||||
|
exports
|
||||||
|
add;
|
||||||
|
begin
|
||||||
|
end.
|
||||||
|
|
7
!MainFeatures/04_Units/SimpleUnit/MainProgram.pas
Normal file
7
!MainFeatures/04_Units/SimpleUnit/MainProgram.pas
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
uses MyUnit; // подключили модуль
|
||||||
|
|
||||||
|
var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6);
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln('Максимальный элемент в массиве = ',Max(a));
|
||||||
|
end.
|
14
!MainFeatures/04_Units/SimpleUnit/MyUnit.pas
Normal file
14
!MainFeatures/04_Units/SimpleUnit/MyUnit.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/// Модуль упрощенной структуры
|
||||||
|
unit MyUnit; // имя модуля должно совпадать с именем файла
|
||||||
|
|
||||||
|
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
||||||
|
/// Возвращает максимальный элемент в массиве
|
||||||
|
function Max(a: array of integer): integer;
|
||||||
|
begin
|
||||||
|
Result := integer.MinValue;
|
||||||
|
foreach x: integer in a do
|
||||||
|
if x>Result then
|
||||||
|
Result := x;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
12
!MainFeatures/04_Units/SystemUnitTest.pas
Normal file
12
!MainFeatures/04_Units/SystemUnitTest.pas
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem
|
||||||
|
uses System;
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Имя Random, определенное в пространстве имен System, перекрывает имя Random
|
||||||
|
// в модуле PABCSystem, который неявно подключается первым
|
||||||
|
var r: Random := new Random();
|
||||||
|
writeln(r.Next(10));
|
||||||
|
// Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится
|
||||||
|
var i: integer := PABCSystem.Random(10);
|
||||||
|
writeln(i);
|
||||||
|
end.
|
41
!MainFeatures/05_Graph/ABC.pas
Normal file
41
!MainFeatures/05_Graph/ABC.pas
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// Модуль ABCObjects. Изменение свойств объекта
|
||||||
|
uses ABCObjects,GraphABC;
|
||||||
|
|
||||||
|
const delay = 300;
|
||||||
|
|
||||||
|
procedure Pause;
|
||||||
|
begin
|
||||||
|
Sleep(delay);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
r: RectangleABC;
|
||||||
|
z: StarABC;
|
||||||
|
|
||||||
|
begin
|
||||||
|
z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green);
|
||||||
|
r := new RectangleABC(100,100,200,100,Color.Gold);
|
||||||
|
Pause;
|
||||||
|
r.Center := Window.Center;
|
||||||
|
Pause;
|
||||||
|
r.Height := 70;
|
||||||
|
Pause;
|
||||||
|
r.Width := 220;
|
||||||
|
Pause;
|
||||||
|
z.Radius := 150;
|
||||||
|
Pause;
|
||||||
|
z.Color := Color.LightCoral;
|
||||||
|
Pause;
|
||||||
|
z.Count := 5;
|
||||||
|
Pause;
|
||||||
|
|
||||||
|
r.Text := 'PascalABC.NET';
|
||||||
|
r.Color := Color.Gainsboro;
|
||||||
|
Pause;
|
||||||
|
r.BorderWidth := 3;
|
||||||
|
r.BorderColor := Color.Blue;
|
||||||
|
Pause;
|
||||||
|
r.Center := Window.Center;
|
||||||
|
Pause;
|
||||||
|
// r.Bordered := False;
|
||||||
|
end.
|
19
!MainFeatures/05_Graph/GraphABCTest.pas
Normal file
19
!MainFeatures/05_Graph/GraphABCTest.pas
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Иллюстрация простейших возможностей GraphABC
|
||||||
|
uses GraphABC;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Coordinate.Origin := Window.Center;
|
||||||
|
Coordinate.SetMathematic;
|
||||||
|
Brush.Color := Color.LightSkyBlue;
|
||||||
|
while True do
|
||||||
|
begin
|
||||||
|
LockDrawing;
|
||||||
|
ClearWindow;
|
||||||
|
Ellipse(-120,-70,120,70);
|
||||||
|
Line(0,0,200,0);
|
||||||
|
Line(0,0,0,200);
|
||||||
|
Redraw;
|
||||||
|
Coordinate.Angle := Coordinate.Angle + 1;
|
||||||
|
Sleep(100);
|
||||||
|
end;
|
||||||
|
end.
|
19
!MainFeatures/05_Graph/MouseEvents.pas
Normal file
19
!MainFeatures/05_Graph/MouseEvents.pas
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Иллюстрация обработки событий мыши
|
||||||
|
uses GraphABC;
|
||||||
|
|
||||||
|
procedure MouseDown(x,y,mb: integer);
|
||||||
|
begin
|
||||||
|
MoveTo(x,y);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure MouseMove(x,y,mb: integer);
|
||||||
|
begin
|
||||||
|
if mb=1 then LineTo(x,y);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Привязка обработчиков к событиям
|
||||||
|
OnMouseDown := MouseDown;
|
||||||
|
OnMouseMove := MouseMove
|
||||||
|
end.
|
||||||
|
|
14
!MainFeatures/06_Classes/AllFromObject.pas
Normal file
14
!MainFeatures/06_Classes/AllFromObject.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Все типы кроме указателей - производные от Object
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
r: real;
|
||||||
|
o: object;
|
||||||
|
|
||||||
|
begin
|
||||||
|
o := i;
|
||||||
|
writeln(o.GetType);
|
||||||
|
o := r;
|
||||||
|
writeln(o.GetType);
|
||||||
|
if o.GetType=typeof(real) then
|
||||||
|
writeln('В переменной o - вещественный тип');
|
||||||
|
end.
|
22
!MainFeatures/06_Classes/Boxing.pas
Normal file
22
!MainFeatures/06_Classes/Boxing.pas
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Упаковка-распаковка размерных типов
|
||||||
|
var
|
||||||
|
i: integer := 2;
|
||||||
|
r: real := 3.14;
|
||||||
|
o: object;
|
||||||
|
|
||||||
|
begin
|
||||||
|
o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа,
|
||||||
|
// котрый и присваивается переменной o
|
||||||
|
// Преобразование типов при упаковке - неявное
|
||||||
|
writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение
|
||||||
|
// Преобразование типов при распаковке - явное
|
||||||
|
o := r;
|
||||||
|
writeln(real(o));
|
||||||
|
|
||||||
|
try // При неверном преобразовании типов генерируется исключение InvalidCastException
|
||||||
|
writeln(shortint(o));
|
||||||
|
except
|
||||||
|
on e: Exception do
|
||||||
|
writeln(e.GetType);
|
||||||
|
end;
|
||||||
|
end.
|
36
!MainFeatures/06_Classes/ClassConstructor.pas
Normal file
36
!MainFeatures/06_Classes/ClassConstructor.pas
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Пример использования классового (статического) конструктора
|
||||||
|
type
|
||||||
|
Person = class
|
||||||
|
private
|
||||||
|
class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом.
|
||||||
|
name: string;
|
||||||
|
age: integer;
|
||||||
|
public
|
||||||
|
class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода
|
||||||
|
begin
|
||||||
|
writeln(' Вызван классовый конструктор');
|
||||||
|
SetLength(arr,3);
|
||||||
|
arr[0] := new Person('Иванов',20);
|
||||||
|
arr[1] := new Person('Петрова',19);
|
||||||
|
arr[2] := new Person('Попов',35);
|
||||||
|
end;
|
||||||
|
constructor (n: string; a: integer);
|
||||||
|
begin
|
||||||
|
name := n;
|
||||||
|
age := a;
|
||||||
|
end;
|
||||||
|
function ToString: string; override;
|
||||||
|
begin
|
||||||
|
Result := Format('Имя: {0} Возраст: {1}',name,age);
|
||||||
|
end;
|
||||||
|
class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям
|
||||||
|
begin
|
||||||
|
Result := arr[Random(3)];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln('Случайные персоны');
|
||||||
|
for var i:=1 to 5 do
|
||||||
|
writeln(Person.RandomPerson); // Вызов классового метода
|
||||||
|
end.
|
11
!MainFeatures/06_Classes/GarbageCollection.pas
Normal file
11
!MainFeatures/06_Classes/GarbageCollection.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Сборка мусора: для освобождения объекта присвойте переменной nil
|
||||||
|
var l := new List<integer>;
|
||||||
|
|
||||||
|
begin
|
||||||
|
l.Add(3);
|
||||||
|
l.Add(5);
|
||||||
|
l.Add(2);
|
||||||
|
foreach var x in l do
|
||||||
|
Print(x);
|
||||||
|
l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора
|
||||||
|
end.
|
42
!MainFeatures/06_Classes/Interf.pas
Normal file
42
!MainFeatures/06_Classes/Interf.pas
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Иллюстрация использования интерфейсов
|
||||||
|
type
|
||||||
|
IShape = interface
|
||||||
|
procedure Draw;
|
||||||
|
property X: integer read;
|
||||||
|
property Y: integer read;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ICloneable = interface
|
||||||
|
function Clone: Object;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Point = class(IShape,ICloneable)
|
||||||
|
private
|
||||||
|
xx,yy: integer;
|
||||||
|
public
|
||||||
|
constructor Create(x,y: integer);
|
||||||
|
begin
|
||||||
|
xx := x; yy := y;
|
||||||
|
end;
|
||||||
|
procedure Draw; begin end;
|
||||||
|
property X: integer read xx;
|
||||||
|
property Y: integer read yy;
|
||||||
|
function Clone: Object;
|
||||||
|
begin
|
||||||
|
Result := new Point(xx,yy);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
p: Point := new Point(2,3);
|
||||||
|
ish: IShape := p;
|
||||||
|
icl: ICloneable := p;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Println(ish.X,ish.Y);
|
||||||
|
var p1: Point := Point(icl.Clone);
|
||||||
|
p := nil;
|
||||||
|
Println(p1.X,p1.Y);
|
||||||
|
Println(ish is Point);
|
||||||
|
Println(ish is ICloneable); // Cross cast!
|
||||||
|
end.
|
82
!MainFeatures/06_Classes/OperatorOverloading.pas
Normal file
82
!MainFeatures/06_Classes/OperatorOverloading.pas
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// Перегрузка операций
|
||||||
|
type
|
||||||
|
Frac = record
|
||||||
|
private
|
||||||
|
num,denom: integer;
|
||||||
|
public
|
||||||
|
constructor (n,d: integer);
|
||||||
|
begin
|
||||||
|
num := n;
|
||||||
|
denom := d;
|
||||||
|
end;
|
||||||
|
class function operator+(a,b: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := new Frac(a.num*b.denom+b.num*a.denom,a.denom*b.denom);
|
||||||
|
end;
|
||||||
|
class function operator-(a,b: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := new Frac(a.num*b.denom-b.num*a.denom,a.denom*b.denom);
|
||||||
|
end;
|
||||||
|
class function operator*(a,b: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := new Frac(a.num*b.num,a.denom*b.denom);
|
||||||
|
end;
|
||||||
|
class function operator/(a,b: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := new Frac(a.num*b.denom,a.denom*b.num);
|
||||||
|
end;
|
||||||
|
class function operator=(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := (a.num = b.num) and (a.denom = b.denom);
|
||||||
|
end;
|
||||||
|
class function operator<>(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := not (a=b);
|
||||||
|
end;
|
||||||
|
class function operator<(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := a.num/real(a.denom)<b.num/real(b.denom);
|
||||||
|
end;
|
||||||
|
class function operator<=(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := a.num/real(a.denom)<=b.num/real(b.denom);
|
||||||
|
end;
|
||||||
|
class function operator>(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := a.num/real(a.denom)>b.num/real(b.denom);
|
||||||
|
end;
|
||||||
|
class function operator>=(a,b: Frac): boolean;
|
||||||
|
begin
|
||||||
|
Result := a.num/real(a.denom)>=b.num/real(b.denom);
|
||||||
|
end;
|
||||||
|
class procedure operator+=(var a: Frac; b: Frac);
|
||||||
|
begin
|
||||||
|
a := a + b;
|
||||||
|
end;
|
||||||
|
class function operator-(a: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := new Frac(-a.num,a.denom);
|
||||||
|
end;
|
||||||
|
class function operator+(a: Frac): Frac;
|
||||||
|
begin
|
||||||
|
Result := a;
|
||||||
|
end;
|
||||||
|
function ToString: string; override;
|
||||||
|
begin
|
||||||
|
Result := Format('{0}/{1}',num,denom);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
f := new Frac(1,2);
|
||||||
|
f1 := new Frac(3,5);
|
||||||
|
|
||||||
|
begin
|
||||||
|
writelnFormat('{0} + {1} = {2}',f,f1,f+f1);
|
||||||
|
writelnFormat('{0} - {1} = {2}',f,f1,f-f1);
|
||||||
|
writelnFormat('{0} * {1} = {2}',f,f1,f*f1);
|
||||||
|
writelnFormat('{0} / {1} = {2}',f,f1,f/f1);
|
||||||
|
writeln(f1=f);
|
||||||
|
f += f1;
|
||||||
|
writeln(-f);
|
||||||
|
end.
|
30
!MainFeatures/06_Classes/PersonInternal.pas
Normal file
30
!MainFeatures/06_Classes/PersonInternal.pas
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Описание методов внутри интерфейса класса
|
||||||
|
// Удобство: методы можно реализовывать сразу после объявления
|
||||||
|
// Неудобство: для больших классов интерфейс трудно читается
|
||||||
|
type
|
||||||
|
Person = class
|
||||||
|
private
|
||||||
|
// Поля класса, как правило, приватны. Доступ к ним - через методы и свойства
|
||||||
|
name: string;
|
||||||
|
age: integer;
|
||||||
|
public
|
||||||
|
// Конструктор неявно имеет имя Create
|
||||||
|
constructor (n: string; a: integer);
|
||||||
|
begin
|
||||||
|
name := n; age := a;
|
||||||
|
end;
|
||||||
|
procedure Print;
|
||||||
|
begin
|
||||||
|
writeln('Имя: ',name,' Возраст: ',age);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var p,p1: Person;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется)
|
||||||
|
p.Print;
|
||||||
|
p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется)
|
||||||
|
p1.Print;
|
||||||
|
// Деструкторы отсутствуют, вместо них - автоматическая сборка мусора
|
||||||
|
end.
|
26
!MainFeatures/06_Classes/Records.pas
Normal file
26
!MainFeatures/06_Classes/Records.pas
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Иллюстрация конструкторов и методов в записях
|
||||||
|
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||||
|
type
|
||||||
|
SexType = (Male, Female);
|
||||||
|
Person = record
|
||||||
|
Name: string;
|
||||||
|
Age, Weight: integer;
|
||||||
|
Sex: SexType;
|
||||||
|
constructor (Name: string; Age, Weight: integer; Sex: SexType);
|
||||||
|
begin
|
||||||
|
Self.Name := Name;
|
||||||
|
Self.Age := Age;
|
||||||
|
Self.Sex := Sex;
|
||||||
|
Self.Weight := Weight;
|
||||||
|
end;
|
||||||
|
function ToString: string; override;
|
||||||
|
begin
|
||||||
|
Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln(p);
|
||||||
|
end.
|
56
!MainFeatures/06_Classes/Stack.pas
Normal file
56
!MainFeatures/06_Classes/Stack.pas
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Демонстрация создания простого класса стека на базе массива
|
||||||
|
type
|
||||||
|
Stack<T> = class
|
||||||
|
private
|
||||||
|
a: array of T;
|
||||||
|
last: integer;
|
||||||
|
public
|
||||||
|
constructor Create(sz: integer);
|
||||||
|
begin
|
||||||
|
SetLength(a,sz);
|
||||||
|
last := 0;
|
||||||
|
end;
|
||||||
|
constructor Create;
|
||||||
|
begin
|
||||||
|
Create(100);
|
||||||
|
end;
|
||||||
|
procedure push(i: T);
|
||||||
|
begin
|
||||||
|
a[last] := i;
|
||||||
|
Inc(last);
|
||||||
|
end;
|
||||||
|
function pop: T;
|
||||||
|
begin
|
||||||
|
Dec(last);
|
||||||
|
pop := a[last];
|
||||||
|
end;
|
||||||
|
function top: T;
|
||||||
|
begin
|
||||||
|
top := a[last-1];
|
||||||
|
end;
|
||||||
|
function empty: boolean;
|
||||||
|
begin
|
||||||
|
Result := (last=0);
|
||||||
|
end;
|
||||||
|
function ToString: string; override;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
for var i:=0 to last-1 do
|
||||||
|
Result += a[i]+' ';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var s: Stack<integer>;
|
||||||
|
|
||||||
|
begin
|
||||||
|
s := new Stack<integer>;
|
||||||
|
s.push(7);
|
||||||
|
s.push(2);
|
||||||
|
s.push(5);
|
||||||
|
s.push(4);
|
||||||
|
writeln(s);
|
||||||
|
while not s.empty do
|
||||||
|
write(s.pop,' ');
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
21
!MainFeatures/06_Classes/Where.pas
Normal file
21
!MainFeatures/06_Classes/Where.pas
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Секция Where - ограничение на типы параметров
|
||||||
|
uses System,System.Collections.Generic;
|
||||||
|
|
||||||
|
type
|
||||||
|
MyClass<T,T1> = class
|
||||||
|
where T: System.Array,ICloneable;
|
||||||
|
where T1: constructor;
|
||||||
|
procedure p(obj1: T; var obj2: T1);
|
||||||
|
begin
|
||||||
|
obj1.Clone();
|
||||||
|
obj2 := new T1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
IntArr = array of integer;
|
||||||
|
|
||||||
|
var
|
||||||
|
m: MyClass<IntArr,integer>;
|
||||||
|
//m1: MyClass<integer>; // ошибка
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
26
!MainFeatures/06_Classes/WriteRecord.pas
Normal file
26
!MainFeatures/06_Classes/WriteRecord.pas
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Иллюстрация конструкторов и методов в записях
|
||||||
|
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||||
|
type
|
||||||
|
SexType = (Male, Female);
|
||||||
|
Person = record
|
||||||
|
Name: string;
|
||||||
|
Age, Weight: integer;
|
||||||
|
Sex: SexType;
|
||||||
|
constructor (Name: string; Age, Weight: integer; Sex: SexType);
|
||||||
|
begin
|
||||||
|
Self.Name := Name;
|
||||||
|
Self.Age := Age;
|
||||||
|
Self.Sex := Sex;
|
||||||
|
Self.Weight := Weight;
|
||||||
|
end;
|
||||||
|
function ToString: string; override;
|
||||||
|
begin
|
||||||
|
Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeln(p);
|
||||||
|
end.
|
31
!MainFeatures/07_NetLibs/DateTime.pas
Normal file
31
!MainFeatures/07_NetLibs/DateTime.pas
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Uses System;
|
||||||
|
|
||||||
|
var d1, d2, d3: DateTime; // Объекты для хранения даты и времени
|
||||||
|
ts: TimeSpan; // Объект для хранения промежутков времени
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Получение текущей даты - вызов статического метода
|
||||||
|
d1 := DateTime.Now;
|
||||||
|
Writeln(d1);
|
||||||
|
|
||||||
|
// Дата и время через один месяц
|
||||||
|
d2 := d1.AddMonths(1);
|
||||||
|
Writeln(d2);
|
||||||
|
|
||||||
|
// Дата и время на 12 часов раньше
|
||||||
|
d2 := d1.AddHours(-12);
|
||||||
|
Writeln(d2);
|
||||||
|
|
||||||
|
// Формирование даты - вызов конструктора объекта (год, месяц,число)
|
||||||
|
d3 := new DateTime(2001, 1, 1);
|
||||||
|
Writeln(d3);
|
||||||
|
|
||||||
|
// Определение времени, прошедшего с начала тысячелетия (разность дат)
|
||||||
|
ts := d1.Subtract(d3);
|
||||||
|
|
||||||
|
// Промежуток времени в днях (результат - вещественное число)
|
||||||
|
Writeln(ts.TotalDays);
|
||||||
|
|
||||||
|
// Промежуток времени в днях, часах, минутах и секундах
|
||||||
|
Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds);
|
||||||
|
end.
|
17
!MainFeatures/07_NetLibs/FormWebBrowser.pas
Normal file
17
!MainFeatures/07_NetLibs/FormWebBrowser.pas
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Иллюстрация использования компонента WebBrowser
|
||||||
|
{$apptype windows}
|
||||||
|
{$reference System.Windows.Forms.dll}
|
||||||
|
|
||||||
|
uses
|
||||||
|
System.Windows.Forms,
|
||||||
|
System.Net;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var myForm := new Form;
|
||||||
|
var w := new WebBrowser;
|
||||||
|
w.Url := new System.Uri('http://pascalabc.net');
|
||||||
|
w.Dock := Dockstyle.Fill;
|
||||||
|
myForm.Controls.Add(w);
|
||||||
|
myForm.WindowState := FormWindowState.Maximized;
|
||||||
|
Application.Run(myForm);
|
||||||
|
end.
|
27
!MainFeatures/07_NetLibs/LinkedList.pas
Normal file
27
!MainFeatures/07_NetLibs/LinkedList.pas
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора
|
||||||
|
uses System.Collections,System.Collections.Generic;
|
||||||
|
|
||||||
|
procedure print(l: ICollection);
|
||||||
|
begin
|
||||||
|
foreach x: integer in l do
|
||||||
|
write(x,' ');
|
||||||
|
writeln;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var l: LinkedList<integer> := new LinkedList<integer>;
|
||||||
|
|
||||||
|
begin
|
||||||
|
l.AddLast(3);
|
||||||
|
l.AddLast(5);
|
||||||
|
l.AddLast(7);
|
||||||
|
l.AddFirst(2);
|
||||||
|
print(l);
|
||||||
|
|
||||||
|
var a := new integer[10];
|
||||||
|
l.CopyTo(a,0);
|
||||||
|
print(a);
|
||||||
|
|
||||||
|
var lit: LinkedListNode<integer> := l.Find(5);
|
||||||
|
l.AddBefore(lit,777);
|
||||||
|
print(l);
|
||||||
|
end.
|
11
!MainFeatures/07_NetLibs/Reflection.pas
Normal file
11
!MainFeatures/07_NetLibs/Reflection.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Отражение типов. Выводятся все члены типа DateTime
|
||||||
|
uses System,System.Reflection;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var bf := BindingFlags.Public or BindingFlags.NonPublic or BindingFlags.Instance or BindingFlags.Static;
|
||||||
|
var t: &Type := typeof(DateTime);
|
||||||
|
var mi := t.GetMembers(bf);
|
||||||
|
foreach m: MemberInfo in mi do
|
||||||
|
writeln(m);
|
||||||
|
end.
|
||||||
|
|
29
!MainFeatures/07_NetLibs/WinFormWithButton.pas
Normal file
29
!MainFeatures/07_NetLibs/WinFormWithButton.pas
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Создание оконного приложения
|
||||||
|
{$apptype windows}
|
||||||
|
{$reference System.Windows.Forms.dll}
|
||||||
|
|
||||||
|
uses
|
||||||
|
System,
|
||||||
|
System.Windows.Forms;
|
||||||
|
|
||||||
|
var
|
||||||
|
myForm: Form;
|
||||||
|
myButton: Button;
|
||||||
|
|
||||||
|
procedure MyButtonClick(sender: Object; e: EventArgs);
|
||||||
|
begin
|
||||||
|
myForm.Close;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
myForm := new Form;
|
||||||
|
myForm.Text := 'Оконное приложение';
|
||||||
|
myButton := new Button;
|
||||||
|
myButton.Text := ' Закрыть окно ';
|
||||||
|
myButton.AutoSize := True;
|
||||||
|
myButton.Left := 90;
|
||||||
|
myButton.Top := 110;
|
||||||
|
myForm.Controls.Add(myButton);
|
||||||
|
myButton.Click += MyButtonClick;
|
||||||
|
Application.Run(myForm);
|
||||||
|
end.
|
5
!NewExecutors/p1.pas
Normal file
5
!NewExecutors/p1.pas
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
МирИсполнителей.Вывести
|
||||||
|
end.
|
15
!NewExecutors/p4.pas
Normal file
15
!NewExecutors/p4.pas
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var посл := СлучайнаяПоследовательность(10);
|
||||||
|
посл.Вывести;
|
||||||
|
|
||||||
|
посл.Количество(значение -> значение>4).Вывести;
|
||||||
|
|
||||||
|
var количество := 0;
|
||||||
|
foreach var значение in посл do
|
||||||
|
if значение>4 then
|
||||||
|
количество += 1;
|
||||||
|
количество.Вывести
|
||||||
|
|
||||||
|
end.
|
106
!NewExecutors/ГрафическиеИсполнители.pas
Normal file
106
!NewExecutors/ГрафическиеИсполнители.pas
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
unit ГрафическиеИсполнители;
|
||||||
|
|
||||||
|
uses FormsABC;
|
||||||
|
|
||||||
|
type
|
||||||
|
WebBrowser2 = class(WebBrowser)
|
||||||
|
public
|
||||||
|
procedure Отобразить(адрес: string) := Navigate(адрес);
|
||||||
|
function ОтобразитьСайт(адрес: string): () -> () :=
|
||||||
|
() -> Self.Отобразить(адрес);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Button2 = class(Button)
|
||||||
|
private
|
||||||
|
procedure ppp(sender: Object; e: System.EventArgs);
|
||||||
|
public
|
||||||
|
event ПриНажатии: procedure;
|
||||||
|
constructor Create(text: string);
|
||||||
|
begin
|
||||||
|
inherited Create(text);
|
||||||
|
b.Click += ppp;
|
||||||
|
end;
|
||||||
|
property Текст: string read GetText write SetText;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ListBox2 = class(ListBox)
|
||||||
|
private
|
||||||
|
procedure ppp(sender: Object; e: System.EventArgs);
|
||||||
|
function GetHeight := lb.Height;
|
||||||
|
procedure SetHeight(h: integer) := lb.Height := h;
|
||||||
|
public
|
||||||
|
event ПриНажатии: procedure;
|
||||||
|
constructor Create;
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
lb.Click += ppp;
|
||||||
|
{lb.AutoSize := False;
|
||||||
|
lb.Width := 160;}
|
||||||
|
lb.Width := 190;
|
||||||
|
end;
|
||||||
|
procedure Добавить(name: string) := Items.Add(name);
|
||||||
|
procedure Очистить := Items.Clear;
|
||||||
|
procedure ДобавитьМного(m: sequence of string);
|
||||||
|
begin
|
||||||
|
foreach var x in m do
|
||||||
|
Items.Add(x);
|
||||||
|
end;
|
||||||
|
function ТекущаяСтрока := Items[Selectedindex] as string;
|
||||||
|
property Высота: integer read GetHeight write SetHeight;
|
||||||
|
end;
|
||||||
|
TextLabel2 = class(TextLabel)
|
||||||
|
public
|
||||||
|
property Текст: string read GetT write SetT;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure Button2.ppp(sender: Object; e: System.EventArgs);
|
||||||
|
begin
|
||||||
|
if ПриНажатии<>nil then
|
||||||
|
ПриНажатии
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ListBox2.ppp(sender: Object; e: System.EventArgs);
|
||||||
|
begin
|
||||||
|
if ПриНажатии<>nil then
|
||||||
|
ПриНажатии
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init();
|
||||||
|
begin
|
||||||
|
MainForm.SetSize(1024,768);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function СоздатьКнопку(Заголовок: string): Button2;
|
||||||
|
begin
|
||||||
|
ParentControl := MainPanel;
|
||||||
|
Result := new Button2(Заголовок);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function СоздатьСписок: ListBox2;
|
||||||
|
begin
|
||||||
|
ParentControl := MainPanel;
|
||||||
|
Result := new ListBox2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function СоздатьТекст(txt: string := ''): TextLabel2;
|
||||||
|
begin
|
||||||
|
ParentControl := MainPanel;
|
||||||
|
Result := new TextLabel2(txt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function СоздатьБраузер: WebBrowser2;
|
||||||
|
begin
|
||||||
|
MainPanel.Dock := Dockstyle.Left;
|
||||||
|
MainPanel.Width := 200;
|
||||||
|
ParentControl := MainForm;
|
||||||
|
Result := new WebBrowser2;
|
||||||
|
Result.Dock := DockStyle.Fill;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure НоваяСтрока := LineBreak;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Init();
|
||||||
|
end.
|
661
!NewExecutors/Исполнители.pas
Normal file
661
!NewExecutors/Исполнители.pas
Normal file
@ -0,0 +1,661 @@
|
|||||||
|
///- Ìîäóëü Èñïîëíèòåëè
|
||||||
|
/// Îïèñûâàåò ðÿä Èñïîëíèòåëåé, êîòîðûå ìîãóò âûïîëíÿòü êîìàíäû
|
||||||
|
unit Èñïîëíèòåëè;
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
öåëîå = integer;
|
||||||
|
âåùåñòâåííîå = real;
|
||||||
|
ëîãè÷åñêîå = boolean;
|
||||||
|
ñòðîêîâîå = string;
|
||||||
|
|
||||||
|
///- Ïðîöåäóðà Âûâåñòè(çíà÷åíèÿ)
|
||||||
|
/// Âûâîäèò ñïèñîê çíà÷åíèé
|
||||||
|
procedure Âûâåñòè(params args: array of object) := Println(args);
|
||||||
|
/// Âûâîäèò ïóñòóþ ñòðîêó
|
||||||
|
procedure ÂûâåñòèÏóñòóþÑòðîêó := Println;
|
||||||
|
|
||||||
|
///- Ìåòîä Öåëîå.Âûâåñòè
|
||||||
|
/// Âûâîäèò öåëîå
|
||||||
|
procedure Âûâåñòè(Self: öåëîå); extensionmethod := Println(Self);
|
||||||
|
///- Ìåòîä Âåùåñòâåííîå.Âûâåñòè
|
||||||
|
/// Âûâîäèò âåùåñòâåííîå
|
||||||
|
procedure Âûâåñòè(Self: real); extensionmethod := Println(Self);
|
||||||
|
///- Ìåòîä Ñòðîêà.Âûâåñòè
|
||||||
|
/// Âûâîäèò ñòðîêó
|
||||||
|
procedure Âûâåñòè(Self: string); extensionmethod := Println(Self);
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
Seq<T> = interface(IEnumerable<T>)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
///!#
|
||||||
|
ÂûâîäÊëàññ = class
|
||||||
|
public
|
||||||
|
///- Ìåòîä Âûâîä.Äàííûå(ïàðàìåòðû)
|
||||||
|
/// Âûâîäèò äàííûå, ðàçäåëÿÿ èõ ïðîáåëàìè
|
||||||
|
procedure Äàííûå(params args: array of object) := Println(args);
|
||||||
|
///- Ìåòîä Âûâîä.ÏóñòàÿÑòðîêà
|
||||||
|
/// Âûâîäèò ïóñòóþ ñòðîêó
|
||||||
|
procedure ÏóñòàÿÑòðîêà := Println;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ÏîñëåäîâàòåëüíîñòüÊëàññ = class
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Ñåðâèñíûå ìåòîäû
|
||||||
|
|
||||||
|
function DeleteEnd(Self: string; s: string): string; extensionmethod;
|
||||||
|
begin
|
||||||
|
if Self.EndsWith(s) then
|
||||||
|
begin
|
||||||
|
var i := Self.LastIndexOf(s);
|
||||||
|
if (i>=0) and (i<Self.Length) then
|
||||||
|
Result := Self.Remove(i)
|
||||||
|
else Result := Self;
|
||||||
|
end
|
||||||
|
else Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure PrintAllMethods(o: Object);
|
||||||
|
begin
|
||||||
|
WritelnFormat('Ìåòîäû èñïîëíèòåëÿ {0}:',o.GetType.Name.DeleteEnd('Êëàññ'));
|
||||||
|
o.GetType.GetMethods(System.Reflection.BindingFlags.Public or
|
||||||
|
System.Reflection.BindingFlags.Instance or
|
||||||
|
System.Reflection.BindingFlags.DeclaredOnly)
|
||||||
|
.Select(s->s.ToString.Replace('Void ','')
|
||||||
|
.Replace('Int32','öåëîå')
|
||||||
|
.Replace('Boolean','ëîãè÷åñêîå')
|
||||||
|
.Replace('System.String','ñòðîêîâîå')
|
||||||
|
.Replace('Double','âåùåñòâåííîå'))
|
||||||
|
.Select(s->' '+s.DeleteEnd('()'))
|
||||||
|
.Where(s->not s.ToString.Contains('$Init$'))
|
||||||
|
.Println(NewLine);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Ðåàëèçàöèÿ
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
ÌíîæåñòâîÊëàññ = class
|
||||||
|
private
|
||||||
|
s := new SortedSet<integer>;
|
||||||
|
public
|
||||||
|
constructor;
|
||||||
|
begin end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Äîáàâèòü(ýëåìåíò: öåëîå)
|
||||||
|
/// Äîáàâëÿåò ýëåìåíò ê ìíîæåñòâó. Åñëè òàêîé ýëåìåíò åñòü, òî íè÷åãî íå ïðîèñõîäèò
|
||||||
|
procedure Äîáàâèòü(params a: array of integer);
|
||||||
|
begin
|
||||||
|
a.ForEach(x->begin s.Add(x) end);
|
||||||
|
//s.Add(ýëåìåíò);
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Óäàëèòü(ýëåìåíò: öåëîå)
|
||||||
|
/// Óäàëÿåò ýëåìåíò èç ìíîæåñòâà. Åñëè òàêîãî ýëåìåíòà íåò, òî íè÷åãî íå ïðîèñõîäèò
|
||||||
|
procedure Óäàëèòü(ýëåìåíò: öåëîå);
|
||||||
|
begin
|
||||||
|
s.Remove(ýëåìåíò);
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Âûâåñòè
|
||||||
|
/// Âûâîäèò ýëåìåíòû ìíîæåñòâà
|
||||||
|
procedure Âûâåñòè;
|
||||||
|
begin
|
||||||
|
s.Println;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Ñîäåðæèò(ýëåìåíò: öåëîå): ëîãè÷åñêèé
|
||||||
|
/// Ïðîâåðÿåò, åñòü ëè ýëåìåíò âî ìíîæåñòâå
|
||||||
|
function Ñîäåðæèò(ýëåìåíò: öåëîå): ëîãè÷åñêîå;
|
||||||
|
begin
|
||||||
|
Result := s.Contains(ýëåìåíò)
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.ÂûâåñòèÂñåÌåòîäû
|
||||||
|
/// Âûâîäèò âñå ìåòîäû Èñïîëíèòåëÿ Ìíîæåñòâî
|
||||||
|
procedure ÂûâåñòèÂñåÌåòîäû;
|
||||||
|
begin
|
||||||
|
if Random(2)=1 then
|
||||||
|
PrintAllMethods(Self)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
WritelnFormat('Ìåòîäû èñïîëíèòåëÿ {0}:',Self.GetType.Name.DeleteEnd('Êëàññ'));
|
||||||
|
Writeln(' Äîáàâèòü(ýëåìåíò: öåëîå)');
|
||||||
|
Writeln(' Óäàëèòü(ýëåìåíò: öåëîå)');
|
||||||
|
Writeln(' Âûâåñòè');
|
||||||
|
Writeln(' Ñîäåðæèò(ýëåìåíò: öåëîå): ëîãè÷åñêîå');
|
||||||
|
Writeln(' ÂûâåñòèÂñåÌåòîäû');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Î÷èñòèòü
|
||||||
|
/// Äåëàåò ìíîæåñòâî ïóñòûì
|
||||||
|
procedure Î÷èñòèòü;
|
||||||
|
begin
|
||||||
|
s.Clear
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Íîâîå
|
||||||
|
/// Ñîçäàåò íîâîå ìíîæåñòâî
|
||||||
|
function Íîâîå(params a: array of integer): ÌíîæåñòâîÊëàññ;
|
||||||
|
begin
|
||||||
|
Result := new ÌíîæåñòâîÊëàññ();
|
||||||
|
Result.Äîáàâèòü(a)
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Ïåðåñå÷åíèå(Ìíîæåñòâî1)
|
||||||
|
/// Âîçâðàùàåò ïåðåñå÷åíèå ìíîæåñòâ
|
||||||
|
function Ïåðåñå÷åíèå(s1: ÌíîæåñòâîÊëàññ): ÌíîæåñòâîÊëàññ;
|
||||||
|
begin
|
||||||
|
Result := new ÌíîæåñòâîÊëàññ();
|
||||||
|
var ss := SSet(s.AsEnumerable&<integer>);
|
||||||
|
ss.IntersectWith(s1.s);
|
||||||
|
Result.s := ss;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
ÌíîæåñòâîÑòðîêÊëàññ = class
|
||||||
|
private
|
||||||
|
s := new SortedSet<string>;
|
||||||
|
public
|
||||||
|
constructor;
|
||||||
|
begin end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Äîáàâèòü(ýëåìåíò: ñòðîêîâîå)
|
||||||
|
/// Äîáàâëÿåò ýëåìåíò ê ìíîæåñòâó. Åñëè òàêîé ýëåìåíò åñòü, òî íè÷åãî íå ïðîèñõîäèò
|
||||||
|
procedure Äîáàâèòü(ýëåìåíò: string);
|
||||||
|
begin
|
||||||
|
s.Add(ýëåìåíò);
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Óäàëèòü(ýëåìåíò: ñòðîêîâîå)
|
||||||
|
/// Óäàëÿåò ýëåìåíò èç ìíîæåñòâà. Åñëè òàêîãî ýëåìåíòà íåò, òî íè÷åãî íå ïðîèñõîäèò
|
||||||
|
procedure Óäàëèòü(ýëåìåíò: string);
|
||||||
|
begin
|
||||||
|
s.Remove(ýëåìåíò);
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Âûâåñòè
|
||||||
|
/// Âûâîäèò ýëåìåíòû ìíîæåñòâà
|
||||||
|
procedure Âûâåñòè;
|
||||||
|
begin
|
||||||
|
s.Println;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Ñîäåðæèò(ýëåìåíò: ñòðîêîâîå): ëîãè÷åñêèé
|
||||||
|
/// Ïðîâåðÿåò, åñòü ëè ýëåìåíò âî ìíîæåñòâå
|
||||||
|
function Ñîäåðæèò(ýëåìåíò: string): ëîãè÷åñêîå;
|
||||||
|
begin
|
||||||
|
Result := s.Contains(ýëåìåíò)
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.ÂûâåñòèÂñåÌåòîäû
|
||||||
|
/// Âûâîäèò âñå ìåòîäû Èñïîëíèòåëÿ Ìíîæåñòâî
|
||||||
|
procedure ÂûâåñòèÂñåÌåòîäû;
|
||||||
|
begin
|
||||||
|
if Random(2)=1 then
|
||||||
|
PrintAllMethods(Self)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
WritelnFormat('Ìåòîäû èñïîëíèòåëÿ {0}:',Self.GetType.Name.DeleteEnd('Êëàññ'));
|
||||||
|
Writeln(' Äîáàâèòü(ýëåìåíò: öåëîå)');
|
||||||
|
Writeln(' Óäàëèòü(ýëåìåíò: öåëîå)');
|
||||||
|
Writeln(' Âûâåñòè');
|
||||||
|
Writeln(' Ñîäåðæèò(ýëåìåíò: öåëîå): ëîãè÷åñêîå');
|
||||||
|
Writeln(' ÂûâåñòèÂñåÌåòîäû');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Î÷èñòèòü
|
||||||
|
/// Äåëàåò ìíîæåñòâî ïóñòûì
|
||||||
|
procedure Î÷èñòèòü;
|
||||||
|
begin
|
||||||
|
s.Clear
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.Íîâîå
|
||||||
|
/// Ñîçäàåò íîâîå ìíîæåñòâî
|
||||||
|
function Íîâîå := new ÌíîæåñòâîÑòðîêÊëàññ;
|
||||||
|
///- Ìåòîä Ìíîæåñòâî.ÑîçäàòüÏàðû(ìíîæåñòâî1)
|
||||||
|
/// Ñîçäàåò ïàðû ýëåìåíòîâ èç äâóõ ìíîæåñòâ
|
||||||
|
function ÑîçäàòüÏàðû(ìí1: ÌíîæåñòâîÑòðîêÊëàññ): ÌíîæåñòâîÑòðîêÊëàññ;
|
||||||
|
begin
|
||||||
|
var ss: SortedSet<string>;
|
||||||
|
ss := (ìí1 as ÌíîæåñòâîÑòðîêÊëàññ).s;
|
||||||
|
|
||||||
|
var m := new ÌíîæåñòâîÑòðîêÊëàññ;
|
||||||
|
m.s := s.ZipTuple(ss).Select(x -> x.ToString()).ToSortedSet;
|
||||||
|
Result := m
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
Âû÷èñëèòåëüÊëàññ = class
|
||||||
|
public
|
||||||
|
///- Ìåòîä Âû÷èñëèòåëü.ÊâàäðàòíîåÓðàâíåíèå(a,b,c: âåùåñòâåííîå)
|
||||||
|
/// Âûâîäèò âñå ðåøåíèÿ êâàäðàòíîãî óðàâíåíèÿ
|
||||||
|
procedure ÐåøèòüÊâàäðàòíîåÓðàâíåíèå(a,b,c: real);
|
||||||
|
begin
|
||||||
|
writelnFormat('Êâàäðàòíîå óðàâíåíèå: {0}*x*x+{1}*x+{2}=0',a,b,c);
|
||||||
|
var D := b*b-4*a*c;
|
||||||
|
if D<0 then
|
||||||
|
writeln('Ðåøåíèé íåò')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
var x1 := (-b-sqrt(D))/2/a;
|
||||||
|
var x2 := (-b+sqrt(D))/2/a;
|
||||||
|
writelnFormat('Ðåøåíèÿ: x1={0} x2={1}',x1,x2)
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Âû÷èñëèòåëü.Àðèôìåòè÷åñêàÿÏðîãðåññèÿ(a0,d: öåëîå)
|
||||||
|
/// Âûâîäèò àðèôìåòè÷åñêóþ ïðîãðåññèþ
|
||||||
|
procedure ÂûâåñòèÀðèôìåòè÷åñêóþÏðîãðåññèþ(a0,d: integer);
|
||||||
|
begin
|
||||||
|
writelnFormat('Àðèôìåòè÷åñêàÿ ïðîãðåññèÿ: a0={0} d={1}',a0,d);
|
||||||
|
SeqGen(10,a0,x->x+d).Println; // ! Îøèáêà åñëè ïðîöåäóðû îïèñûâàþòñÿ ïåðåä
|
||||||
|
end;
|
||||||
|
procedure ÂûâåñòèÂñåÌåòîäû;
|
||||||
|
begin
|
||||||
|
PrintAllMethods(Self);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FileState = (Closed,OpenedForRead,OpenedForWrite);
|
||||||
|
///!#
|
||||||
|
ÔàéëÊëàññ = class
|
||||||
|
private
|
||||||
|
f: Text;
|
||||||
|
State := FileState.Closed;
|
||||||
|
public
|
||||||
|
constructor ;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÎòêðûòüÍà×òåíèå(èìÿ)
|
||||||
|
/// Îòêðûâàåò ôàéë íà ÷òåíèå
|
||||||
|
procedure ÎòêðûòüÍà×òåíèå(èìÿ: ñòðîêîâîå);
|
||||||
|
begin
|
||||||
|
if State<>FileState.Closed then
|
||||||
|
f.Close;
|
||||||
|
f := OpenRead(èìÿ);
|
||||||
|
State := FileState.OpenedForRead
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÎòêðûòüÍàÇàïèñü(èìÿ)
|
||||||
|
/// Îòêðûâàåò ôàéë íà çàïèñü
|
||||||
|
procedure ÎòêðûòüÍàÇàïèñü(èìÿ: ñòðîêîâîå);
|
||||||
|
begin
|
||||||
|
if State<>FileState.Closed then
|
||||||
|
f.Close;
|
||||||
|
f := OpenWrite(èìÿ);
|
||||||
|
State := FileState.OpenedForWrite
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Çàêðûòü
|
||||||
|
/// Çàêðûâàåò ôàéë
|
||||||
|
procedure Çàêðûòü;
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
Println('Îøèáêà: Ôàéë óæå çàêðûò')
|
||||||
|
else f.Close;
|
||||||
|
State := FileState.Closed;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Çàïèñàòü(ñòðîêà)
|
||||||
|
/// Çàïèñûâàåò ñòðîêó â ôàéë
|
||||||
|
procedure Çàïèñàòü(ñòðîêà: ñòðîêîâîå);
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
Println('Îøèáêà: Ïåðåä çàïèñüþ ôàéë ñëåäóåò îòêðûòü')
|
||||||
|
else f.Writeln(ñòðîêà)
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Ïðî÷èòàòüÑòðîêó
|
||||||
|
/// Âîçâðàùàåò ñòðîêó, ñ÷èòàííóþ èç ôàéëà
|
||||||
|
function Ïðî÷èòàòüÑòðîêó: ñòðîêîâîå;
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
begin
|
||||||
|
Println('Îøèáêà: Ïåðåä ÷òåíèåì ôàéë ñëåäóåò îòêðûòü');
|
||||||
|
Result := '';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Result := f.ReadlnString;
|
||||||
|
Println(Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Ïðî÷èòàòüÖåëîå
|
||||||
|
/// Âîçâðàùàåò öåëîå, ñ÷èòàííîå èç ôàéëà
|
||||||
|
function Ïðî÷èòàòüÖåëîå: öåëîå;
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
begin
|
||||||
|
Println('Îøèáêà: Ïåðåä ÷òåíèåì ôàéë íàäî îòêðûòü');
|
||||||
|
Result := 0;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Result := f.ReadInteger;
|
||||||
|
Print(Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Ïðî÷èòàòüÂåùåñòâåííîå
|
||||||
|
/// Âîçâðàùàåò âåùåñòâåííîå, ñ÷èòàííîå èç ôàéëà
|
||||||
|
function Ïðî÷èòàòüÂåùåñòâåííîå: âåùåñòâåííîå;
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
begin
|
||||||
|
Println('Îøèáêà: Ïåðåä ÷òåíèåì ôàéë íàäî îòêðûòü');
|
||||||
|
Result := 0;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Result := f.ReadReal;
|
||||||
|
Print(Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÊîíåöÔàéëà
|
||||||
|
/// Âîçâðàùàåò, äîñòèãíóò ëè êîíåö ôàéëà
|
||||||
|
function ÊîíåöÔàéëà: ëîãè÷åñêîå;
|
||||||
|
begin
|
||||||
|
Result := f.Eof;
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÈìÿÔàéëà
|
||||||
|
/// Âîçâðàùàåò èìÿ ôàéëà
|
||||||
|
function ÈìÿÔàéëà: ñòðîêîâîå;
|
||||||
|
begin
|
||||||
|
if State=FileState.Closed then
|
||||||
|
begin
|
||||||
|
Println('Îøèáêà: Ôàéë çàêðûò, ïîýòîìó îí íå èìååò èìåíè');
|
||||||
|
Result := '';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Println('Èìÿ ôàéëà: ',f.Name);
|
||||||
|
Result := f.Name;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÂûâåñòèÑîäåðæèìîå
|
||||||
|
/// Âûâîäèò ñîäåðæèìîå ôàéëà
|
||||||
|
procedure ÂûâåñòèÑîäåðæèìîå(èìÿôàéëà: ñòðîêîâîå);
|
||||||
|
begin
|
||||||
|
if (State<>FileState.Closed) and (f.Name.ToLower=èìÿôàéëà.ToLower) then
|
||||||
|
Println('Îøèáêà: Ñîäåðæèìîå ìîæíî âûâåñòè òîëüêî ó çàêðûòîãî ôàéëà')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
WritelnFormat('Ñîäåðæèìîå ôàéëà {0}:',èìÿôàéëà);
|
||||||
|
try
|
||||||
|
ReadLines(èìÿôàéëà).Println(NewLine);
|
||||||
|
except
|
||||||
|
WritelnFormat('Ôàéë {0}: îòñóòñòâóåò íà äèñêå',èìÿôàéëà);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.ÂûâåñòèÂñåÌåòîäû
|
||||||
|
/// Âûâîäèò âñå ìåòîäû èñïîëíèòåëÿ Ôàéë
|
||||||
|
procedure ÂûâåñòèÂñåÌåòîäû;
|
||||||
|
begin
|
||||||
|
PrintAllMethods(Self);
|
||||||
|
end;
|
||||||
|
///- Ìåòîä Ôàéë.Íîâûé
|
||||||
|
/// Ñîçäàåò è âîçâðàùàåò íîâîãî èñïîëíèòåëÿ Ôàéë
|
||||||
|
function Íîâûé := new ÔàéëÊëàññ;
|
||||||
|
///- Ìåòîä Ôàéë.ÂñåÑòðîêè
|
||||||
|
/// Âîçâðàùàåò âñå ñòðîêè ôàéëà â âèäå ïîñëåäîâàòåëüíîñòè
|
||||||
|
function ÂñåÑòðîêè(èìÿôàéëà: ñòðîêîâîå): sequence of ñòðîêîâîå;
|
||||||
|
begin
|
||||||
|
if (State<>FileState.Closed) and (f.Name.ToLower=èìÿôàéëà.ToLower) then
|
||||||
|
begin
|
||||||
|
Println('Îøèáêà: Ñòðîêè ìîæíî ïîëó÷èòü òîëüêî ó çàêðûòîãî ôàéëà');
|
||||||
|
Result := nil;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Result := ReadLines(èìÿôàéëà).ToArray;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const dbname = 'countries.db';
|
||||||
|
|
||||||
|
var coun: array of string := nil;
|
||||||
|
|
||||||
|
function ÑòðàíûÑòðîêè: sequence of string;
|
||||||
|
begin
|
||||||
|
if coun = nil then
|
||||||
|
coun := ReadLines(dbname).ToArray();
|
||||||
|
Result := coun;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Âûâåñòè
|
||||||
|
/// Âûâîäèò âñå ýëåìåíòû ïîñëåäîâàòåëüíîñòè, ðàçäåëÿÿ èõ ïðîáåëàìè
|
||||||
|
function Âûâåñòè<T>(Self: sequence of T): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Self.Println;
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.ÂûâåñòèÏîñòðî÷íî
|
||||||
|
/// Âûâîäèò âñå ýëåìåíòû ïîñëåäîâàòåëüíîñòè - êàæäûé ýëåìåíò ñ íîâîé ñòðîêè
|
||||||
|
function ÂûâåñòèÏîñòðî÷íî<T>(Self: sequence of T): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Self.Println(NewLine);
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Âûáðàòü(óñëîâèå)
|
||||||
|
/// Âûáèðàåò âñå ýëåìåíòû ïîñëåäîâàòåëüíîñòè, óäîâëåòâîðÿþùèå óêàçàííîìó óñëîâèþ
|
||||||
|
function Âûáðàòü<T>(Self: sequence of T; cond: T -> boolean): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Where(cond);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Âçÿòü(n)
|
||||||
|
/// Âîçâðàùàåò ïåðâûå n ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè
|
||||||
|
function Âçÿòü<T>(Self: sequence of T; n: integer): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Take(n);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Êîëè÷åñòâî(óñëîâèå)
|
||||||
|
/// Âîçâðàùàåò êîëè÷åñòâî ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè, óäîâëåòâîðÿþùèõ óêàçàííîìó óñëîâèþ
|
||||||
|
function Êîëè÷åñòâî<T>(Self: sequence of T; cond: T -> boolean := nil): öåëîå; extensionmethod;
|
||||||
|
begin
|
||||||
|
if cond = nil then
|
||||||
|
Result := Self.Count()
|
||||||
|
else Result := Self.Count(cond)
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Ñóììà
|
||||||
|
/// Âîçâðàùàåò ñóììó ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè
|
||||||
|
function Ñóììà(Self: sequence of integer): integer; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Sum();
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Ñðåäíåå
|
||||||
|
/// Âîçâðàùàåò ñðåäíåå ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè
|
||||||
|
function Ñðåäíåå(Self: sequence of integer): real; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Average;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Ìèíèìóì
|
||||||
|
/// Âîçâðàùàåò ìèíèìàëüíûé ýëåìåíò ïîñëåäîâàòåëüíîñòè
|
||||||
|
function Ìèíèìóì(Self: sequence of integer): integer; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Min;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Ìàêñèìóì
|
||||||
|
/// Âîçâðàùàåò ìàêñèìàëüíûé ýëåìåíò ïîñëåäîâàòåëüíîñòè
|
||||||
|
function Ìàêñèìóì(Self: sequence of integer): integer; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Max;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.Ïðåîáðàçîâàòü(ôóíêöèÿ ïðåîáðàçîâàíèÿ)
|
||||||
|
/// Ïðåîáðàçóåò ýëåìåíòû ïîñëåäîâàòåëüíîñòè ñ ïîìîùüþ ôóíêöèè è âîçâðàùàåò íîâóþ ïîñëåäîâàòåëüíîñòü
|
||||||
|
function Ïðåîáðàçîâàòü<T,Key>(Self: sequence of T; conv: T -> Key): sequence of Key; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.Select(conv);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.ÎòñîðòèðîâàòüÏî(ïðîåêöèÿ ýëåìåíòà íà êëþ÷)
|
||||||
|
/// Ñîðòèðóåò ýëåìåíòû ïîñëåäîâàòåëüíîñòè ïî âîçðàñòàíèþ êëþ÷à
|
||||||
|
function ÎòñîðòèðîâàòüÏî<T,Key>(Self: sequence of T; cond: T -> Key): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.OrderBy(cond);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.ÎòñîðòèðîâàòüÏî(ïðîåêöèÿ ýëåìåíòà íà êëþ÷)
|
||||||
|
/// Ñîðòèðóåò ýëåìåíòû ïîñëåäîâàòåëüíîñòè ïî êëþ÷ó
|
||||||
|
function Îòñîðòèðîâàòü<T>(Self: sequence of T): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.OrderBy(x->x);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.ÎòñîðòèðîâàòüÏîÓáûâàíèþ(ïðîåêöèÿ ýëåìåíòà íà êëþ÷)
|
||||||
|
/// Ñîðòèðóåò ýëåìåíòû ïîñëåäîâàòåëüíîñòè ïî óáûâàíèþ êëþ÷à
|
||||||
|
function ÎòñîðòèðîâàòüÏîÓáûâàíèþ<T,Key>(Self: sequence of T; cond: T -> Key): sequence of T; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.OrderByDescending(cond);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ìåòîä Ïîñëåäîâàòåëüíîñòü.ÄëÿÂñåõ(äåéñòâèå)
|
||||||
|
/// Âûïîëíÿåò óêàçàííîå äåéñòâèå äëÿ êàæäîãî ýëåìåíòà ïîñëåäîâàòåëüíîñòè
|
||||||
|
procedure ÄëÿÂñåõ<T>(Self: sequence of T; act: T -> ()); extensionmethod;
|
||||||
|
begin
|
||||||
|
Self.Foreach(act);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ÍàÁóêâó(c: char): string -> boolean;
|
||||||
|
begin
|
||||||
|
Result := ñòðàíà -> ñòðàíà[1] = c;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ÍàÁóêâó(s: string): string -> boolean;
|
||||||
|
begin
|
||||||
|
Result := ñòðàíà -> ñòðàíà[1] = s[1];
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Íà÷èíàåòñÿÍà(Self: string; s: string): boolean; extensionmethod;
|
||||||
|
begin
|
||||||
|
Result := Self.StartsWith(s);
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- ×åòíîå(çíà÷åíèå)
|
||||||
|
/// Âîçâðàùàåò, ÿâëÿåòñÿ ëè çíà÷åíèå ÷åòíûì
|
||||||
|
function ×åòíîå(x: integer): boolean;
|
||||||
|
begin
|
||||||
|
Result := x mod 2 = 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Íå÷åòíîå(çíà÷åíèå)
|
||||||
|
/// Âîçâðàùàåò, ÿâëÿåòñÿ ëè çíà÷åíèå íå÷åòíûì
|
||||||
|
function Íå÷åòíîå(x: integer): boolean;
|
||||||
|
begin
|
||||||
|
Result := x mod 2 <> 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
ÂñåÈñïîëíèòåëèÊëàññ = class
|
||||||
|
public
|
||||||
|
///- Èñïîëíèòåëü Ìíîæåñòâî
|
||||||
|
/// Ïðåäîñòàâëÿåò ìåòîäû äëÿ ìíîæåñòâà öåëûõ
|
||||||
|
Ìíîæåñòâî: ÌíîæåñòâîÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü ÌíîæåñòâîÑòðîê
|
||||||
|
/// Ïðåäîñòàâëÿåò ìåòîäû äëÿ ìíîæåñòâà ñòðîê
|
||||||
|
ÌíîæåñòâîÑòðîê: ÌíîæåñòâîÑòðîêÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Âû÷èñëèòåëü
|
||||||
|
/// Ïðåäîñòàâëÿåò ðÿä ìåòîäîâ èç îáëàñòè ìàòåìàòèêè
|
||||||
|
Âû÷èñëèòåëü: Âû÷èñëèòåëüÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Ôàéë
|
||||||
|
/// Ïðåäîñòàâëÿåò ðÿä ìåòîäîâ äëÿ ðàáîòû ñ ôàéëàìè íà äèñêå
|
||||||
|
Ôàéë: ÔàéëÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Âûâîä
|
||||||
|
/// Ïðåäîñòàâëÿåò ìåòîäû äëÿ âûâîäà äàííûõ
|
||||||
|
Âûâîä: ÂûâîäÊëàññ;
|
||||||
|
///- Ìåòîä Âûâåñòè
|
||||||
|
/// Âûâîäèò âñåõ èñïîëíèòåëåé
|
||||||
|
procedure Âûâåñòè;
|
||||||
|
begin
|
||||||
|
Println('Ìíîæåñòâî');
|
||||||
|
Println('ÌíîæåñòâîÑòðîê');
|
||||||
|
Println('Âû÷èñëèòåëü');
|
||||||
|
Println('Ôàéë');
|
||||||
|
Println('Âûâîä');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
///!#
|
||||||
|
Country = auto class
|
||||||
|
nm,cap: string;
|
||||||
|
inh: integer;
|
||||||
|
cont: string;
|
||||||
|
public
|
||||||
|
property Íàçâàíèå: string read nm;
|
||||||
|
property Ñòîëèöà: string read cap;
|
||||||
|
property Íàñåëåíèå: integer read inh;
|
||||||
|
property Êîíòèíåíò: string read cont;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var ñòðàíû: sequence of Country;
|
||||||
|
|
||||||
|
procedure InitCountries();
|
||||||
|
begin
|
||||||
|
ñòðàíû := ReadLines('Ñòðàíû.csv')
|
||||||
|
.Select(s->s.ToWords(';'))
|
||||||
|
.Select(w->new Country(w[0],w[1],w[2].ToInteger,w[3])).ToArray;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Ïîñëåäîâàòåëüíîñòè
|
||||||
|
|
||||||
|
///- Àðèôìåòè÷åñêàÿÏðîãðåññèÿ(ïåðâûé,øàã,êîëè÷åñòâî)
|
||||||
|
/// Âîçâðàùàåò àðèôìåòè÷åñêóþ ïðîãðåññèþ ñ óêàçàííûì ïåðâûì ýëåìåíòîì, øàãîì è êîëè÷åñòâîì
|
||||||
|
function Àðèôìåòè÷åñêàÿÏðîãðåññèÿ(a,d: integer; n: integer := 20): sequence of integer;
|
||||||
|
begin
|
||||||
|
Result := SeqGen(n,a,a->a+d)
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Àðèôìåòè÷åñêàÿÏðîãðåññèÿ(ïåðâûé,øàã,êîëè÷åñòâî)
|
||||||
|
/// Âîçâðàùàåò àðèôìåòè÷åñêóþ ïðîãðåññèþ ñ óêàçàííûì ïåðâûì ýëåìåíòîì, øàãîì è êîëè÷åñòâîì
|
||||||
|
function Àðèôìåòè÷åñêàÿÏðîãðåññèÿ(a,d: real; n: integer := 20): sequence of real;
|
||||||
|
begin
|
||||||
|
Result := SeqGen(n,a,a->a+d)
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ãåîìåòè÷åñêàÿÏðîãðåññèÿ(ïåðâûé,øàã,êîëè÷åñòâî)
|
||||||
|
/// Âîçâðàùàåò ãåîìåòè÷åñêóþ ïðîãðåññèþ ñ óêàçàííûì ïåðâûì ýëåìåíòîì, øàãîì è êîëè÷åñòâîì
|
||||||
|
function Ãåîìåòè÷åñêàÿÏðîãðåññèÿ(a,d: integer; n: integer := 10): sequence of integer;
|
||||||
|
begin
|
||||||
|
Result := SeqGen(n,a,a->a*d)
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ãåîìåòè÷åñêàÿÏðîãðåññèÿ(ïåðâûé,øàã,êîëè÷åñòâî)
|
||||||
|
/// Âîçâðàùàåò ãåîìåòè÷åñêóþ ïðîãðåññèþ ñ óêàçàííûì ïåðâûì ýëåìåíòîì, øàãîì è êîëè÷åñòâîì
|
||||||
|
function Ãåîìåòè÷åñêàÿÏðîãðåññèÿ(a,d: real; n: integer := 10): sequence of real;
|
||||||
|
begin
|
||||||
|
Result := SeqGen(n,a,a->a*d)
|
||||||
|
end;
|
||||||
|
|
||||||
|
///- Ñëó÷àéíàÿÏîñëåäîâàòåëüíîñòü(êîëè÷åñòâî,îò,äî)
|
||||||
|
/// Âîçâðàùàåò ñëó÷àéíóþ ïîñëåäîâàòåëüíîñòü ýëåìåíòîâ â äèàïàçîíå [îò, äî]
|
||||||
|
function Ñëó÷àéíàÿÏîñëåäîâàòåëüíîñòü(n: integer := 10; a: integer := 0; b: integer := 10): sequence of integer;
|
||||||
|
begin
|
||||||
|
Result := ArrRandom(n,a,b)
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ÍîâûéÔàéë := new ÔàéëÊëàññ;
|
||||||
|
|
||||||
|
var
|
||||||
|
///- Èñïîëíèòåëü Ìíîæåñòâî. Ïðåäîñòàâëÿåò ìåòîäû äëÿ ìíîæåñòâà öåëûõ
|
||||||
|
Ìíîæåñòâî := new ÌíîæåñòâîÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü ÌíîæåñòâîÑòðîê. Ïðåäîñòàâëÿåò ìåòîäû äëÿ ìíîæåñòâà ñòðîê
|
||||||
|
ÌíîæåñòâîÑòðîê := new ÌíîæåñòâîÑòðîêÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Âû÷èñëèòåëü. Ïðåäîñòàâëÿåò ðÿä ìåòîäîâ èç îáëàñòè ìàòåìàòèêè
|
||||||
|
Âû÷èñëèòåëü := new Âû÷èñëèòåëüÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Ôàéë. Ïðåäîñòàâëÿåò ðÿä ìåòîäîâ äëÿ ðàáîòû ñ ôàéëàìè íà äèñêå
|
||||||
|
Ôàéë := new ÔàéëÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü Âûâîä. Ïðåäîñòàâëÿåò ìåòîäû äëÿ âûâîäà äàííûõ
|
||||||
|
Âûâîä := new ÂûâîäÊëàññ;
|
||||||
|
///- Èñïîëíèòåëü ÌèðÈñïîëíèòåëåé. Ñîäåðæèò âñåõ èñïîëíèòåëåé
|
||||||
|
ÌèðÈñïîëíèòåëåé := new ÂñåÈñïîëíèòåëèÊëàññ;
|
||||||
|
begin
|
||||||
|
ÌèðÈñïîëíèòåëåé.Ìíîæåñòâî := Ìíîæåñòâî;
|
||||||
|
ÌèðÈñïîëíèòåëåé.ÌíîæåñòâîÑòðîê := ÌíîæåñòâîÑòðîê;
|
||||||
|
ÌèðÈñïîëíèòåëåé.Âû÷èñëèòåëü := Âû÷èñëèòåëü;
|
||||||
|
ÌèðÈñïîëíèòåëåé.Ôàéë := Ôàéë;
|
||||||
|
ÌèðÈñïîëíèòåëåé.Âûâîä := Âûâîä;
|
||||||
|
InitCountries;
|
||||||
|
end.
|
||||||
|
|
12
!NewExecutors/Множество1.pas
Normal file
12
!NewExecutors/Множество1.pas
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var множ1 := Множество.Новое(3,5,4,5);
|
||||||
|
множ1.Вывести;
|
||||||
|
|
||||||
|
var множ2 := Множество.Новое(7,5,3,9);
|
||||||
|
множ2.Вывести;
|
||||||
|
|
||||||
|
множ1.Пересечение(множ2).Вывести;
|
||||||
|
end.
|
||||||
|
|
107
!NewExecutors/Окна.pas
Normal file
107
!NewExecutors/Окна.pas
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
unit Îêíà;
|
||||||
|
|
||||||
|
{$reference 'PresentationFramework.dll'}
|
||||||
|
{$reference 'WindowsBase.dll'}
|
||||||
|
{$reference 'PresentationCore.dll'}
|
||||||
|
|
||||||
|
{$apptype windows}
|
||||||
|
|
||||||
|
uses System.Windows.Controls;
|
||||||
|
uses System.Windows;
|
||||||
|
uses System.Windows.Data;
|
||||||
|
uses System.Reflection;
|
||||||
|
uses System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
|
||||||
|
var app := new Application();
|
||||||
|
var MainWindow := new Window;
|
||||||
|
|
||||||
|
procedure InitWPF;
|
||||||
|
begin
|
||||||
|
MainWindow.Title := 'WPF';
|
||||||
|
MainWindow.WindowStartupLocation := WindowStartupLocation.CenterScreen;
|
||||||
|
MainWindow.Width := 800;
|
||||||
|
MainWindow.Height := 600;
|
||||||
|
MainWindow.Show;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetFields<T>(t1: T): sequence of string;
|
||||||
|
begin
|
||||||
|
Result := t1.GetType.GetProperties.Select(f->f.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Îòîáðàçèòü<T>(Self: ListView; data: sequence of T); extensionmethod;
|
||||||
|
begin
|
||||||
|
var gv := Self.View as GridView;
|
||||||
|
var fields := GetFields(data.First);
|
||||||
|
gv.Columns.Clear;
|
||||||
|
foreach var fld in fields do
|
||||||
|
begin
|
||||||
|
var col := new GridViewColumn;
|
||||||
|
col.Header := fld;
|
||||||
|
col.Width := 150;
|
||||||
|
col.DisplayMemberBinding := new Binding(fld);
|
||||||
|
gv.Columns.Add(col);
|
||||||
|
end;
|
||||||
|
Self.ItemsSource := data.Skip(1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
LeftPanel: StackPanel;
|
||||||
|
RightPanel: DockPanel;
|
||||||
|
|
||||||
|
procedure Init();
|
||||||
|
begin
|
||||||
|
var dp := new DockPanel;
|
||||||
|
MainWindow.Content := dp;
|
||||||
|
|
||||||
|
LeftPanel := new StackPanel();
|
||||||
|
LeftPanel.Width := 150;
|
||||||
|
dp.Children.Add(LeftPanel);
|
||||||
|
|
||||||
|
RightPanel := new DockPanel();
|
||||||
|
dp.Children.Add(RightPanel);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CreateListView(): ListView;
|
||||||
|
begin
|
||||||
|
var list := new ListView;
|
||||||
|
var gv := new GridView;
|
||||||
|
list.View := gv;
|
||||||
|
RightPanel.Children.Add(list);
|
||||||
|
Result := list;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ÑîçäàòüÎêíîÑïèñêà: ListView;
|
||||||
|
begin
|
||||||
|
Result := CreateListView;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function CreateButton(Content: string; p: procedure): Button;
|
||||||
|
begin
|
||||||
|
var btn := new Button;
|
||||||
|
LeftPanel.Children.Add(btn);
|
||||||
|
btn.HorizontalAlignment := HorizontalAlignment.Stretch;
|
||||||
|
btn.Margin := new Thickness(5);
|
||||||
|
btn.Content := Content;
|
||||||
|
btn.Click += procedure (sender: object; args: RoutedEventArgs) ->
|
||||||
|
begin
|
||||||
|
p;
|
||||||
|
end;
|
||||||
|
Result := btn;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ÑîçäàòüÊíîïêó(Content: string; p: procedure): Button;
|
||||||
|
begin
|
||||||
|
Result := CreateButton(Content,p);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initialization
|
||||||
|
InitWPF;
|
||||||
|
Init;
|
||||||
|
finalization
|
||||||
|
app.Run();
|
||||||
|
end.
|
14
!NewExecutors/Последовательности1.pas
Normal file
14
!NewExecutors/Последовательности1.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var посл := СлучайнаяПоследовательность(10);
|
||||||
|
посл.Вывести;
|
||||||
|
|
||||||
|
посл.Сумма.Вывести;
|
||||||
|
|
||||||
|
var сумма := 0;
|
||||||
|
foreach var знач in посл do
|
||||||
|
сумма += знач;
|
||||||
|
сумма.Вывести
|
||||||
|
end.
|
||||||
|
|
15
!NewExecutors/Последовательности2.pas
Normal file
15
!NewExecutors/Последовательности2.pas
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var посл := СлучайнаяПоследовательность(10);
|
||||||
|
посл.Вывести;
|
||||||
|
|
||||||
|
посл.Количество(значение -> Четное(значение)).Вывести;
|
||||||
|
|
||||||
|
var количество := 0;
|
||||||
|
foreach var значение in посл do
|
||||||
|
if Четное(значение) then
|
||||||
|
количество += 1;
|
||||||
|
количество.Вывести
|
||||||
|
end.
|
||||||
|
|
15
!NewExecutors/Пример1.pas
Normal file
15
!NewExecutors/Пример1.pas
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Множество.Добавить(5);
|
||||||
|
Множество.Добавить(3);
|
||||||
|
Множество.Добавить(5);
|
||||||
|
Множество.Добавить(4);
|
||||||
|
Множество.Вывести;
|
||||||
|
Множество.Удалить(3);
|
||||||
|
Множество.Вывести;
|
||||||
|
Вывести(Множество.Содержит(3));
|
||||||
|
Вывод.ПустаяСтрока;
|
||||||
|
Множество.ВывестиВсеМетоды;
|
||||||
|
end.
|
||||||
|
|
11
!NewExecutors/Пример2.pas
Normal file
11
!NewExecutors/Пример2.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Вычислитель.РешитьКвадратноеУравнение(1,3,2);
|
||||||
|
Вывод.ПустаяСтрока;
|
||||||
|
Вычислитель.РешитьКвадратноеУравнение(1,2,2);
|
||||||
|
Вывод.ПустаяСтрока;
|
||||||
|
Вычислитель.ВывестиАрифметическуюПрогрессию(1,2);
|
||||||
|
Вывод.ПустаяСтрока;
|
||||||
|
Вычислитель.ВывестиВсеМетоды;
|
||||||
|
end.
|
14
!NewExecutors/Прогрессии1.pas
Normal file
14
!NewExecutors/Прогрессии1.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var арифм := АрифметическаяПрогрессия(1,2,20);
|
||||||
|
арифм.Вывести;
|
||||||
|
арифм.Сумма.Вывести;
|
||||||
|
var геом := ГеометическаяПрогрессия(1,2,10);
|
||||||
|
геом.Вывести;
|
||||||
|
геом.Сумма.Вывести;
|
||||||
|
var случай := СлучайнаяПоследовательность(10,1,100);
|
||||||
|
случай.Вывести;
|
||||||
|
Вывести(случай.Минимум,случай.Максимум);
|
||||||
|
end.
|
||||||
|
|
13
!NewExecutors/Прогрессии2.pas
Normal file
13
!NewExecutors/Прогрессии2.pas
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
var арифм1 := АрифметическаяПрогрессия(1,2,20);
|
||||||
|
арифм1.Вывести;
|
||||||
|
арифм1.Сумма.Вывести;
|
||||||
|
var посл2 := арифм1.Преобразовать(x->x*x);
|
||||||
|
посл2.Вывести;
|
||||||
|
var посл3 := посл2.Выбрать(x -> x mod 10 = 5);
|
||||||
|
посл3.Вывести;
|
||||||
|
end.
|
||||||
|
|
196
!NewExecutors/Страны.csv
Normal file
196
!NewExecutors/Страны.csv
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
Абхазия;Сухуми;240705;Азия
|
||||||
|
Австралия;Канберра;25028000;Австралия
|
||||||
|
Австрия;Вена;8579747;Европа
|
||||||
|
Азербайджан;Баку;9730500;Азия
|
||||||
|
Албания;Тирана;2886026;Европа
|
||||||
|
Алжир;Алжир;40375954;Африка
|
||||||
|
Ангола;Луанда;25830958;Африка
|
||||||
|
Андорра;Андорра-ла-Велья;76098;Европа
|
||||||
|
Антигуа и Барбуда;Сент-Джонс;92738;Америка
|
||||||
|
Аргентина;Буэнос-Айрес;43131966;Америка
|
||||||
|
Армения;Ереван;2998600;Азия
|
||||||
|
Афганистан;Кабул;33369945;Азия
|
||||||
|
Багамские Острова;Нассау;392718;Америка
|
||||||
|
Бангладеш;Дакка;160991563;Азия
|
||||||
|
Барбадос;Бриджтаун;285006;Америка
|
||||||
|
Бахрейн;Манама;1316500;Азия
|
||||||
|
Белоруссия;Минск;9498400;Европа
|
||||||
|
Белиз;Бельмопан;360838;Америка
|
||||||
|
Бельгия;Брюссель;11250659;Европа
|
||||||
|
Бенин;Порто-Ново;10315244;Африка
|
||||||
|
Болгария;София;7202198;Европа
|
||||||
|
Боливия;Сукре;11410651;Америка
|
||||||
|
Босния и Герцеговина;Сараево;3791622;Европа
|
||||||
|
Ботсвана;Габороне;2303820;Африка
|
||||||
|
Бразилия;Бразилиа;205738331;Америка
|
||||||
|
Бруней;Бандар-Сери-Багаван;428874;Азия
|
||||||
|
Буркина Фасо;Уагадугу;18450494;Африка
|
||||||
|
Бурунди;Бужумбура;11552561;Африка
|
||||||
|
Бутан;Тхимпху;784103;Азия
|
||||||
|
Вануату;Порт-Вила;270470;Австралия
|
||||||
|
Ватикан;Ватикан;842;Европа
|
||||||
|
Великобритания;Лондон;65341183;Европа
|
||||||
|
Венгрия;Будапешт;9823000;Европа
|
||||||
|
Венесуэла;Каракас;31109000;Америка
|
||||||
|
Восточный Тимоp;Дили;1212107;Азия
|
||||||
|
Вьетнам;Ханой;92700000;Азия
|
||||||
|
Габон;Либревиль;1763142;Африка
|
||||||
|
Гаити;Порт-о-Пренс;10911819;Америка
|
||||||
|
Гайана;Джорджтаун;801623;Америка
|
||||||
|
Гамбия;Банжул;2054986;Африка
|
||||||
|
Гана;Аккра;28033375;Африка
|
||||||
|
Гватемала;Гватемала;16176133;Америка
|
||||||
|
Гвинея;Конакри;12947122;Африка
|
||||||
|
Гвинея-Бисау;Бисау;1888429;Африка
|
||||||
|
Германия;Берлин;82162000;Европа
|
||||||
|
Гондурас;Тегусигальпа;8725111;Америка
|
||||||
|
Гренада;Сент-Джорджес;107327;Америка
|
||||||
|
Греция;Афины;10846979;Европа
|
||||||
|
Грузия;Тбилиси;3720400;Азия
|
||||||
|
Дания;Копенгаген;5668743;Европа
|
||||||
|
Демократическая республика Конго;Киншаса;79722624;Африка
|
||||||
|
Джибути;Джибути;899598;Африка
|
||||||
|
Доминика;Розо;73016;Америка
|
||||||
|
Доминиканская Республика;Санто-Доминго;10648613;Америка
|
||||||
|
Египет;Каир;91545000;Африка
|
||||||
|
Замбия;Лусака;16717332;Африка
|
||||||
|
Зимбабве;Хараре;15966810;Африка
|
||||||
|
Израиль;Иерусалим;8522000;Азия
|
||||||
|
Индия;Нью-Дели;1294186000;Азия
|
||||||
|
Индонезия;Джакарта;260581100;Азия
|
||||||
|
Иордания;Амман;6879300;Азия
|
||||||
|
Ирак;Багдад;37547686;Азия
|
||||||
|
Иран;Тегеран;79003827;Азия
|
||||||
|
Ирландия;Дублин;4635400;Европа
|
||||||
|
Исландия;Рейкьявик;332529;Европа
|
||||||
|
Испания;Мадрид;46423064;Европа
|
||||||
|
Италия;Рим;60665551;Европа
|
||||||
|
Йемен;Сана;27477600;Азия
|
||||||
|
Кабо-Верде;Прая;526993;Африка
|
||||||
|
Казахстан;Астана;17753200;Азия
|
||||||
|
Камбоджа;Пномпень;15827241;Азия
|
||||||
|
Камерун;Яунде;23924407;Африка
|
||||||
|
Канада;Оттава;34988000;Америка
|
||||||
|
Катар;Доха;2269672;Азия
|
||||||
|
Кения;Найроби;47251449;Африка
|
||||||
|
Кипр;Никосия;848319;Азия
|
||||||
|
Киргизия;Бишкек;6008600;Азия
|
||||||
|
Кирибати;Южная Тарава;114405;Острова
|
||||||
|
Китай;Пекин;1379022000;Азия
|
||||||
|
Колумбия;Санта-Фе-де-Богота;48803000;Америка
|
||||||
|
Коморские острова;Морони;806153;Африка
|
||||||
|
Коста-Рика;Сан-Хосе;4773130;Америка
|
||||||
|
Кот-д’Ивуар;Ямусукро;23254184;Африка
|
||||||
|
Куба;Гавана;11392889;Америка
|
||||||
|
Кувейт;Эль-Кувейт;4007146;Азия
|
||||||
|
Лаос;Вьентьян;6693300;Азия
|
||||||
|
Латвия;Рига;1959900;Европа
|
||||||
|
Лесото;Масеру;2160309;Африка
|
||||||
|
Либерия;Монровия;4503438;Африка
|
||||||
|
Ливан;Бейрут;5988153;Азия
|
||||||
|
Ливия;Триполи;6330159;Африка
|
||||||
|
Литва;Вильнюс;2869690;Европа
|
||||||
|
Лихтенштейн;Вадуц;37622;Европа
|
||||||
|
Люксембург;Люксембург;576249;Европа
|
||||||
|
Маврикий;Порт-Луи;1261208;Африка
|
||||||
|
Мавритания;Нуакшот;3631775;Африка
|
||||||
|
Мадагаскар;Антананариву;24915822;Африка
|
||||||
|
Македония;Скопье;2069172;Европа
|
||||||
|
Малави;Лилонгве;16310431;Африка
|
||||||
|
Малайзия;Куала-Лумпур;31700000;Азия
|
||||||
|
Мали;Бамако;18134835;Африка
|
||||||
|
Мальдивы;Мале;341256;Азия
|
||||||
|
Мальта;Валлетта;434403;Европа
|
||||||
|
Марокко;Рабат;33996000;Африка
|
||||||
|
Маршалловы Острова;Маджуро;53069;Острова
|
||||||
|
Мексика;Мехико;122273473;Америка
|
||||||
|
Мозамбик;Мапуту;28751362;Африка
|
||||||
|
Молдавия;Кишинев;3553100;Европа
|
||||||
|
Монако;Монако;37863;Европа
|
||||||
|
Монголия;Улан-Батор;2966294;Азия
|
||||||
|
Мьянма;Найпьидо;54363426;Азия
|
||||||
|
Намибия;Виндхук;2513981;Африка
|
||||||
|
Непал;Катманду;28850717;Азия
|
||||||
|
Нигер;Ниамей;20715285;Африка
|
||||||
|
Нигерия;Абуджа;186987563;Африка
|
||||||
|
Нидерланды;Амстердам;16985621;Европа
|
||||||
|
Никарагуа;Манагуа;6198154;Америка
|
||||||
|
Новая Зеландия;Веллингтон;4602900;Острова
|
||||||
|
Норвегия;Осло;5275100;Европа
|
||||||
|
ОАЭ;Абу-Даби;9266971;Азия
|
||||||
|
Оман;Маскат;4088690;Азия
|
||||||
|
Пакистан;Исламабад;194521264;Азия
|
||||||
|
Палау;Мелекеок;21501;Острова
|
||||||
|
Панама;Панама;3764166;Америка
|
||||||
|
Папуа-Новая Гвинея;Порт-Морсби;7776115;Острова
|
||||||
|
Парагвай;Асунсьон;7003404;Америка
|
||||||
|
Перу;Лима;31488625;Америка
|
||||||
|
Польша;Варшава;38437239;Европа
|
||||||
|
Португалия;Лиссабон;10374822;Европа
|
||||||
|
Республика Конго;Браззавиль;4740992;Африка
|
||||||
|
Россия;Москва;146544710;Европа
|
||||||
|
Руанда;Кигали;11262564;Африка
|
||||||
|
Румыния;Бухарест;19759968;Европа
|
||||||
|
Сальвадор;Сан-Сальвадор;6146419;Америка
|
||||||
|
Самоа;Апиа;194523;Острова
|
||||||
|
Сан-Марино;Сан-Марино;31950;Европа
|
||||||
|
Сан-Томе и Принсипи;Сан-Томе;194390;Африка
|
||||||
|
Саудовская Аравия;Эр-Рияд;32248200;Азия
|
||||||
|
Свазиленд;Мбабане;1304063;Африка
|
||||||
|
Северная Корея;Пхеньян;25281327;Азия
|
||||||
|
Северные Марианские острова;Пхеньян;55389;Острова
|
||||||
|
Сейшелы;Виктория;97026;Африка
|
||||||
|
Сенегал;Дакар;15589485;Африка
|
||||||
|
Сент-Винсент и Гренадины;Кингстаун;109644;Америка
|
||||||
|
Сент-Китс и Невис;Бастер;56183;Америка
|
||||||
|
Сент-Люсия;Кастри;186383;Америка
|
||||||
|
Сербия;Белград;7114393;Европа
|
||||||
|
Сингапур;Сингапур;5469724;Азия
|
||||||
|
Сирия;Дамаск;18563595;Азия
|
||||||
|
Словакия;Братислава;5421349;Европа
|
||||||
|
Словения;Любляна;2086300;Европа
|
||||||
|
Соединённые Штаты Америки;Вашингтон;324085000;Америка
|
||||||
|
Соломоновы Острова;Хониара;594934;Острова
|
||||||
|
Сомали;Могадишо;11079013;Африка
|
||||||
|
Судан;Хартум;41175541;Африка
|
||||||
|
Суринам;Парамарибо;547610;Америка
|
||||||
|
Сьерра-Леоне;Фритаун;6592102;Африка
|
||||||
|
Таджикистан;Душанбе;8593600;Азия
|
||||||
|
Таиланд;Бангкок;65323000;Азия
|
||||||
|
Танзания;Додома;55155473;Африка
|
||||||
|
Того;Ломе;7496833;Африка
|
||||||
|
Тонга;Нукуалофа;106915;Острова
|
||||||
|
Тринидад и Тобаго;Порт-оф-Спейн;1364973;Америка
|
||||||
|
Тувалу;Фунафути;9943;Острова
|
||||||
|
Тунис;Тунис;10982754;Африка
|
||||||
|
Туркмения;Ашхабад;5438670;Азия
|
||||||
|
Турция;Анкара;78741053;Азия
|
||||||
|
Уганда;Кампала;40322768;Африка
|
||||||
|
Узбекистан;Ташкент;31807000;Азия
|
||||||
|
Украина;Киев;42504274;Европа
|
||||||
|
Уругвай;Монтевидео;3415866;Америка
|
||||||
|
Федеративные штаты Микронезии;Паликир;104966;Острова
|
||||||
|
Фиджи;Сува;897537;Острова
|
||||||
|
Филиппины;Манила;102921200;Азия
|
||||||
|
Финляндия;Хельсинки;5471753;Европа
|
||||||
|
Франция;Париж;64513242;Европа
|
||||||
|
Хорватия;Загреб;4190669;Европа
|
||||||
|
Центральноафриканская Республика;Банги;4998493;Африка
|
||||||
|
Чад;Нджамена;14496739;Африка
|
||||||
|
Черногория;Подгорица;622218;Европа
|
||||||
|
Чехия;Прага;10546120;Европа
|
||||||
|
Чили;Сантьяго;18006407;Америка
|
||||||
|
Швейцария;Берн;8236600;Европа
|
||||||
|
Швеция;Стокгольм;9838480;Европа
|
||||||
|
Шри-Ланка;Коломбо;20810816;Азия
|
||||||
|
Эквадор;Кито;15427000;Америка
|
||||||
|
Экваториальная Гвинея;Малабо;845060;Африка
|
||||||
|
Эритрея;Асмэра;5351680;Африка
|
||||||
|
Эстония;Таллин;1315944;Европа
|
||||||
|
Эфиопия;Аддис-Абеба;92206005;Африка
|
||||||
|
Южная Корея;Сеул;51431100;Азия
|
||||||
|
Южная Осетия;Цхинвал;53532;Азия
|
||||||
|
Южно-Африканская Республика;Претория;54956900;Африка
|
||||||
|
Южный Судан;Джуба;12733427;Африка
|
||||||
|
Ямайка;Кингстон;2930050;Америка
|
||||||
|
Япония;Токио;126960000;Азия
|
|
11
!NewExecutors/Страны1.pas
Normal file
11
!NewExecutors/Страны1.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Страны.ВывестиПострочно;
|
||||||
|
|
||||||
|
foreach var страна in Страны do
|
||||||
|
Вывести(страна);
|
||||||
|
|
||||||
|
Страны.ОтсортироватьПо(страна -> страна.Население).ВывестиПострочно
|
||||||
|
end.
|
||||||
|
|
17
!NewExecutors/Страны2.pas
Normal file
17
!NewExecutors/Страны2.pas
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var количество := 0;
|
||||||
|
foreach var страна in Страны do
|
||||||
|
if страна.Название.НачинаетсяНа('А') then
|
||||||
|
begin
|
||||||
|
Вывести(страна);
|
||||||
|
количество += 1;
|
||||||
|
end;
|
||||||
|
количество.Вывести;
|
||||||
|
|
||||||
|
var страныА := Страны.Выбрать(страна -> страна.Название.НачинаетсяНа('А'));
|
||||||
|
страныА.ВывестиПострочно;
|
||||||
|
страныА.Количество.Вывести;
|
||||||
|
end.
|
||||||
|
|
13
!NewExecutors/Страны2a.pas
Normal file
13
!NewExecutors/Страны2a.pas
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var количество := 0;
|
||||||
|
foreach var страна in Страны do
|
||||||
|
if страна.Название[1] = 'А' then
|
||||||
|
begin
|
||||||
|
Вывести(страна);
|
||||||
|
количество += 1;
|
||||||
|
end;
|
||||||
|
количество.Вывести
|
||||||
|
end.
|
||||||
|
|
7
!NewExecutors/Страны2b.pas
Normal file
7
!NewExecutors/Страны2b.pas
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var кол := Страны.Количество(страна -> страна.Название.НачинаетсяНа('А'));
|
||||||
|
Println(кол)
|
||||||
|
end.
|
||||||
|
|
13
!NewExecutors/Страны2c.pas
Normal file
13
!NewExecutors/Страны2c.pas
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var СтраныНаБуквуА := Страны.Выбрать(страна -> страна.Название.НачинаетсяНа('А'));
|
||||||
|
var количество := 0;
|
||||||
|
foreach var страна in СтраныНаБуквуА do
|
||||||
|
begin
|
||||||
|
Вывести(страна);
|
||||||
|
количество += 1;
|
||||||
|
end;
|
||||||
|
количество.Вывести
|
||||||
|
end.
|
||||||
|
|
10
!NewExecutors/Страны3.pas
Normal file
10
!NewExecutors/Страны3.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var С0 := Страны.Выбрать(страна -> страна.Континент = 'Азия');
|
||||||
|
var С1 := С0.ОтсортироватьПоУбыванию(страна -> страна.Население);
|
||||||
|
var С2 := С1.Взять(10);
|
||||||
|
var С3 := С2.Преобразовать(страна -> (страна.Название,страна.Население));
|
||||||
|
С3.ВывестиПострочно
|
||||||
|
end.
|
||||||
|
|
10
!NewExecutors/Страны4.pas
Normal file
10
!NewExecutors/Страны4.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Страны.Выбрать(страна -> страна.Континент = 'Азия')
|
||||||
|
.ОтсортироватьПоУбыванию(страна -> страна.Население)
|
||||||
|
.Взять(10)
|
||||||
|
.Преобразовать(страна -> (страна.Название,страна.Население))
|
||||||
|
.ВывестиПострочно
|
||||||
|
end.
|
||||||
|
|
20
!NewExecutors/СтраныGUI.pas
Normal file
20
!NewExecutors/СтраныGUI.pas
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
uses Окна,Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
// Создание запросов
|
||||||
|
var СтраныНаБуквуА := Страны.Выбрать(страна -> страна.Название.НачинаетсяНа('А'));
|
||||||
|
|
||||||
|
var СтраныАзии := Страны.Выбрать(страна -> страна.Континент = 'Азия');
|
||||||
|
|
||||||
|
var МаленькиеСтраны := Страны.Выбрать(страна -> страна.Население < 100000);
|
||||||
|
|
||||||
|
// Создание интерфейсных элементов
|
||||||
|
var ОкноСписка := СоздатьОкноСписка;
|
||||||
|
ОкноСписка.Отобразить(Страны);
|
||||||
|
|
||||||
|
CreateButton('Все', () -> ОкноСписка.Отобразить(Страны));
|
||||||
|
CreateButton('На букву А', () -> ОкноСписка.Отобразить(СтраныНаБуквуА));
|
||||||
|
CreateButton('Страны Азии', () -> ОкноСписка.Отобразить(СтраныАзии));
|
||||||
|
CreateButton('Маленькие Страны', () -> ОкноСписка.Отобразить(МаленькиеСтраны));
|
||||||
|
end.
|
18
!NewExecutors/Файлы1.pas
Normal file
18
!NewExecutors/Файлы1.pas
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var Файл1 := Файл.Новый;
|
||||||
|
var Файл2 := Файл.Новый;
|
||||||
|
Файл1.ОткрытьНаЧтение('текст.txt');
|
||||||
|
Файл2.ОткрытьНаЗапись('текст2.txt');
|
||||||
|
while not Файл1.КонецФайла do
|
||||||
|
begin
|
||||||
|
var строка := Файл1.ПрочитатьСтроку;
|
||||||
|
Файл2.Записать(строка);
|
||||||
|
end;
|
||||||
|
Файл1.Закрыть;
|
||||||
|
Файл2.Закрыть;
|
||||||
|
|
||||||
|
Файл2.ВывестиСодержимое;
|
||||||
|
end.
|
||||||
|
|
14
!NewExecutors/Файлы2.pas
Normal file
14
!NewExecutors/Файлы2.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
uses Исполнители;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Файл.ОткрытьНаЗапись('текст.txt');
|
||||||
|
Файл.Записать('Информатика');
|
||||||
|
Файл.Записать('Математика');
|
||||||
|
Файл.Записать('Русский');
|
||||||
|
Файл.Записать('Физика');
|
||||||
|
Файл.Записать('Русский');
|
||||||
|
Файл.Записать('Информатика');
|
||||||
|
Файл.Закрыть;
|
||||||
|
Файл.ВывестиСодержимое('текст.txt');
|
||||||
|
end.
|
||||||
|
|
10
!Tutorial/01_First/Assign1.pas
Normal file
10
!Tutorial/01_First/Assign1.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Использование вспомогательных переменных
|
||||||
|
|
||||||
|
begin
|
||||||
|
var r := ReadlnReal('Введите r: ');
|
||||||
|
var r2,r4,r8: real; // вспомогательные переменные
|
||||||
|
r2 := r * r;
|
||||||
|
r4 := r2 * r2;
|
||||||
|
r8 := r4 * r4;
|
||||||
|
Println(r,'в степени 8 =',r8);
|
||||||
|
end.
|
12
!Tutorial/01_First/Assign2.pas
Normal file
12
!Tutorial/01_First/Assign2.pas
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Перемена местами значений двух переменных с использованием третьей
|
||||||
|
var x,y: real;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Write('Введите x,y: ');
|
||||||
|
Readln(x,y);
|
||||||
|
var v: real; // вспомогательная переменная
|
||||||
|
v := x;
|
||||||
|
x := y;
|
||||||
|
y := v;
|
||||||
|
Writeln('Новые значения x,y: ',x,' ',y);
|
||||||
|
end.
|
18
!Tutorial/01_First/AssignExt.pas
Normal file
18
!Tutorial/01_First/AssignExt.pas
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Присваивания += -= *= /=
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
r: real;
|
||||||
|
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
Writeln('i := 1; i = ',i);
|
||||||
|
i += 2; // Увеличение на 2
|
||||||
|
Writeln('i += 2; i = ',i);
|
||||||
|
i *= 3; // Увеличение в 3 раза
|
||||||
|
Writeln('i *= 3; i = ',i);
|
||||||
|
Writeln;
|
||||||
|
r := 6;
|
||||||
|
Writeln('r := 6; r = ',r);
|
||||||
|
r /= 2;
|
||||||
|
Writeln('r /= 2; r = ',r);
|
||||||
|
end.
|
16
!Tutorial/01_First/Boolean1.pas
Normal file
16
!Tutorial/01_First/Boolean1.pas
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Логический тип. Логические выражения с and, or и not
|
||||||
|
var
|
||||||
|
b: boolean;
|
||||||
|
x: integer;
|
||||||
|
begin
|
||||||
|
Write('Введите x (от 1 до 9): ');
|
||||||
|
Readln(x);
|
||||||
|
b := x=5;
|
||||||
|
Writeln('x=5? ',b);
|
||||||
|
b := (x>=3) and (x<=5);
|
||||||
|
Writeln('x=3,4 или 5? ',b);
|
||||||
|
b := (x=3) or (x=4) or (x=5);
|
||||||
|
Writeln('x=3,4 или 5? ',b);
|
||||||
|
b := not Odd(x);
|
||||||
|
Writeln('x - четное? ',b);
|
||||||
|
end.
|
10
!Tutorial/01_First/Calculations1.pas
Normal file
10
!Tutorial/01_First/Calculations1.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Вывод результатов вычислений
|
||||||
|
begin
|
||||||
|
Writeln('Вычисления:');
|
||||||
|
// Вывод пустой строки
|
||||||
|
Writeln;
|
||||||
|
Writeln('121 + 363 = ',121+363);
|
||||||
|
Writeln('121 - 363 = ',121-363);
|
||||||
|
Writeln('121 * 363 = ',121*363);
|
||||||
|
Writeln('121 / 363 = ',121/363);
|
||||||
|
end.
|
13
!Tutorial/01_First/Calculations2.pas
Normal file
13
!Tutorial/01_First/Calculations2.pas
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Вывод результатов вычислений. Используются именованные константы
|
||||||
|
const
|
||||||
|
a = 121;
|
||||||
|
b = 363;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Writeln('Вычисления:');
|
||||||
|
Writeln;
|
||||||
|
Writeln(a,' + ',b,' = ',a+b);
|
||||||
|
Writeln(a,' - ',b,' = ',a-b);
|
||||||
|
Writeln(a,' * ',b,' = ',a*b);
|
||||||
|
Writeln(a,' / ',b,' = ',a/b);
|
||||||
|
end.
|
10
!Tutorial/01_First/Calculations3.pas
Normal file
10
!Tutorial/01_First/Calculations3.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Вывод результатов вычислений. Используются переменные и процедура ввода
|
||||||
|
|
||||||
|
begin
|
||||||
|
var (a,b) := ReadlnInteger2('Введите a и b:');
|
||||||
|
Writeln;
|
||||||
|
Writeln(a,' + ',b,' = ',a+b);
|
||||||
|
Writeln(a,' - ',b,' = ',a-b);
|
||||||
|
Writeln(a,' * ',b,' = ',a*b);
|
||||||
|
Writeln(a,' / ',b,' = ',a/b);
|
||||||
|
end.
|
10
!Tutorial/01_First/DivMod1.pas
Normal file
10
!Tutorial/01_First/DivMod1.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Операции div и mod
|
||||||
|
var a: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Write('Введите a: ');
|
||||||
|
Readln(a);
|
||||||
|
Writeln('Последняя цифра числа: ',a mod 10);
|
||||||
|
Writeln('Число без последней цифры: ',a div 10);
|
||||||
|
Writeln('Если число a четно, то 0: ',a mod 2);
|
||||||
|
end.
|
13
!Tutorial/01_First/DivMod2.pas
Normal file
13
!Tutorial/01_First/DivMod2.pas
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Операции div и mod
|
||||||
|
var a: integer := 247;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Write('Цифры числа в обратном порядке: ');
|
||||||
|
// Выводим последнюю цифру
|
||||||
|
Print(a mod 10);
|
||||||
|
// Отбрасываем последнюю цифру
|
||||||
|
a := a div 10;
|
||||||
|
Print(a mod 10);
|
||||||
|
a := a div 10;
|
||||||
|
Print(a mod 10);
|
||||||
|
end.
|
9
!Tutorial/01_First/Eof.pas
Normal file
9
!Tutorial/01_First/Eof.pas
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// Демонстрация работы функции eof. Запускать по Shift-F9, завершать по Ctrl-Z
|
||||||
|
begin
|
||||||
|
var s: char;
|
||||||
|
while not Eof do
|
||||||
|
begin
|
||||||
|
Read(s);
|
||||||
|
Println('-',Ord(s),' -');
|
||||||
|
end;
|
||||||
|
end.
|
8
!Tutorial/01_First/Eoln.pas
Normal file
8
!Tutorial/01_First/Eoln.pas
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Демонстрация работы функции Eoln
|
||||||
|
begin
|
||||||
|
while not Eoln do
|
||||||
|
begin
|
||||||
|
var c := ReadChar;
|
||||||
|
Print(c);
|
||||||
|
end;
|
||||||
|
end.
|
5
!Tutorial/01_First/HelloWorld.pas
Normal file
5
!Tutorial/01_First/HelloWorld.pas
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// Первая программа
|
||||||
|
program HelloWorld;
|
||||||
|
begin
|
||||||
|
Writeln('Привет, мир!');
|
||||||
|
end.
|
10
!Tutorial/01_First/Random1.pas
Normal file
10
!Tutorial/01_First/Random1.pas
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Генерация случайного числа
|
||||||
|
|
||||||
|
begin
|
||||||
|
var i := Random(100);
|
||||||
|
Writeln('Случайное целое в диапазоне 0..99: ',i);
|
||||||
|
i := Random(2,5);
|
||||||
|
Writeln('Случайное целое в диапазоне 2..5: ',i);
|
||||||
|
var r: real := Random;
|
||||||
|
Writeln('Случайное вещественное в диапазоне [0,1): ',r);
|
||||||
|
end.
|
7
!Tutorial/01_First/Random2.pas
Normal file
7
!Tutorial/01_First/Random2.pas
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// Бросание кубиков
|
||||||
|
|
||||||
|
begin
|
||||||
|
var (k1,k2) := Random2(1,6);
|
||||||
|
Writeln($'Очки на кубиках: {k1} {k2}');
|
||||||
|
Writeln($'Сумма очков: {k1+k2}');
|
||||||
|
end.
|
6
!Tutorial/01_First/ReadString.pas
Normal file
6
!Tutorial/01_First/ReadString.pas
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Ввод строки
|
||||||
|
|
||||||
|
begin
|
||||||
|
var имя := ReadString('Введите Ваше имя:');
|
||||||
|
Writeln($'Здравствуйте, {имя}!');
|
||||||
|
end.
|
8
!Tutorial/01_First/Shl.pas
Normal file
8
!Tutorial/01_First/Shl.pas
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Демонстрация операции shl
|
||||||
|
begin
|
||||||
|
Writeln('Степени двойки');
|
||||||
|
Writeln(' n 2^n');
|
||||||
|
for var i:=0 to 30 do
|
||||||
|
Writeln(i:2,(1 shl i):12);
|
||||||
|
end.
|
||||||
|
|
14
!Tutorial/01_First/StandFun.pas
Normal file
14
!Tutorial/01_First/StandFun.pas
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Стандартные функции
|
||||||
|
var x: real;
|
||||||
|
|
||||||
|
begin
|
||||||
|
write('Введите x: ');
|
||||||
|
Readln(x);
|
||||||
|
Writeln('Квадрат ',x,' равен ',Sqr(x));
|
||||||
|
Writeln(x,' в степени 5 равно ',Power(x,5));
|
||||||
|
Writeln('Квадратный корень из ',x,' равен ',Sqrt(x));
|
||||||
|
Writeln('Модуль ',x,' равен ',Abs(x));
|
||||||
|
Writeln('Натуральный логарифм ',x,' равен ',Ln(x));
|
||||||
|
Writeln('Синус ',x,' равен ',Sin(x));
|
||||||
|
Writeln('Косинус ',x,' равен ',Cos(x));
|
||||||
|
end.
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user