Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математики 1 курс 2 семестр.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
1.8 Mб
Скачать

4. Вибір структур даних

Для програми обираються такі структури даних, складність використання яких не перевищує складності самої задачі. Тобто в одному разі (коли задача має невелику кількість даних) можна обмежитися використанням простих типів даних, а коли мова йде про обробку великої кількості якимось чином пов’язаних даних, слід користуватися груповими типами даних (структурами).

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

5. Розробка програми

Згідно до складності задачі та вимог до її програмної реалізації досить неважко обрати мову програмування для реалізації розробленого алгоритму. Це може бути мова програмування з якою розробник має певний досвід роботи або така, що за логікою задачі найбільш їй відповідає (проблемно-орієнтована). Взагалі раціонально обирати такі мови, що забезпечуються Інструментальним Середовищем Розробника та відповідають сучасним вимогам (мови процедурні, об’єктно-орієнтовані).

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

Важливим питанням є також виправлення недосконалостей.

Можна виділити наступні класи недосконалості:

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

Приклад:

P+Q Т

T*T+T-T R

вдосконалюючи одержимо

P+Q T

T*T R

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

Приклад:

P+Q R

R*R R

вдосконалюючи одержимо

P+Q T

T*T R

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

Приклад:

P+Q TI

P+Q T2

Tl * Т2 R

вдосконалюючи одержимо

P+Q TI

TI*TI R

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

Приклад:

(P+Q)*(P+Q) R

вдосконалюючи одержимо

Р+Q T

T*T R

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

Приклад:

P+Q TI

TI 2 R

вдосконалюючи одержимо

(P+Q) 2 R

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

Приклад:

P*P+2*P*Q+Q*Q R

вдосконалюючи одержимо

(P+Q) 2 R

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