program ShapesDemo;
{$mode objfpc}{$H+}
{$codepage UTF-8}
uses
{$ifdef unix}cwstring,{$endif}
heaptrc, SysUtils, Geometry, ConsoleUtils;
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;
NameStr: string;
begin
Shapes[0] := TCircle.Create('Круг', 5);
Shapes[1] := TRectangle.Create('Прямоугольник', 4, 6);
Shapes[2] := TCircle.Create('Монета', 1.5);
Shapes[3] := TRectangle.Create('Экран', 12, 12);
WriteLn('=== Фигуры ===');
WriteLn;
for i := 0 to High(Shapes) do
begin
NameStr := Shapes[i].Name + ':';
Write(NameStr.PadRightUTF8(18));
Write(' S=' + FormatFloat('0.00', Shapes[i].GetArea).PadLeftUTF8(6));
Write(', P=' + FormatFloat('0.00', Shapes[i].GetPerimeter).PadLeftUTF8(6));
WriteLn;
end;
WriteLn;
WriteLn(Format('Общая площадь: %s', [FormatFloat('0.00', TotalArea(Shapes)).PadLeftUTF8(8)]));
for i := 0 to High(Shapes) do
Shapes[i].Free;
end.