- •Модуль 1. Алгоритми і абстрактні структури даних Лекція 2. Способи запису алгоритмів
- •2.1. Способи запису алгоритмів
- •2.2. Базові конструкції структурного програмування
- •2.3. Прості алгоритми. Обчислення n! і чисел Фібоначчі (нерекурсивні алгоритми)
- •2.3.1. Знаходження факторіала цілого числа
- •2.3.2. Знаходження чисел Фібоначчі
- •2.4. Алгоритм Ератосфена пошуку простих чисел
- •2.5. Алгоритм знаходження найбільшого спільного дільника двох чисел (алгоритм Евкліда).
- •Словесний опис алгоритму пошуку нсд діленням:
- •Словесний опис алгоритму знаходження нсд відніманням
- •2.5. Очислення часу виконання програми
2.2. Базові конструкції структурного програмування
При програмному способі запису алгоритму важливо дотримуватися не лише синтаксису мови програмування, але і прагнути зберегти чітку структуру і зрозумілість програми. Для цього у 80-х роках 20-го століття було запропоновано технологію структурного програмування.
Структурне програмування — це технологія створення програм, що дозволяє шляхом дотримання певних правил скоротити час розробки і зменшити кількість помилок, а також полегшити можливість модифікації програми.
Доведено, що будь-який алгоритм можна реалізувати лише з трьох структур, які називаються базовими конструкціями структурного програмування: це послідовність, розгалуження і цикл.
Послідовністю називається конструкція, що реалізовує послідовне виконання двох або більше операторів (простих або складних).
Розгалуження задає виконання того чи іншого оператора залежно від виконання якої-небудь умови. Реалізується за допомогою операторів if та switch.
Цикл реалізує багатократне виконання операторів. Реалізується за допомогою операторів циклу.
Рис. 2.2. Базові конструкції структурного програмування
Особливістю базових конструкцій є те, що будь-яка з них має лише один вхід і один вихід, тому конструкції можуть вкладатися один в одну довільним чином, наприклад, цикл може містити вихід з двох розгалужень, кожне з яких включає вкладені цикли.
Метою використання базових конструкцій є спрощення структури програми. Таку програму легко читати, відлагоджувати і, при необхідності, вносити до неї зміни. У більшості мов високого рівня існує декілька реалізацій базових конструкцій.
У мовах об’єктно-орієнтованого програмування (C#, Java) ідеї структурного програмування використовуються на найнижчому рівні — при написанні методів класу.
2.3. Прості алгоритми. Обчислення n! і чисел Фібоначчі (нерекурсивні алгоритми)
Розглянемо різні форми запису алгоритмів на прикладі простих задач.
2.3.1. Знаходження факторіала цілого числа
Постановка задачі:
Обчислити факторіал n! де
, де
Приклад. Для n=5, n!=1*2*3*4*5
Словесний опис алгоритму
Крок 1. Оголосити змінні: n – кількість членів ряду (ціле), fact – обчислене значення факторіалу (довге ціле), i – змінна циклу (ціле).
Крок 2. Ввести число членів ряду і призначити його змінній n, призначити fact =1.
Крок 3. Цикл. Починаючи з елементу i=2 до n
fact := fact * i
Крок 4. Вивести результат на консоль
Реалізація алгоритму на мові C#.
static void Main(string[] args)
{
long fact=1;
int n = int.Parse(Console.ReadLine());
for (int i = 2; i <= n; i++)
fact *= i;
Console.WriteLine("fact= " + fact);
Console.ReadKey();
}
2.3.2. Знаходження чисел Фібоначчі
Постановка задачі: Обчислити вказану кількість чисел Фібоначчі.
Обчислення чисел Фібоначчі задається формулами:
F(1)=1,F(2)=1;F(3)=2, F(n+1)=F(n)+F(n-1)
Таким чином, це послідовність чисел, у якій кожне наступне число дорівнює сумі двох попередніх чисел. Назва ряду чисел походить від імені середньовічного математика Леонардо Пізанського (відомого як Фібоначчі).
Приклад:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946
Словесний опис алгоритму
Крок 1. Оголосити змінні:
n - кількість елементів ряду;
a, b - значення двох перших елементів ряду;
c - буферна змінна;
i - лічильник.
Крок 2. Ввести значення n з консолі
Крок 3. Призначити a і b значення 1 і 1 відповідно (це перші числа ряду Фібоначчі). Вивести їх на екран.
Крок 4. Цикл. Починаючи з 3-го елементу до n
- виводити на екран суму a і b
- зберегти значення змінної b в c
- записати в b суму a і b,
- призначити a значення с.
Реалізація алгоритму на мові C#
static void Main(string[] args)
{
int a = 1;
int b = 1;
int c = 0;
Console.WriteLine("Введіть кількість чисел послідовності");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Перше число = " + a);
Console.WriteLine("Друге число = " + b);
for (int i = 2; i < n; i++)
{
c = a + b;
Console.WriteLine("Наступний член ряду= " + c);
a = b;
b = c;
}
Console.ReadKey();
}