Basic programming course: Lesson #5 Control structures. Part 2. Cycles.steemCreated with Sketch.

in Ukraine on Steem3 days ago

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

Детально поясніть цикли. Що це таке і як вони використовуються? У чому різниця між циклами «While» і «Do-While»?

Наприклад що від 1 дійти до 100, слід виконати 100 раз команду a=a+1 - a=a+1;a=a+1;a=a+1;a=a+1;a=a+1;a=a+1;......a=a+1; А можна сказати так - додавай 1 доки не буде 100.

image.png

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

do...while

image.png

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

while

image.png

Отже цикли в будь якому випадку можуть змінювати хід програми на протилежний, ні - команди не починають виконуватися у зворотному порядку 1→2→3→4 не стане 1←2←3←4 . Просто програма після пункту 4 продовжить виконання з пункту 1 .

Відмінність
Так як в циклі do...while спочатку йдуть команди, після розміщеного на початку циклу do, а вже потім стоїть перевірка умови - то ми не можемо відмінити вже виконані команди, тобто вони безповоротно виконалися. Ми лиш можемо вирішити повторювати цикл далі, чи ні.
Так як в циклі while спочатку стоїть перевірка умови, і якщо вона відразу хибна, то команди що розміщені в циклі будуть пропущені.
Отже, цикл do...while - як мінімум виконається один раз, а вже потім може як завершитися так і повторитися.
а цикл while може так ні разу і не виконатися/


Дослідіть, як використовується структура Switch-case, і наведіть приклад.

Дуже часто буває така конструкція вкладених умов на зразок таких: це число 1 - ні, то може це число 2 - ні, то може це число 3- і так далі. Тобто ми перебираємо різні варіанти. Чи наприклад у нас є певний шаблон - і ми обираємо щось за цим шаблоном.

image.png

То для такої конструкції придумало особливий запис оператора if - оператор вибору.
На багатьох мовах це switch.... case
image.png
правда на цьому малюнку if вже зветься switch
У багатьох мовах switch.... case перебирає лиш поодинокі дискретні цілочисельні значення.(C/C++/Java)
В деяких мовах можуть бути діапазони значень: case 15..25:, в деяких мовах можуть бути рядкові величини - case "word".
Розглянемо класичний приклад вибору дня тижня за його номером.

#include <stdio.h>

int main() 
{
    int day;
    printf("Enter the day number (1-7): ");
    scanf("%d", &day);

    if (day == 1) 
      printf("Monday\n");
        else if (day == 2) 
          printf("Tuesday\n");
            else if (day == 3) 
              printf("Wednesday\n");
                else if (day == 4) 
                  printf("Thursday\n");
                    else if (day == 5) 
                      printf("Friday\n");
                        else if (day == 6) 
                          printf("Saturday\n");
                            else if (day == 7) 
                              printf("Sunday\n");
                                else printf("Invalid day number!\n");
    return 0;
}

Або без зсуву тексту праворуч, так як у великому переборі зсув буде дуже великий.

#include <stdio.h>

int main() 
{
    int day;
    printf("Enter the day number (1-7): ");
    scanf("%d", &day);

    if (day == 1) 
        printf("Monday\n");
    else if (day == 2) 
        printf("Tuesday\n");
    else if (day == 3) 
        printf("Wednesday\n");
    else if (day == 4) 
        printf("Thursday\n");
    else if (day == 5) 
        printf("Friday\n");
    else if (day == 6) 
        printf("Saturday\n");
    else if (day == 7) 
        printf("Sunday\n");
    else 
        printf("Invalid day number!\n");

    return 0;
}

Аналогічний код записаний через switch ..case запишеться так:

#include <stdio.h>

int main() 
{
    int day;
    printf("Enter the day number (1-7): ");
    scanf("%d", &day);

    switch (day) 
    {
        case 1: printf("Monday\n");    break;
        case 2: printf("Tuesday\n");   break;
        case 3: printf("Wednesday\n"); break;
        case 4: printf("Thursday\n");  break;
        case 5: printf("Friday\n");    break;
        case 6: printf("Saturday\n");  break;
        case 7: printf("Sunday\n");    break;
        default: printf("Invalid day number!\n");
    }
    return 0;
}

На мові С/С++ та й на похідних від неї спрацювання одного case слід переривати break; так як після спрацювання аналізу вже не буде - і надрукуються всі інші дні тижня. Одного разу можливо можна буде цим скористатися - але в більшості випадків break; використовують.

При цьому після case часто пишуть константи, а не числові значення.
case FRIDAY: printf("Friday\n"); break; звісно для цього десь на початку треба оголосити ці константи - const int FRIDAY=5; Хоча числове значення тепер вже великої ролі не грає - і тут взагалі існує спеціальний тип перелічення enum, але це інша історія.


Поясніть, що робить наступний код:

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

Algorithm switchcase
    Define  op, n, ns, a As Integer;
    Define exit As Logic;
    
    exit = False;
    a=0;
    
    Repeat 
        Print  "Select an option:";
        Print  "1. Sum numbers.";
        Print  "2. Show results."
        Print  "3. End program."; 
        Read op;
        
        Switch op Do
            case 1:
                Print "How much nums do you want to sum?";
                Read n; 
                For i from 1 to n Do
                    Print "Enter a number: ";
                    Read ns; 
                    a = a + ns;
                EndFor
                Print "Completed! Press any button to continue";
                Wait Key;
                Clear Screen;
            case 2:
                Print "This is the current result: " a;
                Print "Press any button to continue.";
                Wait Key;
                Clear Screen;
            caso 3: 
                Clear Screen;
                Print "Bye =)";
                exit = True;
            Default:
                Print "Invalid option."; 
                Print "Press any button to continue";
                Wait Key;
                Clear Screen;
        EndSwitch
        
    Until exit
EndAlgorithm

Спочатку тут створюється логічна змінна exit аналізуючи яку програма буде приймати рішення завершити роботу чи ні. Repeat починає головний цикл - Until exit його завершує. Далі виводиться меню з трьох пунктів, користувач обирає 1-2-3, введене значення вноситься в змінну op Далі оператор switch буде аналізувати цю змінну, зіставляючи її значення з значеннями перерахованими в наступних 'case'. Якщо ж такого значення не буде - спрацює варіант описаний в default. як видно у цьому псевдокоді немає break ймовірно кожен наступний 'case` відміняє попередній, що логічно. Та правда в С/С++ та інших мовах чомусь так не зробили.


Напишіть програму , яка запитує у користувача число, більше за 10 (Do-While), а потім додайте всі числа за допомогою накопичувача (While). Приклад: користувач вводить 15. Програма складає 1+2+ 3+4+5+6+7+8+9+10+11+12+13+14+15.

Так як маємо хоч один раз запитати - то дійсно краще використати do..while і якщо користувач введе не те що слід - будемо повторювати док не введе число більше 10, як сказано в завданні. Це називається захист від дурня, або якщо політкоректно то валідація даних. А далі можна будь яким циклом обчислити суму.

#include <iostream>
using namespace std;

int main() 
{
    int number, sum = 0, i = 1; 
    do 
    {
        cout << "Enter a number greater than 10: ";
        cin >> number;
    } while (number <= 10);  
    
    while (i <= number) 
    {
        sum += i;  
        i++;       
    }    
    cout << "The sum of numbers from 1 to " << number << " is: " << sum << endl;
    return 0;
}

Незважаючи на те що циклів існує кілька видів, тут три - for, while, do...while абсолютно будь що можна зробити тим чи іншим видом циклу. Тут лиш власні вподобання.

Наприклад ця ж програма але зроблена лиш з допомогою for

    for (;;)
    {
        cout << "Enter a number greater than 10: ";
        cin >> number;
        if (number > 10)        
            break;         
    }
    for (int i = 1; i <= number; i++)     
        sum += i;

для короткості коду я навів лиш фрагмент з циклами.

image.png

Дякую що прочитали, і окрема дяка за залишений коментар))

About me

Posted using SteemPro

Sort:  
 3 days ago 

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

Який гарний приклад :)
Думаю світ також створений за програмою 😅

 3 days ago 

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

 3 days ago 

Спочатку треба припинити війни. А то страшно буде 😆

Loading...
Loading...

Coin Marketplace

STEEM 0.19
TRX 0.16
JST 0.030
BTC 65739.28
ETH 2626.92
USDT 1.00
SBD 2.66