ΠΡΠ»ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ try ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠ° Π±Π»ΠΎΠΊΠ° except Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ 2. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
var a,b: integer;
assign(f,'a.txt');
try
readln(a,b);
reset(f);
c:=a div b;
except
on System.DivideByZeroException do
writeln('Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');
on System.IO.IOException do
writeln('Π€Π°ΠΉΠ» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ');
end;
Π§Π°ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ try ... except ΠΈ try ... finally.
ΠΡΠΈΠΌΠ΅Ρ 3. ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ try ... except ΠΈ try ... finally.
assign(f,'a.txt');
try
reset(f);
try
try
c:=a div b;
except
on System.DivideByZeroException do
writeln('Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0');
end;
finally
close(f);
end;
except
on System.IO.IOException do
writeln('Π€Π°ΠΉΠ» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ');
end;
ΠΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ c ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° 0, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try, Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ - Π² ΡΠ°ΠΌΠΎΠΌ Π²Π½Π΅ΡΠ½Π΅ΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π±ΡΠ» ΠΎΡΠΊΡΡΡ, ΡΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° 0 ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ: ΠΎΠ±Π·ΠΎΡ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ - ΡΡΠΎ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½Π°Π±ΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ², ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ type ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΌΡΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° = interface
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²
end;
ΠΠ»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π΄ΠΎΡΡΡΠΏΠ° read ΠΈ write.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
type
IShape = interface
procedure Draw;
property X: integer read;
property Y: integer read;
end;
ICloneable = interface
function Clone: Object;
end;
ΠΠΎΠ»Ρ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π²Ρ ΠΎΠ΄ΠΈΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² public-ΡΠ΅ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° class (Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΠΏΡΠ΅Π΄ΠΊΠ°, ΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠ΅Π΄ΠΊΠ°).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
type
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;
procedure Print;
begin
write(xx,' ',yy);
end;
end;
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°:
type
IPosition = interface
property X: integer read;
property Y: integer read;
end;
IDrawable = interface
procedure Draw;
end;
IShape = interface(IPosition,IDrawable)
end;
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎ-ΡΡΡΠ΅ΡΡΠ²Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π±Π΅Π· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²: ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊ ΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ:
var ip: IShape := new Point(20,30);
ip.Draw;
Point(ip).Print;
ΠΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ²Π»ΡΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² virtual ΠΈΠ»ΠΈ override. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ip.Draw Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Draw ΠΊΠ»Π°ΡΡΠ° Point. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ΅ΠΏΠΎΡΠΊΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡΡΠ²Π°Π΅ΡΡΡ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°Ρ , ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ virtual:
type
Point = class(IShape,ICloneable)
...
function Clone: Object; virtual;
begin
Result := new Point(xx,yy);
end;
end;
ΠΠ»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ is ΠΈ as:
if ip is Point then
...
var p: Point := ip as Point;
if p<>nil then
writeln('ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ');
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΡΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ»ΠΈΠ²Π°ΡΡΡΡ Π² ΠΎΠ΄ΠΈΠ½:
type
IShape = interface
procedure Draw;
property X: integer read;
property Y: integer read;
end;
IBrush = interface
procedure Draw;
property Size: integer read;
end;
Brush = class(IShape,IBrush)
// ΠΌΠ΅ΡΠΎΠ΄ Draw ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ
end;
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ , Π² .NET ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊ ΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π PascalABC.NET ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π΅Π»ΡΠ·Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π² .NET, ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΠΏ integer ΡΠ²Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IComparable:
var i: integer := 1;
var res : integer := IComparable(i).CompareTo(2);
// i.CompareTo(2) - ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ: ΠΎΠ±Π·ΠΎΡ
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ (generic) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ»Π°ΡΡ (Π·Π°ΠΏΠΈΡΡ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ) ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π° ΠΊΠ»Π°ΡΡΠ° (Π·Π°ΠΏΠΈΡΠΈ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°) ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Stack<T> - ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ° ΡΠΏΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° T, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠΏΠΎΠΌ T, Π° Stack<integer> - ΠΊΠ»Π°ΡΡ ΡΠΏΠΈΡΠΊΠ° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° integer.
ΠΠ±ΠΎΠ±ΡΡΠ½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΠ»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
type
Node<T> = class
data: T;
next: Node<T>;
public
constructor Create(d: T; nxt: Node<T>);
begin
data := d;
next := nxt;
end;
end;
Stack<T> = class
tp: Node<T>;
public
procedure Push(x: T);
begin
tp := new Node<T>(x,tp);
end;
function Pop: T;
begin
Result := tp.data;
tp := tp.next;
end;
function Top: T;
begin
Result := tp.data;
end;
function IsEmpty: boolean;
begin
Result := tp = nil;
end;
end;
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΈΠΆΠ΅:
var
si: Stack<integer>;
sr: Stack<real>;
begin
si := new Stack<integer>;
sr := new Stack<real>;
for var i := 1 to 10 do
si.Push(Random(100));
while not si.IsEmpty do
sr.Push(si.Pop);
while not sr.IsEmpty do
write(sr.Pop,' ');
end.
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΏ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΠΎΠ±Π·ΠΎΡ
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ (generic) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΈΠ· ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ .
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ:
function FindFirstInArray<T>(a: array of T; val: T): integer;
begin
Result := -1;
for var i:=0 to a.Length-1 do
if a[i]=val then
begin
Result := i;
exit;
end;
end;
var x: array of string;
begin
SetLength(x,4);
x[0] := 'ΠΠ°Π½Ρ';
x[1] := 'ΠΠΎΠ»Ρ';
x[2] := 'Π‘Π΅ΡΠ΅ΠΆΠ°';
x[3] := 'Π‘Π°ΡΠ°';
writeln(FindFirstInArray(x,'Π‘Π΅ΡΠ΅ΠΆΠ°'));