program ShapesDemo;
{$mode objfpc}{$H+}
uses
SysUtils,
Geometry;
function TotalArea(const Shapes: array of TGeomShape): Double;
var
i: Integer;
begin
Result := 0;
for i := 0 to High(Shapes) do
Result := Result + Shapes[i].GetArea;
end;
function TotalPerimeter(const Shapes: array of TGeomShape): Double;
var
i: Integer;
begin
Result := 0;
for i := 0 to High(Shapes) do
Result := Result + Shapes[i].GetPerimeter;
end;
var
Shapes: array[0..3] of TGeomShape;
i: Integer;
begin
// Настройка кодировки для кириллицы в консоли Lazarus
SetMultiByteConversionCodePage(CP_UTF8);
Shapes[0] := TCircle.Create('Круг', 5);
Shapes[1] := TRectangle.Create('Прямоугольник', 4, 6);
Shapes[2] := TCircle.Create('Монета', 1.5);
Shapes[3] := TRectangle.Create('Экран', 16, 9);
Writeln('=== Фигуры ===');
for i := 0 to High(Shapes) do
Writeln(Shapes[i].ToString);
Writeln;
Writeln('Общая площадь: ', FormatFloat('0.00', TotalArea(Shapes)));
Writeln('Общий периметр: ', FormatFloat('0.00', TotalPerimeter(Shapes)));
// Очистка памяти
for i := 0 to High(Shapes) do
Shapes[i].Free;
Write(#10'Нажмите Enter...');
Readln;
end.