5. Для задачи из примера 4.6 выполните перечисленные задания.

1.  Внесите в программу изменения так, чтобы цвет сектора выбирался из массива констант.

Дополним программу массивом, который будет содержать элементы типа Color. Затем в цикле при выборе цвета воспользуемся таким выражением: SetBrushColor(c[i]).

uses graphABC;
var a: array[1..10] of integer;
  n, S, u0, u1: integer;
const c: array[1..10] of Color = (clRed, clOrange,
clYellow, clLightGreen, clGreen,
clTeal, clBlue, clDarkViolet,
clMagenta, clPink);
begin
  write('Количество n = ');
  readln(n);
  writeln(n);
  writeln('Элементы массива');
  for var i := 1 to n do
    read(a[i]);
  for var i := 1 to n do
    write(a[i], ' ');
  S := 0;
  for var i := 1 to n do
    S := S + a[i];
  u0 := 0;
  for var i := 1 to n do
  begin
    u1:= u0+trunc(a[i]*360/S);
  SetBrushColor(c[i]);
    Pie(150,150,100,u0,u1);
    u0 := u1;
  end;
end.

2*. Измените программу так, чтобы диаграмма всегда строилась в центре графического окна. Диаметр круга определяется меньшей из двух величин — шириной или высотой окна.

Для этого объявим три дополнительные переменные r, x, y. Радиус круга — r — получим из выражения WindowWidth div 2 или WindowHeight div 2 (определим, какое из них меньшее). WindowWidth — это ширина графического окна, а WindowHeight — его ширина. Таким образом, диаметр круга (r*2) будет равняться меньшей стороне окна. Координаты центра находим также с помощью WindowWidth и WindowHeight.

uses graphABC;
var a: array[1..10] of integer;
  n, S, u0, u1, r, x, y: integer;
const c: array[1..10] of Color = (clRed, clOrange,
clYellow, clLightGreen, clGreen,
clTeal, clBlue, clDarkViolet,
clMagenta, clPink);
begin
  write('Количество n = ');
  readln(n);
  writeln(n);
  writeln('Элементы массива');
  for var i := 1 to n do
    read(a[i]);
  for var i := 1 to n do
    write(a[i], ' ');
  S := 0;
  for var i := 1 to n do
    S := S + a[i];
  u0 := 0;
  if WindowWidth > WindowHeight then
    r := WindowHeight div 2
  else 
    r := WindowWidth div 2;
  x := WindowWidth div 2;
  y := WindowHeight div 2;
  for var i := 1 to n do
  begin
    u1:= u0+trunc(a[i]*360/S);
    SetBrushColor(c[random(1, 10)]);
    Pie(x,y,r,u0,u1);
    u0 := u1;
  end;
end.