Поправил старые примеры 2

This commit is contained in:
Mikhalkovich Stanislav 2025-10-12 22:21:43 +03:00
parent 0c4b28dcfe
commit d6a70eea67
41 changed files with 233 additions and 252 deletions

View file

@ -0,0 +1,12 @@
/// Использование интерполированных строк
begin
var Pi := 3.1415;
// Задание ширины поля вывода
Println($'{Pi,10:f}');
// Выравнивание по левому краю поля вывода
Println($'{Pi,-10:f}|');
// Задание количества знаков после запятой для вещественного числа
Println($'{Pi:f3}');
// Вывод фигурных скобочек
Println($'{{}}Вывод фигурных скобочек в интерполированной строке {Pi}');
end.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -1,25 +1,24 @@
// Перечислимый тип
type Months = (January,February,March,April,May,June,July,August,September,October,November,December);
var m: Months;
// Перечислимый тип
type Months = (January,February,March,April,May,June,
July,August,September,October,November,December);
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.

View file

@ -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.

View file

@ -1,10 +1,9 @@
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
type
A = class
i: integer;
end;
var p: ^record field: A; end;
begin
var p: ^record field: A; end; // ошибка
end.

View file

@ -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;

View file

@ -1,4 +1,4 @@
// Использование ссылок вместо указателей для создания односвязного списка
// Использование ссылок вместо указателей для создания односвязного списка
// Мы рекомендуем именно этот способ
type
Node = class
@ -11,22 +11,20 @@ type
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;

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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;

View file

@ -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.

View file

@ -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;

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -1,4 +1,4 @@
// Иллюстрация использования интерфейсов
// Иллюстрация использования интерфейсов
type
IShape = interface
procedure Draw;
@ -27,16 +27,17 @@ type
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.

View file

@ -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.

View file

@ -1,4 +1,4 @@
// Описание методов внутри интерфейса класса
// Описание методов внутри интерфейса класса
// Удобство: методы можно реализовывать сразу после объявления
// Неудобство: для больших классов интерфейс трудно читается
type
@ -15,7 +15,7 @@ type
end;
procedure Print;
begin
writeln('Имя: ',name,' Возраст: ',age);
Println('Имя:',name,' Возраст:',age);
end;
end;

View file

@ -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.

View file

@ -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.

View file

@ -1,5 +1,5 @@
// Секция Where - ограничение на типы параметров
uses System,System.Collections.Generic;
// Секция Where - ограничение на типы параметров
uses System;
type
MyClass<T,T1> = class

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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;