Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування

Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 14.03.2013
Размер файла 69,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Міністерство освiти та науки України

Вінницький державний технічний університет

Інститут ІТКІ

Кафедра обчислювальної технiки

КУРСОВА РОБОТА

з дисципліни:

“Програмування”

Розробив:ст. гр. 3KC-01

Лук'яненко О.О.

Керівник: асистент

Черняк О. І.

Вiнниця 2002

Завдання до курсової роботи

Скласти програмну оболонку до заданої задачі, яка повинна містити меню з командами:

1. Редагування за допомогою текстового редактора NotePad вхідного файлу даних.

2. Запуск програми.

3. Вихід із програми.

4. Інформація про розробника програми.

Завдання: У файлі задані координати центрів і радіуси кіл. Вивести на екран кола, що перетинаються, окремим кольором виділити ті кола, площа яких більша за середню площу групи кіл що перетинаються.

Анотація

Під час виконання курсової роботи буде виконано розробку програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Програма включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою.

В ході роботи буде створено програмну оболонку вирішуваної задачі і створено метод для перевірки розробленої програми на вивід потрібних точок і проведення через них ламаної лінії, відрізки якої не перетинаються між собою.

Зміст

Завдання до курсової роботи.

Анотація.

Зміст.

Вступ.
Загальна структура роботи.
Розробка алгоритму виконання основного завдання.
Програмна реалізація основного алгоритмуз використанням засобів ООП.
Розробка допоміжних програмних засобів.
Висновки.
Список використаної літератури.
Додатки.
Вступ

Мова програмування С++ розвинулась із мови С, яка в свою чергу була створена на основі двох попередніх мов - ВСРL і В. Мова програмування ВСРL була створена в 1967 році Мартіном Ричардом як мова для написання компіляторів і програмного забезпечення операційних систем. Кен Томпсон передбачив передбачив багато можливостей в своїй мові В - копії ВСРL і використав В для створення ранніх копій операційної системи UNIX в Bell Laboratories в 1970 році. Мова програмування С була розвинута із В Деннісом Річчі в Bell Laboratories в 1972 році. С використовує багато важливих концепцій ВСРL і В, а також додає типи даних та інші особливості. С++ - розширений С - був розроблений Б`єрном Страуструпом на початку 80-х років в Bell Laboratories. С++ забезпечує можливість, що найважливіше, об`єктно-орієнтованого програмування. Це виявилось революційною ідеєю в світі програмного забезпечення. Об`єкти - це ефективні компоненти програмного забезпечення, що повторно використовуються, і в свою чергу моделюють елементи реального світу.

C++ - універсальна мова програмування, яка дозволяє зробити програмування приємнішим для серйозного програміста. С++ представляє свої гнучкі і ефективні засоби визначення нових типів, застосування яких значно полегшує та спрощує технологію програмування. Використовуючи визначення нових типів програміст може розділяти свою програму на простіші частини, які легше проконтролювати. Такий метод побудови програм часто називають абстракцією даних. Інформація про типи міститься в деяких об'єктах типів, визначених користувачем. Все, чим ми маніпулюємо в програмі, може розглядатися як об'єкт. Програмування із застосуванням таких об'єктів називають об'єктно-орієнтованим. В результаті раціонального використання цього методу одержуємо набагато коротші, доступніші для розуміння та легше контрольовані програми.

Загальна структура роботи

Текст програми, що виконує задачу, поставлену у завданні до курсової роботи розбитий на декілька файлів для спрощення сприйняття коду і модифікації:

ь main.cpp - функція main програми, що реалізує задачу курсової роботи.

ь Point.h - об'ява класу Point.

ь Menu.h - код програми, що реалізує основне меню програмного комплексу.

ь Kursova.cpp - реалізація завдання.

Вхідні дані програми знаходяться у файлах:

ь Point.dat - координати точок.

ь Names.txt - назви пунктів меню.

ь About.txt - інформацію про програму та її розробника.

Основу структури програмної реалізації завдання складає програма Menu.exe, з якої можна редагувати вхідні дані і запускати програму Kursova.exe, яка реалізує виконання завдання.

Розробка основного алгоритму виконання завдання на курсову роботу

Під час виконання курсової роботи проведено такі основні дії для виконання поставленої задачі. Для того щоб визначити десять точок, відстань від яких до центру екрана найменша, було використано формулу для визначення відстані між двома точками. Дана математична формула має такий вигляд:

де (x1, y1) - координати однієї точки, а (x2, y2) - координати іншої точки.

Відповідно до значень відстаней масив, яких містить координати точок упорядковувався таким чином, щоб координати які відповідають найменшій відстані розміщувались спочатку масива. Після цього з даного масиву брались лише перших десять членів. Новий масив спочатку упорядковувався по координаті х (перший стовпчик), а потім по координаті у (другий стовпчик). Даний упорядкований масив поміщався в цикл, який забезпечував проведення прямих АіВі із такими координатами:

Аі(хі-1, уі-1), Ві(хі, уі),

де і = 1, 2, 3, ...

У роботі потрібно провести сортування масиву даних. Сортування виконується з допомогою вкладеного циклу for. Якщо необхідна перестановка, то вона виконується трьома присвоєннями:

hold = a [ i ] ;

a [ i ] = a [ i + 1] ;

a [ i + 1 ] = hold ;

де додаткова змінна hold тимчасово зберігає одне із двох представлених значень.

Програмна реалізація основного алгоритму з використанням засобів об`єктно-орієнтованого програмування

Важливим моментом в С++ являється можливість визначити свій власний тип даних таким чином, щоб з ним було зручно і просто працювати. Як тільки новий тип визначений, він стає розширенням С++, і його можна використовувати як будь-який інший тип, в тому числі стандартний. Всі типи і класи в С++ рівноправні. Клас - це структури, які містять не тільки об'яви даних, а й функцій, що визначаються користувачем. Класи забезпечують приховування даних, гарантовану ініціалізацію даних, неявне перетворення типів для типів, визначених користувачем, динамічне завдання типу, контрольоване користувачем управління пам'яттю і механізмом перегрузки операцій.

Основними поняттями об'єктно-орієнтованого програмування є:

інкапсуляція;

наслідування;

абстракція;

поліморфізм.

Інкапсуляція полягає утому, що кожний клас має три рівні доступу до елементів:

public - рівень, дані на якому можуть бути використані будь-якою функцією;

protected - елементи цього рівня можуть бути використані функціями-членами даного класу або функціями-членами похідних класів;

private - елементи цього рівня можуть бути використані функціями-членами даного класу.

Дані рівні класів називають полями.

Наслідування полягає у тому, що деякі класи можуть бути створені на основі інших, шляхом введення додаткових елементів.

При цьому ті класи, на основі яких створені інші, називаються базовими, а ті, які будуються на основі базових - похідними, які створюються шляхом простого копіювання всіх елементів базових класів, тому при описі похідних класів вказуються тільки ті елементи, які є додатковими до базового класу. Похідний клас може мати декілька базових класів, а базовий - декілька похідних.

Абстракція полягає у використанні віртуальних функцій (функції, які об'являються в базовому класі, але в похідному класі можуть мати зовсім інше значення ). Віртуальна функція в базовому класі може не мати ніякого тіла, але в похідному повинна бути визначеною. Таким чином абстракція дозволяє, звертаючись до однієї і тієї ж функції в різних об'єктах, виконувати різні дії.

Поліморфізм - можливість перевизначення різних функцій та операцій. Поліморфізм полягає в тому, що, по-перше, будь-яку операцію або функцію, яка визначена стандартним чином, можна перевизначити всередині класу так, що вона виконуватиме зовсім інші дії, по-друге, може існувати одночасно багато різних функцій у класі з однаковим ім'ям, але з різною кількістю або типами параметрів.

Об'ява класів

С++ підтримує об'яву класів, які інкапсулюють члени. Члени класу - члени даних і функцфії-члени. В членах-даних зберігаються значення, які представляють стан екземплярів класу (тобто об'єктів які належать класу). Функції - члени встановлюють і перевіряють стан екземплярів класа, керуючи значеннями в членах даних. Загальний синтаксис об'яви базового класу в С++ має такий вигляд:

class className

{

public:

//відкриті члени даних

//відкриті функції члени

protected:

//захищені члени даних

//захищені функції члени

};

main ( )

{

className obj

obj.<ім'я функції>

}

Об'ява класа починається з ключового слова class, після якого слідує ім'я класу. Декларація членів класа заключається в пару фігурних дужок і закінчуються значком “крапка з комою”.

Функція, опис якої знаходиться в опису класу називається inline-функцією.

Але клас - це абстракктний набір правил, який існує тільки у вигляді потенційних можливостей. Для їх реалізації створюються об'єкти даного класу в пам'яті. Механізм створення об'єкту даного класу полягає у використанні спеціальної функції даного класу, яка називається конструктором класу.

Конструктор резервує в оперативній пам'яті необхідний простір, розбиває його на частини відповідно членам класу, а також присвоює даній області пам'яті ім'я.

Конструктор класу може бути заданий явно і неявно. Коли ми описуємо клас, то компілятор обов'язково додає неявну функцію конструктора, яку ми можемо перевизначити самі. Для цього необхідно записати функцію конструктор в області public. Конструктор має те ж ім'я,що й клас.

В об'єктно-орієнтованому програмуванні використовується таке поняття як дружні зв'язки. Тобто, коли один клас об'являє другом інший, то клас-друг має доступ до всіх членів класу, який об'явив його другом, через ім'я об'єкту.

Ми розглянули основні поняття об'єктно-орієнтованого програмування мовою С++.

Можливо у вас з'явиться підозра, що така специфікація програми за допомогою детальнішої системи типів призведе до збільшення вихідних текстів програми. В С++ програма, що описує типи параметрів функцій, використовує класи і т. д., звичайно набагато коротша еквівалентної С-програми, в якій ці засоби не використовуються.

В процесі розробки програми були створені та використані наступні класи для реалізації основного алгоритму:

Опис класів і об`єктів

class Point

рrivate область:

int X, Y - координати точки;

double Dis - відстань від центру екрана до даної точки;

public область:

Point() - конструктор класу, спеціальна функція-член класу, що ініціалізує дані-члени об`єкта цього класу;

void SetXY(int x,int y) - встановлення значень Х, Y;

int GetX() - функція, що повертає значення Х;

int GetY()- функція, що повертає значення Y;

double GetDis() - функція, що повертає значення Dis;

void Show() - функція, що виводить точку із координатами X, Y;

void Hide() - функція, що “ховає” непотрібні точки;

Розробка допоміжних програмних засобів

Щоб забезпечити спрощення роботи з програмою, що забезпечує реалізацію поставленої задачі було створено програму, що реалізує інтерфейсне меню, яке дає можливість запускати виконання основної програми, редагувати вхідні дані (з допомогою NotePad), отримати короткі відомість про розробника програми та відомості про те, що саме виконує дана програма - це пункт меню About. Під час створення програми меню було використано віртуальні функції та поліморфізм. Поліморфізм - дуже важлива можливість мови C++, яка дає можливість повторного використання коду та збільшує здатність програмних продуктів до розширення без значних змін коду.

Меню програми має такий вигляд:

Рис. 1.

де пункти меню Edit, Run, About, Exit виконують такі дії:

Ш Edit - забезпечує редагування файлу із вхідними даними;

Ш Run - запускає головну програму;

Ш About - забезпечує виведення інформації про розробника програми;

Ш Exit - виконує вихід із програми.

Графічне зображення результату за вхідними даними має вигляд:
Рис. 2.

В процесі розробки була використана важлива можливість мови С++ - спадковість, яка дає можливість повторного використання коду. В програмі, що забезпечує виконання поставленої задачі існує така ієрархія (усі класи Button1, Button2, Button3, Button4 успадковують клас Button)

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Опис класів і об`єктів

class Button

private область:

int x1, x2, y1, y2 - координати відповідно верхнього лівого краю кнопки, нижнього правого краю кнопки, лівого верхнього краю кнопки, нижнього правого краю кнопки.

char str[20] - масив типу char, в який записується текст;

public область:

void setparam (int X1, int Y1, int X2, int Y2, char *st) - функція ініціалізації даних класу.

void show(int tcolor,int bcolor) - функція для виводу на екран.

virtual void run()=0 - віртуальна функція, яка не виконує ніякої роботи.

class Button1:public Button

public об`єкти:

void run() - робоча функція.

class Button2:public Button

public об`єкти:

void run() - робоча функція.

class Button3:public Button

public об`єкти:

void run() - робоча функція.

class Button4:public Button

public об`єкти:

void run() - робоча функція.

class Menu

private об`єкти:

Button1 B1 - створюється об'єкт класу Button1.

Button2 B2 - створюється об'єкт класу Button2.

Button3 B3 - створюється об'єкт класу Button3.

Button4 B4 - створюється об'єкт класу Button4.

Button *masB[4] - масив вказівників типу Button.

int x,y - позиція виводу меню;

int numAct - номер активної кнопки.

void show() - функція показу кнопок.

void onLeft() - реакція на натиснення кнопки „вліво”.

void onRight() - реакція на натиснення кнопки „вправо”.

void onEnter() - реакція на натиснення кнопки „ввід”.

рublic об`єкти:

Menu(int X,int Y) - конструктор класу Menu.

void getmessage (int msg) - функція, що викликає відповідну реакцію під час управління меню клавішами.

Висновки

текстовий файл алгоритм програмний

В ході виконання курсової роботи розроблено програмний засіб, який реалізує зчитування координта точок з файлу, виводить на екран тільки десять із них і з`єднує їх ламаною лінією, відрізки якої не перетинаються між собою. Програма наділена графічним інтерфейсом, що спрощує роботу з програмою. Дана програма може бути використана для навчальних цілей та для допомоги у розв'язанні деяких планіметричних задач.

9. Список використаної літератури

Х. М. Дейтел, П. Дж. Дейтел, “Как програмировать на С++. Введение в объектно-ориентированое програмирование с использованием UML”, третье издание, “Издательство БИНОМ”, Москва, 2001.

Х. М. Дейтел, П. Дж. Дейтел, “Как програмировать на С”, “Издательство БИНОМ”, Москва, 2000.

Тимотти Монк, Стивен Поттс, “Borland C++ в примерах”, “Диалектика”, Минск, 1996г.

Н. С. Пискунов, “Справочник по висщей математики”, том 2, “Наука”, Москва, 1976.

Стивен Прата “Язык програмирования С. Лекции и упражнения”, “DiaSoft”, Киев, 2000.

Том Сван, “Освоение Borland C++ 4.5”, том 1, 2, “Диалектика”, Киев, 1996.

А. Д. Хомоненко, “Програмирование на С++”, “КОРОНА принт”, Санкт-Петербург, 1999.

Н. Шаммас, “Основы С++ и объектно ориентированого програмирования”, “Диалектика”, Киев, 1996.

Додатки

Додаток А
Лістинги програм

Lukianenko_main.cpp

#include <conio.h>

#include "menu.h"

void main()

{

clrscr();

textbackground(0);

Menu mnu(20,1);

_setcursortype(_NOCURSOR);

while (1)

mnu.getmessage(getch());

_setcursortype(_NORMALCURSOR);

}

Menu.h

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#include <process.h>

#include <string.h>

#define LEFT 75

#define RIGHT 77

#define ENTER 13

class Button

{

int x1,x2,y1,y2;

char str[20];

public:

void setparam(int X1,int Y1,int X2,int Y2,char *st);

void show(int tcolor,int bcolor);

virtual void run()=0;

};

void Button::setparam(int X1,int Y1,int X2,int Y2,char *st)

{

x1=X1;y1=Y1;

x2=X2;y2=Y2;

strcpy(str,st);

}

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:

void run();

};

void Button1::run()

{

spawnl(P_WAIT,"c:\\windows\\notepad.exe","notepad","point.txt",NULL);

}

class Button2:public Button

{

public:

void run();

};

void Button2::run()

{

spawnl(P_WAIT,"kursova.exe",NULL);

}

class Button3:public Button

{

public:

void run();

};

void Button3::run()

{

textbackground(7);

window(22,8,62,18);

clrscr();

FILE* fin=fopen("about.txt","r");

char str[80];

for (int i=0;i<4;i++){

gotoxy(1,i+2);

fgets(str,80,fin);

printf("%s",str);

}

fclose(fin);

getch();

textbackground(0);

window(1,1,80,25);

clrscr();

}

class Button4:public Button

{

public:

void run();

};

void Button4::run()

{

exit(0);

}

class Menu

{

Button1 B1;

Button2 B2;

Button3 B3;

Button4 B4;

Button *masB[4];

int x,y;

int numAct;

void show();

void onLeft();

void onRight();

void onEnter();

public:

Menu(int X,int Y);

void getmessage(int msg);

};

void Menu::show()

{

for (int i=0;i<4;i++)

if (i==numAct)

masB[i]->show(15,1);

else

masB[i]->show(0,7);

}

void Menu::onLeft()

{

numAct=(numAct==0)?3:(numAct-=1);

}

void Menu::onRight()

{

numAct=(numAct==3)?0:(numAct+=1);

}

void Menu::onEnter()

{

masB[numAct]->run();

}

void Menu::getmessage(int msg)

{

switch (msg){

case LEFT:

onLeft();

break;

case RIGHT:

onRight();

break;

case ENTER:

onEnter();

break;

};

show();

}

Menu::Menu(int X,int Y)

{ x=X;

y=Y;

numAct=0;

masB[0]=&B1;

masB[1]=&B2;

masB[2]=&B3;

masB[3]=&B4;

FILE* fin=fopen("names.txt","r");

char str[80];

for (int i=0;i<4;i++){

fgets(str,80,fin);

masB[i]->setparam(x,y,x+strlen(str)-2,y,str);

x=x+strlen(str);

}

fclose(fin);

show();

}

Classes.cpp

#include <math.h>

#include <graphics.h>

#include <stdio.h>

#include <iostream.h>

class Point

{

public:

Point (int x1=0, int y1=0);

int GetX();

int GetY();

void Show(int color);

protected:

int x, y;

};

class Circle: public Point

{

public:

Circle(Point &center, int r);

double Area();

int GetRadius();

int operator+(Circle &RHS);

void Show(int color=14);

int Distance(Circle &C);

void SetFlag();

int GetFlag();

protected:

int R, flag;

};

//Implementation:

Point::Point(int x1, int y1)

{

x=x1;

y=y1;

}

int Point::GetX()

{

return x;

}

int Point::GetY()

{

return y;

}

void Point::Show(int color)

{

setcolor(color);

circle(x, y, 2);

}

Circle::Circle(Point &center, int r):

Point(center.GetX(), center.GetY())

{

R=r;

flag=0;

}

void Circle::SetFlag()

{

flag=1;

}

int Circle::GetFlag()

{

return flag;

}

int Circle::Distance(Circle &C)

{

return sqrt(pow(x-C.GetX(),2)+pow(y-C.GetY(),2));

}

int Circle::GetRadius()

{

return R;

}

void Circle::Show(int color)

{

setcolor(color);

circle(x, y, R);

}

double Circle::Area()

{

return M_PI*pow(R,2);

}

int Circle::operator+(Circle &RHS)

{

int d=Distance(RHS);

if ((d>=GetRadius()+RHS.GetRadius())||

(abs(GetRadius()-RHS.GetRadius())>d))

return 0;

else return 1;

}

Main.cpp

#include "classes.cpp"

#include <graphics.h>

#include <fstream.h>

#include <values.h>

main()

{

char *datafile_name="circles.txt",

ch;

int grdr=DETECT, grmd;

int lines, r, x, y;

initgraph(&grdr, &grdr, "");

ifstream f(datafile_name, ios::binary);

if (!f)

{

cerr<<" Error opening the file "<<datafile_name;

cin.get();

return 1;

}

ch=f.get();

lines=1;

while(!f.eof())

{

if (ch=='\n')

lines++;

ch=f.get();

}

f.close();

Circle **circles=new Circle *[lines];

f.open(datafile_name);

for (int i=0; i<lines; i++)

{

f>>ch;

while (ch!='=')

f>>ch;

f>>x;

f>>ch;

while (ch!='=')

f>>ch;

f>>y;

f>>ch;

while (ch!='=')

f>>ch;

f>>r;

circles[i]=new Circle(Point(x, y), r);

}

for (i=0; i<lines; i++)

{

circles[i]->Show();

}

cin.get();

cleardevice();

int count=0;

for (i=0; i<lines-1; i++)

for (int j=i+1; j<lines; j++)

if ((*circles[i])+(*circles[j]))

{

circles[i]->SetFlag();

circles[j]->SetFlag();

count++;

}

long double average=0;

for (i=0; i<lines; i++)

if (circles[i]->GetFlag())

average=average+circles[i]->Area();

average=average/count;

for (i=0; i<lines; i++)

{

if (circles[i]->GetFlag())

circles[i]->Show(12);

if ((circles[i]->Area()>average)&&(circles[i]->GetFlag()))

circles[i]->Show(15);

}

cin.get();

closegraph();

return 0;

}

Додаток Б

Файли вхідних даних
Circles.txt
circle1: x=100, y=100, r=40
circle2: x=150, y=150, r=70
circle3: x=200, y=200, r=80
circle4: x=320, y=350, r=60
circle5: x=350, y=310, r=75
circle6: x=320, y=350, r=80
circle7: x=370, y=380, r=75
About.txt
Copyright (C) 2002 by Olexandr Lukianenko
student group 3KC-01
VSTU
"This program shows circles
that had been written in file,
and connects only five, distances from which
to the center of the screen are minimum"
Names.txt
Edit
Run
About
Exit
Размещено на Allbest.ru

Подобные документы

  • Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.

    курсовая работа [123,3 K], добавлен 14.03.2013

  • Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.

    курсовая работа [98,0 K], добавлен 06.05.2014

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.

    курсовая работа [117,8 K], добавлен 14.03.2013

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.