uses GraphABC;
const
n = 5; // Количество элементов в массиве (как в примере)
var
a: array[1..n] of Integer := (60, 80, 75, 90, 55); // Данные массива (как в примере)
// Создаем массив с точными цветами из фотографии
colors: array[1..n] of Color := (clRed, clYellow, clLimeGreen, clSkyBlue, clDarkOrchid);
totalSum: Integer;
startAngle, endAngle: real;
i: Integer;
begin
// Настройки окна
SetWindowSize(600, 400);
SetWindowCaption('Построение круговой диаграммы с фиксированными цветами');
// 1. Вычисляем общую сумму элементов массива
totalSum := 0;
for i := 1 to n do
totalSum := totalSum + a[i];
// 2. Инициализируем начальный угол (сверху)
startAngle := 0;
// Увеличиваем размер кисти для четких линий секторов
SetPenWidth(1);
// 3. Цикл для рисования каждого сектора
for i := 1 to n do
begin
// Вычисляем конечный угол текущего сектора:
// Текущий угол + доля элемента в 360 градусах
endAngle := startAngle + (a[i] / totalSum) * 360;
// --- ИЗМЕНЕНИЕ ---
// Устанавливаем цвет кисти из нашего массива fixedColors, а не случайный
SetBrushColor(colors[i]);
// Рисуем сектор: Pie(x, y, r, startAngle, endAngle)
// Центр в (250, 200), радиус 100
Pie(250, 200, 100, Round(startAngle), Round(endAngle));
// После рисования текущего сектора, его конечный угол становится начальным для следующего
startAngle := endAngle;
end;
// Вывод текста для пояснения
TextOut(400, 50, 'Секторы:');
TextOut(420, 70, '1. Красный: ' + IntToStr(a[1]));
TextOut(420, 90, '2. Желтый: ' + IntToStr(a[2]));
TextOut(420, 110, '3. Зеленый: ' + IntToStr(a[3]));
TextOut(420, 130, '4. Голубой: ' + IntToStr(a[4]));
TextOut(420, 150, '5. Фиолетовый: ' + IntToStr(a[5]));
end.