Загрузка данных


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.