Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ОписаниС языка PascalABC.NETΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 10

Автор W Cat

type pinteger = ^integer;

var p: ^record r,i: real end;

БСстиповой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слова pointer.

Для доступа ΠΊ ячСйкС памяти, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ опСрация разымСнования ^:

var

i: integer;

pi: ^integer;

...

pi := @i; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ присвоили адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i

pi^ := 5; // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i присвоили 5

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ разымСнования Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ бСстиповому ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ.

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ ΠΊ бСстиповому:

var

p: pointer;

pr: ^real;

...

p := pr;

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ нСявно:

pr := p;

pr^ := 3.14;

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° равСнство (=) ΠΈ нСравСнство (<>). Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартная константа nil (Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) : p := nil.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’Π²ΠΈΠ΄Ρƒ особСнностСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET Ρ‚ΠΈΠΏ T Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ указатСля Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ссылочным ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ссылочныС Ρ‚ΠΈΠΏΡ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° записи, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ссылочный Ρ‚ΠΈΠΏ). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ограничСния проста: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ нСуправляСмым ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ управляСтся сборщиком мусора. Если Π² памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, содСрТатся ссылки Π½Π° управляСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΎΠ½ΠΈ становятся Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ послС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ сборки мусора. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ динамичСскиС массивы ΠΈ строки, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° записи, содСрТащиС Π² качСствС ΠΏΠΎΠ»Π΅ΠΉ строки ΠΈ динамичСскиС массивы.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ - это Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ порядкС. К разновидностям ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ относятся ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ динамичСскиС массивы array of T, списки List<T>, двусвязныС списки LinkedList<T>, мноТСства HashSet<T> ΠΈ SortedSet<T>.

Π’ΠΈΠΏ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ конструируСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

sequence of Ρ‚ΠΈΠΏ элСмСнтов

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Если трСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ гСнСрируСтся ΠΈ возвращаСтся новая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’ΠΈΠΏ sequence of T являСтся синонимом Ρ‚ΠΈΠΏΠ° .NET System.Collections.Generic.IEnumerable<T>, Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ - синонимом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ интСрфСйс System.Collections.Generic.IEnumerable<T>.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инициализируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Seq, SeqGen, SeqFill, SeqWhile, SeqRandom, SeqRandomReal, ReadSeqInteger, ReadSeqReal, ReadSeqString. НапримСр:

var s: sequence of integer;

s := Seq(1,3,5);

s.Println;

s := SeqGen(1,x->x*2,10);

writeln(s);

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ хранится Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² памяти. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ алгоритмичСски ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΊΠΎΠ΄Π΅

var s := SeqFill(1,10000000);

writeln(s.Sum());

основноС врСмя выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ вторая строка, Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ лишь ΠΊ запоминанию Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ s.

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ

Π”Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ соСдинСны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ +, ΠΏΡ€ΠΈ этом вторая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дописываСтся Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΠ΅Ρ€Π²ΠΎΠΉ. НапримСр:

Seq(1,2,3) + Seq(5,6,7)

Seq(1,2,3) + Arr(5,6,7)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ + Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ»ΠΈ послСдний элСмСнт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Seq(1,2,3) + 5

3 + Seq(5,6,7)

3 + Seq(5,6,7) + 9

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ + являСтся сокращённым Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Concat.

Π¦ΠΈΠΊΠ» ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° foreach:

foreach var x in s do

if x>2 then

Print(x);

Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡŽ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с элСмСнтами Ρ‚ΠΈΠΏΠ° T ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив array of T, список List<T>, двусвязный список LinkedList<T>, мноТСство HashSet<T> ΠΈΠ»ΠΈ SortedSet<T>, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ интСрфСйс System.Collections.Generic.IEnumerable<T>.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ доступны многочислСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

Для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ доступны Ρ‚Π°ΠΊΠΆΠ΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

Записи

ОписаниС записСй

Π—Π°ΠΏΠΈΡΡŒ прСдставляСт собой Π½Π°Π±ΠΎΡ€ элСмСнтов Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ своС имя ΠΈ называСтся ΠΏΠΎΠ»Π΅ΠΌ записи. Π’ΠΈΠΏ записи Π² классичСском языкС Паскаль описываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

record

описания полСй

end

Π³Π΄Π΅ описания ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π·Π΄Π΅Π» описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var.

НапримСр:

type

Person = record

Name: string;

Age: integer;

end;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° запись

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° запись хранят Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ памяти значСния всСх ΠΏΠΎΠ»Π΅ΠΉ записи.

Для доступа ΠΊ полям записСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ точСчная нотация:

var p: Person;

begin

p.Name := 'Иванов';

p.Age := 20;

writeln(p); // (Иванов,20)

end.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° write Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС всСх ΠΏΠΎΠ»Π΅ΠΉ записи Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа для записСй

Π’ PascalABC.NET Π²Π½ΡƒΡ‚Ρ€ΠΈ записСй допустимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, описаниС записи Π² PascalABC.NET ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

record

сСкция1

сСкция2

...

end

КаТдая сСкция ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа

описания полСй

объявлСния ΠΈΠ»ΠΈ описания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ описания свойств

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ сСкции ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π² этом случаС подразумСваСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ public (всС Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹).

НапримСр:

type

Person = record

private

Name: string;

Age: integer;

public

constructor Create(Name: string; Age: integer);

begin

Self.Name := Name;

Self.Age := Age;

end;

procedure Print;

end;

procedure Person.Print;

begin

writelnFormat('Имя: {0} Возраст: {1}', Name, Age);

end;

Как ΠΈ Π² классах, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Ρ‚Π°ΠΊ ΠΈ Π²Π½Π΅ Ρ‚Π΅Π»Π° записи. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ конструктор описываСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ записи, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Print ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π° описываСтся Π²Π½Π΅ Ρ‚Π΅Π»Π° записи. ΠœΠ΅Ρ‚ΠΎΠ΄-конструктор всСгда ΠΈΠΌΠ΅Π΅Ρ‚ имя Create ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ записи.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ записСй

ΠŸΡ€ΠΈ описании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константы Ρ‚ΠΈΠΏΠ° запись ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ записи (ΠΊΠ°ΠΊ ΠΈ Π² Delphi Object Pascal):

const p: Person = (Name: 'ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²Π°'; Age: 18);

var p: Person := (Name: 'Иванов'; Age: 20);

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ для записСй ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис, Ρ‡Ρ‚ΠΎ ΠΈ для классов. Однако, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классов, Π²Ρ‹Π·ΠΎΠ² конструктора записи Π½Π΅ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² динамичСской памяти, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ поля записи:

var p: Person := new Person('Иванов',20);

Π‘ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π² записи опрСдСляСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄-ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Init, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ поля записи:

type

Person = record

...

public

procedure Init(Name: string; Age: integer);

begin

Self.Name := Name;

Self.Age := Age;

end;

...

end;

...

var p: Person;

p.Init('Иванов',20);

Π’ систСмном ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ‚Π°ΠΊΠΆΠ΅ функция Rec, которая создаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° запись Π½Π° Π»Π΅Ρ‚Ρƒ:

var p := Rec('Иванов',20);

Println(p); // (Иванов,20)

Π’ΠΈΠΏ этой записи - бСзымянный. Поля Π΄Π°Π½Π½ΠΎΠΉ записи автоматичСски ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ Item1, Item2 ΠΈ Ρ‚.Π΄.:

Println(p.Item1, p.Item2); // Иванов 20

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ записСй ΠΎΡ‚ классов

Бписок ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ записями ΠΈ классами приводятся Π½ΠΈΠΆΠ΅:

* Π—Π°ΠΏΠΈΡΡŒ прСдставляСт собой Ρ€Π°Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° запись Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° стСкС).

* Записи нСльзя Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ; ΠΎΡ‚ записСй Ρ‚Π°ΠΊΠΆΠ΅ нСльзя Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ (ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ записи, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы). Π’ .NET Ρ‚ΠΈΠΏ записи нСявно прСдполагаСтся наслСдником Ρ‚ΠΈΠΏΠ° System.ValueType ΠΈ рСализуСтся struct-Ρ‚ΠΈΠΏΠΎΠΌ.

* Если Π² записи Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ подразумСваСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ public (всС Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹), Π° Π² классС - internal.

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° запись

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° write для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° запись Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС всСх Π΅Ρ‘ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… свойств ΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π² записи слСдуСт ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString класса Object - Π² этом случаС ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

НапримСр:

type

Person = record