Нарисовать линейную диаграмму изменения, например, температуры по месяцам, типа январь – 5, февраль – 7, март – 13 и т.д. с D заполнения=0.5 — Pascal(Паскаль)

— данные нужно внести на пиктограмму, а пиктограмму привыкнуть к отметкам на осях снизу. — Кроме того, необходимо построить оси координат, используя граничные параметры, полученные с функций getmaxx и getmaxy.
-Данные вводятся с клавиатуры: количество элементов, их значения и названия.
— По введенным данным программа должна рассчитать максимальную величину параметров к осям, шаг построения сетки по осям Ox и Oy. Для построения элементов диаграммы использовать разные цвета.
— По введенным данным и параметрам осей рассчитать координаты точек, необходимых для построения диаграммы, и построить их, используя операторы цикла.
— На пиктограмме или рядом с ней вывести числовые их значения.
— Построить легенду диаграммы, которую нужно разместить справа от диаграммы.

uses
  crt,graph;
var
  i,j,k,max,n,x: integer;
  c: string;
  a: array [1..12] of string;
  b: array [1..12] of integer;
begin
  clrscr;
  write('wwedite kol-wo elementow: ');
  readln(n);
  for i:= 1 to n do
  begin
    write('wwedite mesyac: ');
    readln(a[i]);
    write('wwedite temperaturu: ');
    readln(b[i]);
  end;
  max:=b[1];                {находим максимальную температуру}
  for i:= 1 to n do
    if b[i]>max then
      max:=b[i];
  i:=detect;
  initgraph(i,i,'');
  j:=(getmaxx-140) div max;                            {находим шаг на оси OX}
  k:=(getmaxy-60) div n;                                {находим шаг на оси OY}
  line(60,getmaxy-60,getmaxx-80,getmaxy-60);  {ось OX}
  line(60,getmaxy-60,60,0);                             {ось OY}
  setcolor(6);
  for i:= 1 to n do
  begin
    c:='';
    x:=b[i];
    while x>0 do
    begin
      c:=chr((x mod 10)+48)+c;
      x:=x div 10;
    end;
    outtextxy(5,getmaxy-60-(i*k)+round(k*0.5),a[i]);              {Здесь начинаем}
    outtextxy(60+(b[i]*j),getmaxy-50,c);                               {строить график}
    moveto(60,getmaxy-60-(i*k)+round(k*0.5)+round(k*0.2));   {здесь будет тяжело}
    lineto(b[i]*j+60,getmaxy-60-(i*k)+round(k*0.5)+round(k*0.2)); {разобраться, поэтому}
    lineto(b[i]*j+60,getmaxy-60-(i*k)+round(k*0.5)-round(k*0.2));  {не советую}
    lineto(60,getmaxy-60-(i*k)+round(k*0.5)-round(k*0.2));           {будем думать, что }
    lineto(60,getmaxy-60-(i*k)+round(k*0.5)+round(k*0.2));          {просто рисуем нужные линии}
    SetFillStyle(SolidFill,i+1);
    FloodFill(80,getmaxy-70-(i*k)+round(k*0.5)+round(k*0.2),6);
  end;
  for i:= 1 to n do                      {выводим таблицу значений}
  begin                                  
    c:='';
    x:=b[i];
    while x>0 do
    begin
      c:=chr((x mod 10)+48)+c;
      x:=x div 10;
    end;
    outtextxy(560,i*10,a[i]);
    outtextxy(620,i*10,c);
  end;
  outtextxy(560,200,'Legenda');  {выводим легенду}
  Setcolor(4);
  line(560,220,570,220);
  Setcolor(6);
  outtextxy(575,220,'Grafik'); 
  readkey;
end.

Leave a Comment

9 + 1 =