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

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

Автор W Cat

Автоклассы

ΠŸΡ€ΠΈ описании класса ΠΏΠ΅Ρ€Π΅Π΄ словом class ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ слово auto. Π’Π°ΠΊΠΈΠ΅ классы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ автоклассами. Для автоклассов автоматичСски гСнСрируСтся конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ всС поля класса, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString, выводящий значСния всСх ΠΏΠΎΠ»Π΅ΠΉ класса. НапримСр:

type Person = auto class

name: string;

age: integer;

end;

var p := new Person('Иванов',20); // конструктор автокласса гСнСрируСтся автоматичСски

writeln(p); // вызываСтся сгСнСрированный автоматичСски ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString

Π—Π΄Π΅ΡΡŒ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ дСйствия writeln ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выводятся значСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ…, Π° всСх ΠΏΠΎΠ»Π΅ΠΉ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ: ΠΎΠ±Π·ΠΎΡ€

Когда Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит ошибка, гСнСрируСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ класса Exception, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ряд стандартных Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try ... except.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π’ мСстС Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, извСстно, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ слСдуСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. НапримСр, ΠΏΡƒΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция:

function mymod(a,b: integer): integer;

begin

Result := a - (a div b) * b;

end;

Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ mymod(1,0), Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.DivideByZeroException цСлочислСнного дСлСния Π½Π° 0.

Рассмотрим Π½Π°ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mymod:

function mymod(a,b: integer): integer;

begin

if b = 0 then

writeln('Ѐункция mymod: Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

Result := a - (a div b) * b;

end;

ПодобноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ являСтся ΠΏΠ»ΠΎΡ…ΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ программист, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ mymod, Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mymod Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ - ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ исходный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.DivideByZeroException:

try

readln(a,b);

writeln(mymod(a,b) mod (a-1));

...

except

on System.DivideByZeroException do

writeln('Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

end;

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ сами опрСдСляСм дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ спСцифичСскоС сообщСниС ΠΎΠ± ошибкС, Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» ошибок ΠΈΠ»ΠΈ пустой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (Π² случаС, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π±Π΅Π·Π·Π²ΡƒΡ‡Π½ΠΎ ΠΏΠΎΠ³Π°ΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅).

Однако, Π΄Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ сущСствСнным нСдостатком: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.DivideByZeroException Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ a=1 ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ связано с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ mymod. Для устранСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ нСдостатка ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ собствСнный класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mymod:

type MyModErrorException = class(System.Exception) end;

function mymod(a,b: integer): integer;

begin

if b = 0 then

raise new MyModErrorException('Ѐункция mymod: Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

Result := a - (a div b) * b;

end;

Π’ΠΎΠ³Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

try

readln(a,b);

writeln(mymod(a,b) mod (a-1));

...

except

on System.DivideByZeroException do

writeln('Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

on e: MyModErrorException do

writeln(e.Message);

else writeln('ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅')

end;

Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ MyModErrorException наслСдником класса System.ArithmeticException, ΠΊΠ°ΠΊ ΠΈ System.DivideByZeroException, Ρ‚ΠΎ послСдний ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ:

type MyModErrorException = class(System.ArithmeticException) end;

...

try

readln(a,b);

writeln(mymod(a,b) mod (a-1));

...

except

on e: System.ArithmeticException do

writeln(e.Message);

else writeln('КакоС-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅')

end;

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mymod ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ System.DivideByZeroException ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚ сгСнСрируСм Π½ΠΎΠ²ΠΎΠ΅ - MyModErrorException:

function mymod(a,b: integer): integer;

begin

try

Result := a - (a div b) * b;

except

on e: System.DivideByZeroException do

raise new MyModErrorException('Ѐункция mymod: Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

end;

end;

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ классы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ВсС классы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ класса System.Exception, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс:

type

Exception = class

public

constructor Create;

constructor Create(message: string);

property Message: string; // Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

property StackTrace: string; // Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

end;

Бвойство Message Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сообщСниС, связанноС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Бвойство StackTrace Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

НиТС приводятся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ классы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² пространствС ΠΈΠΌΠ΅Π½ System ΠΈ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ класса System.SystemException:

System.OutOfMemoryException - нСдостаточно памяти для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

System.StackOverflowException - ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ);

System.AccessViolationException - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° доступа ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ памяти;

System.ArgumentException - Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

System.ArithmeticException - Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс всСх арифмСтичСских ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. НаслСдники:

System.DivideByZeroException - цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0;

System.OverflowException - ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ арифмСтичСской ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ прСобразования Ρ‚ΠΈΠΏΠΎΠ²;

System.FormatException - Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ строки Π² число);

System.IndexOutOfRangeException - Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° измСнСния индСкса массива;

System.InvalidCastException - Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²;

System.NullReferenceException - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ;

System.IO.IOException - ошибка Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. НаслСдники:

System.IO.IOException.DirectoryNotFoundException - ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½;

System.IO.IOException.EndOfStreamException - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° чтСния Π·Π° ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°;

System.IO.IOException.FileNotFoundException - Ρ„Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

Для опрСдСлСния своСго Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ достаточно ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ класс - наслСдник класса Exception:

type MyException = class(Exception) end;

Π’Π΅Π»ΠΎ класса-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½ΠΎΠ²ΠΎΠ΅ имя для Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅Π³ΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ:

try

...

except

on MyException do

writeln('ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');

on Exception do

writeln('Π€Π°ΠΉΠ» отсутствуСт');

end;

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

type

FileNotFoundException = class(Exception)

fname: string;

constructor Create(msg,fn: string);

begin

inherited Create(msg);

fname := fn;

end;

end;

...

procedure ReadFile(fname: string);

begin

if not FileExists(fname) then

raise new FileNotFoundException('Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½',fname);

end;

...

try

...

except

on e: FileNotFoundException do

writeln('Π€Π°ΠΉΠ» '+e.fname+' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½');

end;

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ гСнСрация ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠ΅ except слуТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ raise Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

raise;

НапримСр:

try

...

except

on FileNotFoundException do

begin

log.WriteLine('Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½'); // запись Π² Ρ„Π°ΠΉΠ» ошибок

raise;

end;

end;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ….

Рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

var i: integer;

begin

readln(i);

writeln(i);

writeln('Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продолТаСтся');

end.

Если ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Π½Π΅ число), Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой (ошибка Π²Π²ΠΎΠ΄Π°), ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ writeln Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠ΅ try:

var i: integer;

begin

try

readln(i);

writeln(i);

except

writeln('Ошибка ввода');

end;

writeln('Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продолТаСтся');

end.

На этот Ρ€Π°Π· ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки Π²Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² Π±Π»ΠΎΠΊ except, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продолТится дальшС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² послСднСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ выполнится лишь ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ writeln(i).