1 / 24

Тема.03 - Управління ходом виконання та структурування програм в алгоритмічній мові програмування

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

Download Presentation

Тема.03 - Управління ходом виконання та структурування програм в алгоритмічній мові програмування

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Тема.03 - Управління ходом виконання та структурування програм в алгоритмічній мові програмування

  2. Перелік питань • Вирази, операнди та операції. • Основні операції: арифметичні; логічні; бульові; з використанням рядків. • Поняття оператора. • Прості оператори: присвоювання; виклику функції. • Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу. • Структурування програм: функції та класи. • Параметри функцій: вхідні, результуючі. • Рекурсивні функції.

  3. 1. Вирази, операнди та операції Вираз – це конструкція на мові програмування, результатом якої є певне значення. Вираз складається із операндів, об’єднаних операціями. Кожен операнд, в свою чергу, може бути виразом. Результат (значення) виразу залежить від розміщення знаків операцій у круглих дужках у виразі, а також від пріоритету виконання операцій. Операнд – це константа, літерал, ідентифікатор, виклик методу, індексний вираз, вираз вибору елементу чи більш складних вираз, сформований комбінацією операндів, знаків операцій та круглих дужок, які визначають порядок виконання. Будь-який операнд, який має константне (незмінне) значення називається константним значенням. Кожен операнд має тип. Якщо у якості операнда використовується константа, то йому відповідає значення і тип цієї константи. У іншому разі значення визначається як результат певних обчислень чи зчитання значення змінної, а тип залежить від типу обчислень чи змінних. Операції визначають дії, які виконуються над операндами. Операції визначаються операторами. В залежності від кількості операндів, які приймають в них участь, поділяються на унарні, бінарні та тернарні.

  4. 2. Основні операції: арифметичні; логічні; бульові; з використанням рядків Арифметичні операції належать до бінарних, оскільки вимагають двох операндів і позначаються знаками “+”, “-”, “*”, “/” і “%” (залишок від ділення). Арифметичні операції вимагають числових типів даних – цілих чи дійсних чисел. Логічні або бульові операції повертають результат “істина”(true) або “хибність”(false) і поділяються на дві категорії: ті, які виконуються над логічними значеннями операндів, і ті, які виконують логічну операцію над бітами операндів. Перелік логічних операцій • І (AND) - логічнемноження: &, • АБО (OR) - логічнедодавання: | • виключальне АБО (XOR) - множенняз переносом: ^ • еквівалентність (рівність): == • нееквівалентність (нерівність) : != • інверсія (заперечення): ~, ! • порівняння (відношення): >, <, <=, >= • умовне І(коротке І): && • умовне ЧИ (коротке ЧИ): || Операція конкатенації виконується над типом даних “рядок” і передбачає поєднання рядків.

  5. 3. Поняття оператора Оператор – це закінчений вираз, який полягає у здійсненні обчислення, виклику методу, присвоювання значення, перевірки умови і т.д. Оператори розділяються знаком “;”. Приклад операторів: j++; y = x + b; SomeClass.SomeFunc(par1, par2); Складений оператор або блок являє собою декілька операторів, що поєднані фігурними дужками: { x1 = y1 + y2; x2 = z1 + z2; }

  6. 4. Прості оператори: присвоювання; виклику функції Оператор присвоювання передбачає наявність змінної (зліва) і виразу (зправа), значення якого присвоюєтьсязмінній. Приклад: a = b + 12; Оператор виклику функції (методу) передбачає наявність назви функції (методу) і, якщо необхідно, параметрів: SomeFunc(SomePar); Якщо параметри відсутні, то після назви функції слід залишати пусті дужки: SomeFunc();

  7. 5. Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу Оператори управління ходом виконання дозволяють виконувати або не виконувати ділянки програми в залежності від певних умов. Оператор розгалуження передбачає перевірку умови, в залежності від виконання якої (true) буде виконуватися один блок, а невиконання (false) – другий. Наявність другого блоку не є обов’язковою. Якщо у блоці має виконуватись один оператор, то оформлення його у вигляді складеного оператору (з фігурними дужками) не обов’язково. Приклад: if (a < 10) { j++; b = a + c; } else j--;

  8. Оператор вибору (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; }

  9. 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. Більш складний приклад використання 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."); } }

  10. Оператори циклів дозволяють повторно виконувати оператор (у тому числі складений оператор – блок) поки виконується певна умова, 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 <= 5; i++) { Console.WriteLine(i); } • цикл foreach – передбачає виконання оператору над усіма елементами масиву чи колекції: int[] fibarray = newint[] { 0, 1, 2, 3, 5, 8, 13 }; foreach (int i in fibarray) { System.Console.WriteLine(i); }

  11. Оператори переходу здійснюють безумовний перехід на певну ділянку коду. Операторами переходу є: • break – призначений для завершення найближчого внутрішнього циклу чи оператору switch і переходу до наступного оператору, який йде за ним; • continue – передає керування на наступну ітерацію циклу, в якому він знаходиться; • return – перериває виконання методу, в якому він знаходиться і повертає керування методу, який його викликав. Якщо метод має повертати значення, то при виклику оператора слід вказати значення, що повертається, виклик оператору є обов’язковим. Якщо метод не передбачає повернення значення, то виклик цього оператору не є обов’язковим; • goto – здійснює перехід на певний іменований оператор (мітку). У сучасних програмах на C# найчастіше використовується лише в операторі switch для того, щоб перейти на інший варіант. У багатьох інших випадках використання цього оператору є вкрай небажаним, оскільки ставить під загрозу структуру програми.

  12. 6.Структурування програм: функції та класи Для поділу коду програм на фрагменти з метою забезпечення повторного виклику, а також спрощення розробки, розуміння і збільшення наглядності, використовується підпрограми – іменовані блоки коду, які можуть бути викликані всередині операторів. Підпрограми, які не повертають результат у точці виклику називаються процедурами і не можуть бути складовими виразів, а ті, які повертають, називаються функціями і можуть бути складовими виразів. У сучасних об’єктно-орієнтованих мовах програмування будівельним блоком програм є більш комплексна і цілісна абстракція – клас, який являє собою поєднання коду і даних. Підпрограми, які задекларовані всередині класу, називаються методами. У мові програмування C# усі підпрограми декларуються в рамках класу, тому всі вони є методами.

  13. 7. Параметри функцій: вхідні, результуючі.

  14. Повернення значень Приклад:

  15. Приклади повернення значення Повернення значення всередині виразу Повернення об’єкту

  16. Використання return для void-методів Return може використовуватись для виходу із таких методів:

  17. Актуальні параметри: Формальні параметри:

  18. 8. Рекурсивні функції • Рекурсія – дуже поширений у програмуванні підхід, який передбачає можливість виклику алгоритмом самого себе проте з іншими параметрами. • Вкладеність таких викликів може бути досить великою, проте в певний момент часу вона має припинитися і результат повертається (чи продовжуються обчислення) по ланцюгу рекурсивних викликів. • Основні переваги рекурсії: • рекурсія наглядна і зручна для представлення вирішення певних задач; • деякі структури природного чи штучного походження є рекурсивними за своєю сутністю; • деякі задачі є рекурсивними за своєю природою, зокрема рекурсія є окремим випадком декомпозиції – поділу однієї складної задачі на декілька простіших.

  19. Поширені рекурсивні алгоритми Бінарний пошук Процедури обходу дерева Фрактали – нескінченна самоподібна геометрична фігура, кожен фрагмент якої повторюється при зменшенні масштабу. Задача про Ханойські вежі: В одному з буддійських храмів ченці вже тисячу років займаються перекладанням кілець. Вони розташовані трьома пірамідами, на яких нанизані кільця різних розмірів. У початковому стані 64 кільця були нанизані на першу піраміду й упорядковані по розмірі. Ченці повинні перекласти всі кільця з першої піраміди на другу, виконуючи єдину умову - кільце не можна покласти на кільце меншого розміру. При перекладанні можна використовувати всі три піраміди. Ченці перекладають одне кільце за одну секунду. Як тільки вони закінчать свою роботу, наступить кінець світу.

  20. Рекурсивне задання математичних функцій Рекурсивно визначена функція містить у своєму визначенні посилання на саму цю функцію. Розглянемо приклад визначення факторіалу. Факторіал 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…

  21. Рекурсивний алгоритм обчислення факторіалу using System; using System.Collections.Generic; using System.Text; namespace Factorial { classProgram { publicstaticlong fact(long n) { if (n == 0) { return 1; } else { return n * fact(n - 1); } } staticvoid Main(string[] args) { for (int i = 0; i <= 20; i++) { Console.WriteLine("{0}! = {1}", i, fact(i)); } Console.ReadLine(); } } }

  22. Рекурсивний алгоритм для обчислення чисел Фібоначчі using System; using System.Collections.Generic; using System.Text; namespace Example { classProgram { publicstaticlong Fibonacci(long N) { if ((N == 1) | (N == 0)) { return 1; } else { return Fibonacci(N - 1) + Fibonacci(N - 2); } } staticvoid Main(string[] args) { for (int i = 0; i <= 30; i++) { Console.WriteLine("{0}, {1}", i, Fibonacci(i)); } Console.ReadLine(); } } }

  23. Алгоритм Евкліда для знаходження найбільшого спільного дільника Алгоритм Евкліда дозволяє знайти НСД двох натуральних чисел. Суть алгоритму Евкліда – два числа порівнюють, та з більшого віднімають менше до тих пір, поки числа не стануть рівними. Число, якому вони стануть рівними і є їх найбільший спільний дільник. Число 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.

  24. Рекурсивний алгоритм для знаходження найбільшого спільного дільника using System; using System.Collections.Generic; using System.Text; namespace Example { classProgram { publicstaticint 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); } } } staticvoid Main(string[] args) { Console.WriteLine(nsd(873435, 21345).ToString()); Console.ReadLine(); } } }

More Related