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

1.  Измените программу так, чтобы при построении диаграммы использовалась не вся высота окна, а оставались поля сверху и снизу.

При построении прямоугольников будем уменьшат координату y1 на 100 пикселей, а координату y2 увеличивать на 100.

uses graphABC;
var a: array[1..20] of integer;
 n, max, h, x, y1, y2: integer;
 m: real;
begin
 write('Количество n =');
 readln(n);
 writeln(n);
 writeln('Элементы массива');
 for var i := 1 to n do
 begin
  read(a[i]);
  write(a[i], ' ');
 end;
 max := a[1];
 for var i := 2 to n do
  if a[i] > max then
   max := a[i];
 h := trunc(WindowWidth/(2*n+1));
 m := WindowHeight/max;
 x := h;
 for var i := 1 to n do
 begin
  SetBrushColor(clrandom);
  y1 := WindowHeight;
  y2 := y1 - trunc(a[i]*m);
  Rectangle(x, y1-100, x+h, y2+100);
  x := x + 2*h;
 end;
end.

2.  Измените программу так, чтобы столбики строились без промежутков между ними.

Заменим выражение x := x + 2*h на x := x + h.

uses graphABC;
var a: array[1..20] of integer;
 n, max, h, x, y1, y2: integer;
 m: real;
begin
 write('Количество n =');
 readln(n);
 writeln(n);
 writeln('Элементы массива');
 for var i := 1 to n do
 begin
  read(a[i]);
  write(a[i], ' ');
 end;
 max := a[1];
 for var i := 2 to n do
  if a[i] > max then
   max := a[i];
 h := trunc(WindowWidth/(2*n+1));
 m := WindowHeight/max;
 x := h;
 for var i := 1 to n do
 begin
  SetBrushColor(clrandom);
  y1 := WindowHeight;
  y2 := y1 - trunc(a[i]*m);
  Rectangle(x, y1, x+h, y2);
  x := x + h;
 end;
end.

3.  Создайте массив цветовых констант и используйте эти цвета для закрашивания столбиков.

Объявим массив цветовых констант c, который будет содержать 3 цвета. Затем при выборе цвета из этого массива будем использовать выражение c[i mod 3 + 1] — это позволит выбирать цвета по порядку из массива «по кругу» при любом значении i.

uses graphABC;
var a: array[1..20] of integer;
 n, max, h, x, y1, y2: integer;
 m: real;
const c: array [1..3] of Color = (clBlue, clRed, clYellow);
begin
 write('Количество n =');
 readln(n);
 writeln(n);
 writeln('Элементы массива');
 for var i := 1 to n do
 begin
  read(a[i]);
  write(a[i], ' ');
 end;
 max := a[1];
 for var i := 2 to n do
  if a[i] > max then
   max := a[i];
 h := trunc(WindowWidth/(2*n+1));
 m := WindowHeight/max;
 x := h;
 for var i := 1 to n do
 begin
  SetBrushColor(c[i mod 3 + 1]);
  y1 := WindowHeight;
  y2 := y1 - trunc(a[i]*m);
  Rectangle(x, y1, x+h, y2);
x := x + 2*h;
 end;
end.

4.  Постройте линейчатую диаграмму.

uses graphABC;
var a: array[1..20] of integer;
 n, max, h, x, y1, y2: integer;
 m: real;
begin
 write('Количество n =');
 readln(n);
 writeln(n);
 writeln('Элементы массива');
 for var i := 1 to n do
 begin
  read(a[i]);
  write(a[i], ' ');
 end;
 max := a[1];
 for var i := 2 to n do
  if a[i] > max then
   max := a[i];
 h := trunc(WindowHeight/(2*n+1));
 m := WindowWidth/max;
 x := h;
 for var i := 1 to n do
 begin
  SetBrushColor(clrandom);
  y1 := WindowWidth;
  y2 := y1 - trunc(a[i]*m);
  Rectangle(y1, x, y2, x+h);
  x := x + 2*h;
 end;
end.