# data[].attributes.body
Експорт об’єктів з однієї бази даних в іншу.

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

Огляд

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

Експортуйте об’єкти бази даних, якщо потрібно виконати одне з таких завдань:

скопіювати структуру таблиці до іншої бази даних, щоб швидко створити нову таблицю;

скопіювати структуру й макет форми або звіту до іншої бази даних, щоб швидко створити новий відповідний об’єкт;

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

Зауважте, що експортувати об’єкт до іншої бази даних – це майже те саме, що відкрити другу базу даних та імпортувати об’єкт із першої. Між імпортом і експортом об’єктів баз даних в Access є дві ключові відмінності:

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

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

Шукаєте відомості про імпорт об’єктів до бази даних Access? Див. статтю Імпорт об’єктів бази даних у поточну базу даних Access.

# data[].attributes.body
Сутність імпорту та експорту об’єктів.

На практиці досить часто доводиться одночасно працювати не з одним файлом БД, а з кількома, у тому числі розміщеними в Інтернеті. У таких випадках виникає потреба в обміні даними (об’єктами) між БД, створеними за допомогою однієї СУБД (наприклад, Access 2016), різних СУБД (наприклад, Access і Paradox). Окрім того, інколи буває потрібно обмінятися даними між Access та іншими програмами пакета Windows, наприклад Word-, Excel-, Outlook-, HTML- і XML-документами. Найпростішим способом обміну об’єктами між Windows-програмами є копіювання об’єктів і вставлення за допомогою буфера обміну. Наприклад, у документ, створений у текстовому процесорі Word, можна додати рисунок, створений у графічному редакторі Paint. У системі Access 2016 для обміну об’єктами здійснюють спеціальні операції, що отримали назву імпорту й експорту. Крім того, для отримання даних із інших зовнішніх джерел системою Access підтримується технологія зв’язування, яка тут не розглядається. У процесі імпортування об’єкти перетворюються у формат Access 2016 і розміщуються в новому об’єкті, а в об’єкті-джерелі залишаються без змін. Наприклад, нова і початкова таблиці існують незалежно одна від одної. Технології імпорту з різних систем (Word, Excel та ін.) відрізняються одна від одної. Але загальний порядок імпортування однаковий для всіх систем.
Для отримання об’єктів у  БД із зовнішніх джерел в  Access 2016 використовується технологія імпорту, а  для передавання об’єктів в  інші застосунки  — технологія експорту

За своїм змістом експорт є операцією, зворотною до імпорту. У процесі експортування здійснюється перенесення даних із об’єктів системи Access в іншу БД цієї системи, а також у зовнішні файли різних форматів. Під час експортування дані перетворюються у новий формат, а об’єкти-джерела залишаються незмінними. Оскільки загальні принципи імпортування й експортування всіх типів об’єктів БД ідентичні, далі розглядатимемо лише технологію та правила імпортування об’єктів із однієї БД Access 2016 в іншу БД Access 2016.

# data[].attributes.body
Запити з умовою. Групування запитів.

Умова подібна до формули. Це рядок, який може складатися з посилань на поля, операторів і констант. У програмі Access умови запитів також називають виразами.

Опис

>25 і <50 | Ця умова застосовується до числового поля, наприклад "Ціна" або "Кількість_наявних_одиниць". Вона дає змогу включити тільки записи, у яких поле "Ціна" або "Кількість_наявних_одиниць" містить значення більше 25 й менше 50.
DateDiff ("yyyy"; [День_народження]; Date()) > 30 | Ця умова застосовується до поля дати й часу, наприклад "День_народження". До результатів запиту буде включено лише записи, у яких кількість років між датою народження особи й сьогоднішньою датою більша 30.
Is Null | Цю умову можна застосувати до поля будь-якого типу, щоб відобразити записи, у яких поле має Null-значення.

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

У цій статті наведено кілька поширених умов. Ці умови згруповано за типом даних. Якщо наведені в цій статті приклади не відповідають вашим особливим вимогам, варто написати власну умову. Щоб зробити це, потрібно спочатку ознайомитися з повним списком функцій, операторів і спеціальних символів, а також синтаксисом виразів, які посилаються на поля та літерали.

Тепер розгляньмо, куди та як додавати умови. Щоб додати умови до запиту, відкрийте запит у режимі конструктора. Після цього визначте поля, для яких потрібно вказати умови. Якщо поле відсутнє в бланку, перетягніть це поле з вікна конструктора запитів до макета запиту або двічі клацніть це поле (якщо двічі клацнути поле, його буде автоматично додано до наступного пустого стовпця в макеті запиту). Нарешті введіть умови в рядку Критерії.

Щоб поєднати умови для різних полів у рядку Критерії, використовується оператор AND. Іншими словами, умови, указані в полях "Місто" та "День_народження", інтерпретуються так:

Місто = "Харків" AND День_народження < DateAdd (" yyyy "; -40; Date())

Перш ніж продовжити вивчення прикладів, візьміть до уваги таке:

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

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

# data[].attributes.body
Найпростіші запити мовою SQL у системі Access

Розглянемо порядок створення найпростішого запиту
на основі однієї таблиці УЧНІ за допомогою мови SQL.
Для цього в системі Access 2010 виконуємо команду
Створення  Конструктор запиту (непотрібний нам
список об'єктів БД можна закрити).

Щоб перейти до подання SQL, у групі Результати
натискаємо кнопку SQL чи в контекстному меню
вкладки запиту вибираємо Режим SQL.

Відкриється вікно Запит1, у
робочому полі якого висвітиться
оператор SELECT.

Він обов'язково використовується з оператором FROM
і має таку мінімальну загальну структуру:
SELECT <список імен полів>
FROM <таблиця>;
Найпростіші запити мовою SQL у Access

Якщо назва поля містить пропуски чи деякі
символи (слеш, знак запитання), то вона
обмежується з обох боків квадратними дужками:
[Ім'я користувача], [Чи була у ремонті?] тощо.

Після виконання інструкції

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

<ім'я таблиці.ім'я поля>,

тобто ім'я поля відокремлюється від імені таблиці
крапкою.
Найпростіші запити мовою SQL у Access

10
(11)

Відомо, що записи в таблиці не
повторюються. Проте коли виводяться
не всі поля таблиці, зміст деяких
записів може збігатися.

Наприклад, після виконання
інструкції
SELECT [Улюблений предмет]
FROM учні;
будуть виведені назви улюблених
предметів з усіх записів таблиці.

# data[].attributes.body
Призначення, основні поняття та терміни мови SQL.

Щоб описати набір даних за допомогою SQL, ви пишете оператор SELECT. Оператор SELECT містить повний опис набору даних, який потрібно отримати з бази даних. Ця дія включає такі дії:

таблиці, які містять дані;

зв’язки між даними з різних джерел;

поля або обчислення, на основі яких створюються дані;

умови, яким мають відповідати дані, що включаються в результат;

доцільність і спосіб сортування результатів.

SQL – це мова програмування для роботи з наборами фактів і зв’язками між ними. У програмах керування реляційними базами даних, як-от Microsoft Office Access, мова SQL використовується для роботи з даними. На відміну від багатьох мов програмування, мова SQL дуже проста. Подібно до інших мов програмування, SQL – це міжнародний стандарт, визнаний такими організаціями зі стандартизації, як ISO й ANSI.

Мовою SQL описуються набори даних, які можуть допомогти відповісти на запитання. Використовуючи SQL, потрібно застосовувати правильний синтаксис. Синтаксис – це набір правил, які забезпечують правильне поєднання елементів мови. Синтаксис SQL базується на синтаксисі англійської мови та має багато спільних елементів із синтаксисом Visual Basic for Applications (VBA).

Наприклад, ось як може виглядати проста інструкція SQL для отримання списку прізвищ з іменем Mary:

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

# data[].attributes.body
Поняття звіту. Автоматичне створення звіту.

MS Access має в своєму арсеналі декілька способів створення звітів. Найбільш простим з них є використання засобів автоматичного створення звітів.

Автозвіт – це звіт, що створюється автоматично на основі таблиці або запиту.

MS Access дозволяє автоматично створити звіти двох форматів: в стовпець та рядковий (стрічковий).

Для створення автозвіту необхідно:

1. На панелі об’єктів вікна лівою кнопкою миші клацнути по ярлику „Звіти” (рис. 12.1) і натиснути кнопку „Створити”. З'явиться діалогове вікно „Новий звіт”
2 . У списку діалогового вікна „Новий звіт”, потрібно виділити один з елементів: „Автозвіт: в стовпець” або „Автозвіт: стрічковий”.

Діалогове вікно „Новий звіт”

3. У нижній частині діалогового вікна міститься поле зі списком „Виберіть в якості джерела даних таблицю або запит” де знаходиться імена всіх таблиць і запитів, які можуть бути використані як джерело даних для звіту. Клацніть лівою кнопкою миші на кнопці із стрілкою для відкриття списку, а потім виділіть у списку потрібний елемент.

4. Натисніть кнопку „ОК”.

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

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

Для подальшого використання створеного звіту для майбутньої роботи, його необхідно зберегти. Для цього необхідно виконати команду „Файл”  „Зберегти”. В полі „Ім’я звіту” діалогового вікна „Збереження”, що з’явиться, необхідно увести потрібну назву і натиснути кнопку „ОК”.

# data[].attributes.body
Створення форм за допомогою простих засобів.

Створення форми одного елемента

1. В області переходів клацніть таблицю або запит із даними, які потрібно відобразити у формі.

2. На вкладці Створити у групі Форми натисніть кнопку Форма.

3. У програмі Access створиться форма, яка відобразиться в режимі розмічування. У режимі розмічування можна змінювати макет форми під час відображення в ній даних. Наприклад, можна настроїти розмір текстових полів відповідно до даних. Докладні відомості про подання форми наведено в статті, яке подання слід використовувати: подання макета або режим конструктора?

4. Щоб почати роботу з формою, перейдіть у режим форми.

На вкладці Основне у групі Подання натисніть кнопку Вигляд і виберіть пункт Режим форми.

Автоматичне створення підтаблиць

Якщо програма Access виявить таблицю, яка має зв’язок «один-до-багатьох» із таблицею або запитом, що використовувалися для створення форми, програма Access додасть до форми підтаблицю, створену на основі пов’язаної таблиці або запиту. Наприклад, якщо ви створите просту форму на основі таблиці «Клієнти», і між таблицями «Клієнти» та «Замовлення» існуватиме зв’язок «один-до-багатьох», у підтаблиці буде відображено всі записи таблиці «Замовлення», які мають відношення до поточного запису «Клієнти». Якщо ви вирішите не включати підтаблицю до форми, можна видалити підтаблицю, переключившись у режим розмітки, вибравши вікно табличного подання даних і натиснувши клавішу Delete.

У разі наявності кількох таблиць, які мають зв’язок «один-до-багатьох» із таблицею, що використовувалася для створення форми, програма Access не додаватиме таблиці даних до форми.

1. У формі відображаються відомості лише для одного запису.

2. У деяких випадках програма Access додає підтаблицю до відображення пов'язаних даних. Щоб отримати докладніші відомості, ознайомтеся з розділом Автоматичне створення підтаблиці.

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

# data[].attributes.body
Запити на змінення даних.

Запит на змінення даних — це запит, за допомогою якого в таблицю вносяться зміни. Можна не лише вибирати необхідні дані з таблиць, а й створювати з вибраних даних нову таблицю, змінювати дані в уже створених таблицях, додавати нові записи в створені таблиці, вилучати з таблиць записи. В Access існують різні типи запитів на змінення . Порядок створення запитів на змінення в режимі конструктора такий самий, як і порядок створення звичайних запитів на вибірку даних. Потім створений запит перетворюється на запит одного з перелічених типів. Далі розглянемо особливості розроблення запитів для створення нової таблиці та додавання записів у таблицю. За допомогою запитів для створення нової таблиці вибираються дані з однієї або кількох таблиць і з них формується нова таблиця. Вона може бути розміщена як у поточній БД, так і в іншій, ім’я якої вказується під час створення запиту цього типу. Нова таблиця не має зв’язку з тими таблицями, з яких вона створена. Отже, якщо в таблицях-джерелах відбулися зміни, то дані в ній автоматично не оновлюються.
Запити на додавання даних призначено для додавання нових записів у таблицю на основі опрацювання за певними критеріями даних, які вже є в раніше створених таблицях. Інколи для додавання всіх записів усіх полів із наявної таблиці в нову доцільніше скористатися командами Копіювати і Вставити. Записи можна додавати як у відкриту, так і в закриту таблицю. Якщо записи додаються в таблицю іншої БД, то слід вказати ім’я та маршрут файла цієї БД. Загальний порядок розроблення запитів такий: 1) створюється запит на вибірку, за допомогою якого формуються необхідні записи для додавання; 2) перетворюється запит на вибірку в запит на додавання; 3) вибирається таблиця, у яку додаватимуться записи; 4) зберігається й виконується запит.

# data[].attributes.body
Створення звіту за допомогою конструктора звітів.

1.     Загальні відомості про форми та їх створення

Форма Access – це об’єкт бази даних, за допомогою якого можна створити інтерфейс користувача для програми бази даних.

Створити форму в базі даних Access можна кількома способами, що пропонуються на вкладці Створення стрічки у групі Форми .

Створення форм

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

Швидким і зручним способом створення форм є використання Майстра форм.

Самостійне створення форми здійснюється за допомогою Конструктора форм або Пустої форми. У цих випадках розробник може використовувати елементи керування (кнопки, текстові вікна тощо), підключати макроси або писати програмні модулі VBA. При використанні різних варіантів створення форми є можливість включати до неї поля з різних таблиць і запитів.

Форма кількох елементів (також називається стрічковою) дозволяє відображати інформацію відразу з декількох записів. Ця форма подібна до таблиці, але надає більше можливостей з керування елементами, наприклад форматування тексту, додавання графічних об'єктів, кнопок та інших елементів керування. Створюється така форма командою Створення => Додаткові форми => Кілька елементів.

Розділена форма відображає дані у режимі таблиці і поданні форми одночасно. Найчастіше користувачу бази даних з інтерфейсом у вигляді форми потрібні додаткові засоби для швидкого пошуку необхідних даних (наприклад, сортування даних по полях, фільтрація даних). Розділена форма дозволяє вивести на екран форму разом з вихідною таблицею з можливістю використання додаткових засобів. Створюється така форма командою Створення => Додаткові форми => Розділена форма.

Форма навігації являє собою форму, що містить елемент навігації. Форми навігації особливо важливі для навігації в БД, що будуть опубліковані в Інтернеті, оскільки область навігації Access не відображається в браузері. Різні види конструювання форм навігації можна вибрати командою Створення => Навігація.

Форми можуть виводитись на екран в трьох режимах: Режим форми, Режим розмітки та Конструктор. Для переходу з одного режиму в іншій використовуються команди групи Вигляд.

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

Режим Конструктор дозволяє вносити зміни, я вимагають детального розгляду структури форми, наприклад, розділів Верхній колонтитул, Область даних та Нижній колонтитул. При внесенні змін у режимі Конструктор переглядати базові дані не можна. Корисними можливостями режиму Конструктор є: 1) можливість додавання різних елементів керування, таких як приєднані рамки об'єкта, розриви сторінок та діаграми; 2) змінення джерел для текстових полів без використання вікна властивостей; 3) змінення розміру розділів форми; 4) змінення певних властивостей форми, які не можна змінити у Режимі розмітки.

# data[].attributes.body
Запити з параметрами. Перехресні запити

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

Щоб визначити параметр, введіть у рядок "Умова відбору" замість конкретного значення ім'я або фразу, укладену в квадратні дужки ([]). Те, що укладено всередині квадратних дужок, Access розглядає як ім'я параметра. Воно виводиться в вікні діалогу при виконанні запиту, тому в якості імені параметра розумно використовувати змістовну фразу. У запиті можна задати

декілька параметрів; при цьому ім'я кожного з них має бути унікальним і інформативним.

Наприклад, потрібно створити параметричний запит для відображення процесорів вартістю до певної суми, їх найменування, ціни і телефону складу, де вони зберігаються (параметром є ціна товару).
< Попер |  ЗМІСТ |  Наст >
Запит з параметром (параметричний запит)Як правило, запити з параметром створюються в тих випадках, коли передбачається виконувати цей запит багаторазово, змінюючи лише умови відбору.Щоб визначити параметр, введіть у рядок "Умова відбору" замість конкретного значення ім'я або фразу, укладену в квадратні дужки ([]). Те, що укладено всередині квадратних дужок, Access розглядає як ім'я параметра. Воно виводиться в вікні діалогу при виконанні запиту, тому в якості імені параметра розумно використовувати змістовну фразу. У запиті можна задати декілька параметрів; при цьому ім'я кожного з них має бути унікальним і інформативним.Наприклад, потрібно створити параметричний запит для відображення процесорів вартістю до певної суми, їх найменування, ціни і телефону складу, де вони зберігаються (параметром є ціна товару).Перехресний запитПерехресний запит - особливий тип підсумкового запиту. Він дозволяє вивести обчислювані значення в перехресної таблиці, яка нагадує електронну.Для побудови перехресного запиту виконайте такі дії.У режимі конструктора сформуйте запит на вибірку.Змініть тип запиту на Перехресний (вкладка Робота з запитами, група Тип запиту).У нижній частині бланка запиту з'являться рядки "Групова операція" і "Перехресна таблиця" .У рядку "Перехресна таблиця" для кожного поля запиту виберіть одну з чотирьох установок: Заголовки рядків, Заголовки стовпців. Значення (виведене в осередках перехресної таблиці) або не відображається.Для перехресного запиту визначте поле (можна декілька) в якості заголовків рядків. Визначте одне (і тільки одне) поле, яке буде використовуватися в якості заголовків стовпців.

# data[].attributes.body
Запити з функціями і з полями, що обчислюються.

Загальні відомості про запити

Запит — один із основних об’єктів БД Access. Головне його призначення полягає у відборі потрібних даних із таблиць, їх опрацюванні та поданні користувачеві у зручній формі.

Запит застосовується також для змінення даних у БД. Створений запит можна зберігати з певним іменем і потім неодноразово виконувати. Якщо між першим і другим запусками запиту дані в таблицях змінилися, то в процесі другого його виконання будуть використовуватися оновлені дані. Запити класифікують за багатьма ознаками.

Класифікація запитів

Запити, за допомогою яких вибирають дані з однієї таблиці, називають однотабличними.

Запити, за допомогою яких вибирають дані з кількох таблиць, називають багатотабличними.

Простими називають запити, за якими вибирають дані за критерієм одного поля однієї таблиці.

Складними називають запити, за якими вибирають дані за критеріями кількох полів із кількох таблиць.

До однієї БД Access може бути розроблено кілька запитів. Кожен із них можна виконати в будь-який час, і кожен із них виконує чітко визначені функції. Запити можуть виконуватися самостійно, але найчастіше їх використовують як складові форм і звітів.

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

Разом із тим у Access використовуються й запити на змінення (оновлення даних) — запити, за допомогою яких здійснюється модифікування структури таблиць і змінення в них даних.

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

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

§  вибір даних із вказаних полів на основі заданих критеріїв;

§  упорядкування даних із таблиць за значеннями вказаних полів;

§  побудова нової таблиці або діаграми з отриманих даних;

§  опрацювання вибраних із таблиць даних за допомогою вбудованих функцій;

§  використання отриманих за допомогою запиту даних як джерела для інших запитів;

§  додавання даних, отриманих за допомогою запитів, до інших таблиць;

§  обмін даними з іншими БД, а також текстовим редактором Word і таблицями Excel.

У запитах можуть використовуватися специфічні оператори.

# data[].attributes.body
Сортування та фільтрація записів. Операції над таблицями.
Вивчення нового матеріалу

Вибирання даних з однієї таблиці

Над даними в одній таблиці реляційні СКБД дають змогу виконувати майже ті самі операції, що й табличний процесор. Насамперед це сортування, фільтрація, а також пошук і заміна даних. Можна також обчислювати підсумкові характеристики для груп записів, але в Microsoft Access цю функцію реалізують за допомогою засобів, які ми опишемо в наступних розділах. Зараз же розглянемо три операції, які виконують в режимі введення та редагування даних у таблиці.

Сортування
Сортуванням називають розташування записів таблиці в порядку зростання чи спадання значень певного поля. Сортування, нагадаємо, найчастіше застосовують у випадках, коли:
необхідно дізнатися, які об’єкти мають малі, великі, найменші або найбільші значення тих чи інших параметрів (адже після сортування такі об’єкти розміщуватимуться на початку таблиці);
потрібно згрупувати об’єкти за певним параметром, тобто розташувати поряд об’єкти з однаковими чи близькими його значеннями.
Щоб відсортувати записи таблиці за зростанням або спаданням значень якогось поля, потрібно встановити курсор у цьому полі та клацнути кнопку А-Я(Сортування за зростанням) або Я-А(Сортування за спаданням).

На рис. 8.1, а зображено таблицю Учні, відсортовану за зростанням імен в алфавітному порядку, а на рис. 8.1, б — за спаданням дати народження.

Фільтрація – це виділення визначених записів, що задовольняють заданим критеріям.

Результатом фільтарції є створення списку з відфільтрованих записів. У Excel передбачено два режими фільтрації: Автофільтр і Розширений фільтр.

Автофільтр викликається командою Дані – Фільтр – Автофільтр. В застосуванні Автофільтра слід розрізняти два випадки:

1. Фільтрація без виділення діапазону

Якщо перед виконанням фільтрації не був виділений діапазон, то після команди автофильтр праворуч від назви кожного стовпця з’явиться кнопка із списком, що розкривається. Цей список відкривають позиції Всі, Перші 10… Умова… потім слідують елементи стовпця, розташовані в алфавітному порядку, і завершать список пункти Порожні і Непорожні. Прокрутивши список, ви можете вибрати необхідний вам елемент. Відразу після цього на екрані залишаться лише записи, що пройшли фільтрацію, а решта записів буде прихована. Заголовки відфільтрованих рядків забарвлені за умовчанням в синій колір. Ви можете продовжити фільтрацію, указуючи в списках інших стовпців необхідні елементи, а можете повернутися до початкового виду таблиці, відзначивши в списку пункт Все. Для повної відміни процедури фільтрації потрібно ввійти в меню Дані – Фільтр і прибрати галочку з команди Автофільтр.

1. Фільтрація виділеного діапазону

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

# data[].attributes.body
Дані в таблиці можна вводити після створення їх структур. Існує два способи введення даних у таблиці: за допомогою форм і безпосереднє введення даних таблиці. Під час уведення даних автоматично перевіряються такі типи даних: числові, грошові, дата і час, логічні. На вкладці Основне в групі Форматування тексту містяться елементи, за допомогою яких можна змінити розмір і накреслення символів та інші параметри. Якщо на екрані не поміщаються всі записи, слід скористатися вертикальною смугою прокручування, а якщо не поміщаються всі поля — горизонтальною. Окремі поля можна розширити або звузити звичайним порядком. У нижній частині вікна таблиці розміщено кнопки навігації для переміщення курсора в перший, сусідній або останній запис.
Для додавання нового запису в таблицю необхідно натиснути кнопку Створити запис на панелі навігації та ввести дані. У такому самому порядку введемо дані в таблицю КАДРИ.

Вікно для пошуку й заміни даних

У процесі введення даних у поле Знайти можна використовувати такі метасимволи:

— довільна кількість будьяких символів;

? — один довільний символ;

≠ — одна довільна фраза.

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

Записи з таблиці можна вирізати й копіювати до буфер обміну, за допомогою кнопки Вставити вставляти в іншу таблицю, а також у документи Word і Excel Розглянемо алгоритм вилучення запису з таблиці.

1. Виділити потрібний запис і натиснути кнопку Видалити н вкладці Основне. Відкриється меню цієї кнопки у якому слід виконати команду Видалити запис.

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

Слід пам’ятати, що у зв’язаних таблицях зі встановленим прапорцем Забезпечення цілісності даних вилучити запис не завжди вдається.

# data[].attributes.body
Ключові поля, індекси,
зв’язування таблиць
Згадаємо, що кожна таблиця повинна мати ключове поле, тобто поле, значення якого не повторюються в жодному іншому записі. Таблиця може мати кілька, ключових полів, але використовується лише одне з них, яке називають первинним ключем.
Найчастіше первинний ключ складається з одного поля й у ролі первинного ключа застосовується поле типу Автонумерація.
Якщо в ролі первинного ключа використовуються два і більше полів, його називають складним.
Наприклад, у таблиці КАДРИ поле Прізвище не може бути первинним ключем, оскільки в мережі цих магазинів може бути працівник із таким самим прізвищем.
Але складні ключі бажано не використовувати як первинний ключ, оскільки в цьому випадку ускладнюється процес роботи з БД.
Для створення первинного ключа слід відкрити таблицю в режимі конструктора, виділити поле, яке використовується як первинний ключ, і натиснути кнопку Ключове поле, що міститься в розділі Знаряддя вкладки Конструктор.

# data[].attributes.body
Модифікація таблиць

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

Існують різні способи видалення полів зі збереженої структури таблиць. Розглянемо один із найпростіших способів видалення поля на прикладі таблиці МАГАЗИНИ.

В області Усі об'єкти відкриємо контекстне меню цієї таблиці, у якому виконаємо команду Конструктор

# data[].attributes.body
Для того щоб поняття повороту було однозначно визначеним, необхідно домовитися, відносно якої точки цей поворот виконуватиметься. За точку відліку візьмемо початок координат (0; 0) на площині (мал. 138).

Почнемо подальші міркування з такої домовленості. Уявімо собі, що ми дивимося у точки (х1; у1) і (х2; у2) з початку координат (0; 0). Для того щоб перевести погляд з точки (х1; у1) на точку (х2; у2), зображених на малюнку 138, а, необхідно повернутися проти годинникової стрілки, a на малюнку 138, б - за годинниковою стрілкою. Як дізнатися про те, куди необхідно повертатися при переході від точки (х1; у2) до точки (х2; у2), знаючи при цьому лише їхні координати на площині, ми зараз і з’ясуємо.

Розглянемо два прямокутники, що утворюються такими вершинами: (0; 0), (0; у1), (х1; y1), (х1; 0) та (0; 0), (0; у2), (х2; у2), (х2; 0) . Порівняємо їхні площі. Ці прямокутники мають спільну частину (0; 0), (0; у1), (х2; у1), (х2; 0). Тому їхні площі відрізняються лише площами прямокутників (0; у1), (0; у2),  (х2; у2), (х2; у1) та (х2; 0),  (х2; у1), (х1; у1), (х1;0). Як видно площа першого зазначеного прямокутника більша за площу другого. З малюнка , б, де точки (х1; у1) і (х2; у2) поміняно місцями, можна зробити висновок, що ситуація з площами відповідних прямокутників так само змінилася на протилежну.

# data[].attributes.body
Ве́кторний добу́ток — білінійна, антисиметрична операція на векторах у тривимірному просторі. На відміну від скалярного добутку векторів евклідового простору, результатом векторного добутку є вектор (його також називають «векторним добутком»), а не скаляр.

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

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

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

Корисний для «вимірювання» перпендикулярності векторів — модуль векторного добутку двох векторів дорівнює добутку їхніх модулів, якщо вони перпендикулярні, і зменшується до нуля, якщо вектори колінеарні.

Має багато технічних і фізичних застосувань. Наприклад, момент імпульсу і сила Лоренца математично записуються у вигляді векторного добутку.

# data[].attributes.body
Обчислювальна геометрія — галузь комп'ютерних наук присвячена вивченню алгоритмів, які описуються в термінах геометрії. Деякі чисто геометричні проблеми виникають при вивченні обчислювальних геометричних алгоритмів, і вони також вважаються частиною обчислювальної геометрії. Хоча сучасна обчислювальна геометрія була розвинута здебільшого в новітній час, вона є однією з найдавніших областей обчислень, історія яких сягає античності.

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

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

Основними розділами обчислювальної геометрії є:

Комбінаторна обчислювальна геометрія, чи також названа алгоритмічна геометрія, яка розглядає геометричні об'єкти як дискретні сутності. Основоположною книгою по цій темі є книга Препарати та Шеймоса, в якій вперше в 1975 був використаний термін «обчислювальна геометрія».

Чисельна обчислювальна геометрія, також названа машинна геометрія чи геометричне моделювання, яка має справу в основному з представленням об'єктів реального світу в формі придатній для подальшої комп'ютерної обробки. Цей розділ можна розглядати як подальший розвиток нарисної геометрії та часто розглядається як розділ комп'ютерної графіки. Термін «обчислювальна геометрія» в такому сенсі вживався з 1971

# data[].attributes.body
Загальна задача динамічного програмування

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

Нехай розв'язується деяка задача S. Для її розв'язання задані вхідні дані S o, що надалі оброблятимуться. У результаті застосування до цих вхідних даних розробленого оптимізаційного алгоритму U її буде перетворено у вигляд S n. Процес виконання алгоритму можна представити як деяку функцію W(U), що дає кілька варіантів розв'язків. Оскільки задача динамічного програмування є задачею оптимізаційною, то серед усіх отриманих варіантів відповідей треба вибрати найкращий W*(U).

Методика розв'язування задач динамічного програмування була запропонована Р.Беллманом у 1955 р. і полягає в наступному.

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

Кожний з етапів є окремою підзадачею поставленої загальної задачі і розв'язується одним і тим самим розробленим оптимізаційним алгоритмом. Однак вибір розв'язків кожної наступної підзадачі залежить від розв'язків попередньої, і тому їх можна назвати залежними. Будемо вважати, що на першому етапі вхідна інформація S o перетворюється алгоритмом U у вигляд S1. Тепер при виконанні наступного етапу вхідними даними для нього буде вже S1. При цьому застосування алгоритму на даному етапі може дати багато варіантів розв'язків w₁(u), серед яких ми вибираємо ті, які надалі приведуть до найкращого кінцевого результату, тобто є перспективними. Позначимо їх w*₁(u). Аналогічно будуть перетворюватися вхідні дані на наступних етапах S ₂, ..., S n-1. Отже, оптимізація всієї задачі зводиться до визначення оптимальних результатів застосування розробленого алгоритму w*i(u) на кожному окремому етапі.

P. Беллманом був сформульований принцип оптимальності: якою не була б інформація, що обробляється, перед черговим етапом необхідно вибрати стратегію на поточному етапі так, щоб виграш на цьому етапі плюс оптимальний виграш на всіх наступних етапах був максимальним.

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

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

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

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

Щоб знайти оптимальну стратегію, тобто визначити шуканий розв'язок задачі, необхідно пройти всю послідовність етапів у зворотному порядку. Теоретично ця послідовність виглядає так: на першому етапі в якості оптимальної стратегії необхідно взяти знайдену умовну оптимальну стратегію. На другому етапі визначити стан інформації S1*, яка отримується для задачі в результаті вибору умовної оптимальної стратегії и*1. Цей стан визначає знайдена умовна оптимальна стратегія и(0)2, яку тепер вважатимемо оптимальною і т. д. У результаті цього знаходимо розв'язок задач, тобто максимально можливий виграш та оптимальну стратегію U*, що включає в себе умовну оптимальну стратегію на окремих етапах: U* = (и*₁, и*₂, ... , и*n)

# data[].attributes.body
Вибір заявок

Задача. На конференції, щоб відвести більше часу на неформальне спілкування, різні секції рознесли по різних аудиторіях. Вчений із надзвичайно широкими інтересами бажає відвідати декілька доповідей у різних секціях. Відомі початок {\displaystyle s_{i}} і кінець {\displaystyle f_{i}} кожної доповіді. Визначити, яку найбільшу кількість доповідей можна відвідати.

Наведемо жадібний алгоритм, який розв'язує цю задачу. При цьому вважатимемо, що заявки впорядковано за зростанням часу закінчення. Якщо це не так, то можна відсортувати їх за час {\displaystyle O(n\log n)} ; заявки з однаковим часом закінчення розташовуємо в довільному порядку.
Activity-Selector(s,f)

1. {\displaystyle n\leftarrow } length[s]

2. {\displaystyle A\leftarrow \left\{1\right\}}

3. {\displaystyle j\leftarrow 1}

4. for {\displaystyle i\leftarrow 2} to n

do if {\displaystyle s_{i}\geq f_{j}}

then {\displaystyle A\leftarrow A} ∪ {i}

{\displaystyle j\leftarrow i}

5. return A

На вхід алгоритму подаються масиви початків і закінчень доповідей. Множина А складається з номерів вибраних заявок, а j — номер наступної заявки. Жадібний алгоритм шукає заявку, що починається не раніше від закінчення j-ї, потім знайдену заявку включає в А, а j присвоює її номер.

Алгоритм працює за {\displaystyle O(n\log n)} , тобто за складністю сортування, оскільки вибірка має меншу складність {\displaystyle O(n)} . На кожному кроці вибирається найкращий розв'язок. Покажемо, що результатом буде оптимальний розв'язок.

Доведення. Зауважимо, що всі заявки відсортовано за неспаданням часу завершення. Заявка номер 1 однозначно входить до оптимального розв'язку, (якщо ні, замінимо найпершу заявку в оптимумі нею, гірше від цього не стане). Відкинувши всі заявки, що суперечать першій, отримаємо початкову задачу з меншою кількістю заявок. Розмірковуючи індуктивно, приходимо до оптимального розв'язку.

# data[].attributes.body
1.Задача про центи

Нехай є монети номіналом 25, 10, 5 та 1 цент. Якою найменшою кількістю монет можна видати суму S центів? На думку зразу ж інтуїтивно спадає такий алгоритм розв'язування цієї задачі: спочатку візьмемо максимально можливу кількість монет номіналом 25 центів, але так, щоб ця сума не перевищу, вала S. Потім визначимо, скільки монет номіналом 10 центів не перевищить залишку від S. Ту саму операцію проведемо із монетою номіналом 5 центів. Остаточний залишок видамо монетами 1 цент.

Цей алгоритм без сумніву можна назвати жадібним і записати у такому вигляді:

1.     Спочатку визначити максимальне п, для якого 25 * n <= S.

2. Якщо S - 25 * п > 0, то визначити максимальне m, для якого 10 * m <= S - 25 * n; у протилежному випадку перейти до п. 5.

3.     Якщо S - 25 * п - 10 * m > 0, то визначити максимальне k, для якого 5 * k <= S - 25 * п - 10 * n; у протилежному випадку перейти до п. 5.

4.     Якщо S - 25 * n - 10 * m - 5 * k > 0, то суму S - 25 * п - 10 ** m - 5 * k видати монетами номіналом 1 цент.

5.     Завершити алгоритм.

# data[].attributes.body
Найбільша спільна підпослідовність
Задано дві послідовності. Знайдіть довжину їх найбільшої спільної підпослідовності (підпослідовність - це те, що можна отримати із заданої послідовності викреслюванням деяких елементів).

Вхідні дані
У першому рядку задана довжина n (1 ≤ n ≤ 1000) першої послідовності. У другому рядку записані члени першої послідовності - цілі числа, які не перевищують за модулем 10000. У третьому рядку задана довжина m (1 ≤ m ≤ 1000) другої послідовності. У четвертому рядку записані члени другої послідовності - цілі числа, які не перевищують за модулем 10000.

# data[].attributes.body
Зада́ча комівояже́ра (комівояжер — бродячий торговець; англ. Travelling Salesman Problem, TSP; нім. Problem des Handlungsreisenden) полягає у знаходженні найвигіднішого маршруту, що проходить через вказані міста хоча б по одному разу. В умовах завдання вказуються критерій вигідності маршруту (найкоротший, найдешевший, сукупний критерій тощо) і відповідні матриці відстаней, вартості тощо. Зазвичай задано, що маршрут повинен проходити через кожне місто тільки один раз, в такому випадку розв'язок знаходиться серед гамільтонових циклів.

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

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

Всі ефективні (такі, що скорочують повний перебір) методи розв'язання задачі комівояжера — евристичні. У більшості евристичних методів знаходиться не найефективніший маршрут, а наближений розв'язок. Користуються популярністю так звані any-time алгоритми, тобто алгоритми, що поступово покращують деякий поточний наближений розв'язок.

# data[].attributes.body
Задачі розподілу ресурсів передбачає, як розподілити ресурси по роботах, щоб отримати максимальний ефект від використання наявних ресурсів. Задача розглядається в трьох аспектах:

– є ресурси в певному заздалегідь відомому обсязі, які використовують для виконання заданої кількості робіт;

– задано кількість робіт, необхідно визначити необхідну кількість ресурсів;

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

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

# data[].attributes.body
Задача про Черепашку. Дано файл, у якому записані монети, які може зібрати на своєму шляху черепашка, котра вміє рухатись лише праворуч та вниз. Знайти оптимальний маршрут черепашки, яка має дістатись у правий нижній кут поля. Принцип розв'язання залишається схожим. Створимо двовимірний список, у якому будемо фіксувати суми, накопичені під час проходження черепашкою поля. В окремий список заносимо відомості про те, з якого напрямку опинились у поточній клітинці. Для поданого прикладу за позначеним маршрутом черепашка може отримати 96 монет, рухаючись вниз, вниз, вниз, вправо, вправо, вниз, вправо, вправо.
Завдання: вивести шлях не з кінця, а з початку

# data[].attributes.body
Задача про Коника - стрибунця, переміщуючись кроками або стрибками по стовпчиках, збирає або втрачає монети на кожному зі стовпчиків. Знайти максимальну суму, яку він може зібрати. Стратегія полягає у тому, щоб отримувати максимальну суму на кожному стовпці, обираючи одну із двох стратегій: стрибати на цей стовпець чи переходити. Для набору з прикладу ([1, -2, 4, -2, -3, -5, -1, 5, 3, -4]) виграшною стратегією є 1, 3, 5, 7, 8, 9, а загальна сума, яку можна отримати =5. Покроковий алгоритм:
1. Записуємо останній елемент стека у тимчасову змінну (піддаємо сумніву останній хід)
2. Розглядаємо дві суми – останнього та передостаннього елемента з поточним стовпчиком
3. Повертаємо у стек тимчасову змінну
4. Записуємо у стек кращу з двох сум пункту 2

# data[].attributes.body
Жадібні алгоритми - це ціле сімейство алгоритмів (інколи ще говорять про жадібний підхід або жадібне програмування), тому немає якогось конкретного жадібного алгоритму, який можна закодувати. Проте, всі жадібні алгоритми побудовані згідно одного принципу - обирати оптимальне вирішення на кожному кроці, не зважаючи на кроки, які були зроблені до або будуть зроблені після. Іншими словами, жадібний алгоритм робить локально оптимальний вибір у сподіванні, що він приведе до глобально оптимального розв'язку.

Розглянемо популярний приклад з монетками. Нехай у нас є монети номіналом 1, 2 і 5 копійок і нам необхідно відрахувати 10 копійок таким чином, щоб кількість монет була мінімальною.

За логікою жадібного підходу на кожному кроці необхідно обирати монету з найбільшим номіналом і це приведе до мінімальної їх кількості в результаті. Візьмемо 5 копійок, тепер можемо взяти ще одну монету в 5 копійок, не вийшовши за обмеження у 10. В результаті 10 коп. = 5 коп. + 5 коп. Кількість монет - 2 і це, дійсно, мінімально можлива їх кількість за даних умов.

Але якщо в задачу додати монету номіналом 6 копійок, це зробить застосування жадібного підходу не оптимальним. Дійсно, на першому кроці нам необхідно обрати 6, як монету з найбільшим номіналом, але далі ми не можемо обрати ні 6, ні 5, так як це перевищить ліміт у 10 копійок. Залишається дві монети по 2 коп. В результаті, ми маємо 10 як суму 6 + 2 + 2. В той час, як оптимальний розв'язок буде все ті ж 2 монети по 5.

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

# data[].attributes.body
Динамічне програмування (dynamic programming) – особливий метод вирішення оптимізатора-заційну завдань. Особливістю даного методу є те, що для знаходження оптимального рішення завдання розбивається на етапи (кроки) і оптимальна рішення відшукується поступово крок за кроком.

Методом динамічного програмування вирішуються такі завдання автомобільного транспорту:

завдання маршрутизації;

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

оптимізація управління запчастинами;

оптимізація розподілу ресурсів та ін

Нехай маємо деяку фізичну систему (автомобіль), яка з плином часу може міняти свій стан (процес старіння авто-мобіля тощо), тобто в системі відбувається якийсь процес. Поставимо за ¬ дачу керувати цим процесом.
Отже, система S (автомобіль) може з початкового стану перейти в кінцевий стан , але не просто, а під дією деякого управління U.
Отже, загальну задачу динамічного програмування можна сформульовані так: з безлічі можливих управлінь U треба знайти таке оптимальний управління U, яке переводить фізичну систему S з початкового стану  в кінцевий стан  так, щоб при цьому виграш W звертається в максимум.

# data[].attributes.body
Алгоритм Дейкстри — алгоритм на графах, відкритий Дейкстрою. Знаходить найкоротший шлях від однієї вершини графу до всіх інших вершин. Класичний алгоритм Дейкстри працює тільки для графів без ребер від'ємної довжини.
Зберігатимемо поточну мінімальну відстань до всіх вершин V (від даної вершини a) і на кожному кроці алгоритму намагатимемося зменшити цю відстань. Спочатку встановимо відстані до всіх вершин рівними нескінченості, а до вершини а — нулю.  Розглянемо виконання алгоритму на прикладі. Хай потрібно знайти відстані від 1-ї вершини до всіх інших. Кружечками позначені вершини, лініями — шляхи між ними («дуги»). Над дугами позначена їх «ціна» — довжина шляху. Надписом над кружечком позначена поточна найкоротша відстань до вершини.

# data[].attributes.body
В теорії графів, задача про найкоротший шлях полягає в знаходженні шляху між двома вершинами (або вузлами) такого графу, що сума ваг ребер з яких він складається мінімальна. Прикладом може бути знаходження найкоротшого шляху між двома пунктами на дорожній мапі; в цьому випадку, вершинами є пункти, а ребрами - відтинки дороги із вагами, рівними часу, необхідному для подолання цього відтинку.

Така задача іноді згадується як Задача про найкоротший шлях між парою вершин, щоб відрізнити від наступних узагальнень:

§  Задача про найкоротші шляхи з одного входу, тут ми маємо знайти найкоротші шляхи між вхідною вершиною v та всіма іншими вершинами графа.

§  Задача про найкоротші шляхи з одним виходом, тут ми маємо знайти найкоротші шляхи з усіх вершин графа до однієї вихідної v. Може бути зведена до задачі з одним входом шляхом зміни на зворотні ребер графа.

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

Ці узагальнення мають значно дієвіші алгоритми ніж спрощений підхід із запуском алгоритма пошуку найкоротшого шляху між всіми значимими парами вершин.

# data[].attributes.body
Пошук в глибину (або обхід в глибину) є одним з основних і найбільш часто вживаних алгоритмів обходу всіх вершин і ребер графа. Згідно з цим алгоритмом обхід здійснюється за наступним правилом: у графі G вибираємо довільну вершину, наприклад a, і починаємо з неї пошук. Початкова вершина a (називається коренем пошуку в глибину) після цього вважається пройденою. На наступному кроці, вибираємо ребро (a,b), інцидентне вершині a (орієнтуємо при цьому його напрямок з a в b), і з його допомогою, переходимо у вершину b.
Якщо існують не переглянуті ребра, інцидентні b, то вибираємо одне з таких ребер, наприклад, (b,c) і орієнтуємо його з b в c. Ребро (b,c) з цього моменту вважатиметься переглянутим. При цьому, необхідно розглянути два випадки: якщо c раніше не була пройдена, то використовуючи ребро (b,c) переходимо у вершину c і продовжуємо пошук з неї. В цьому випадку ребро (b,c) називається ребром дерева, а вершина b — батьком вершини c; якщо c раніше була пройдена, то продовжуємо пошук іншого не пройденого ребра, інцидентного b. В цьому випадку ребро (b,c) називається зворотним ребром.

# data[].attributes.body
Пошук в ширину – один із базових алгоритмів, що є основою багатьох інших. Наприклад, алгоритм Дейкстри пошуку найкоротших шляхів з одної вершини і алгоритм Прима пошуку мінімального остового дерева можуть розглядатися як узагальнення пошуку в ширину. Згідно з цим алгоритмом обхід вершин заданого графа  здійснюється в порядку їх віддаленості від деякої заздалегідь обраної, або зазначеної як початкова, вершини  (називається коренем пошуку в ширину). Інакше кажучи, спочатку відвідується сама вершина , потім всі вершини, суміжні з , тобто ті, які знаходяться від неї на відстані в одне ребро, потім вершини, що знаходяться від  на відстані в два ребра, і так далі.
Для реалізації списку вершин найчастіше використовується черга та принцип FIFO. Виконання алгоритму продовжується до досягнення шуканої вершини

# data[].attributes.headline
Виконуй домашні завдання вчасно. Молодець

# data[].attributes.subject
Виконуй домашні завдання вчасно. Молодець

# data[].attributes.body
Рекурсивний бінарний пошук

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

114

Для пояснения використання рекурсивності в пошукових алгоритмах сформулюємо таку задачу.

Нехай автомат, який щохзилини виготовляє деталі, мае пристрій, що фіксує їх виготовлення та виводить на друк від-повідний протокол. Якщо протягом робочої зміни автомат працював без збоїв, то порядковий номер останньої виготов-леної деталі збігатиметься з останніми числовими даними протоколу. Але пристрій був не дуже якісний і в деякі моменти часу його «заїдало». Тому фіксація нових виготовлених деталей тимчасово припинялася і в протоколі повторювалося значения порядкового номера останньої деталі перед збоєм. Через деякий час робота пристрою сама собою відновлювалася і лічба виготовлених деталей продовжувалася, починаючи з останнього зафіксованого значения. У результаті дані пристрою наприкінці зміни не збігалися з реальною кількістю виготовлених деталей.

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

Наведемо приклад. Якщо дані пристрою під час виготовлення 10 деталей були такими:

122344456 7.

# data[].attributes.body
Пошук в ширину – один із базових алгоритмів, що є основою багатьох інших. Наприклад, алгоритм Дейкстри пошуку найкоротших шляхів з одної вершини і алгоритм Прима пошуку мінімального остового дерева можуть розглядатися як узагальнення пошуку в ширину. Згідно з цим алгоритмом обхід вершин заданого графа  здійснюється в порядку їх віддаленості від деякої заздалегідь обраної, або зазначеної як початкова, вершини  (називається коренем пошуку в ширину). Інакше кажучи, спочатку відвідується сама вершина , потім всі вершини, суміжні з , тобто ті, які знаходяться від неї на відстані в одне ребро, потім вершини, що знаходяться від  на відстані в два ребра, і так далі.
Розглянемо алгоритм пошуку в ширину із заданої стартової вершини . Отже, спочатку всі вершини позначаються як непройдені. Першою відвідується вершина , вона стає єдиною пройденою активною вершиною. На наступному кроці, досліджуються ребра, інцидентні даній вершині. У загальному випадку, при такому дослідженні, можливі два варіанти подальших дій:

1. Якщо всі ребра, інцидентні вершині  переглянуті, вона перестає бути активною і перетворюється в повністю скановану вершину. В такому випадку вибирається нова активна вершина, і описані дії повторюються.

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

# data[].attributes.body
Граф, що містить кратні ребра, називається мультиграфом. Ребро може з’єднувати деяку вершину саму з собою, таке ребро називається петлею. Цей випадок відповідає наявності в множині пар вигляду . Граф з петлями та кратними ребрами називається псевдографом
Скінченний неорієнтований граф без петель і кратних ребер називається звичайним.
Якщо пари (, )  E вважаються упорядкованими, то граф називається орієнтованим або орграфом. Інакше граф називається неорієнтованим. Ребра орієнтованого графа прийнято називати дугами та зображати направленими відрізками. При зображенні орієнтованих графів напрями ребер позначаються стрілками. Орієнтований граф також може мати кратні ребра, петлі, а також ребра, що з’єднують одні й ті самі вершини ребра, але у зворотних напрямах.

# data[].attributes.body
Теорія графів – розділ дискретного аналізу, який має широке застосування в багатьох наукових дисциплінах завдяки тому, що поняття і інструментарій цієї теорії виявися дуже зручним для дослідження та інтерпретації різноманітних проблем у великої кількості наук: кібернетиці, технічній і економічній, теорії автоматів, теорії управління, теорії інформації тощо.
За допомогою інструментарію теорії графів розв’язується велика кількість економіко-математичних задач, зокрема наведена у вступі задача „про призначення”, задача календарного планування, мережного планування тощо. Взагалі теорія графів має велике значення у телекомунікаціях.
При графічному зображенні графу елементи множини V зображають точками на площині, а ребра (vi , vj ) – відрізками (прямолінійними або криволінійними), які з'єднують точки vi і vj . Ребра зазвичай позначаються ek Ребро ek називається інцидентним по відношенню до вершин vi і vj .

# data[].attributes.body
Рядки рядки це простий тип даних поряд з цілими і дійсними числами і знаємо, що рядок - це послідовність символів, укладених в одинарні або подвійні лапки. В Python немає символьного типу, типу даних, об'єктами якого є поодинокі символи. Однак мова дозволяє розглядати рядки як об'єкти, що складаються з підрядків довжиною в один і більше символів. При цьому, на відміну від списків, рядки не прийнято відносити до структур даних. Мабуть тому, що структури даних складаються з більш простих типів даних, а для рядків в Python немає більш простого (символьного) типу. Нумерація символів у рядку Кожний символ у рядку має унікальний порядковий номер — індекс. Нумерація символів починається з нуля. Розглянемо приклади роботи з рядками в інтерактивному режимі До конкретного символу в рядку можна звертатися за його індексом, зазначивши індекс у квадратних дужках.
Рядкові методи Розглянемо деякі методи опрацювання рядкових величин і проаналізуємо результат застосування цих методів в інтерактивному режимі. У наведених далі прикладах методи викликаються для змінної s, яка містить рядок, який опрацьовуєтьс

# data[].attributes.body
Бінарний пошук (binary search) – це алгоритм пошуку індексу елемента у впорядкованому масиві, на кожній ітерації відбувається поділ масиву на дві частини, з цієї причині алгоритм називають методом ділення пополам.

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

Опис алгоритму бінарного пошуку

Алгоритм полягає в наступному:

Визначаємо значення елементу посередині робочої області масиву даних і порівнюємо його з шуканим;

Якщо вони рівні, то повертаємо індекс;

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

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

# data[].attributes.body
Пошукові алгоритми Пошук необхідної інформації – це одна з фундаментальних задач теоретичної інформатики та програмування. Саме пошукові алгоритми найчастіше є фрагментами різноманітних більш складних алгоритмів. Пошуковими алгоритмами називають алгоритми, що здійснюють пошук потрібної інформації у множині заданих елементів.
Лінійний пошук Найчастіше треба відшукати інформацію у невідсортованій послідовності елементів. У цьому випадку пошук зводиться до послідовного перегляду всіх елементів масиву, поки не знайдемо шуканий елемент. Такий пошук називається лінійним, або послідовним. Алгоритм такого пошуку матиме такий вигляд: 1. Почнемо перегляд заданого масиву з першого елемента. 2. Поки шуканий елемент х не збігається з поточним елементом масиву a[i] і ми не вийшли за межі заданого масиву, то перейти до наступного елемента в масиві. 3. Якщо при відшуканні елемента х у масиві ми вийшли за його межі, тобто порядковий номер поточного елемента масиву сягнув значення N, то це означає, що шуканий елемент у заданому масиві відсутній.

# data[].attributes.body
Сортування включенням або сортування вставлянням — простий алгоритм сортування на основі порівнянь. На великих масивах є значно менш ефективним за такі алгоритми, як швидке сортування, пірамідальне сортування та сортування злиттям. Однак, має цілу низку переваг:

простота у реалізації

ефективний (зазвичай) на маленьких масивах

ефективний при сортуванні масивів, дані в яких вже непогано відсортовані: продуктивність рівна O(n + d), де d — кількість інверсій

на практиці ефективніший за більшість інших квадратичних алгоритмів (O(n ²)), як то сортування вибором та сортування бульбашкою: його швидкодія рівна n ²/4, і в найкращому випадку є лінійною

є стабільним алгоритмом

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

Приклад сортування включенням. Елементи в чорних рамках — посортована частина списку. Метод порівнює наступний елемент непосортованої частини (червона рамка) з послідовними елементами посортованої та вставляє у потрібне місце.

# data[].attributes.body
Алгоритм працює таким чином — у поданому наборі даних (списку чи масиві) порівнюються два сусідні елементи. Якщо один з елементів, не відповідає критерію сортування (є більшим, або ж, навпаки, меншим за свого сусіда), то ці два елементи міняються місцями.

Сортування бульбашкою

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

# data[].attributes.body
Сортування елементів масиву — це розстановка елементів масиву в заданому порядку .
Навіщо потрібне сортування? З відсортованими даними працювати легше, ніж з довільно розташованими:
 коли елементи відсортовані, їх простіше знайти;
 на відсортованих даних легше визначити, чи є пропущені елементи;
 простіше упевнитися, що всі елементи були перевірені;
 легше знайти спільні елементи двох множин. Сортування є потужним засобом прискорення роботи практично будь-якого алгоритму, в якому потрібно часто звертатися до певних елементів даних. Розглянемо два найпростіші методи сортування масиву.

Алгоритми:
 прості і зрозумілі, проте неефективні для переважної більшості масивів
 метод бульбашки
 метод вибору
 складні, проте ефективні
 “швидке сортування" (Quick Sort)
 сортування “купою" (Heap Sort)
 сортування злиттям
 сортування обміном
 пірамідальне сортування

# data[].attributes.body
Сортування вибором — простий алгоритм сортування лінійного масиву, на основі вставок. Має ефективність n ², що робить його неефективним при сортування великих масивів, і в цілому, менш ефективним за подібний алгоритм сортування включенням. Сортування вибором вирізняється більшою простотою, ніж сортування включенням, і в деяких випадках, вищою продуктивністю.

Метод Сортування вибором

Алгоритм працює таким чином:

1. Знаходить у списку найменше значення

2. Міняє його місцями із першим значенням у списку

3. Повторює два попередніх кроки, доки список не завершиться (починаючи з наступної позиції)

Фактично, таким чином ми поділили список на дві частини: перша (ліва) — повністю відсортована, а друга (права) — ні.

Ось приклад сортування масиву з п'яти елементів за даним алгоритмом:

64 25 12 22 11
11 25 12 22 64

# data[].attributes.body
Структуриданих: черга.

Чергою називається структура даних, організована за і принципом «першим прийшов — першим пішов».

Черга, так само як і стек, відображається на пам’ятькомп’ютера у вигляді одновимірногомасиву .

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

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

аі:= аі + 1 для і = 1, 2, ..., <індекскінцячерги>.

Зрозуміло, щотака схема обробкиопераціїчитаннязабираєбагато часу. Для йогоекономіїзастосуємоідеючитанняелемента стека. Тобтопіслячитанняелемента не будемонамагатисязнищитийогозначення, а просто перемістимоіндекс початку черги на наступнийелемент. Таким чином ми приходимодоідеїіснуваннядвохіндексів: і - початок черги, якийще носить назву «голова» черги, та у - кінецьчерги, щоназивається «хвостом» черги.

# data[].attributes.body
Структуриданих: простазмінна, масив, стек.

Структура даних - цеспосібпредставленняінформації.

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

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

Можнасказати, щоструктуриданих є одним з інструментіврозробкиалгоритмів. Багатовідомихметодівалгоритмівбазуються на тих чиінших структурах.
ПРОСТА ЗМІННА

Під час виконанняпрограми, в якійвизначенопростузмінну, шіераційною системою в пам’ятікомп’ютеравідводитьсямісце для їїзначення. При цьомувизначається адреса, за якою вона буде розташована, та частинапідрядрозташованихкомірок, і кількістьякихвідповідаєвизначеному для цієїзмінної типу.
Виконанняопераціїчитаннязначенняпростоїзмінноївідбувається при використанністандартних процедур write, writeln та обчисленнязначеньвиразів, у якихвикористовуютьсяідентифікаторицихзмінних. При цьому система «знає» ндресурозміщення в пам’ятізначенняцієїзмінної і «читає» його за цієюадресою.

# data[].attributes.body
Декомпозиція задачі

# data[].attributes.body
Система числення – сукупність способів і засобів запису чисел для проведення підрахунків. Звичайною для нас і загальноприйнятою є позиційна десяткова система числення. Як умовні знаки для запису чисел вживаються цифри.

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

Розрізняють такі типи систем числення:

§ непозиційні

§ позиційні;

§ змішані.

Непозиційній системи числення

Непозиційна система числення – система числення, в якій значення кожної цифри в довільному місці послідовності цифр, яка означає запис числа, не змінюється.

У непозиційній системі кожен знак у запису незалежно від місця означає одне й те саме число. Добре відомим прикладом непозиційної системи числення є римська система, в якій роль цифр відіграють букви алфавіту: І – один, V – п'ять, Х – десять, С – сто, L – п'ятдесят, D – п'ятсот, М – тисяча. Наприклад, 324 = СССХХІV. У непозиційній системі числення незручно й складно виконувати арифметичні операції.

Недоліками непозиційних систем числення є:

§ громіздкість зображення чисел;

§ труднощі у виконанні операцій.

# data[].attributes.body
Як мовоюпрограмуванняPythonописують цикл ізпередумовою?

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

Будь-який оператор циклу складається з двохчастин: заголовка та тіла. У заголовку циклу записуютьсяумови, за якихвиконання циклу триватимеабо завершиться, а в тілі циклу містятьсякоманди, виконанняякихпотрібноповторювати
Скорочена форма оператора whileпрацює таким чином. Визначаєтьсязначеннялогічноговиразу. Якщоцезначенняtrue, то виконується команда, щослідуєпісля рядка зі знаком «:» у рядках, якімаютьвідступ 4 позиції. Якщозначеннялогічноговиразуfalse, то цикл завершується й управлінняпередаєтьсякоманді, яка записана у програмномукодіпіслятіла циклу (з рядка, якийперебуває на тому ж рівні, що і команда while). У тілі циклу обов’язкововикористовують команду, яка буде змінюватизначеннявеличини, щовикористовується в логічномувиразі.

Повна форма оператора whi 1 е мовоюпрограмуванняPython, окрім команд, щовходять до блоку while, використовуєконструкціюelse: післяякої в новому рядку роблятьвідступ 4 позиції та записуютькоманди, щомаютьвиконуватись, якщозначеннялогічноговиразу

false.

# data[].attributes.body
Математична модель – це наближений опис довільного класу явищ зовнішнього світу, поданий за допомогою математичної символіки. Математичне моделювання виступає як метод пізнання зовнішнього світу, а також прогнозування і управління. Аналіз математичних моделей дозволяє проникнути в сутність досліджуваних явищ.

Математичне моделювання проходить такі етапи:

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

- побудова математичної моделі;

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

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

# data[].attributes.body
Приклад циклічного алгоритму

1. Налити в банку води.

2. Вилити воду з банки у відро.

3. Відро повне? Якщо "так", то завершити виконання алгоритму. Якщо значення "ні", то повернутися до першої команди алгоритму і продовжувати до того часу, поки алгоритм не буде закінчено, тобто доки відро не буде повне.

# data[].attributes.body
Ефективність алгоритму — це властивість алгоритму, пов'язана з обчислювальними ресурсами, використовуваними алгоритмом. Алгоритм повинен бути проаналізований з метою визначення необхідних йому ресурсів. Ефективність алгоритму можна розглядати як аналог виробничої продуктивності повторюваних або безперервних процесів.

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

Зауважимо, що дана стаття НЕ про оптимізацію алгоритму, яка обговорюється в статтях оптимізація програми, оптимізувальний компілятор, оптимізація циклів, оптимізатор об'єктного коду[en] тощо. Термін «оптимізація» сам по собі вводить в оману, оскільки все, що може бути зроблено, потрапляє під визначення «покращення».