Управління ходом виконання та структурування програм в алгоритмічній мові програмування
Завантажити презентаціюПрезентація по слайдам:
Тема.03 - Управління ходом виконання та структурування програм в алгоритмічній мові програмування
Вирази, операнди та операції. Основні операції: арифметичні; логічні; бульові; з використанням рядків. Поняття оператора. Прості оператори: присвоювання; виклику функції. Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу. Структурування програм: функції та класи. Параметри функцій: вхідні, результуючі. Рекурсивні функції. Перелік питань
Вираз – це конструкція на мові програмування, результатом якої є певне значення. Вираз складається із операндів, об’єднаних операціями. Кожен операнд, в свою чергу, може бути виразом. Результат (значення) виразу залежить від розміщення знаків операцій у круглих дужках у виразі, а також від пріоритету виконання операцій. Операнд – це константа, літерал, ідентифікатор, виклик методу, індексний вираз, вираз вибору елементу чи більш складних вираз, сформований комбінацією операндів, знаків операцій та круглих дужок, які визначають порядок виконання. Будь-який операнд, який має константне (незмінне) значення називається константним значенням. Кожен операнд має тип. Якщо у якості операнда використовується константа, то йому відповідає значення і тип цієї константи. У іншому разі значення визначається як результат певних обчислень чи зчитання значення змінної, а тип залежить від типу обчислень чи змінних. Операції визначають дії, які виконуються над операндами. Операції визначаються операторами. В залежності від кількості операндів, які приймають в них участь, поділяються на унарні, бінарні та тернарні. 1. Вирази, операнди та операції
Арифметичні операції належать до бінарних, оскільки вимагають двох операндів і позначаються знаками “+”, “-”, “*”, “/” і “%” (залишок від ділення). Арифметичні операції вимагають числових типів даних – цілих чи дійсних чисел. Логічні або бульові операції повертають результат “істина” (true) або “хибність” (false) і поділяються на дві категорії: ті, які виконуються над логічними значеннями операндів, і ті, які виконують логічну операцію над бітами операндів. Перелік логічних операцій І (AND) - логічне множення: &, АБО (OR) - логічне додавання: | виключальне АБО (XOR) - множення з переносом: ^ еквівалентність (рівність): == нееквівалентність (нерівність) : != інверсія (заперечення): ~, ! порівняння (відношення): >,
Оператор – це закінчений вираз, який полягає у здійсненні обчислення, виклику методу, присвоювання значення, перевірки умови і т.д. Оператори розділяються знаком “;”. Приклад операторів: j++; y = x + b; SomeClass.SomeFunc(par1, par2); Складений оператор або блок являє собою декілька операторів, що поєднані фігурними дужками: { x1 = y1 + y2; x2 = z1 + z2; } 3. Поняття оператора
Оператор присвоювання передбачає наявність змінної (зліва) і виразу (зправа), значення якого присвоюється змінній. Приклад: a = b + 12; Оператор виклику функції (методу) передбачає наявність назви функції (методу) і, якщо необхідно, параметрів: SomeFunc(SomePar); Якщо параметри відсутні, то після назви функції слід залишати пусті дужки: SomeFunc(); 4. Прості оператори: присвоювання; виклику функції
Оператори управління ходом виконання дозволяють виконувати або не виконувати ділянки програми в залежності від певних умов. Оператор розгалуження передбачає перевірку умови, в залежності від виконання якої (true) буде виконуватися один блок, а невиконання (false) – другий. Наявність другого блоку не є обов’язковою. Якщо у блоці має виконуватись один оператор, то оформлення його у вигляді складеного оператору (з фігурними дужками) не обов’язково. Приклад: if (a < 10) { j++; b = a + c; } else j--; 5. Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
Оператор вибору (switch) – це оператор управління ходом виконання, який на основі умови передає керування одному із варіантів. int caseSwitch = 1; switch (caseSwitch) { case 1: Console.WriteLine("Case 1"); break; case 2: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; }
Більш складний приклад використання switch: class SwitchTest { static void Main() { Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large"); Console.Write("Please enter your selection: "); string s = Console.ReadLine(); int n = int.Parse(s); int cost = 0; switch(n) { case 1: cost += 25; break; case 2: cost += 25; goto case 1; case 3: cost += 50; goto case 1; default: Console.WriteLine("Invalid selection. Please select 1, 2, or 3."); break; } if (cost != 0) { Console.WriteLine("Please insert {0} cents.", cost); } Console.WriteLine("Thank you for your business."); } } Sample Input: 2 Sample Output: Coffee sizes: 1=Small 2=Medium 3=Large Please enter your selection: 2 Please insert 50 cents. Thank you for your business.
Оператори циклів дозволяють повторно виконувати оператор (у тому числі складений оператор – блок) поки виконується певна умова, C# підтримує наступні варіанти циклів: цикл do..while – передбачає повторне виконання оператору, доки вираз не прийме значення false int x = 0; do { Console.WriteLine(x); x++; } while (x < 5); цикл while – передбачає виконання оператору, доки вираз не прийме значення false: int n = 1; while (n++ < 6) { Console.WriteLine("Current value of n is {0}", n); } цикл for (параметризований цикл) – передбачає виконання оператору, доки вираз не прийме значення false, при чому у операторі циклу задається змінна, значення якої буде змінюватися при кожній ітерації: for (int i = 1; i
Оператори переходу здійснюють безумовний перехід на певну ділянку коду. Операторами переходу є: break – призначений для завершення найближчого внутрішнього циклу чи оператору switch і переходу до наступного оператору, який йде за ним; continue – передає керування на наступну ітерацію циклу, в якому він знаходиться; return – перериває виконання методу, в якому він знаходиться і повертає керування методу, який його викликав. Якщо метод має повертати значення, то при виклику оператора слід вказати значення, що повертається, виклик оператору є обов’язковим. Якщо метод не передбачає повернення значення, то виклик цього оператору не є обов’язковим; goto – здійснює перехід на певний іменований оператор (мітку). У сучасних програмах на C# найчастіше використовується лише в операторі switch для того, щоб перейти на інший варіант. У багатьох інших випадках використання цього оператору є вкрай небажаним, оскільки ставить під загрозу структуру програми.
Для поділу коду програм на фрагменти з метою забезпечення повторного виклику, а також спрощення розробки, розуміння і збільшення наглядності, використовується підпрограми – іменовані блоки коду, які можуть бути викликані всередині операторів. Підпрограми, які не повертають результат у точці виклику називаються процедурами і не можуть бути складовими виразів, а ті, які повертають, називаються функціями і можуть бути складовими виразів. У сучасних об’єктно-орієнтованих мовах програмування будівельним блоком програм є більш комплексна і цілісна абстракція – клас, який являє собою поєднання коду і даних. Підпрограми, які задекларовані всередині класу, називаються методами. У мові програмування C# усі підпрограми декларуються в рамках класу, тому всі вони є методами. 6.Структурування програм: функції та класи
Return може використовуватись для виходу із таких методів: Використання return для void-методів
Рекурсія – дуже поширений у програмуванні підхід, який передбачає можливість виклику алгоритмом самого себе проте з іншими параметрами. Вкладеність таких викликів може бути досить великою, проте в певний момент часу вона має припинитися і результат повертається (чи продовжуються обчислення) по ланцюгу рекурсивних викликів. Основні переваги рекурсії: рекурсія наглядна і зручна для представлення вирішення певних задач; деякі структури природного чи штучного походження є рекурсивними за своєю сутністю; деякі задачі є рекурсивними за своєю природою, зокрема рекурсія є окремим випадком декомпозиції – поділу однієї складної задачі на декілька простіших. 8. Рекурсивні функції
Бінарний пошук Процедури обходу дерева Фрактали – нескінченна самоподібна геометрична фігура, кожен фрагмент якої повторюється при зменшенні масштабу. Задача про Ханойські вежі: В одному з буддійських храмів ченці вже тисячу років займаються перекладанням кілець. Вони розташовані трьома пірамідами, на яких нанизані кільця різних розмірів. У початковому стані 64 кільця були нанизані на першу піраміду й упорядковані по розмірі. Ченці повинні перекласти всі кільця з першої піраміди на другу, виконуючи єдину умову - кільце не можна покласти на кільце меншого розміру. При перекладанні можна використовувати всі три піраміди. Ченці перекладають одне кільце за одну секунду. Як тільки вони закінчать свою роботу, наступить кінець світу. Поширені рекурсивні алгоритми
Рекурсивно визначена функція містить у своєму визначенні посилання на саму цю функцію. Розглянемо приклад визначення факторіалу. Факторіал N: N! = 1 × 2 × 3 × … × (N – 1) × N. Рекурсивне визначення факторіалу: N! = N × (N-1)! Додатково: 0! = 1. Числа Фібоначчі: елементи числової послідовності, в якій кожен наступний елемент дорівнює сумі двох попередніх: FN = FN-1 + FN-2, де N ≥ 2, F 0 = F1 = 1. Приклад: 1, 1, 2, 3, 5, 8… Рекурсивне задання математичних функцій
using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { public static long fact(long n) { if (n == 0) { return 1; } else { return n * fact(n - 1); } } static void Main(string[] args) { for (int i = 0; i
using System; using System.Collections.Generic; using System.Text; namespace Example { class Program { public static long Fibonacci(long N) { if ((N == 1) | (N == 0)) { return 1; } else { return Fibonacci(N - 1) + Fibonacci(N - 2); } } static void Main(string[] args) { for (int i = 0; i
Алгоритм Евкліда дозволяє знайти НСД двох натуральних чисел. Суть алгоритму Евкліда – два числа порівнюють, та з більшого віднімають менше до тих пір, поки числа не стануть рівними. Число, якому вони стануть рівними і є їх найбільший спільний дільник. Число n є дільником числа m, якщо число m ділиться на число n без остачі. Дільники числа 18: 1, 2, 3, 6, 9, 18. Дільники числа 24: 1, 2, 3, 4, 6, 12, 24. Найбільший спільний дільник чисел 18 та 24 це 6. Скорочено: НСД (18, 24) = 6. НСД (m, n) це найбільше з чисел на яке діляться і m і n. Два числа m та n називаються взаємно простими, якщо їх НСД (m, n)=1. Наприклад, НСД(9, 16)=1. Алгоритм Евкліда для знаходження найбільшого спільного дільника
using System; using System.Collections.Generic; using System.Text; namespace Example { class Program { public static int nsd(int m, int n) { if (m == n) { return m; } else { if (m > n) { return nsd(m - n, n); } else { return nsd(n - m, m); } } } static void Main(string[] args) { Console.WriteLine(nsd(873435, 21345).ToString()); Console.ReadLine(); } } } Рекурсивний алгоритм для знаходження найбільшого спільного дільника
Схожі презентації
Категорії