Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplom_Sukhar v1.2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

5. Опис проектних рішень

5.1. Мова С++

Для розробки програми нами було обрано мову програмування С++. Дана мова програмування була обрана з декількох причин:

  • Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

  • Масштабованість. Мовою C++ розробляють програми для найрізноманітніших платформ і систем.

  • Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)

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

  • Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).

Незважаючи на всі її переваги, мова С++ має також ряд недоліків, які ми далі стисло розглянемо.

Наявність безлічі можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».

Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляції заголовних файлів (англ. Precompiled Headers).

Недостача інформації про типи даних під час компіляції (CTTI).

Мова C++ є складною для вивчення і для компіляції.

Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.

Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).

З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідкок вище згаданого, такий код вельми важко сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування.

Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування.

C++ (Сі-плюс-плюс) – мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.

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

С++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що займаються мовою С++ в її сучасному вигляді і що направляють комітету зі стандартизації С++ поради з її поліпшення, – це Boost. Наприклад, один з напрямів діяльності цієї групи – вдосконалення можливостей мови шляхом додавання в неї особливостей метапрограмування.

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

Проте (за станом на час написання цієї статті) серед компіляторів С++ все ще продовжується битва за повну реалізацію стандарту С++, особливо в області шаблонів – частини мови, зовсім недавно повністю розробленій комітетом стандартизації.

Одним із каменів спотикання у цьому питанні є ключове слово export, що використовується також і для розділення оголошення і визначення шаблонів.

Першим компілятором, що підтримав export в шаблонах, став Comeau C++ на початку 2003 року (п'ять років після виходу стандарту). У 2004 році бета-версія компілятора Borland C++ Builder X також почала його підтримку.

Обидва цих компілятора засновані на зовнішньому інтерфейсі EDG. Інші компілятори, такі як Microsoft Visual C++ або GCC, взагалі цього не підтримують. Ерб Саттер (Herb Sutter), секретар комітету із стандартизації Сі++, рекомендував прибрати export з майбутніх версій стандарту унаслідок серйозних складнощів в повноцінній реалізації, проте згодом остаточним рішенням було вирішено його залишити.

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

5.2. С++Builder

Для розробки даної програми ми використовували середовище C++ Builder

C++ Builder (по-українськи зазвичай вимовляють [сі-плюс-плюс білдер]) – середовище швидкої розробки (RAD), що випускається компанією Codegear, дочірньою фірмою компанії Embarcadero (раніше Borland). Призначена для написання програм на мові програмування C++. C++ Builder об'єднує Бібліотеку візуальних компонентів і середовище програмування (IDE), написане на Delphi з компілятором C++. Цикл розробки аналогічний Delphi, але з істотними поліпшеннями, доданими в C++ Builder.[1] Більшість компонентів, розроблених в Delphi, можна використовувати і в C++ Builder без модифікації, але, на жаль, зворотне твердження не вірне. C++ Builder містить інструменти, які дозволяють здійснювати справжню візуальну розробку Windows-програм методом drag-and-drop, спрощуючи програмування завдяки WYSIWYG редакторові інтерфейсу, вбудованому в його середовище розробки.

Історія

C++ Builder спочатку створювалася тільки для платформи Microsoft Windows. Пізні версії, що містять, компонентну бібліотеку Borland, засновану на Qt, підтримують і Windows і Linux.

У 2003 Borland випустила C++ BUILDERX (CBX), написаний за допомогою тієї ж інфраструктури, що і Jbuilder, який при цьому був мало схожий на C++ Builder або Delphi. Цей продукт призначався для розробки великих програм для крупних підприємств, але комерційного успіху не досяг. В кінці 2004 року Borland оголосила, що продовжить розвиток класичного C++ Builder і об'єднає його з середовищем розробки Delphi, припинивши, таким чином, розробку C++ BUILDERX.

Опісля приблизно рік після цього оголошення, Borland випустила Borland Developer Studio 2006, який включав Borland C++ Builder 2006, що пропонував покращене управління конфігурацією і відладкою. Borland Developer Studio 2006 – єдиний повноцінний комплект, Delphi, що містить, C++builder і C#builder.

У 2007 Codegear випустила C++ Builder 2007, в якому реалізувала повну підтримку API Microsoft Windows Vista, збільшила повноту відповідності стандарту ANSI C++, прискорила розробку до 500 %, включила підтримку Msbuild, архітектури баз даних Dbx4 і «VCL для Web», підтримуючий AJAX. Підтримка API Microsoft Windows Vista включила додатки, спочатку оформлені в стилі Vista, і природну підтримку VCL для Aero і Vista Desktop. Codegear RAD Studio 2007 містить C++ Builder 2007 і Delphi. Також в 2007 Codegear «воскресила» марку «Turbo» і випустила дві «Turbo» версії C++ Builder: Turbo C++ Professional і Turbo C++ Explorer (безкоштовний), заснованих на Borland C++ Builder 2006.

В кінці 2008 року компанія Codegear випустила нову версію RAD Studio, до якої увійшли Delphi 2009 і С++ Builder 2009.Наступна версія, Codegear C++builder (кодове ім'я «Commodore»), володітиме підтримкою x86-64 і можливістю створювати природний x86-64 код.

6. ЕКОНОМІЧНА ЧАСТИНА

6.1.

6.2.

7. ОХОРОНА ПРАЦІ В ГАЛУЗІ

7.1. Заходи з охорони праці

ВИСНОВКИ

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ:

*http://uk.wikipedia.org/wiki

** Сценарій використання – Вікіпедія [Електронний ресурс]. Режим доступу: URL: http://uk.wikipedia.org/wiki/Сценарій_використання

*** Архітектура програмного забезпечення – Вікіпедія [Електронний ресурс]. Режим доступу: URL: http://uk.wikipedia.org/wiki/Архітектура_програмного_забезпечення

http://victoria.lviv.ua/html/ai/doc/ev-life.doc

ДОДАТОК А. ТАБЛИЦЯ – ПОРІВНЯЛЬНА ХАРАКТЕРИСТИКА МОДЕЛЕЙ КЛІТИННИХ АВТОМАТІВ

ДОДАТОК Б. ДІАГРАМИ ПРЕЦЕДЕНТІВ.

ДОДАТОКВ. МОДЕЛЬ ІНТЕРФЕЙСУ

ДОДАТОК Г. ВИХІДНІ КОДИ СТВОРЕНОЇ СИСТЕМИ

#include <stdio.h>//Підключення бібліотек

#include <stdlib.h>// Підключення бібліотек

void main()

{

printf("Vvedite razmer uchastka shkiru: "); // задається розмір матриці

int n;

scanf("%d", &n);

int** a = new int*[n];

int** b = new int*[n];

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

{

a[i] = new int[n];

b[i] = new int[n];

for (int j = 0; j < n; j++)

a[i][j] = 0

}

a[n/2][n/2] = -1;

for (int time = 1; true; time++)

{

printf("\ntime = %d\n", time);

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

{

for (int j = 0; j < n; ++j)

printf("%c", a[i][j] < 0 ? '@' : (a[i][j] == 0 ? '_' : '#'));

printf("\n");

}

printf("prodolgutj(y/n)? "); // Чи бажаєте ви побачить наступний відрізок часу

char ch;

scanf(" %c", &ch);

if (!(ch == 'y' || ch == 'Y')) break;

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

for (int j = 0; j < n; j++) \

{

if (a[i][j] == -6)

b[i][j] = 1; // клітина набула імунітет

else if (a[i][j] < 0)

b[i][j] = a[i][j]-1;

else if (a[i][j] == 4)

b[i][j] = 0; //клітина втратила імунітет

else if (a[i][j] > 0)

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

else {

//здорова клітина заражується від сусідніх(нижче)

b[i][j] = 0;

if (i-1 >= 0 && a[i-1][j] < 0 && rand()*2 > RAND_MAX)

b[i][j] = -1;

if (i+1 < n && a[i+1][j] < 0 && rand()*2 > RAND_MAX)

b[i][j] = -1;

if (j-1 >= 0 && a[i][j-1] < 0 && rand()*2 > RAND_MAX)

b[i][j] = -1;

if (j+1 < n && a[i][j+1] < 0 && rand()*2 > RAND_MAX)

b[i][j] = -1;

}

}

}

int** tmp = a;

a = b;

b = tmp;

}

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

{

delete[] a[i];

delete[] b[i];delete[] a; delete[] b; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]