Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/67: Рейтинг темы: голосов - 67, средняя оценка - 4.73
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482

Построение круговой диаграммы и гистограммы

03.05.2012, 20:36. Показов 13261. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста в следующем
Миниатюры
Построение круговой диаграммы и гистограммы  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2012, 20:36
Ответы с готовыми решениями:

Вывод круговой диаграммы, отражающей товарооборот в процентах книжного магазина
написать программу которая выводит круговую диаграмму отражающую товарооборот в процентах книжного магазина Исходные данные (объем продаж...

Построение вторичной круговой диаграммы с условиями
Добрый день! Столкнулся со следующей проблемой. Есть таблица в который имеются следующие ряды: Товар Доля в портфеле ...

Построение круговой диаграммы успеваемости студентов
Задача звучит так: Создайте программу которая вычерчивала бы круговую диаграмму успеваемости студентов. Известно общее количество...

18
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
04.05.2012, 14:50  [ТС]
вот кое-что надумал а как круговую диаграмму сделать?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Program Zadanie_6_8_7_1;
Uses Crt,GraphABC;
Type      mass = array[1..5] of string;
{Ñîçäàäèì ìàññèâ èç ñòðîê ñ íàçâàíèÿìè ïóñòûíü, ò.å. ìàññèâ äëÿ íàäïèñè ëåãåíäû}
          mas = array [1 .. 5] of integer;
Var
     a,c:mas;
    {ìàññèâ íîìåðîâ öâåòîâ äëÿ èçîáðàæåíèÿ ñåêòîðîâ}
    v : mass;
    {ìàññèâ èç ñòðîê äëÿ íàäïèñè ëåãåíäû}
    p : mass;
    {ìàññèâ èç ïðîöåíòîâ äëÿ êàæäîé ïóñòûíè}
    i,n,m,s,x1,x2,sr,max,h,xi,k1:integer;
    k:real;
    z:string;
Begin
readln;
clrscr;
SetWindowSize(800,500);
   v[1]:='Àðàáñêàÿ';
   v[2]:='Ãîáè';                                                                      //675400
   v[3]:='Òóðêåñòàí';
   v[4]:='Òàêëà-Ìàêàí';
   v[5]:='Òàð';
   { ìàññèâ ïëîùàäåé }
   a[1]:=979;
   a[2]:=100;
   a[3]:=300;
   a[4]:=500;
   a[5]:=750;
   { íàõîæäåíèå ñðåäíåé ïëîùàäè }
   s:=0;
for i:=1 to 5 do
begin
    s:=s+a[i];
end;
    sr:=s div 5;
    { îñè êîîðäèíàò }
    SetPenWidth(3);
    line(50,400,750,400);
    line(50,10,50,400);
    {ðàññ÷åò øèðèíû ïðÿìîóãîëüíèêà äëÿ êàæäîãî ìåñÿöà}
    h:=Round((600)/5);
    {íàõîæäåíèå íàèáîëüøåãî çíà÷åíèÿ ïëîùàäè}
    max:=a[1];
For i:=2 to 5 do
begin
if a[i]>max
then
    max:=a[i];
end;
    {âû÷èñëåíèå êîýôôèöèåíòà ìàñøòàáèðîâàíèÿ ïî îñè OY}
k1:=400 div max;
    { ïîäïèñûâàåì ÎÕ }
For i:=1 to 11 do
begin
    S:=i*100;
    Str(S,z);
    Line(48,(400 div 12)*i,52,(400 div 12)*i);
    TextOut(5,(400 div 12)*(12-i)-10,z);
end;
    {êîîðäèíàòà õ äëÿ ïåðâîãî ïðÿìîóãîëüíèêà äèàãðàììû}
    xi:= 60;
    {Ñòðîèì  ñòîëüêî ïðÿìîóãîëüíèêîâ, ñêîëüêî åñòü ïóñòûíü}
For i:=1 to 5 do
begin
If
    a[i]>Sr
then
    SetBrushColor(clGreen)
else
    SetBrushColor(clRed);
    {çàêðàñêà ïðÿìîóãîëüíèêà äèàãðàììû çåëåíûì öâåòîì}
    SetBrushStyle(bsSolid);
    Rectangle(xi,400-(a[i]+k1),xi+h,400);
    SetBrushColor(clwhite);
    {Îòìåíÿåì öâåò çàêðàñêè îáëàñòè íà áåëûé}
    SetFontColor(clRed);
    {Óñòàíàâëèâàåì öâåò øðèôòà - êðàñíûé}
    SetFontSize(14);
    {Óêàçûâàåì ðàçìåð öèôð - 14}
    SetFontStyle(fsBold);
    {Óñòàíàâëèâàåì ñòèëü øðèôòà - æèðíûé}
    TextOut(xi+(h div 10),410,v[i]);
    {Âûâîäèì òåêñò ïîä êàæäûì ïðÿìîóãîëüíèêîì äèàãðàììû}
    xi:=xi+h+10;
    {ïîëó÷àåì êîîðäèíàòó õ äëÿ ñëåäóþùåãî ïðÿìîóãîëüíèêà äèàãðàììû
    10 - ðàññòîÿíèå ìåæäó ñòîëáèêàìè}
    { Ïîñ÷èòàòü  îòêëîíåíèÿ, ñîçäàòü íîâûé ìàññèâ, åñëè áîëüøå 0- çåëåíûé, åñëè
    ìåíøå-êðàñíûé, ïîñòðîèòü ïðÿìîóãîëüíèêè ïî äàííûì íîâîãî ìàññèâà }
end;
end.
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
04.05.2012, 15:43
не фонтан... но
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Uses GraphAbc;
Const v: array[1..4] of integer = (979, 948, 610, 580);
      n: array[1..4] of string = ('Анхель','Тугела', 'Кукенад', 'Сатерлинд');
      col: array[1..4] of integer = (clYellow,clLime,clBrown,ClRed);
Var u,u0,s,i: integer;
Begin
  setWindowSize(400,400);   s:=0;  u0:=0;
  SetFontSize(16);
  for i:=1 to 4 do S:=S+v[i];            { вычисление суммарной площади }
    for i:=1 to 4 do
   begin
     SetBrushColor(col[i]);
     u:=u0 + round(v[i]*360/S)+1;
     Pie(200,240,140,u0,u);         { Рисование сектора }
     textout(0,0+((i-1)*25),n[i]);
     textout(150,0+((i-1)*25),inttostr(v[i]));
     u0:=u;
    end;
End.
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
05.05.2012, 13:13  [ТС]
спасибо

Добавлено через 14 часов 26 минут
Проблемка с Гистограммой надо вычи-ть среднее значение водопадов.
Для водопадов, расположенных в северном полушарии, определить отклонение (разность) высоты каждого такого водопада от значения H.




Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Program Zadanie_6_8_7_1;
Uses Crt,GraphABC;
Type      mass = array[1..10] of string;
          mas = array [1 .. 10] of integer;
Var
     a,c:mas;
    v : mass;
    p : mass;
    s,i,n,m,x1,x2,sr,max,h,xi,k1:integer;
    k:real;
    z:string;
Begin
readln;
clrscr;
SetWindowSize(1200,500);
   v[1]:='Àíõåëü';
   v[2]:='Òóãåëà';
   v[3]:='Óòèãàðä';
   v[4]:='Ìîíãåôîññîí';
   v[5]:='Éîñåìèòå';
   v[6]:='ÎñòðîÌàíäîëàÔîñ';
   v[7]:='Òóññåñòðåíãåí';
   v[8]:='Êóêåíàä';
   v[9]:='Ñàòåðëííä';
   v[10]:='Êèëå';
   a[1]:=979;
   a[2]:=948;
   a[3]:=800;
   a[4]:=774;
   a[5]:=739;
   a[6]:=657 ;
   a[7]:=646;
   a[8]:= 610 ;
   a[9]:= 580 ;
   a[10]:= 561;
   h:=0;
for i:=1 to 10 do
begin
    h:=h+a[i];
end;
    sr:=h div 10;
    SetPenWidth(3);
    line(50,400,750,400);
    line(50,10,50,400);
    h:=Round((650)/10);
    max:=a[1];
For i:=2 to 10 do
begin
if a[i]>max
then
    max:=a[i];
end;
k1:=400 div max;
For i:=1 to 11 do
begin
    S:=i*100;
    Str(S,z);
    Line(48,(400 div 12)*i,52,(400 div 12)*i);
    TextOut(5,(400 div 12)*(12-i)-10,z);
end;
 
    xi:= 60;
For i:=1 to 10 do
begin
If
    a[i]>Sr
then
    SetBrushColor(clGreen)
else
    SetBrushColor(clRed);
    SetBrushStyle(bsSolid);
    Rectangle(xi,400-(a[i]+k1),xi+h,400);
    SetBrushColor(clwhite);
    SetFontColor(clRed);
    SetFontSize(10);
    SetFontStyle(fsBold);
    TextOut(xi+(h div 10),410,v[i]);
    xi:=xi+h+30;
end;
end.
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
05.05.2012, 14:06
как-то так, только с подписями по оси никак е разберусь...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Uses Crt,GraphABC;
const v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var i,n,m,s,x1,x2,h,xi,k1,no,nomax:integer;
    sar,k:real;
    z:string;
Begin
clrscr;
SetWindowSize(800,500);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,490);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    if i mod 2=0 then TextOut(xi+(h div 10),410,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),20,v[i]);
    xi:=xi+h+10;
    end;
end.
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
05.05.2012, 18:23  [ТС]
Спасибо большое,можете пожалуйста сделать,чтобы выводилась средняя высота в окне программы,отклонение каждой высоты водопада от средней и были цифры -высоты водопадов(т.е значения по оси у)
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
05.05.2012, 18:30
antony sky, по условию, по моему, по оси у - оклонения, а не высоты, а? и график под это сделан?
"По данным отклонений построить гистограмму..."
как-то так, а?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Uses Crt,GraphABC;
const v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var i,n,m,s,x1,x2,h,xi,k1,no,nomax:integer;
    sar,k:real;
    z:string;
Begin
clrscr;
SetWindowSize(800,500);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,490);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    str(p[i]-p[no],z);
    SetFontColor(clwhite);
    If p[i]>p[no] then TextOut(xi+(h div 10)+20,200,z) else
       If p[i]<p[no] then TextOut(xi+(h div 10)+20,270,z);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    if i mod 2=0 then TextOut(xi+(h div 10),370,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),20,v[i]);
    xi:=xi+h+10;
    end;
SetFontColor(clblack);
str(round(sar),z);
z:='Средняя высота = '+z;
TextOut(70,430,z);
z:='Наиболее близка к среднему значению высота водопада '+v[no];
TextOut(70,470,z);
end.
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
05.05.2012, 23:18  [ТС]
да,спасибо только вопрос есть там последний водопас с минусом ,а это разность отклонений.Спасибо,всё по условию .
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
05.05.2012, 23:20
сейчас еще разметку по шкале попробую...
вот
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Uses Crt,GraphABC;
const v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var i,n,m,s,x1,x2,h,xi,k1,no,nomax:integer;
    sar,k:real;
    z:string;
Begin
clrscr;
SetWindowSize(800,500);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,490);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
For i:=-4 to 4 do
begin
    S:=i*50;
    Str(S,z);
    Line(48,(250 div 5)*i,52,(250 div 5)*i);
    TextOut(5,(250 div 5)*(5-i)-10,z);
end;
 
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    str(p[i]-p[no],z);
    SetFontColor(clwhite);
    If p[i]>p[no] then TextOut(xi+(h div 10)+20,200,z) else
       If p[i]<p[no] then TextOut(xi+(h div 10)+20,270,z);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    if i mod 2=0 then TextOut(xi+(h div 10),370,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),20,v[i]);
    xi:=xi+h+10;
    end;
SetFontColor(clblack);
str(round(sar),z);
z:='Средняя высота = '+z;
TextOut(70,430,z);
z:='Наиболее близка к среднему значению высота водопада '+v[no];
TextOut(70,470,z);
end.
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
06.05.2012, 12:10  [ТС]
Спсибо.
Скажите пожалуйста,а можно в одной программе сделать круговую диаграмму и гистограмму ,чтобы при выводе выводились ?
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
06.05.2012, 12:44
можно... попробую
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
06.05.2012, 14:27  [ТС]
Попробуйте,пожалуйста
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
06.05.2012, 18:33
вот
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Uses GraphAbc;
Const vv: array[1..4] of integer = (979, 948, 610, 580);
      nz: array[1..4] of string = ('Анхель','Тугела', 'Кукенад', 'Сатерлинд');
      col: array[1..4] of integer = (clYellow,clLime,clBrown,ClRed);
      v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var r,i,n,m,s,x1,x2,h,xi,k1,no,nomax,u,u0,ss,j: integer;
    sar,k:real;
    z:string;
 
 
Begin
setWindowSize(800,650);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,370);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
For i:=-2 to 4 do
begin
    S:=i*50;
    Str(S,z);
    Line(48,(250 div 5)*i,52,(250 div 5)*i);
    TextOut(5,(250 div 5)*(5-i)-10,z);
end;
 
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    str(p[i]-p[no],z);
    SetFontColor(clwhite);
    If p[i]>p[no] then TextOut(xi+(h div 10)+20,200,z) else
       If p[i]<p[no] then TextOut(xi+(h div 10)+20,270,z);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    if i mod 2=0 then TextOut(xi+(h div 40),70,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),40,v[i]);
    xi:=xi+h+10;
    end;
SetFontColor(clblack);
str(round(sar),z);
z:='Средняя высота = '+z;
TextOut(70,270,z);
z:='Наиболее близка к среднему значению высота водопада '+v[no];
TextOut(70,10,z);
 
 
  ss:=0;  u0:=0;
  SetFontSize(16);
  for j:=1 to 4 do ss:=ss+vv[j];            { вычисление суммарной площади }
    for j:=1 to 4 do
   begin
     SetBrushColor(col[j]);
     u:=u0 + round(vv[j]*360/ss)+1;
     Pie(450,450,140,u0,u);         { Рисование сектора }
     textout(150,400+((j-1)*25),nz[j]);
     textout(250,400+((j-1)*25),inttostr(vv[j]));
     u0:=u;
    end;
End.
а можно еще задание вложить (только оно должно быть в папке с рисунком под именем 1.jpg)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Uses GraphAbc;
Const vv: array[1..4] of integer = (979, 948, 610, 580);
      nz: array[1..4] of string = ('Анхель','Тугела', 'Кукенад', 'Сатерлинд');
      col: array[1..4] of integer = (clYellow,clLime,clBrown,ClRed);
      v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var r,i,n,m,s,x1,x2,h,xi,k1,no,nomax,u,u0,ss,j: integer;
    sar,k:real;
    z:string;
 
 
Begin
setWindowSize(800,650);
r:=loadpicture('1.jpg');
drawpicture(r,0,300,500,350);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,300);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
For i:=-2 to 4 do
begin
    S:=i*50;
    Str(S,z);
    Line(48,(250 div 5)*i,52,(250 div 5)*i);
    TextOut(5,(250 div 5)*(5-i)-10,z);
end;
 
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    str(p[i]-p[no],z);
    SetFontColor(clwhite);
    If p[i]>p[no] then TextOut(xi+(h div 10)+20,200,z) else
       If p[i]<p[no] then TextOut(xi+(h div 10)+20,270,z);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    if i mod 2=0 then TextOut(xi+(h div 40),70,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),40,v[i]);
    xi:=xi+h+10;
    end;
SetFontColor(clblack);
str(round(sar),z);
z:='Средняя высота = '+z;
TextOut(70,270,z);
z:='Наиболее близка к среднему значению высота водопада '+v[no];
TextOut(70,10,z);
 
 
  ss:=0;  u0:=0;
  SetFontSize(16);
  for j:=1 to 4 do ss:=ss+vv[j];            { вычисление суммарной площади }
    for j:=1 to 4 do
   begin
     SetBrushColor(col[j]);
     u:=u0 + round(vv[j]*360/ss)+1;
     Pie(650,500,140,u0,u);         { Рисование сектора }
     u0:=u;
    end;
SetBrushColor(col[1]);
textout(650,400,nz[1]);
textout(650,430,inttostr(vv[1]));
SetBrushColor(col[2]);
textout(550,450,nz[2]);
textout(550,480,inttostr(vv[2]));
SetBrushColor(col[3]);
textout(600,570,nz[3]);
textout(600,600,inttostr(vv[3]));
SetBrushColor(col[4]);
textout(670,510,nz[4]);
textout(690,540,inttostr(vv[4]));
End.
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
06.05.2012, 21:46  [ТС]
Спасибо вам большое

Добавлено через 3 часа 4 минуты
вы имеете ввиду гистограмму и диаграмму можно вложить,но для этого надо сделать скрин диаграмм и потом вложить под названием 1 jpg ,так?
0
Почетный модератор
 Аватар для КонецСвета
7966 / 3937 / 2464
Регистрация: 30.10.2011
Сообщений: 5,377
06.05.2012, 21:51
antony sky, не-не-не...
в первой программе и гистограмма и диаграмма. готово. можно использовать

а вот если взять вторую программу и сохранить вместе с ней в одной папке тот скриншот задания, что у тебя в первом сообщении (под именем 1.jpg) то в графическом окне кроме гистограммы и диаграммы будет слева снизу само задание =) так сказать, все в одном флаконе
1
0 / 4 / 1
Регистрация: 09.03.2011
Сообщений: 482
06.05.2012, 21:56  [ТС]
там где даны сведения о водопадах и т.д и т.п благодарю
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 5
16.03.2015, 19:10
А как в процентах сделать и что бы исходные данные вводились во время работы программы не подскажете?
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 1
18.10.2016, 20:06
Вроде должно работать, если я правильно тебя понял.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uses crt, GraphABC;
var s,q,w,e: integer;
aq,aw,ae,a0: real;
begin
SetWindowSize(400,400);
readln(q,w,e);
s:=0;
a0:=0;
s:=q+w+e;
writeln('Першы прадмет',' ',q,' ','балаў',' ',round(100*q/s),'%');
writeln('Другі прадмет',' ',w,' ','балаў',' ',round(100*w/s),'%');
writeln('Трэці прадмет',' ',e,' ','балаў',' ',round(100*e/s),'%');
 
setbrushcolor(rgb(random(255),random(255),random(255)));
aq:=a0+round(q*360/s);
pie(220,240,140,a0,aq);
 
setbrushcolor(rgb(random(255),random(255),random(255)));
aw:=a0+round(w*360/s);
pie(220,240,140,aq,aw+aq);
 
setbrushcolor(rgb(random(255),random(255),random(255)));
ae:=a0+round(e*360/s);
pie(220,240,140,aw+aq,ae+aw+aq);
end.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
18.10.2016, 20:16
Цитата Сообщение от Алексей Желток Посмотреть сообщение
если я правильно тебя понял.
Да, прошло всего 4 года, а он так тебя ждал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2016, 20:16
Помогаю со студенческими работами здесь

Построение круговой диаграммы для нескольких диапазонов
Помогите пожалуйста с кодом для построения круговой диаграммы. Если диапазон непрерывный, например, Range(&quot;C13:D13&quot;) то...

Список десятичных чисел - построение круговой диаграммы
Тут вроде все расписано, но ничего не понятно. Помогите кто может:) Задание 1. Создать проект приложения с окном списка, в котором...

Построение круговой диаграммы на основе данных из таблицы БД MySQL
Здравствуйте, у меня такая проблема, я начинающий в PHP. Перед мной стоит задача написания кода для создания круговой диаграммы которая...

Создание круговой диаграммы брать данные для диаграммы из dataGridView1 ?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Рисование круговой диаграммы
Всем доброго, пытаюсь разобраться но даже не знаю где найти... Может кто сталкивался или просто знает как делаются вот такие фигуры? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru