Вказівка розгалуження. Консольний додаток

Як в С ++ та інших мовах програмування, в мові C # для вибору однієї з кількох можливостей використовуються дві конструкції - if і switch. Першу з них зазвичай називають альтернативним вибором, другу - розбором випадків.

Матеріали до уроку: презентація на окремі етапи уроку, створена у canva.com (відкрити). Для переходу між слайдами - Enter.

(перейти до презентації)

 

Оператор розгалуження. C# by Kravchukgalina

Презентація PowerPoint (відкрити)

1. Виконати інтерактивну вправу Умови розгалуження". Уважно прочитайте частини речень чи умов і розподіліть іх відповідно: Умова (якщо), Дія 1 (то), Дія 2 (інакше) (перейти в повноекранний режим).

2. Відкрити документ для спільного доступу, виконати завдання, вказане у ньому (кликнути тут).

3. Самозанурення. Переглянути презентацію "Оператор розгалуження":

Переглянути відео на You Tube

4. Хмарка тегів - за ключовими поняттями теми (переглянути)

5. Розгадати ребус

Оператор if

Почнемо з синтаксису оператора if:

if (вираз_1) оператор_1

else if (вираз_2) оператор_2

...

else if (вираз_K) оператор_K

else оператор_N

Вирази if повинні юути у круглих дужках і бути булевого типу. Точніше, вирази повинні давати значення true або false. За правилами синтаксису мови С ++, then-гілка оператора слід відразу за круглою дужкою без ключового слова then, типового для більшості мов програмування. Кожен з операторів може бути блоком - зокрема, if-оператором. Тому можлива і така конструкція:

if (вираз1) if (вираз2) if (вираз3) ...

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

Семантика оператора if проста і зрозуміла. Вирази if перевіряються в порядку їх написання. Як тільки отримано значення true, перевірка припиняється і виконується оператор (це може бути блок), який слідує за виразом, який отримав значення true. Із завершенням цього оператора завершується і оператор if. Гілка else, якщо вона є, відноситься до найближчого відкритого if.

Оператор switch

Частковим, але важливим випадком вибору з декількох варіантів є ситуація, при якій вибір варіанта визначається значеннями деякого виразу. Відповідний оператор C #, успадкований від C ++, але з невеликими змінами в синтаксисі, називається оператором switch.

Ось його синтаксис:

switch (вираз)

{

case сталий_вираз_1: [оператори_1 оператор_перехода_1]

...

case сталий_вираз_K: [оператори_K оператор_перехода_K]

[default: оператори_N оператор_перехода_N]

}

Гілка default може бути відсутньою. Зауважте, по синтаксису допустимо, щоб після двокрапки слідувала порожня послідовність операторів, а не послідовність, що закінчується оператором переходу. Вирази зі сталими в case повинні мати той же тип, що і switch-виразу. Семантика оператора switch трохи заплутана. Спочатку обчислюється значення switch-виразу. Потім воно по черзі в порядку проходження case порівнюється на збіг з константними виразами. Як тільки досягнуто збіг, виконується відповідна послідовність операторів case-гілки. Оскільки останній оператор цієї послідовності є оператором переходу (найчастіше це оператор break), то зазвичай він завершує виконання оператора switch. Семантика ускладнюється ще й тим, що case-гілка може бути порожньою послідовністю операторів. Тоді в разі збігу константного виразу цієї гілки зі значенням switch-виразу буде виконуватися перша непорожня послідовність чергової case-гілки. Якщо значення switch-виразу не збігається ні з одним константним виразом, то виконується послідовність операторів гілки default, якщо ж такої гілки немає, то оператор switch еквівалентний порожньому оператору.

Презентація "Розгалуження. Консоль"  (навчальні матеріали для вивчення теми)

Презентація (Prezi) кликнути тут

Розгалуження (консольний додаток)

Вправа 1. Дослідити існування трикутника при заданих довільних трьох чисел. 

Дослідження передбачає виключення можливо введених від'ємних чисел чи нуля, а також таких чисел, при яких неможливе існування трикутника.

            Double a, b, c; 
            Console.Write("a=");
            a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            c = double.Parse(Console.ReadLine());
            if (a <= 0 || b <= 0 || c <= 0)
                Console.WriteLine("Трикутник не iснуватиме, бо довжини сторiн мають бути додатними числами ");
            else
            {
                if ((a + b > c) && (a + c > b) && (b + c > a))
                    Console.WriteLine("Трикутник iснуватиме");
                else Console.WriteLine("Трикутник не iснуватиме, бо суми двох сторiн не бiльшi за трутю сторону ");
            }
            Console.ReadLine();

Вправа 2. Дано додатне п'ятизначне ціле число N. Знайти найменшу цифру цього числа.

Проаналізуйте програмний код та продумайте інший спосіб розв'язання задачі

int n = 12345, a, b, c, dt, t, s, d, o;
            c = n % 10000;
            dt = (n - c) / 10000;
            b = c % 1000;
            t = (c - b) / 1000;
            a = b % 100;
            s = (b - a) / 100;
            o = a % 10;
            d = (a - o) / 10;
            if ((dt < t) && (dt<s) && (dt<d) && (dt<o))
            {
                Console.WriteLine(dt);
             }
            if ((t < dt) && (t < s) && (t < d) && (t < o))
            {
                Console.WriteLine(t);
            }
            if ((s < dt) && (s < t) && (s < d) && (s < o))
            {
                Console.WriteLine(s);
            }
            if ((d < dt) && (d < t) && (d < s) && (d < o))
            {
                Console.WriteLine(d);
            }
            if ((o < dt) && (o < t) && (o < s) && (o < d))
            {
                Console.WriteLine(o);
            }
            Console.ReadLine();

a) (iз використанням змінної min).

 min = dt;
            if (t < min)
               min=t;
            else if (s < min)
               min = s;
            else if (d < min)
               min = d;
            else if (o < min) 
                 min = o;
            Console.WriteLine(min);
            Console.ReadLine();

Застосуйте функцію Min

Завдання 1. Ввести першу літеру назви країни.  Вивести назву її столиці та кількість населення. Вхідні дані задати так, щоб вибір був з п’яти-семи альтернатив.

Тренувальні вправи

1. Дано a, b, c, що належать множині дійсних чисел . Замінити найбільше значення нулем.

static void Main(string[] args)
        {
            Console.WriteLine("Ввести 3 числа");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            if (a > b && a > c)
            {
                a = 0;
                Console.WriteLine("a={0} b={1} c={2}  ", a, b, c);
            }
            else if (b > a && b > c)
            {
                b = 0;
                Console.WriteLine("a={0} b={1} c={2}  ", a, b, c);
            }
            else if (c > b && c > a)
            {
                c = 0;
                Console.WriteLine("a={0} b={1} c={2}  ", a, b, c);
            }
            Console.ReadLine();
        }

2. Визначити координатну чверть, в яку потрапляє точка із координатами x і y (x, y ≠ 0).

Console.WriteLine("Ввести координати точки x та y (x та y не дорiвюють 0)");
            Console.Write("x=");
            double x = double.Parse(Console.ReadLine());
            Console.Write("y=");
            double y = double.Parse(Console.ReadLine());
            if (x>0 && y>0)
                 Console.WriteLine("Дана точка належить 1 чвертi");
            else if (x < 0 && y > 0)
                Console.WriteLine("Дана точка належить 2 чвертi");
            else if (x < 0 && y < 0)
                Console.WriteLine("Дана точка належить 3 чвертi");
            else if (x > 0 && y < 0)
                Console.WriteLine("Дана точка належить 4 чвертi");
            Console.ReadLine();

3. Дано дійсні числа a, b, c. Знайти суму тих з них, які належать інтервалу [x, y].

Console.WriteLine("Ввести 3 числа");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            Console.WriteLine("Ввести кiнцi даного промiжку"); 
            Console.Write("x=");
            double x = double.Parse(Console.ReadLine());
            Console.Write("y=");
            double y = double.Parse(Console.ReadLine());
            double s = 0;
            if (a>=x && a<=y) s+=a;
            if (b>=x && b<=y) s+=b;
            if (c >= x && c <= y) s += c; 
            Console.WriteLine("s={0}",s);
            Console.ReadLine();

4. Дано три дійсних числа: a, b, c . Визначити, чи є вони членами арифметичної прогресії.

Console.WriteLine("Ввести 3 числа");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            if ((b-a)==(c-b) )
                 Console.WriteLine("Данi числа - члени арифметичноi прогресii");
            else
                Console.WriteLine("Данi числа - не члени арифметичноi прогресii");
            Console.ReadLine();

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

Console.WriteLine("Ввести довжини сторiн трикутника");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            if ((a*a==b*b+c*c) || (b*b==a*a+c*c) || (c*c==a*a+b*b))
                 Console.WriteLine("Даний трикутник - прямокутний");
            else
                Console.WriteLine("Даний трикутник - не прямокутний");
            Console.ReadLine();

6. Дано чотири числа, що є довжинами сторін чотирикутника. З’ясувати, чи можуть вони бути вершинами прямокутника.

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

Console.WriteLine("Ввести довжини сторiн чотирикутника");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            Console.Write("d=");
            double d = double.Parse(Console.ReadLine());
            if ((a==c && d==b) || (a*a+d*d==a*a+b*b))
                 Console.WriteLine("Даний чотирикутник - прямокутник");
            else
                Console.WriteLine("Даний чотирикутник - не прямокутник");
            Console.ReadLine(); 

Напишіть програму до зміненої умови (у дужках)

7. Обчислити значення функції для довільного х.

Console.WriteLine("Ввести довiльне число х");
            Console.Write("x=");
            double x = double.Parse(Console.ReadLine());
            double y,z;
            z=2 * x * x - 3;
            if (z == 0)
                y = 1;
            else if (z > 0)
                y = 2 * x;
            else y = x;
            Console.WriteLine("y={0}", y); 
            Console.ReadLine();

Приклад програми з використанням випадкових чисел.

1)         Random x = new Random(); // оголошення змінної для генерації чисел
            int a = x.Next(100);
            Console.WriteLine("Згенеровано число {0}",a);
            if (a>9 && a<100)
                    Console.WriteLine("Згенеровано двозначне число");
            else    Console.WriteLine("Згенеровано не двозначне число");
            Console.ReadKey();

2)         Random x = new Random(); 
            int a = x.Next(10);
            Console.WriteLine("Згенеровано число {0}",a);
            switch (a)
            {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    Console.WriteLine("Це робочий день");
                    break;
                case 6:
                case 7:
                    Console.WriteLine("Це вихiдний день");
                    break;
                default:
                    Console.WriteLine("Такого дня тижня немає");
                    break;
            }

Завдання для самостійного опрацювання.

1. Від річкового вокзалу відійшли одночасно у протилежних напрямках теплохід і турист. Теплохід рухався зі швидкістю v км/год, а турист уздовж річки стежкою - зі швидкістю v1 км/год. Якщо через N годин турист передумає і вирішить поплисти річкою назад на теплоході зі швидкістю v2 км/год, то чи встигне він сісти на теплохід, який має за графіком зупинку через Y годин після початку руху і стоїть на цій зупинці Z годин? Зважити на те, що всі ці події відбуваються протягом однієї доби.

2. Велосипедист Микола, стартувавши з точки (х0; у0) та рухаючись вздовж прямої А ( х - х0 ) + В ( у - у0 ) = 0, мріє про те, як він покатає на своєму велосипеді сусідку Катрусю. Чи здійсниться мрія Миколи, якщо недалеко, у точці (p; q), росте дерево?

3. На площині дано дві точки (х1;у1) та (х2;у2). Визначити, яка з них лежить далі від початку координат.

4. Автомобіль подолав відстань S км через населений пункт за T хв. Визначити, чи не порушив водій правил дорожнього руху, якщо швидкість автомобіля при цьому не повинна перевищувати 60 км/год.

5. На осі Ох визначено три точки з попарно різними дійсними координатами х1, х2, х3. Вивести значення тих двох точок, між якими лежить третя.

6. За рейтинговою системою оцінка визначається таким чином: якщо сумарний бал учня становить 92% від максимального, то виставляється оцінка 12, якщо не нижче за 70%, то виставляється оцінка 8, якщо ж не нижче за 50%, то - оцінка 5, а в інших випадках - оцінка 2. Визначити оцінку учня, якщо він набрав N балів, а максимальне значення сумарного балу становить S.

7. Відома така таблиця співвідношення  ваги і зхросту людини за віком: від значення зросту людини беруться останні дві цифри; якщо вік людини до 25 років, то її вага повинна становити на 5 кг менше від отриманого двоцифрового числа, для людей від 25 до 45 років - дорівнювати  цьому двоцифровому числу, для старших 45 років - двоцифрове число необхідно збільшити на 5. Задані цілі додатні числа P - зріст людини і N - її вік (30<P<200, 10<N<100).

8. Дано значення дійсних величин a,b,c. Подвоїти ці значення, якщо  a>b>c, і замінити їх абсолютними значеннями, якщо це не так.

9. Дано дійсні числа a,b,c,d. Якщо вони утворюють спадну послідовність, то замінити їх значення модулями, якщо зростаючу, то все залишити без змін, в протилежному випадку - збільшити всі значення в 10 разів.

10. Залежно від розміру суми, розмір податку з неї розраховується за такою схемою: 1) якщо сума не перевищує деяку величину а, то податок не вираховується; 2)  якщо сума більша за а, але не перевищує b, то податок становить 10%; 3) якщо сума більша за b, але не перевищує с, то податок становить  25%; 4) якщо сума більша за с, то податок становить 50%. Визначити, який податок буде вираховано із суми розміром S.

11. Дано натуральне число n (n<1000). Визначити: найстаршу цифру цього числа; суму першої і останньої цифр; порядок числа.

Додаткові вправи. Опрацювати програмні коди (подібні завдання будуть розв'язані з оператором циклу)

static void Main(string[] args)
        {
            // 4 випадкові числа з різних проміжків. Знайти серед них суму тільки додатних. Знайти кількість від'ємних
            Random x = new Random(); // оголошення змінної для генерації чисел
            int s=0, k=0;
            int a = x.Next(-10, 5);
            int b = x.Next(-5,10);
            int c = x.Next(-1, 5);
            int d = x.Next(0, 10);
            Console.WriteLine("Згенеровано число {0} {1}  {2}  {3}", a,b,c,d);
            if (a > 0) s+=a;
            if (b > 0) s+=b;
            if (c > 0) s+=c;
            if (d > 0) s+=d;
            if (a <0) k++;
            if (b <0) k++;
            if (c <0) k++;
            if (d <0) k++;
            Console.WriteLine("Сума згенерованих додатних чисел ={0}", s);
            Console.WriteLine("Кiлькiсть згенерованих вiд'eмних чисел {0}",k);
            Console.ReadKey();
        }

static void Main(string[] args)
        {
            // 3 випадкові числа з різних проміжків. Знайти серед них кількість чисел, що менші 15
            Random x = new Random();
            int k = 0;
            int a = x.Next(-10, 20);
            int b = x.Next(-5,25);
            int c = x.Next(-1, 15);
            Console.WriteLine("Згенеровано числа {0} {1}  {2} ", a,b,c);
            if (a <15) k++;
            if (b <15) k++;
            if (c <15) k++;
            Console.WriteLine("Кiлькiсть згенерованих чисел менших 15: {0}",k);
            Console.ReadKey();
        }

static void Main(string[] args)
        {
            // Дослідити розв'язки квадратного рівняння 
            Console.WriteLine("Ввести коефiцieнти квадратного рiвняння");
            Console.Write("a=");
            double a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            double b = double.Parse(Console.ReadLine());
            Console.Write("c=");
            double c = double.Parse(Console.ReadLine());
            double d = b * b - 4 * a * c;
            if (d<0) Console.WriteLine("Розв'язкiв немає");
            else if (d==0)
            {
                double x = -b / (2 * a);
                Console.WriteLine("Один корiнь х= {0}", x);
            }
            else if(d>0)
            {
                double x1 = (-b - Math.Sqrt(d))/ (2 * a);
                double x2 = (-b + Math.Sqrt(d)) / (2 * a);
                Console.WriteLine("Два розв'язки х1={0}   x2={1}", x1, x2);
            }
            Console.ReadKey();
        }

// Дослідити, чи можна вписати (описати) коло даного радіуса у квадрат з даною довжиною сторони 
            Console.Write("Ввести радiус кола r=");
            double r = double.Parse(Console.ReadLine());
            Console.Write("Ввести довжину сторони квадрата а=");
            double a = double.Parse(Console.ReadLine());
            if (r==a/2) 
                Console.WriteLine("Так, коло можна вписати у квадрат");
            else 
                Console.WriteLine("Нi, дане коло не можна вписати у квадрат");
            if (r==a*Math.Sqrt(2)/2)
                Console.WriteLine("Так, коло можна описати навколо квадрата");
            else
                Console.WriteLine("Нi, дане коло не можна описати навколо квадрата");
            Console.ReadKey();

// Дослiдити вид чотирикутника за введеними координатами його вершин 
            Console.Write("Ах=");
            double ax = double.Parse(Console.ReadLine());
            Console.Write("Ay=");
            double ay = double.Parse(Console.ReadLine());
            Console.Write("Bx=");
            double bx = double.Parse(Console.ReadLine());
            Console.Write("By=");
            double by = double.Parse(Console.ReadLine());
            Console.Write("Cх=");
            double cx = double.Parse(Console.ReadLine());
            Console.Write("Cy=");
            double cy = double.Parse(Console.ReadLine());
            Console.Write("Dx=");
            double dx = double.Parse(Console.ReadLine());
            Console.Write("Dy=");
            double dy = double.Parse(Console.ReadLine());
            double d1,d2,a,b,c,d;
            d1=Math.Sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));
            d2=Math.Sqrt((bx-dx)*(bx-dx)+(by-dy)*(by-dy));
            a=Math.Sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay));
            b=Math.Sqrt((bx-cx)*(bx-cx)+(by-cy)*(by-cy));
            c=Math.Sqrt((dx-cx)*(dx-cx)+(dy-cy)*(dy-cy));
            d=Math.Sqrt((ax-dx)*(ax-dx)+(ay-dy)*(ay-dy));
            if (a == b && b == c && c == d && d1 == d2) Console.WriteLine("Квадрат");
            else if (a == b && b == c && c == d && d1 != d2) Console.WriteLine("Ромб");
            else if (a == c && b == d && d1 == d2) Console.WriteLine("Прямокутник");
            else if (a == c && b == d && d1 != d2) Console.WriteLine("Паралелограм");
            else Console.WriteLine("Iнший чотирикутник");
            Console.ReadKey();

Проаналізуйте, зробіть висновки, запам'ятайте.

Класична мова Сі Сучасна мова С# Мова Паскаль

int a, b, s;

b = 1;

printf("a=\n");

scanf("%c", &a);

s = a*a + b*b;

printf("s=%i\n", s);

return 0;

• printf() – форматоване виведення на екран;

• scanf() – форматоване введення з клавіатури

int a, b, s;

b = 1;

Console.Write("a=");

a = int.Parse(Console.ReadLine());

s = a*a + b*b;

Console.Write("s={0}", s);

Console.ReadLine();

var а, b, s: integer;

begin

b=1;

Writeln ('a=');

Readln (a);

s = a*a + b*b;

Writeln ('s=', s);

end.

Продовження на наступній сторінці.