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


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.