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

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

R45H 10.06.2010 01:48

Столбиковая или круговая диаграмма.
 
Вложений: 1
Ребят, я понимаю, что уже достали со своими диаграммами, но всё же прошу помощи.
Программа написана в паскале, состоит из основной программы (Меню) и 5-и модулей. Всё, что нужно, это создать в отдельном модуле одну диаграмму на выбор, вот они:
Цитата:

1. для каждого района за указанный месяц построить круговую диаграмму, на которой показать в % от дохода долю стоимости потребительской корзины и долю других расходов.
2. За указанный месяц построить столбиковую диаграмму, отражающую по районам соотношение между доходом и стоимостью потребительской корзины, столбики диаграммы расположить в порядке возрастания вычисленного соотношения.
Файлик с расширением .toh нужно кинуть в корневую папку диска C - это заполненный типизированный файл, который открывается программой. Там в таблице выводятся некие данные, их можно: просматривать / редактировать / выводить на печать. Нужно просто эти данные ещё и отобразить в диаграмме.
Ребят, я на вас надеюсь, у меня решается оценка! Сам разобраться пытался, ничего не вышло. Что угодно, но только не графика! Нигде больше мне не помогли, надеюсь только на вас!

Vladimir_S 10.06.2010 10:19

Цитата:

Сообщение от R45H (Сообщение 345067)
Ребят, я понимаю, что уже достали со своими диаграммами, но всё же прошу помощи.

Значит так. Я бы мог Вам помочь с построением диаграммы, но у меня нет ни времени, ни желания разбираться в Вашей программе, а потому условие будет таким: Вы выкладываете файл, содержащий в явном виде таблицу данных, по которым нужно построить диаграмму, и сопровождаете необходимыми пояснениями, я по этим данным строю диаграмму. Дальнейшая состыковка, оформление модуля и пр. - Ваша забота. Если устроит, то давайте.

R45H 10.06.2010 14:50

Цитата:

Сообщение от Vladimir_S (Сообщение 345187)
Значит так. Я бы мог Вам помочь с построением диаграммы, но у меня нет ни времени, ни желания разбираться в Вашей программе, а потому условие будет таким: Вы выкладываете файл, содержащий в явном виде таблицу данных, по которым нужно построить диаграмму, и сопровождаете необходимыми пояснениями, я по этим данным строю диаграмму. Дальнейшая состыковка, оформление модуля и пр. - Ваша забота. Если устроит, то давайте.

Разбираться в программе НЕ нужно, зачем? Достаточно открыть файл MAIN, откомпилировать и запустить. Появится меню, первая строка которого называется "Просмотр всего файла" - это и есть таблица данных. Модуль ModData содержит все глобальные переменные, из него нужно только принять во внимание тип rec и переменную S этого типа - при помощи этого в файл заносятся данные.
Но впринципе ладно, сейчас всё переделаю.

R45H 10.06.2010 15:05

Вложений: 1
Вот упрощённый вариант:

Vladimir_S 10.06.2010 15:28

Ну что сказать - нет, господин Редькин, не пойдет. Ни та, ни другая программы не запускаются, например, полный (первый вариант) ругается на неописанную переменную С в модуле Forma_vv, упрощенный вариант ругается еще на что-то, в общем, я повторяю условие: дайте мне В ЯВНОМ ВИДЕ файл, по которому нужно построить диаграмму. Я НЕ ХОЧУ запускать (и уж тем более отлаживать) вашу программу. Можно даже не в виде файла, а прямо здесь - колонка значений аргумента (или название, признак и т.п.) и колонка соответствующих значений функции. Всё.

R45H 10.06.2010 16:36

Ну что ж, хорошо. Вот пример данных:

║ № ║ M ║ Район ║ УрДох. ║ СтКор. ║

│ 1 │ 1 │ ленинский │ 30000 │ 4020 │
│ 2 │ 2 │ ленинский │ 30100 │ 4040 │
│ 3 │ 3 │ ленинский │ 30300 │ 4060 │
│ 4 │ 4 │ ленинский │ 30400 │ 4080 │
│ 5 │ 5 │ ленинский │ 30500 │ 4100 │
│ 6 │ 1 │ октябрьский │ 20000 │ 3000 │
│ 7 │ 2 │ октябрьский │ 20300 │ 3050 │
│ 8 │ 3 │ октябрьский │ 20700 │ 3120 │
│ 9 │ 4 │ октябрьский │ 20900 │ 3220 │
│ 10 │ 5 │ октябрьский │ 22150 │ 3500 │
│ 11 │ 1 │ первомайский │ 40000 │ 5000 │
│ 12 │ 2 │ первомайский │ 41000 │ 5100 │
│ 13 │ 3 │ первомайский │ 42000 │ 5200 │
│ 14 │ 4 │ первомайский │ 43000 │ 5300 │
│ 15 │ 5 │ первомайский │ 44000 │ 5400 │

Первый столбец - номер строки;
Второй столбец - месяц;
Третий столбец - уровень дохода на душу населения;
Четвёртый столбец - стоимость потреб. корзины.

Vladimir_S 10.06.2010 16:47

Так - вот это уже дело! Единственное - не хватает данных за май по Первомайскому району.
И еще вопрос (если знаете). Можно ли считать, что графический экран будет в VGA-моде, т.е. 640х480 пикселов? Если да - то мне было бы проще, нет - ничего страшного, сделаем под любой.

R45H 10.06.2010 16:56

Да, лучше сделать в VGA. В любом случае всегда можно переделать.

Vladimir_S 10.06.2010 17:04

Да, и еще вопрос: срок?

R45H 10.06.2010 17:19

Желательно до завтра.

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, время: 11:18.

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