Створення програми на мові С++
Створення інтерфейсної частини на мові С++, що запускає на виконання виконуваний файл основного модуля. Розробка алгоритму програми для визначення, чи перетинаються два відрізка трикутників. Розробка допоміжних програмних засобів. Лістинг програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 12.04.2009 |
Размер файла | 67,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Міністерство освіти і науки України
Вінницький державний технічний університет
Кафедра КС
КУРСОВА РОБОТА
з дисципліни технологія програмування
Тема: “Створення програми на мові С++”
Захищена:
“___” ________ 2001
на оцінку _________
Виконав: ст. гр. 2КС-00
Московко С.М.
Перевірив: Черняк А.І.
Вінниця 2001
ЗАВДАННЯ ДО КУРСОВОЇ РОБОТИ
У файлі задано координати вершин трикутників. Вивести на екран ці трикутники. Другим кольором виділити рівнобедрені трикутники. Третім - два трикутники, що перетинаються та мають найбільшу сумарну площу.
АНОТАЦІЯ
Курсова робота присвячена розробці програми на мові програмування С++. Програма розробляється з використанням компілятора Borland C++ 3.1, Вона використовує таки принципи ООП, як інкапсуляція, наслідування, скритність даних і т. ін. Розробляється алгоритм розв'язання поставленої в завданні задачі, інтерфейс програми.
ЗМІСТ
Вступ
Загальна структура курсової роботи
Розробка алгоритму виконання завдання
Програмна реалізація алгоритму
Розробка допоміжних програмних засобів
Висновки .
Список літератури
Додаток
ВСТУП
Мова С++ розвилась з С, яка в свою чергу була створена на основі попередніх мов - BCPL і B. Мова С була розвинута з В Денісом Рітчі в Bell Laboratories і вперше реалізована на комп'ютері DEC PDP-11 в 1972 р. С використовує багато важливих концепцій BCPL і B, а також добавляє нові типи даних і інші засоби. Спочатку С набув широкої розповсюдженості як мова розробки операційної системи UNIX. Сьогодні фактично усі нові операційні системи написані на С або на С++. Протягом двох останніх десятиріч С стала доступною для більшості комп'ютерів. Вона незалежна від апаратних засобів. При ретельній розробці цій мові можна написати мобільні програми, які легко переносити на більшість комп'ютерів.
С++ - розширення С - був розроблений Б'ярном Страустрапом на початку 80-х років в Bell Laboratories. С++ забезпечує ряд властивостей, які “приводять в порядок” мову С, але, що більш важливо, вона забезпечує можливість об'єктно-орієнтованого програмування. Це явилось революційною ідеєю в світі програмного забезпечення. Об'єкти - це ефективні компоненти програмного забезпечення, які ефективно повторно використовуються, моделюють елементи реального світу. Об'єктно-орієнтовані програми легше розуміти, коректувати та модифікувати.
С++ - це гнучка мова, вона надає можливість програмувати і в стилі С, і в об'єктно-орієнтованому стилі, і в обох стилях одночасно.
ЗАГАЛЬНА СТРУКТУРА РОБОТИ
В курсовій роботі інтерфейс і основа частини виконуються в окремих файлах. Інтерфейсна частина запускає на виконання виконуваний файл основного модуля.
В склад проекту програми входять наступні файли:
MENU.cpp - програма інтерфейсної частини. Інтерфейс програми реалізований у вигляді меню.
New@.cpp - програма основної частини. Розв'язує поставлену в завданні задачу. Результат виводить в графічному вигляді.
Trea.txt -файл з координатами вершин трикутників.
Menuab.dat - файл з назвами кнопок інтерфейсної частини.
Notepad.exe- текстовий редактор для редагування вхідного файлу
About.txt - “О програме”.
Egavga.bgi - драйвер графічного режиму.
Схематично, взаємодію цих компонентів можна зобразити так:
Програма Menu.cpp - інтерфейсна частина - запускає на виконання виконуваний файл за допомогою функції system. Вона також дає можливість редагувати вхідні файли та текст програми new@.cpp. В якості редактора використовується редактор компілятора Borland C++ 3.1. Для цього виконують функцію system, наприклад, так:
system(“bc.exe new@.cpp”);
для вдалого виконання цієї операції шлях до файлів компілятора повинен бути вказаним у файлі autoexec.bat або програма, редагований файл і компілятор повинні знаходитись в одному каталозі.
Файл trea.txt містить координати вершин трикутників. Кількість вершин трикутників частково обмежена до 1000.
РОЗРОБКА АЛГОРИТМУ ВИКОНАННЯ ЗАВДАННЯ
Для розв'язання поставленої задачі будемо проглядати по черзі кожен трикутник і дивитись, чи він не перетинається з іншим трикутником. Якщо перетинається, то змінюємо колір обох трикутників. Щоб визначити, чи перетинаються трикутники треба перевірити, на перетин кожну сторону трикутника з кожною стороною іншого трикутника. Якщо хоча б одна сторона першого трикутника перетинається з хоча б одною стороною другого трикутника, то фігури перетинаються.
Отже, задача зводиться до визначення, чи перетинаються два відрізка. Визначити це можна наступним чином.
Складемо рівняння прямих обох відрізків у вигляді ax + by +c. Таким чином, ми отримаємо коефіцієнти двох прямих для рівнянь:
a1*x + b1*y + c1 для одного відрізка і a2*x + b2*y + c2 - для іншого.
Далі підставляємо координати кінців другого відрізка в рівняння для прямої першого і координати кінців першого в рівняння прямої другого відрізка і визначаємо значення виразу рівняння. Якщо для обох кінців кожного відрізка отримали величини різні за знаком, то відрізки перетинаються, в протилежному випадку - ні.
Визначити коефіцієнти a, b і c рівняння прямої можна наступним чином. Нехай, в нас є координати двох точок прямої (в нашому випадку це координати кінців відрізка, сторони фігури) (x1, y1) і (x2, y2).
Тоді коефіцієнти визначаються так:
a = y2 - y1,
b = x1 - x2,
c = x2*y1 - x1*y2.
Тобто, нехай в нас є два відрізка AB і CD. Координати кінців відрізків наступні: A(x1, y1), B(x2, y2), C(x3, y3) і D(x4, y4).
Для визначення, чи вони перетинаються, складаємо рівняння прямих:
a1 = y2 - y1, a2 = y4 - y3,
b1 = x1 - x2, b2 = x3 - x4,
c1 = x2y1 - x1y2, c2 = x4y2 - x3y4.
Далі визначаємо значення цих виразів при підстановці точок іншого відрізка:
r1 = a1x3 + b1y3 + c1,
r2 = a1x4 + b1y4 + c1,
r3 = a2x1 + b2y1 + c2,
r4 = a2x2 + b2y2 + c2.
Тепер, якщо величини r1 і r2 протилежні за знаком, то це означає, що вершини C і D лежать по різні сторони прямої AB, а значить відрізок CD перетинає пряму, на якій лежить AB. Аналогічно, якщо r3 і r4 протилежні за знаком, то відрізок AB перетинає пряму CD, а отже, відрізки перетинаються.
Рівнобедрений трикутник - це трикутник, у якого хоча б дві сторони (два ребра) рівні. Знайдемо довжини трьох сторін трикутника і порівняємо їх між собою. Якщо відомі координати кінців відрізка (сторони), то довжину визначимо так:
,
Площу трикутників знайдемо за ф. Герона:
де р-півпериметр: , і a, b, c - сторони трикутника
де (x1, y1) і (x2, y2) - координати кінців відрізка.
Таким чином, отримуємо наступний алгоритм:
Зчитати координати вершин трикутників.
Порівняємо довжини сторін трикутників. Якщо хоча б дві рівні - трикутник рівнобедрений. Змінюємо його колір.
Візьмемо один трикутник, та почнемо порівнювати його сумарну площу з усіма іншими. І якщо ця сума більша за попередню, і ці два трикутники перетинаються, замінемо значення найбільшої сумарної площі. Так потрібно розглянути усі трикутники.
У двох трикутників, які лишили значення сумарної площі незмінним, змінимо значення кольору.
ПРОГРАМНА РЕАЛІЗАЦІЯ АЛГОРИТМУ
Об'єктно-орієнтоване програмування інкапсулює дані (атрибути) і функції (варіанти поведінки) в сукупності, які називаються об'єктами; дані і функції об'єкта тісно пов'язані між собою. Об'єкти володіють властивістю скритності інформації. Це означає, що хоча об'єкти і можуть знати, як зв'язуватися один з одним через добре визначений інтерфейс, їм зазвичай не дозволено знати, як реалізовані інші об'єкти - деталі реалізації скриті в середині самих об'єктів. В С одиницею програмування являється функція. В С++ одиницею програмування являється клас, на основі якого в кінцевому рахунку створюються об'єкти.
Класи - це типи, які визначаються програмістом. Кожен клас містить дані і набір функцій, які маніпулюють цими даними. Компоненти-дані називаються даними-елементами. Компоненти-функції класу називаються функціями-елементами.
Специфікатори доступу до елементу public (відкритий), private (закритий) і protected (захищений) використовуються для управління доступом до даних-елементів класу і функцій-елементів. По замовчуванню режим доступу для класів - private (закритий). Після кожного специфікатора режим доступу, визначений ним, діє до наступного специфікатора або до завершальної правої дужки (}) визначення класу. Специфікатор public, private і protected можуть повторятись.
Закриті елементи класу можуть бути доступні тільки для функцій-елементів (і дружніх функцій) цього класу. Відкриті елементи класу можуть бути доступні для будь-яких функцій в програмі. Захищені елементи доступні для функцій-елементів цього класу і класу-спадкоємця.
Після створення об'єкта його елементи можуть бути ініціалізовані за допомогою функції конструктор. Конструктор - це функція-елемент класу, яка має те ж саме ім'я, що й клас. Дані-елементи класу не можуть отримати початкові значення у визначені класу. Вони можуть бути ініціалізовані або пізніше, після створення об'єкту, або можуть отримати ці значення в конструкторі класу.
Дружні функції класу визначаються поза областю дії цього класу, але мають доступ до закритих (private) і захищених (protected) елементів класу. Дружні (friend) функції використовуються для підвищення продуктивності.
Наслідування - це спосіб повторного використання програмного забезпечення, при якому нові класи створюються з уже існуючих класів шляхом запозичення їхніх атрибутів і функцій і збагачення цими можливостями нових класів.
В нашій програмі використовуються наступні класи:
Point - базовий для всіх геометричних фігур в нашій програмі клас. Кожна геометрична фігура в нашій програмі має множину точок:
class point
{int x,y;
public:};
Наслідує цей клас(шляхом вкладення) - клас лінії Line, який “перетворює” фігуру на лінію з точками початку та кінця відрізка.
class Line
{point A;
point B;
double a,b,c;
public:};
А клас Line наслідує клас трикутника:
class Treangle
{Line AB;
Line BC;
Line AC;
int color;
public:};
РОЗРОБКА ДОПОМІЖНИХ ПРОГРАМНИХ ЗАСОБІВ
Інтерфейс програми реалізовано у вигляді меню. Меню забезпечує пункти для редагування вхідного файлу програми, тексту програми інформацію про розробника програми та вихід із програми. Меню розроблене за допомогою стандартних бібліотечних функцій компілятора Borland C++ 3.1. Назви кнопок зчитуються з файлу menuab.dat.
Вигляд вікна про розробника наступний:
ВИСНОВКИ
В курсовій роботі було розроблено програму на мові програмування С++. Програма розроблена з використанням компілятора Borland C++ 3.1 за методами об'єктно-орієнтованого програмування. Вона використовує такі принципи ООП, як інкапсуляція, наслідування, дружні функції, скритність даних і т. ін. Було розроблено алгоритм розв'язання поставленої в завданні задачі, інтерфейс програми тощо.
СПИСОК ЛІТЕРАТУРИ
1. Б.В. Керниган, Д. М. Ритчи, “Язык С”.
2. Б'ярн Страустрап, “Введения в язык Си++”, 1995 р.
3. Громов Ю.Ю., Титаренко С.І., “Программирование на языке С”, учебное пособие. - Тамбов, 1995 р.
4. Джесс Либерти “Освой самостоятельно С++ за 21 день.”
ДОДАТОК
Лістинг “New@.cpp”
#include <fstream.h>
#include <math.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <stdio.h>
class point
{int x,y;
public:
point (){};
point (int setX,int setY){x=setX;y=setY;};
void SetX(int setX){x=setX;};
void SetY(int setY){y=setY;};
int GetX(){return x;};
int GetY(){return y;};};
class Line
{point A;
point B;
double a,b,c;
public:
Line(){};
void SetLine(point setA,point setB){A=setA;B=setB;SetABC();};
double Length(void);
int GetXA(){return A.GetX();}
int GetYA(){return A.GetY();}
int GetXB(){return B.GetX();}
int GetYB(){return B.GetY();}
void SetABC();
double GetA(){return a;}
double GetB(){return b;}
double GetC(){return c;}
int Peresech(Line L);};
double Line::Length(void)
{double dX=B.GetX()-A.GetX();
double dY=B.GetY()-A.GetY();
return(sqrt(dX*dX+dY*dY));}
void Line::SetABC()
{a=B.GetY()-A.GetY();
b=A.GetX()-B.GetX();
c=B.GetX()*A.GetY()-A.GetX()*B.GetY();}
int Line::Peresech(Line L)
{if((GetA()*L.GetXA()+GetB()*L.GetYA()+GetC()>0&&
(GetA()*L.GetXB()+GetB()*L.GetYB()+GetC()<0))||
((GetA()*L.GetXA()+GetB()*L.GetYA()+GetC()<0)&&
(GetA()*L.GetXB()+GetB()*L.GetYB()+GetC()<0)))
return 1;
else return 0;}
class Treangle
{Line AB;
Line BC;
Line AC;
int color;
public:
Treangle(){};
Treangle(point setA,point setB,point setC);
int GetColor(){return color;}
void SetColor(int setColor){color=setColor;}
int Ravnobedrenost(void);
double Square(void);
void Draw(void);
int Peretin(Treangle T);};
Treangle::Treangle(point setA,point setB,point setC)
{AB.SetLine(setA,setB);
BC.SetLine(setB,setC);
AC.SetLine(setA,setC);}
Treangle::Ravnobedrenost(void)
{if(AB.Length()==BC.Length()||
BC.Length()==AC.Length()||
AB.Length()==AC.Length())
return(1);
else
return(0);}
double Treangle::Square(void)
{double p=(AB.Length()+BC.Length()+AC.Length())/2;
return(sqrt(p*(p-AB.Length())*(p-BC.Length())*(p-AC.Length())));}
int Treangle::Peretin(Treangle T)
{Line X,Y;
for (int storona=0;storona<3;storona++)
{if (storona==0) X=AB;
else if(storona==1) X=BC;
else if(storona==2) X=AC;
for (int storona2=0;storona2<3;storona2++)
{if (storona2==0) Y=T.AB;
else if (storona2==1) Y=T.BC;
else if (storona2==2) Y=T.AC;
if (X.Peresech(Y)==1&&Y.Peresech(X)==1)
return 1;}}
return(0);}
void Treangle::Draw(void)
{setcolor(GetColor());
line(AB.GetXA(),AB.GetYA(),AB.GetXB(),AB.GetYB());
line(BC.GetXA(),BC.GetYA(),BC.GetXB(),BC.GetYB());
line(AC.GetXA(),AC.GetYA(),AC.GetXB(),AC.GetYB());
// closegraph();}
int KolichestvoTreugolnikov(void)
{char *FileName="a:\\trea.TXT";
char buf;
int kolichTochek=0;
int kolichTreugolnikov;
ifstream f(FileName);
if(f==0)
{ cout << "File not found " << FileName << endl;
getch();
return(0);}
do{
buf=f.get();
if(buf=='(') kolichTochek++;
} while(f.eof()==0);
f.close();
return (kolichTochek/3);}
int main (void)
{clrscr();
int kolichTreugolnikov=KolichestvoTreugolnikov();
Treangle *tre=new Treangle[kolichTreugolnikov];
int i,j,maxI,maxJ;
double maxSquare;
int gdriver = DETECT,gmode;
int kordinatsX[1000],kordinatsY[1000];
char *FileName="a:\\trea.TXT";
ifstream ff(FileName);
for (i=0;i<kolichTreugolnikov*3;i++)
{ff.ignore(50,'('); ff >> kordinatsX[i];
ff.ignore(50,','); ff >> kordinatsY[i];}
initgraph(&gdriver,&gmode,"\\");
for (i=0;i<kolichTreugolnikov;i++)
{point A(kordinatsX[3*i],kordinatsY[3*i]);
point B(kordinatsX[3*i+1],kordinatsY[3*i+1]);
point C(kordinatsX[3*i+2],kordinatsY[3*i+2]);
tre[i]=Treangle(A,B,C);}
for (i=0;i<kolichTreugolnikov;i++)
{tre[i].SetColor(1);
for (j=i+1;j<kolichTreugolnikov;j++)
{if(tre[i].Square()+tre[j].Square()>maxSquare&&tre[i].Peretin(tre[j])==1)
{maxSquare=tre[i].Square()+tre[j].Square();
maxI=i;
maxJ=j;}}
if (tre[i].Ravnobedrenost()==1)
tre[i].SetColor(2);
cout <<tre[i].Square()<<endl;}
tre[maxI].SetColor(3);
tre[maxJ].SetColor(3);
cout <<endl<<tre[maxI].Square()<<endl;
cout <<tre[maxJ].Square();
for (i=0;i<kolichTreugolnikov;i++)
{tre[i].Draw();}
getch();
return (0);}
Лістинг “menu.cpp”
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<process.h>
#define LEFT 75
#define RIGHT 77
#define DOWN 13
class Button
{int x1;
int y1;
int x2;
int y2;
char str[80];
public:
void setparam(int xx1,int yy1,int xx2,int yy2,char *sstr);
virtual void run(void)=0;
void show(int tcolor, int bcolor);};
void Button::setparam(int xx1,int yy1,int xx2,int yy2,char *sstr)
{x1=xx1;
y1=yy1;
x2=xx2;
y2=yy2;
strcpy(str,sstr);}
void Button::show(int tcolor,int bcolor)
{textcolor(tcolor);
textbackground(bcolor);
window(x1,y1,x2,y2);
clrscr();
gotoxy(1,1);
printf("%s",str);};
class Button1:public Button
{public:
virtual void run(void);};
class Button2:public Button
{public:
virtual void run(void);};
class Button3:public Button
{public:
virtual void run(void);};
class Button4:public Button
{public:
virtual void run(void);};
class Button5:public Button
{public:
virtual void run(void);};
void Button1::run(void)
{char str[80];
FILE *fin=fopen("About.txt","r");
textbackground(0);
window(17,6,50,19);
clrscr();
textbackground(11);
textcolor(15);
window(15,5,48,18);
clrscr();
for(int i=0;i<11;i++)
{fgets(str,80,fin);
gotoxy(1,1+i);
cputs(str);}
getch();
textbackground(0);
clrscr();
fclose(fin);};
void Button2::run(void)
{spawnl(P_WAIT,"\\NEW@.exe","Program",NULL);}
void Button3::run(void)
{spawnl(P_WAIT,"c:\\BC\\BIN\\bc.exe","BC","\\NEW@.cpp",NULL);}
void Button4::run(void)
{spawnl(P_WAIT,"a:\\notepad.exe","notepad","\\trea.txt",NULL);}
void Button5::run(void)
{textbackground(0);
window(1,1,80,25);
clrscr();
exit(0);}
class Menu
{int x,y;
Button *mas[5];
Button1 butt1;
Button2 butt2;
Button3 butt3;
Button4 butt4;
Button5 butt5;
int numberAct;
int ActTcolor,ActBcolor,PasTcolor,PasBcolor;
void onLEFT(void);
void onRIGHT(void);
void onDOWN(void);
void show(void);
public:
Menu(int xx,int yy);
void getMessage(int msg);};
void Menu::onLEFT(void)
{numberAct=(numberAct==0)? 4:(numberAct-=1);};
void Menu::onRIGHT(void)
{numberAct=(numberAct==4)? 0:(numberAct+=1);};
void Menu::onDOWN(void)
{mas[numberAct]->run();};
void Menu::show(void)
{window(1,1,80,1);
textbackground(11);
clrscr();
for(int i=0;i<5;i++)
if (i==numberAct)
mas[i]->show(ActTcolor,ActBcolor);
else
mas[i]->show(PasTcolor,PasBcolor);
window(1,2,80,24);
textbackground(1);
clrscr();
textbackground(11);
textcolor(0);
window(1,25,80,25);
clrscr();
gotoxy(3,1);
textcolor(15);};
void Menu::getMessage(int msg)
{switch(msg)
{case LEFT:
onLEFT();
show();
break;
case RIGHT:
onRIGHT();
show();
break;
case DOWN:
onDOWN();
show();}};
Menu::Menu(int xx,int yy)
{x=xx;
y=yy;
numberAct=0;
mas[0]=&butt1;
mas[1]=&butt2;
mas[2]=&butt3;
mas[3]=&butt4;
mas[4]=&butt5;
ActTcolor=15;
ActBcolor=0;
PasTcolor=0;
PasBcolor=11;
FILE *fin=fopen("\\menuab.dat","r");
char str[80];
for(int i=0;i<5;i++)
{fgets(str,80,fin);
mas[i]->setparam(x,y,x+strlen(str),y+2,str);
x+=strlen(str)+1;}
fclose(fin);
show();};
void main()
{textbackground(0);
clrscr();
Menu mnu(3,1);
while(1)
mnu.getMessage(getch());};
Результат виконання «New@.exe»
Подобные документы
Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Створення двух файлів В1 і В2 з шести двоцифрових цифр з введенням в довільному порядку цифр з клавіатури із записуванням парних цифр в файл В3, а непарних - у файл В4. Процес розробки програми за допомогою мови "Асемблер". Блок-схема алгоритму задачі.
курсовая работа [37,6 K], добавлен 26.11.2011Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.
курсовая работа [2,9 M], добавлен 05.12.2012Розробка програми реєстрації і автоматизованого створення звіту на рік по викраденим машинам. Математична модель задачі, структура зберігаючих даних. Створення алгоритмів основної програми на мові Turbo Pascal і процедур Vvod і Red. Вихідний код програми.
курсовая работа [25,4 K], добавлен 07.10.2010Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Розробка та налагодження програми "Заробітна плата" на мові високого рівня С++ для комп'ютерів з операційною системою Windows 7. Текстуальний опис алгоритму. Створення UML-діаграми та обробка інформації з бази даних. Інструкція по роботі з програмою.
курсовая работа [698,4 K], добавлен 14.10.2012Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
курсовая работа [14,1 K], добавлен 08.08.2009Проектування програми керування мікропроцесорним пристроєм світлової індикації на мові С та Assembler. Розробка алгоритму роботи програми, структурної та електричної принципових схем. Здійснення комп’ютерного моделювання для перевірки розроблених програм.
курсовая работа [710,7 K], добавлен 04.12.2014Алгоритмічна мова програмування універсального призначення Turbo Pascal. Розробка і створення програми для гри "Шибениця". Алгоритм функціонування программи, блок-схема алгоритму. Використання додаткових модулів Graph та Crt у процессі створення програми.
курсовая работа [2,0 M], добавлен 23.06.2010Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.
дипломная работа [608,3 K], добавлен 26.10.2010