program ComprehensiveFeatures;
type
Color = (Red, Green, Blue, Yellow);
Age = 0..120;
Person = record
name: string;
age: Age;
favorite_color: Color;
is_student: boolean;
end;
PackedData = packed record
flag1: boolean;
flag2: boolean;
value: 0..15;
end;
Numbers = array[1..10] of integer;
ColorSet = set of Color;
PersonPtr = ^Person;
ShortString = string[255];
var
p: Person;
data: PackedData;
nums: Numbers;
colors: ColorSet;
ptr: PersonPtr;
msg: ShortString;
i: integer;
ch: char;
function CalculateSum(a, b: integer): integer;
begin
Result := a + b;
end;
procedure ModifyPerson(var person: Person; new_age: integer);
begin
person.age := new_age;
end;
function GetPersonInfo(const person: Person): string;
var
info: string;
begin
info := 'Name: ' + person.name + ', Age: ';
Result := info;
end;
begin
msg := 'Hello\nWorld\tTest';
ch := 'A';
ch := #65; ch := '\n';
i := 42;
p.favorite_color := Red;
p.is_student := true;
p.name := 'John';
p.age := 25;
if p.age > 18 then
begin
p.is_student := false;
end;
for i := 1 to 10 do
begin
nums[i] := i * 2;
end;
colors := [Red, Blue];
if Red in colors then
begin
end;
New(ptr);
ptr^.name := 'Jane';
ptr^.age := 30;
i := CalculateSum(10, 20);
ModifyPerson(p, 26);
case p.favorite_color of
Red: msg := 'Red is chosen';
Green: msg := 'Green is chosen';
Blue: msg := 'Blue is chosen';
Yellow: msg := 'Yellow is chosen';
end;
try
i := 100 div 0; except
on EDivByZero do
begin
msg := 'Division by zero error';
end;
end;
with p do
begin
name := 'Modified';
age := age + 1;
end;
Dispose(ptr);
end.