Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Кафедра АСУ
Розрахункова робота
з дисципліни: «Проблемно – орієнтоване програмування»
на тему: «Побудова стовпцевих і кругових діаграм»
Зміст
Вступ 3
1. Огляд літератури 4
2. Формулювання задачі 5
3. Алгоритм розв'язання задачі 6
4. Програмні реалізації алгоритму 8
4.1 Загальна характеристика програми 8
4.2 Призначення 8
4.3 Вхідні дані 8
4.4 Результуючі дані 8
4.5 Структура програми 8
4.6 Таблиця основних ідентифікаторів 9
4.7 Середовище реалізації програми 9
5. Інструкція користувачеві програми 10
6. Контрольні приклади та аналіз результатів їх реалізації 11
Висновки 12
Література 13
ДОДАТКИ 14
Вступ
Тема моєї розрахункової є - "Побудова стовбцевих та кругових діаграм". Тема є дуже актуальна і ці діаграми можна використовувати для відображає змінення даних у часі або ілюструє порівняння елементів, для зображення долі кожної величина в загальному об'ємі. Програма будує діаграми за вхідними даними користувача і за цими даними будує і виводить діаграми на екран.
Діаграма — графічне зображення, що наочно у вигляді певних геометричних фігур показує співвідношення між різними величинами, які порівнюються
Кругові(секторні діаграми) — доволі широко поширений спосіб графічного представлення структури статистичної сукупності, так як ідея цілого дуже наглядно виражається кругом, який представляє всю сукупність. Відносна величина кожного значення зображується у вигляді сектора кругу. Площа сектора відповідає вкладу даного значення в суму значень. Цей вид діаграми зручно використовувати, коли потрібно показати долю кожної величини в загальному об'ємі.
Стовпчикова діаграма — абсолютно подібна до лінійного графіка, але один у ній для кожного часового зрізу буде показано стовпчик, що відповідатиме значенню послідовності. Діаграма відображає змінення даних у часі або ілюструє порівняння елементів.
1. Огляд літератури
Ознайомлення з діаграмами
Матеріал [2] використовувався для ознайомлення з діаграмами.
Довідка мови С
Матеріал у книзі [1] використовувався для визначення особливостей і лексикону певних засобів мови С, а також для аналізу корисних функцій і бібліотек, які можуть бути корисні при програмній реалізації поставлених задач.
Ознайомлення із бібліотекою dos.h
У матеріалі [3] розглядаються можливості бібліотеки dos.h, її функції. У нашому випадку матеріал використовувався для визначення інформації про запуск графічного інтерфейсу на екрані.
Ознайомлення із бібліотекою graphics.h
У матеріалах [4, 5, 6] розглядаються можливості бібліотеки graphics.h, ознайомлення із основними функціями цієї бібліотеки, перегляд прикладу програм із використанням даної бібліотеки. Ця інформація була потрібна для написання програми даного типу.
2. Формулювання задачі
Побудова стовпцевих і кругових діаграм. Дану програму можна класифікувати, як "Настільний додаток"(desktop application) ,"Графічна програма","Програма для візуального порівняння даних" в залежності від признаку класифікації. Для реалізації даного проекту потрібно використати бібліотеки - для відображення діаграм на екрані і графічну бібліотеку з потрібними графічними функціями. У даному проекті використовується графічна бібліотека graphics.h, і бібліотека dos.h.
3. Алгоритм розв'язання задачі
Загальний порядок роботи програми:
1. Запуск програми.
2. Ініціалізація змінних.
3. Введення даних.
4. Опрацювання даних в функції bar_diadram() для стовпцевих діаграм.
5. Опрацювання даних в circl_diagram() для кругових діаграм.
6. Запуск графічного режиму і виклик функції bar_diadram() і функції circl_diagram(), в головній функції main().
7. Виведення діаграм на екран.
8. Вихід із графічного режиму і очищення динамічної пам'яті.
Порядок роботи функції bar_diadram() :
1. Ініціалізація змінних функції.
2. Ввід даних про кількість елементів (змінна N).
3. Якщо кількість даних, які вводить користувач перевищує обмеження вводу, повернутись на нуль, у інших випадках прожити.
4. Виділення динамічної пам'яті відповідно до числа, яке ввів користувач.
5. Заповнення виділеної пам'яті, даними.
6. Побудова ліній координат.
7. Знаходження максимального числа, по якому визначаємо масштаб стовпців діаграми.
8. Встановлення кольору контурів і їх елементів.
9. Побудова стовпців діаграми.
Порядок роботи функції circl_diagram():
1. Ініціалізація змінних функції.
2. Визначення суми усіх вузлів даних і знаходження 1 градусу діаграми.
3. Встановлення контуру.
4. Визначення розмірів секторів і зафарбовування їх відповідними кольорами.
5. Встановлення кольору прямокутників, їх побудова і виведення даних, які відповідають за відповідний колір(для інформації про сектори).
Порядок роботи функції main():
1. Очищення екрану.
2. Запуск графічного режиму.
3. Виведення діаграм на екран.
4. При натисненні любої клавіші, завершення роботи.
5. Вихід із графічного режиму і звільнення динамічної пам'яті.
4. Програмні реалізації алгоритму
4.1 Загальна характеристика програми
Програма написана у середовищі програмування Turbo C, на мові програмування С. Розмір програмного файлу має 3.36 кілобайт, довжина коду 115 рядків. У програмі застосовується графічна бібліотека graphics.h. Назва програмного файлу GRAP_G.cpp.
4.2 Призначення
Програма призначена суто для побудови діаграм, за вхідними даними користувача.
4.3 Вхідні дані
Вхідними даними є числові дані, які вводить користувач. Кількість даних, які можна вводи`ти обмежена тим числом, яке користувач задав для кількості введених даних. Контроль введення ведеться функцією scanf().
4.4 Результуючі дані
Програма побудує дві діаграми - стовпцеву і кругову по вхідних даних. Стовпцева будується на осі [х, у], кількість стовпців залежить від кількості введених даних. І будується коло, яке розділяється на розділи відповідно до введених даних.
4.5 Структура програми
Програма місить декілька функцій. bar_diadram() відповідає за виведення прямокутних діаграм, і потім викликається у функції main(). circl_diagram() відповідає за розподіл кола на сектори, і задає кольори кожному сектору, і викликається у функції main(). Функція main() - це головна функція в якій викликаються усі інші функції, і приймаються вхідні дані.
4.6 Таблиця основних ідентифікаторів
Ідентифікатор змінної
Зміст у програмі
Тип змінної
Розмір змінної
байт
Спосіб формування
Призначення змінної
N
Інформаційний
int
4
Вхідна
Вказує кількість даних які буде вводити користувач і розподіл діаграм.
*data
Інформаційний
float
4
Вхідна
Для даних, що будуть вводитись.
color
Фізичний
int
4
Результуюча
Вказує початковий колір сектора.
4.7 Середовище реалізації програми
Дана програма написана в середовищі програмування Turbo C, мовою програмування С. Операційна система комп'ютера на якому написана програма - Windows XP Professional.
5. Інструкція користувачеві програми
Програма будує дві діаграми (стовпчикову і кільцеву) - за вхідними даними, які вводить користувач.
При запуску програми, програма виводить запит на кількість елементів, які буде вводити користувач:
" Please write data N = "
Після вводу кількості елементів, програма просить ввести самі елементи (їхня кількість повинна дорівнювати, кількості якій користувач ввів):
" Please write data "
Тепер програма виводить масштаб (в залежності від різниці розмірів усіх даних):
" Scale= "
Після масштабу програма виводить дві діаграми:
- стовпчикову на осі [х, у]
- кільцеву, біля якого розміщений опис кольорів - колір і які дані за ним закріплені (число)
Приклад роботи програми зображений:
Додаток 2
"Робота програми"
Програма працює на операціє на операційній системі Windows XP і Windows 7. На Windows 7 програма працює тільки на 32-розрядному типі операційної системи, тому що тут використовується стара графічна бібліотека graphics.h.
Для роботи програми у папку з проектом потрібно занести EGAVGA.BGI, який дається з самою програмою. Цей файл (EGAVGA.BGI) - це бібліотека, драйвер відео.
Програма працює в повно-екранному режимі.
6. Контрольні приклади та аналіз результатів їх реалізації
На рис 6.1 зображено приклад роботи програми. Тут зображено, що користувач ввів число "5", яке відповідає за кількість елементів які будуть вводитись.
Пізніше користувач ввів числа "41 20 55 59 9", на основі цих даних програма будує діаграми.
Надпис"Scale" показує масштабування стовпцевої діаграми.
Прямокутна діаграма масштабується відповідно до найбільшого стовпця (найбільшого числа,яке ввів користувач), опираючись на ці дані вона будує інші стовбці. Стовпці розташовуються на осі "х, у".
Кругова діаграма будується наступним чином, коло розділяється на відповідну кількість секторів (кількість секторів залежить від кількості елементів). Усі дані сприймаються як 100%, і відповідно до того яку частину від 100% кожне число займатиме, такий розмір сектора буде побудований. Кожен сектор замальовується відповідним кольором і збоку зображується який колір і яке число за ним закріплене.
/
Рис 6.1 Контрольний приклад програми
Висновки
Діаграми можна застосовувати для візуального зображення, порівняння і аналізу певних змін цифрових характеристик явища або наборів цифрових характеристик декількох явищ.
Програма локалізована суто для відображення діаграм, що забезпечує швидку обробку даних і відображення діаграм, а також легка у користуванні. Можливе вдосконалення програми в залежності від способу застосування.
Вдосконалення можна робити в любому напрямку де можуть використовуватись діаграми, так як це базова програма і її можна вдосконалити відносно під любі потреби.
Література
1. Шпак З. Я. Програмування мовою С Львів: Оріяна-Нова, 2006. - 432 с.
2.http://uk.wikipedia.org/wiki/%D0%94%D1%96%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0
3. http://buchavip.narod.ru/Spl/novice24.htm
4. http://malex13.narod.ru/c/c009.htm
5. http://nazachot.ru/referat/program_and_comput/1137-grafika-v-movax-programuvannya-vikoristannya-osnovnix-grafichnix-primitiviv.html
6. http://www.distedu.ru/mirror/_inform/server.inse.kiae.ru/school/node14.html
ДОДАТКИ
Додаток 1
Код програми:
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <stdio.h>
#include <string.h>
#define max_size 30
float *data; //для даних що будуть вводитися
int N; //кількість елементів масиву даних
int bar_diadram()
{
float max,temp;// максимальне значення і допоміжна змінна
int scale=1; // для максимального значення даних
int el1=50,el2=65,el3; // початкові дані для малювання стовпчиків
printf("Pleas write data N = ");
scanf("%d",&N)
if(N>max_size)return 0; // не перевищувати максимальну кількість даних
// зроблено щоб не вийти за межі
data = (float*)malloc(N*sizeof(float));// виділяємо динамічну память
printf("Please write data\n");
for(int i=0;i<N;i++)
scanf("%f",&data[i]); // дані для побудови діаграми
setcolor(15); //встановлюємо білий для малювання
// будуємо лінії координат
line(49,70,49,236);
line(49,70,47,78);
line(49,70,51,78);
line(49,236,(N+1)*15+70,236);
line((N+1)*15-8+70,234,(N+1)*15+70,236);
line((N+1)*15-8+70,238,(N+1)*15+70,236);
//-----------------------------------------------------
// знаходимо максимальне число і відповідно до нього масштаб
max=data[0];
for(i=1;i<N;i++)
if(max<data[i])max=data[i];
if(max>100)
{
temp=max;
do
{
temp/=10; // знаходимо масштаб так щоб дані були більші 100
scale*=10;
}while(temp>=100);
}
setcolor(4);
outtextxy(35,70,"X");
outtextxy((N+1)*15-8+70,242,"Y");
setcolor(8); // встановлюємо колір для контурів
printf(" scale=%d",scale);
// будуємо діаграму відповідно нашим даним
for(i=0;i<N;i++){
el3=200-int(data[i])/scale;
bar3d(el1,235,el2,el3+35,5,5);// побудова 3d прямокутника
el1+=15;
el2+=15;
}
return 0;
}
int circl_diagram()
{
int color=1; // початковий колір сектора
long float sum=0,k1=0,k2=0; // sum для знаходження скільки припадає на 1 градус
// k1 k2 - задають кути для секторів
long float t; // скільки припадає на 1 градус даних
for(int i=0;i<N;i++)
sum+=data[i]; // визначаємо суму усіх даних
t=360/sum; //знаходимо скільки на 1 градус
setcolor(15); // задаємо колір контура білий
for(i=0;i<N;i++){
setfillstyle(1,color); // колір яким буде сафарбований сектор
k2+=t*data[i]; // визначаємо радіус сектора
if(color<15)color++; else color=1; // змінюємо кольори секторів
sector(100,350,int(k1),int(k2),70,88); // будуємо сектор
k1=k2;
}
// виводимо збоку палітру кольорів і відповідні дані
// виведення обмежено 9 щоб не вийти за межі екрану
color=1;
int el1=0,m;
if(N<10)m=N; else m=9;
for(i=0;i<m;i++){
setfillstyle(1,color); // колір прямокутника
bar(200,257+el1,220,270+el1); // будує прямокутник
el1+=16;
if(color<15)color++; else color=1; // зміна кольору
gotoxy(30,17+i); //розміщення даних
printf("%f",data[i]);
}
if(m==9){
gotoxy(30,17+i);
printf("......");
}
//---------------------------------------------------------------------
return 0;
}
int main()
{
clrscr(); // очищаємо екран
// ініціалізація графічного режиму
int gdriver=DETECT, gmode, errorcode;
initgraph(&gdriver,&gmode,"");
//------------------------------------
bar_diadram();
circl_diagram();
getch();
closegraph(); // вихід із графічного режиму
free(data);
return 0;
}
Додаток 2
Робота програми:
/ /
/