Поправил старые примеры 2
This commit is contained in:
parent
0c4b28dcfe
commit
d6a70eea67
12
InstallerSamples/!MainFeatures/01_First/InterpStr.pas
Normal file
12
InstallerSamples/!MainFeatures/01_First/InterpStr.pas
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
/// Использование интерполированных строк
|
||||
begin
|
||||
var Pi := 3.1415;
|
||||
// Задание ширины поля вывода
|
||||
Println($'{Pi,10:f}');
|
||||
// Выравнивание по левому краю поля вывода
|
||||
Println($'{Pi,-10:f}|');
|
||||
// Задание количества знаков после запятой для вещественного числа
|
||||
Println($'{Pi:f3}');
|
||||
// Вывод фигурных скобочек
|
||||
Println($'{{}}Вывод фигурных скобочек в интерполированной строке {Pi}');
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Простейшие новые возможности языка PascalABC.NET
|
||||
// Простейшие новые возможности языка PascalABC.NET
|
||||
|
||||
// Инициализация переменной при описании
|
||||
var i: integer := 1;
|
||||
|
|
@ -11,7 +11,7 @@ begin
|
|||
var s: real := 1.0;
|
||||
|
||||
// Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла)
|
||||
for j: integer := 1 to 10 do
|
||||
for var j: integer := 1 to 10 do
|
||||
s += j; // Операция += для чисел
|
||||
|
||||
var p := 1;
|
||||
|
|
@ -21,7 +21,7 @@ begin
|
|||
p *= j; // Операция *=
|
||||
|
||||
var str := '';
|
||||
for c: char := 'a' to 'z' do
|
||||
for var c: char := 'a' to 'z' do
|
||||
str += c; // Операция += для строк
|
||||
|
||||
end.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/// Вывод различных типов процедурой write
|
||||
begin
|
||||
// Вывод, целого, строки, вещественного
|
||||
Writeln(1,' ',2.5);
|
||||
Writeln(1,' ',2.5);
|
||||
// Вывод множества
|
||||
Writeln([1..10]);
|
||||
// Вывод логического
|
||||
|
|
@ -10,7 +10,9 @@ begin
|
|||
// Вывод статического массива
|
||||
Writeln(a);
|
||||
// Вывод динамического массива
|
||||
Writeln(Arr(2,3,5));
|
||||
Writeln([2,3,5]);
|
||||
// Вывод кортежа
|
||||
Writeln(('Иванов',16));
|
||||
// Вывод словаря
|
||||
Writeln(Dict('Иванов' to 4.7, 'Петрова' to 4.9, 'Козлов' to 3.8));
|
||||
end.
|
||||
|
|
@ -1,19 +1,16 @@
|
|||
// Стандартные функции 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);
|
||||
Println('sizeof(char) =',sizeof(char));
|
||||
Println;
|
||||
var c: char := 'Ж';
|
||||
var i: integer := Ord(c);
|
||||
Println($'Код символа {c} в кодировке Unicode равен {i}');
|
||||
c := Chr(i);
|
||||
writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c);
|
||||
writeln;
|
||||
Println($'Символ с кодом {i} в кодировке Unicode - это {c}');
|
||||
Println;
|
||||
i := OrdAnsi(c);
|
||||
writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i);
|
||||
Println($'Код символа {c} в кодировке Windows равен {i}');
|
||||
c := ChrAnsi(i);
|
||||
writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c);
|
||||
Println($'Символ с кодом {i} в кодировке Windows - это {c}');
|
||||
end.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
// Процедуры и методы работы с динамическим массивом
|
||||
|
||||
begin
|
||||
var a := ArrRandom(10);
|
||||
var a := ArrRandomInteger(10);
|
||||
|
||||
// Вывод всех элементов массива
|
||||
a.Println;
|
||||
|
|
@ -14,11 +14,11 @@ begin
|
|||
a.Reverse;
|
||||
a.Println;
|
||||
|
||||
// Изменение размерамассиав с сохранением элементов. То же делает SetLength
|
||||
a.Resize(a.Length+2);
|
||||
// Изменение размера массива с сохранением элементов
|
||||
SetLength(a,a.Length+2);
|
||||
a.Println;
|
||||
|
||||
// Поиск вхождения элемента в массив
|
||||
var i := a.IndexOf(50);
|
||||
Writeln(i);
|
||||
Println(i);
|
||||
end.
|
||||
|
|
@ -1,25 +1,24 @@
|
|||
// Перечислимый тип
|
||||
type Months = (January,February,March,April,May,June,July,August,September,October,November,December);
|
||||
// Перечислимый тип
|
||||
type Months = (January,February,March,April,May,June,
|
||||
July,August,September,October,November,December);
|
||||
|
||||
var m: Months;
|
||||
|
||||
begin
|
||||
m := February;
|
||||
var m: Months := February;
|
||||
writeln(m);
|
||||
// Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант
|
||||
m := Months.April;
|
||||
writeln('Следующий месяц: ',m);
|
||||
Println('Следующий месяц:',m);
|
||||
Inc(m);
|
||||
writeln('Следующий месяц: ',m);
|
||||
Println('Следующий месяц:',m);
|
||||
m := Succ(m);
|
||||
writeln('Следующий месяц: ',m);
|
||||
Println('Следующий месяц:',m);
|
||||
m := Pred(m);
|
||||
writeln('Предыдующий месяц: ',m);
|
||||
Println('Предыдующий месяц:',m);
|
||||
Dec(m);
|
||||
writeln('Предыдующий месяц: ',m);
|
||||
writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m));
|
||||
Println('Предыдующий месяц:',m);
|
||||
Println('Его порядковый номер (нумерация - с нуля):',Ord(m));
|
||||
// Ошибки нет
|
||||
writeln('Месяц перед январем - выход за границы: ',pred(Months.January));
|
||||
Println('Месяц перед январем - выход за границы:',Pred(Months.January));
|
||||
// Ошибки нет
|
||||
writeln('Месяц после декабря - выход за границы: ',succ(Months.December));
|
||||
Println('Месяц после декабря - выход за границы:',Succ(Months.December));
|
||||
end.
|
||||
|
|
@ -1,15 +1,14 @@
|
|||
// Инициализаторы полей записи
|
||||
// Инициализаторы полей записи
|
||||
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);
|
||||
var f: Frac;
|
||||
var f1: Frac := (num: 2; denom: 3);
|
||||
Println(f.num,'/',f.denom);
|
||||
Println(f1.num,'/',f1.denom);
|
||||
end.
|
||||
|
|
@ -1,10 +1,9 @@
|
|||
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
|
||||
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
|
||||
type
|
||||
A = class
|
||||
i: integer;
|
||||
end;
|
||||
|
||||
var p: ^record field: A; end;
|
||||
|
||||
begin
|
||||
var p: ^record field: A; end; // ошибка
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Выделение динамической памяти
|
||||
// Выделение динамической памяти
|
||||
// Использование указателей для создания односвязного списка
|
||||
type
|
||||
PNode = ^TNode;
|
||||
|
|
@ -14,21 +14,20 @@ begin
|
|||
Result^.next := n;
|
||||
end;
|
||||
|
||||
var first: PNode;
|
||||
|
||||
begin
|
||||
first := nil;
|
||||
var first: PNode := nil;
|
||||
|
||||
// Добавляем в начало односвязного списка
|
||||
first := NewNode(3,first);
|
||||
first := NewNode(7,first);
|
||||
first := NewNode(5,first);
|
||||
|
||||
// Вывод односвязного списка
|
||||
writeln('Содержимое односвязного списка: ');
|
||||
Println('Содержимое односвязного списка:');
|
||||
var p := first;
|
||||
while p<>nil do
|
||||
begin
|
||||
write(p^.data,' ');
|
||||
Print(p^.data);
|
||||
p := p^.next;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Использование ссылок вместо указателей для создания односвязного списка
|
||||
// Использование ссылок вместо указателей для создания односвязного списка
|
||||
// Мы рекомендуем именно этот способ
|
||||
type
|
||||
Node = class
|
||||
|
|
@ -10,23 +10,21 @@ type
|
|||
next := n;
|
||||
end;
|
||||
end;
|
||||
|
||||
// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором
|
||||
var first: Node;
|
||||
|
||||
begin
|
||||
first := nil;
|
||||
// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором
|
||||
var first: Node := nil;
|
||||
// Добавляем в начало односвязного списка
|
||||
first := new Node(3,first);
|
||||
first := new Node(7,first);
|
||||
first := new Node(5,first);
|
||||
|
||||
// Вывод односвязного списка. ^ отсутствуют
|
||||
writeln('Содержимое односвязного списка (использование ссылок вместо указателей): ');
|
||||
Println('Содержимое односвязного списка (использование ссылок вместо указателей):');
|
||||
var p := first;
|
||||
while p<>nil do
|
||||
begin
|
||||
write(p.data,' ');
|
||||
Print(p.data);
|
||||
p := p.next;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +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);
|
||||
var s1: set of string := ['Иванов','Попов','Сидорова','Петров'];
|
||||
var s2: set of string := ['Козлов','Петров','Иванов'];
|
||||
Println('Множество s1:',s1);
|
||||
Println('Множество s2:',s2);
|
||||
Println('Объединение множеств s1 и s2:',s1+s2);
|
||||
Println('Пересечение множеств s1 и s2:',s1*s2);
|
||||
Println('Разность множеств s1 и s2:',s1-s2);
|
||||
Include(s1,'Умнов');
|
||||
Exclude(s1,'Иванов');
|
||||
writeln('Множество s1: ',s1);
|
||||
Println('Множество s1:',s1);
|
||||
end.
|
||||
|
|
@ -1,16 +1,13 @@
|
|||
// Преобразование целое <-> строка в новом стиле
|
||||
var
|
||||
s: string;
|
||||
i: integer;
|
||||
// Преобразование целое <-> строка в новом стиле
|
||||
|
||||
begin
|
||||
// Преобразование целого в строку
|
||||
i := 234;
|
||||
s := i.ToString;
|
||||
writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
||||
var i: integer := 234;
|
||||
var s: string := i.ToString;
|
||||
Println($'Целое: {i}. После преобразования к строке: ''{s}''');
|
||||
|
||||
// Преобразование строки в целое
|
||||
s := '567';
|
||||
if integer.TryParse(s,i) then
|
||||
writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
||||
Println($'Строка: ''{s}''. После преобразования к целому: {i}');
|
||||
end.
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
// Строки. Методы класса string
|
||||
// Строки. Методы класса string
|
||||
var
|
||||
s: string := ' Pascal__NET ';
|
||||
s1: string := 'NET';
|
||||
|
||||
begin
|
||||
writeln('Исходная строка: ''',s,'''');
|
||||
Println($'Исходная строка: ''{s}''');
|
||||
s := s.Trim;
|
||||
writeln('После вызова s.Trim: ''',s,'''');
|
||||
Println($'После вызова s.Trim: ''{s}''');
|
||||
var p := s.IndexOf(s1); // Индексация - с нуля
|
||||
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
||||
Println($'Позиция подстроки ''{s1}'' в строке ''{s}'' равна {p}');
|
||||
s := s.Remove(6,2);
|
||||
writeln('После удаления символов __: ',s);
|
||||
Println('После удаления символов __:',s);
|
||||
s := s.Insert(6,'ABC.');
|
||||
writeln('После вставки подстроки ''ABC.'': ',s);
|
||||
writeln('Первая часть строки: ',s.Substring(0,9));
|
||||
writeln('Последняя часть строки: ',s.Substring(10,3));
|
||||
Println('После вставки подстроки ''ABC.'':',s);
|
||||
Println('Первая часть строки:',s.Substring(0,9));
|
||||
Println('Последняя часть строки:',s.Substring(10,3));
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Строки string, string[n], shortstring
|
||||
// Строки string, string[n], shortstring
|
||||
var
|
||||
s: string; // память, занимаемая s, зависит от ее длины
|
||||
s10: string[10]; // память под ss фиксирована
|
||||
|
|
@ -9,9 +9,9 @@ var
|
|||
begin
|
||||
s := '12345678901234567890';
|
||||
s10 := s; // обрезание
|
||||
writeln(s10);
|
||||
Println(s10);
|
||||
s += s; s += s;
|
||||
s += s; s += s;
|
||||
writeln(s);
|
||||
writeln('Длина строки = ',s.Length);
|
||||
Println(s);
|
||||
Println('Длина строки =',s.Length);
|
||||
end.
|
||||
|
|
@ -1,19 +1,16 @@
|
|||
// Бестиповые файлы
|
||||
var
|
||||
f: file;
|
||||
i: integer;
|
||||
r: real;
|
||||
s: string;
|
||||
// Бестиповые файлы
|
||||
|
||||
begin
|
||||
assign(f,'a.dat');
|
||||
rewrite(f);
|
||||
var f: file := CreateBinary('a.dat');
|
||||
// Записываем в файл данные любых типов
|
||||
write(f,1,2.5,'Hello');
|
||||
close(f);
|
||||
reset(f);
|
||||
f.Write(1,2.5,'Hello');
|
||||
f.Close;
|
||||
f.Reset;
|
||||
// Считываем эти данные из файла
|
||||
read(f,i,r,s);
|
||||
write(i,' ',r,' ',s);
|
||||
close(f);
|
||||
var i: integer;
|
||||
var r: real;
|
||||
var s: string;
|
||||
Read(f,i,r,s);
|
||||
Print(i,r,s);
|
||||
f.Close;
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Переменное число параметров
|
||||
// Переменное число параметров
|
||||
function Sum(params arg: array of integer): integer;
|
||||
begin
|
||||
Result := 0;
|
||||
|
|
@ -7,6 +7,6 @@ begin
|
|||
end;
|
||||
|
||||
begin
|
||||
writeln(Sum(1,2,3));
|
||||
writeln(Sum(4,5,6,7));
|
||||
Println(Sum(1,2,3));
|
||||
Println(Sum(4,5,6,7));
|
||||
end.
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
// Перегрузка имен подпрограмм
|
||||
// Перегрузка имен подпрограмм
|
||||
procedure proc(i: integer);
|
||||
begin
|
||||
writeln('integer');
|
||||
Println('integer');
|
||||
end;
|
||||
|
||||
procedure proc(c: char);
|
||||
begin
|
||||
writeln('char');
|
||||
Println('char');
|
||||
end;
|
||||
|
||||
procedure proc(r: real);
|
||||
begin
|
||||
writeln('real');
|
||||
Println('real');
|
||||
end;
|
||||
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// Все возможные способы инициализации поцедурной переменной
|
||||
// Все возможные способы инициализации поцедурной переменной
|
||||
// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -=
|
||||
|
||||
procedure pp;
|
||||
begin
|
||||
writeln('Вызов обычной процедуры');
|
||||
Println('Вызов обычной процедуры');
|
||||
end;
|
||||
|
||||
type
|
||||
|
|
@ -17,23 +17,23 @@ type
|
|||
end;
|
||||
procedure pp;
|
||||
begin
|
||||
writeln('Вызов метода класса, значение поля равно ',x);
|
||||
Println('Вызов метода класса, значение поля равно',x);
|
||||
end;
|
||||
class procedure ppstatic;
|
||||
begin
|
||||
writeln('Вызов классового метода класса');
|
||||
Println('Вызов классового метода класса');
|
||||
end;
|
||||
end;
|
||||
|
||||
var p: procedure;
|
||||
|
||||
begin
|
||||
var p: procedure;
|
||||
|
||||
p := pp;
|
||||
var a1: A := new A(5);
|
||||
p += a1.pp;
|
||||
p += A.ppstatic;
|
||||
p;
|
||||
writeln;
|
||||
Println;
|
||||
p -= pp;
|
||||
p;
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Обобщенные функции
|
||||
// Обобщенные функции
|
||||
// Выведение типа T по типам параметров
|
||||
|
||||
procedure Swap<T>(var a,b: T);
|
||||
|
|
@ -11,13 +11,13 @@ end;
|
|||
begin
|
||||
var a := 2;
|
||||
var b := 3;
|
||||
writelnFormat('До Swap a={0}, b={1}',a,b);
|
||||
Println($'До Swap a={a}, b={b}');
|
||||
Swap(a,b);
|
||||
writelnFormat('После Swap a={0}, b={1}',a,b);
|
||||
Println($'После Swap a={a}, b={b}');
|
||||
var c := 2.5;
|
||||
var d := 3.3;
|
||||
writeln;
|
||||
writelnFormat('До Swap c={0}, d={1}',c,d);
|
||||
Println;
|
||||
Println($'До Swap c={c}, d={d}');
|
||||
Swap(c,d);
|
||||
writelnFormat('После Swap c={0}, d={1}',c,d);
|
||||
Println($'После Swap c={c}, d={d}');
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Dll-библиотека
|
||||
// Dll-библиотека
|
||||
library MyDll;
|
||||
|
||||
const n = 10;
|
||||
|
|
@ -10,7 +10,7 @@ end;
|
|||
|
||||
procedure PrintPascalABCNET;
|
||||
begin
|
||||
writeln('PascalABC.NET');
|
||||
Println('PascalABC.NET');
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Это - главная программа
|
||||
// Это - главная программа
|
||||
// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться,
|
||||
// не подключая пространства имен
|
||||
{$reference mydll.dll}
|
||||
|
||||
begin
|
||||
PrintPascalABCNET;
|
||||
writeln(n);
|
||||
writeln(add(2,3));
|
||||
Println(n);
|
||||
Println(add(2,3));
|
||||
end.
|
||||
|
|
@ -3,5 +3,5 @@
|
|||
function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции
|
||||
|
||||
begin // основная программа
|
||||
writeln(add(2,3));
|
||||
Println(add(2,3));
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
uses MyUnit; // подключили модуль
|
||||
uses MyUnit; // подключили модуль
|
||||
|
||||
var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6);
|
||||
|
||||
begin
|
||||
writeln('Максимальный элемент в массиве = ',Max(a));
|
||||
Println('Максимальный элемент в массиве =',Max(a));
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/// Модуль упрощенной структуры
|
||||
/// Модуль упрощенной структуры
|
||||
unit MyUnit; // имя модуля должно совпадать с именем файла
|
||||
|
||||
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
||||
|
|
@ -6,8 +6,8 @@ unit MyUnit; // имя модуля должно совпадать с имен
|
|||
function Max(a: array of integer): integer;
|
||||
begin
|
||||
Result := integer.MinValue;
|
||||
foreach x: integer in a do
|
||||
if x>Result then
|
||||
foreach var x in a do
|
||||
if x > Result then
|
||||
Result := x;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem
|
||||
// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem
|
||||
uses System;
|
||||
|
||||
begin
|
||||
// Имя Random, определенное в пространстве имен System, перекрывает имя Random
|
||||
// в модуле PABCSystem, который неявно подключается первым
|
||||
var r: Random := new Random();
|
||||
writeln(r.Next(10));
|
||||
Println(r.Next(10));
|
||||
// Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится
|
||||
var i: integer := PABCSystem.Random(10);
|
||||
writeln(i);
|
||||
Println(i);
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Модуль ABCObjects. Изменение свойств объекта
|
||||
// Модуль ABCObjects. Изменение свойств объекта
|
||||
uses ABCObjects,GraphABC;
|
||||
|
||||
const delay = 300;
|
||||
|
|
@ -8,13 +8,9 @@ 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);
|
||||
var z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green);
|
||||
var r := new RectangleABC(100,100,200,100,Color.Gold);
|
||||
Pause;
|
||||
r.Center := Window.Center;
|
||||
Pause;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Все типы кроме указателей - производные от Object
|
||||
// Все типы кроме указателей - производные от Object
|
||||
var
|
||||
i: integer;
|
||||
r: real;
|
||||
|
|
@ -6,9 +6,9 @@ var
|
|||
|
||||
begin
|
||||
o := i;
|
||||
writeln(o.GetType);
|
||||
Println(o.GetType,TypeName(o));
|
||||
o := r;
|
||||
writeln(o.GetType);
|
||||
if o.GetType=typeof(real) then
|
||||
writeln('В переменной o - вещественный тип');
|
||||
Println(o.GetType,TypeName(o));
|
||||
if o.GetType = typeof(real) then
|
||||
Println('В переменной o - вещественный тип');
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Упаковка-распаковка размерных типов
|
||||
// Упаковка-распаковка размерных типов
|
||||
var
|
||||
i: integer := 2;
|
||||
r: real := 3.14;
|
||||
|
|
@ -8,15 +8,15 @@ begin
|
|||
o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа,
|
||||
// котрый и присваивается переменной o
|
||||
// Преобразование типов при упаковке - неявное
|
||||
writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение
|
||||
Println(integer(o)); // Распаковка: из упакованного объекта извлекается значение
|
||||
// Преобразование типов при распаковке - явное
|
||||
o := r;
|
||||
writeln(real(o));
|
||||
Println(real(o));
|
||||
|
||||
try // При неверном преобразовании типов генерируется исключение InvalidCastException
|
||||
writeln(shortint(o));
|
||||
Println(shortint(o));
|
||||
except
|
||||
on e: Exception do
|
||||
writeln(e.GetType);
|
||||
Println(e.GetType);
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Пример использования классового (статического) конструктора
|
||||
// Пример использования классового (статического) конструктора
|
||||
type
|
||||
Person = class
|
||||
private
|
||||
|
|
@ -8,7 +8,7 @@ type
|
|||
public
|
||||
class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода
|
||||
begin
|
||||
writeln(' Вызван классовый конструктор');
|
||||
Println(' Вызван классовый конструктор');
|
||||
SetLength(arr,3);
|
||||
arr[0] := new Person('Иванов',20);
|
||||
arr[1] := new Person('Петрова',19);
|
||||
|
|
@ -21,7 +21,7 @@ type
|
|||
end;
|
||||
function ToString: string; override;
|
||||
begin
|
||||
Result := Format('Имя: {0} Возраст: {1}',name,age);
|
||||
Result := $'Имя: {name} Возраст: {age}';
|
||||
end;
|
||||
class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям
|
||||
begin
|
||||
|
|
@ -30,7 +30,7 @@ type
|
|||
end;
|
||||
|
||||
begin
|
||||
writeln('Случайные персоны');
|
||||
Println('Случайные персоны');
|
||||
for var i:=1 to 5 do
|
||||
writeln(Person.RandomPerson); // Вызов классового метода
|
||||
Println(Person.RandomPerson); // Вызов классового метода
|
||||
end.
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
// Сборка мусора: для освобождения объекта присвойте переменной nil
|
||||
var l := new List<integer>;
|
||||
|
||||
// Сборка мусора: для освобождения объекта присвойте переменной nil
|
||||
begin
|
||||
l.Add(3);
|
||||
l.Add(5);
|
||||
l.Add(2);
|
||||
foreach var x in l do
|
||||
var L := new List<integer>;
|
||||
L.Add(3);
|
||||
L.Add(5);
|
||||
L.Add(2);
|
||||
|
||||
foreach var x in L do
|
||||
Print(x);
|
||||
l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора
|
||||
L := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Иллюстрация использования интерфейсов
|
||||
// Иллюстрация использования интерфейсов
|
||||
type
|
||||
IShape = interface
|
||||
procedure Draw;
|
||||
|
|
@ -26,17 +26,18 @@ type
|
|||
Result := new Point(xx,yy);
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
p: Point := new Point(2,3);
|
||||
ish: IShape := p;
|
||||
icl: ICloneable := p;
|
||||
|
||||
begin
|
||||
var p: Point := new Point(2,3);
|
||||
var ish: IShape := p;
|
||||
var icl: ICloneable := p;
|
||||
|
||||
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.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Перегрузка операций
|
||||
// Перегрузка операций
|
||||
type
|
||||
Frac = record
|
||||
private
|
||||
|
|
@ -72,11 +72,11 @@ var
|
|||
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);
|
||||
Println($'{f} + {f1} = {f+f1}');
|
||||
Println($'{f} - {f1} = {f-f1}');
|
||||
Println($'{f} * {f1} = {f*f1}');
|
||||
Println($'{f} / {f1} = {f/f1}');
|
||||
Println(f1 = f);
|
||||
f += f1;
|
||||
writeln(-f);
|
||||
Println(-f);
|
||||
end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Описание методов внутри интерфейса класса
|
||||
// Описание методов внутри интерфейса класса
|
||||
// Удобство: методы можно реализовывать сразу после объявления
|
||||
// Неудобство: для больших классов интерфейс трудно читается
|
||||
type
|
||||
|
|
@ -15,7 +15,7 @@ type
|
|||
end;
|
||||
procedure Print;
|
||||
begin
|
||||
writeln('Имя: ',name,' Возраст: ',age);
|
||||
Println('Имя:',name,' Возраст:',age);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Иллюстрация конструкторов и методов в записях
|
||||
// Иллюстрация конструкторов и методов в записях
|
||||
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||
type
|
||||
SexType = (Male, Female);
|
||||
|
|
@ -15,12 +15,12 @@ type
|
|||
end;
|
||||
function ToString: string; override;
|
||||
begin
|
||||
Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight);
|
||||
Result := $'Имя: {Name} Пол: {Sex} Возраст: {Age} Вес: {Weight}';
|
||||
end;
|
||||
end;
|
||||
|
||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||
|
||||
begin
|
||||
writeln(p);
|
||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||
|
||||
Println(p);
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Демонстрация создания простого класса стека на базе массива
|
||||
// Демонстрация создания простого класса стека на базе массива
|
||||
type
|
||||
Stack<T> = class
|
||||
private
|
||||
|
|
@ -14,23 +14,23 @@ type
|
|||
begin
|
||||
Create(100);
|
||||
end;
|
||||
procedure push(i: T);
|
||||
procedure Push(i: T);
|
||||
begin
|
||||
a[last] := i;
|
||||
Inc(last);
|
||||
end;
|
||||
function pop: T;
|
||||
function Pop: T;
|
||||
begin
|
||||
Dec(last);
|
||||
pop := a[last];
|
||||
Result := a[last];
|
||||
end;
|
||||
function top: T;
|
||||
function Top: T;
|
||||
begin
|
||||
top := a[last-1];
|
||||
Result := a[last-1];
|
||||
end;
|
||||
function empty: boolean;
|
||||
function Empty: boolean;
|
||||
begin
|
||||
Result := (last=0);
|
||||
Result := last=0;
|
||||
end;
|
||||
function ToString: string; override;
|
||||
begin
|
||||
|
|
@ -40,17 +40,15 @@ type
|
|||
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,' ');
|
||||
var s := new Stack<integer>;
|
||||
s.Push(7);
|
||||
s.Push(2);
|
||||
s.Push(5);
|
||||
s.Push(4);
|
||||
Println(s);
|
||||
while not s.Empty do
|
||||
Print(s.Pop);
|
||||
end.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Секция Where - ограничение на типы параметров
|
||||
uses System,System.Collections.Generic;
|
||||
// Секция Where - ограничение на типы параметров
|
||||
uses System;
|
||||
|
||||
type
|
||||
MyClass<T,T1> = class
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Иллюстрация конструкторов и методов в записях
|
||||
// Иллюстрация конструкторов и методов в записях
|
||||
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||
type
|
||||
SexType = (Male, Female);
|
||||
|
|
@ -15,12 +15,12 @@ type
|
|||
end;
|
||||
function ToString: string; override;
|
||||
begin
|
||||
Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex);
|
||||
Result := $'Имя: {Name} Пол: {Sex} Возраст: {Age} Вес: {Weight}';
|
||||
end;
|
||||
end;
|
||||
|
||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||
|
||||
begin
|
||||
writeln(p);
|
||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||
|
||||
Println(p);
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -1,31 +1,28 @@
|
|||
Uses System;
|
||||
|
||||
var d1, d2, d3: DateTime; // Объекты для хранения даты и времени
|
||||
ts: TimeSpan; // Объект для хранения промежутков времени
|
||||
uses System;
|
||||
|
||||
begin
|
||||
// Получение текущей даты - вызов статического метода
|
||||
d1 := DateTime.Now;
|
||||
Writeln(d1);
|
||||
var d1 := DateTime.Now;
|
||||
Println(d1);
|
||||
|
||||
// Дата и время через один месяц
|
||||
d2 := d1.AddMonths(1);
|
||||
Writeln(d2);
|
||||
var d2 := d1.AddMonths(1);
|
||||
Println(d2);
|
||||
|
||||
// Дата и время на 12 часов раньше
|
||||
d2 := d1.AddHours(-12);
|
||||
Writeln(d2);
|
||||
Println(d2);
|
||||
|
||||
// Формирование даты - вызов конструктора объекта (год, месяц,число)
|
||||
d3 := new DateTime(2001, 1, 1);
|
||||
Writeln(d3);
|
||||
var d3 := new DateTime(2001, 1, 1);
|
||||
Println(d3);
|
||||
|
||||
// Определение времени, прошедшего с начала тысячелетия (разность дат)
|
||||
ts := d1.Subtract(d3);
|
||||
var ts: TimeSpan := d1.Subtract(d3);
|
||||
|
||||
// Промежуток времени в днях (результат - вещественное число)
|
||||
Writeln(ts.TotalDays);
|
||||
Println(ts.TotalDays);
|
||||
|
||||
// Промежуток времени в днях, часах, минутах и секундах
|
||||
Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds);
|
||||
Println($'{ts.Days} {ts.Hours}:{ts.Minutes}:{ts.Seconds}');
|
||||
end.
|
||||
|
|
@ -1,27 +1,19 @@
|
|||
// Использование 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>;
|
||||
// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора
|
||||
|
||||
begin
|
||||
l.AddLast(3);
|
||||
l.AddLast(5);
|
||||
l.AddLast(7);
|
||||
l.AddFirst(2);
|
||||
print(l);
|
||||
var L: LinkedList<integer> := new LinkedList<integer>;
|
||||
|
||||
L.AddLast(3);
|
||||
L.AddLast(5);
|
||||
L.AddLast(7);
|
||||
L.AddFirst(2);
|
||||
Println(L);
|
||||
|
||||
var a := new integer[10];
|
||||
l.CopyTo(a,0);
|
||||
print(a);
|
||||
L.CopyTo(a,0);
|
||||
Println(a);
|
||||
|
||||
var lit: LinkedListNode<integer> := l.Find(5);
|
||||
l.AddBefore(lit,777);
|
||||
print(l);
|
||||
var lit: LinkedListNode<integer> := L.Find(5);
|
||||
L.AddBefore(lit,777);
|
||||
Println(L);
|
||||
end.
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
// Отражение типов. Выводятся все члены типа DateTime
|
||||
// Отражение типов. Выводятся все члены типа 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);
|
||||
foreach var m: MemberInfo in mi do
|
||||
Println(m);
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Создание оконного приложения
|
||||
// Создание оконного приложения
|
||||
{$apptype windows}
|
||||
{$reference System.Windows.Forms.dll}
|
||||
|
||||
|
|
@ -6,9 +6,7 @@ uses
|
|||
System,
|
||||
System.Windows.Forms;
|
||||
|
||||
var
|
||||
myForm: Form;
|
||||
myButton: Button;
|
||||
var myForm: Form;
|
||||
|
||||
procedure MyButtonClick(sender: Object; e: EventArgs);
|
||||
begin
|
||||
|
|
@ -18,7 +16,7 @@ end;
|
|||
begin
|
||||
myForm := new Form;
|
||||
myForm.Text := 'Оконное приложение';
|
||||
myButton := new Button;
|
||||
var myButton := new Button;
|
||||
myButton.Text := ' Закрыть окно ';
|
||||
myButton.AutoSize := True;
|
||||
myButton.Left := 90;
|
||||
|
|
|
|||
Loading…
Reference in a new issue