Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Столбиковая или круговая диаграмма. (http://www.tehnari.ru/f41/t36869/)

Vladimir_S 10.06.2010 17:21

Ох! Попробую, но не гарантирую.

Vladimir_S 10.06.2010 22:25

Вложений: 2
Ну вот, нарисовал. Сразу несколько пояснений:
1. Оформление в виде модуля - самостоятельно.
2. Конфигурирование процедуры InitGraph - тоже. (У меня это делается через мой запускающий модуль, "заточенный" под мои компы).
3. Английский язык в текстовой части - чтобы не возникало проблем с кодировками (я использую DOS-режим). А в графических шрифтах в моем Паскале и вовсе кириллицы нету.
4. Входные данные преобразованы в константы. Надеюсь, сумеете состыковать со своим методом хранения данных. Собственно, можно районы и месяцы оставить, как есть, а массивы доходов и корзин объявить переменными и поместить в них нужные числа, считанные из вашего файла данных. Тогда в теле программы ничего переделывать не придется. Так будет меньше всего возни.
Вроде всё.
Код:

Uses Graph, CRT;
CONST
 District:ARRAY[1..3] of STRING=('Leninskiy','Oktyabrskiy','Pervomaiskiy');
 Month:ARRAY[1..5] of STRING=('January','February','March','April','May');
 Incom:ARRAY[1..15] of WORD=(30000, 30100, 30300, 30400, 30500, 20000,
                            20300, 20700, 20900, 22150, 40000, 41000,
                            42000, 43000, 44000);
 Basket:ARRAY[1..15] of WORD=(4020, 4040, 4060, 4080, 4100, 3000, 3050,
                            3120, 3220, 3500, 5000, 5100, 5200, 5300,
                            5400);
VAR
 Ratio:REAL;
 d,m:BYTE;
 I_cur,B_cur:WORD;
 i,j:INTEGER;
 S:String;
BEGIN
 ClrScr;
 WriteLn('Enter the district number: 1 - Leninskiy');
 WriteLn('                          2 - Oktyabrskiy');
 WriteLn('                          3 - Pervomaiskiy');
 ReadLn(d);
 WriteLn('Enter the month number: 1 - January');
 WriteLn('                        2 - February');
 WriteLn('                        3 - March');
 WriteLn('                        4 - April');
 WriteLn('                        5 - May');
 ReadLn(m);
 I_cur:=Incom[(d-1)*5+m];
 B_cur:=Basket[(d-1)*5+m];
 Ratio:=1.0*B_cur/I_cur;
 InitGraph() {ЗДЕСЬ НЕОБХОДИМО ЗАДАТЬ ПАРАМЕТРЫ};
 ClearDevice;
 SetTextStyle(DefaultFont,HorizDir,2);
 SetTextJustify(LeftText,TopText);
 SetColor(Cyan);
 OutTextXY(0,0,'District:'+District[d]);
 SetTextJustify(RightText,TopText);
 OutTextXY(640,0,'Month:'+Month[m]);
 SetTextJustify(CenterText,BottomText);
 OutTextXY(320,480,'Press "Enter" to continue...');
 Str(Ratio*100:4:1,S);
 SetTextJustify(LeftText,CenterText);
 OutTextXY(420,190,S+' %');
 SetColor(White);
 SetFillStyle(1,Red);
 PieSlice(320,240,0,Round(360*Ratio),100);
 SetFillStyle(1,Yellow);
 PieSlice(320,240,Round(360*Ratio),360,100);
 ReadKey;
 ClearDevice;
 SetColor(Cyan);
 SetTextStyle(DefaultFont,HorizDir,1);
 SetTextJustify(LeftText,CenterText);
 For i:=1 to 3 do
  OutTextXY(0,100+(i-1)*140,District[i]);
 SetTextJustify(CenterText,TopText);
 For i:=1 to 5 do
  OutTextXY(190+(i-1)*100,0,Month[i]);
 SetTextJustify(CenterText,BottomText);
 OutTextXY(320,480,'Press "Enter" to exit...');
 For i:=1 to 3 do
  for j:=1 to 5 do
    begin
    I_cur:=Incom[(i-1)*5+j];
    B_cur:=Basket[(i-1)*5+j];
    Ratio:=1.0*B_cur/I_cur;
    SetColor(Cyan);
    SetTextJustify(CenterText,BottomText);
    Str(Ratio*100:4:1,S);
    OutTextXY(190+(j-1)*100,68+(i-1)*140,S+' %');
    SetColor(White);
    SetFillStyle(1,Red);
    PieSlice(190+(j-1)*100,100+(i-1)*140,0,Round(360*Ratio),30);
    SetFillStyle(1,Yellow);
    PieSlice(190+(j-1)*100,100+(i-1)*140,Round(360*Ratio),360,30);
    end;
 ReadKey;
 CloseGraph;
end.

Должно получиться так:
Вложение 14800 Вложение 14801

R45H 11.06.2010 17:16

Спасибо за диаграмму. Вообще я про константы узнал только перед сдачей, потому что утром, не читая, быстро кинул прогу на флешку и убежал на остановку. Хорошо, что успел в "Enter the month number:" дописать оставшиеся 7 месяцев, а потом тыкнуть на 1..5, дабы оставить этот недочёт незамеченным. Константы чисел совпадали с реальными, поэтому это тоже пронесло. Наименования и количество районов, кстати, тоже не фиксированные, но я сослался, что не понимаю, как сделать по-другому. Про кодировку сказал, что не знаю как исправить, поэтому написал на английском, но мне ответили, что так и должно быть. В общем у меня получилось сдать эту диаграмму, Вы спасли мне оценку и гордость, и за это ещё раз, Огромное Спасибо! :tehnari_ru_889:

Vladimir_S 11.06.2010 17:36

Ну и славно.


Часовой пояс GMT +4, время: 05:31.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.