Оператор циклу while. Загальна форма. Приклади рішення задач

Оператор циклу while. Загальна форма. Приклади рішення задач


Зміст


1. Призначення оператора циклу while. Загальна форма. Особливості використання

Оператор циклу while призначений для організації циклічного процесу, в якому кожна наступна ітерація визначається на основі істинності наперед заданої умови. Оператор циклу while ще називають оператором циклу з передумовою.

Загальна форма оператора циклу while має такий вигляд:

while (умова) оператор;

тут

  • умова – деяка умова згідно синтаксису мови C#. Інструкція оператор виконується до тих пір, поки значення умова = true. Як тільки значення умова стає рівним false, то циклічний процес припиняється і виконуються наступні після while оператори;
  • оператор – один або декілька операторів. Якщо у циклі while потрібно виконати декілька операторів одночасно, то ці оператори беруться у фігурні дужки { }.

Тіло циклу (оператор) виконується, поки значення умова є істинним (true). Оператор циклу повинен бути організований таким чином, щоб в кінцевому випадку значення умови стало рівним false. Інакше, програма “зависне”, тому що вийде вічний цикл.

Загальна форма оператора циклу while, в якому виконуються декілька (два і більше) операторів має наступний вигляд

while (умова)
{
    оператор1;
    оператор2;
    ...
    операторN;
}

 

2. Поняття вкладених циклів while

Цикл while може бути вкладеним в інші конструкції. Цими конструкціями можуть бути:

  • цикли for, while, do…while;
  • оператор умовного переходу if;
  • оператор вибору switch.

Кількість рівнів вкладення, в яких може використовуватись цикл while, є необмеженою.

 

3. Приклади розв’язку задач з оператором циклу while
3.1. Виведення результатів обчислення в циклі

Умова задачі. Одержати таблицю температур за Цельсієм tc від -50 до +50 градусів та їх еквівалентів за шкалою Фаренгейта tf, використовуючи співвідношення

Формула перетворення градусів Цельсія в градуси Фаренгейту

Розв’язок. Текст програми розв’язку даної задачі для додатку типу Console Application, з використанням циклу while наступний

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            // шкала температур Цельсій => Фаренгейт
            int tc; // поточне значення температури за Цельсієм
            double tf; // значення температури за Фаренгейтом

            tc = -50;

            Console.WriteLine("Шкала температур: Цельсій - Фаренгейт");
            while (tc <= 50)
            {
                tf = 9.0 / 5.0 * tc + 32;
                tc++;
                Console.WriteLine("{0} C   => {1} F", tc, tf);
            }
        }
    }
}

 

3.2. Рекурентні алгоритми. Обчислення n-го члена послідовності

Умова задачі. Визначити n-й член числової послідовності (n>2):

xn=xn1 + xn2; x0 = x1 = 1

Розв’язок.

Текст програми рішення даної задачі наступний:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {

        static void Main(string[] args)
        {
            // обчислення n-го члена послідовності
            int n; // n>2
            int x0, x1, x2;
            int i;

            // ввести значення n
            Console.Write("n = ");
            n = Convert.ToInt32(Console.ReadLine());

            // початкові присвоєння
            x0 = x1 = 1;
            x2 = x0 + x1;
            i = 1;

            while (i <= n - 3) // обчислення
            {
                x0 = x1;
                x1 = x2;
                x2 = x0 + x1;
                i++;
            }
            Console.WriteLine("{0} ", x2);
        }
    }
}

У результаті виконання вищенаведеного коду буде отримано наступний результат

n = 7
13

 

3.3. Обчислити значення числа π з заданою точністю

Умова задачі. Обчислити значення числа π, використовуючи формулу:

Формула числа Пі

Визначити, яку кількість доданків потрібно для визначення числа π з точністю 7 знаків після коми.

Розв’язок. Для розв’язку подібних задач цикл while підходить якнайкраще. Програмний код розв’язку задачі для додатку типу Console Application наведено нижче

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            // обчислити значення числа Пі
            double pi; // результат
            int denom; // знаменник
            int sign; // змінна, що змінює знак числа + на -, і навпаки
            double t; // додаткова змінна - поточна точність
            const double eps = 0.0000001; // точність 7 знаків після коми
            int k; // кількість доданків для отримання заданої точності

            // початкові приготування
            k = 0;
            pi = 0;          
            denom = 1;
            sign = 1;
            t = 1.0 / denom * sign;

            // цикл while - обчислення
            while (t > eps)
            {
                pi = pi + 4 * t * sign;
                sign = -sign; // змінити знак
                denom += 2; // змінити знаменник
                t = 1.0 / denom;
                k++; // збільшити на 1 кількість доданків
            }

            // вивід результату
            Console.WriteLine("Pi = {0}", pi);
            Console.WriteLine("k = {0}", k);
        }
    }
}

У результаті виконання вищенаведеного коду буде отримано наступний результат

Pi = 3.14159245358978
k = 5000000

 

4. Приклади розв’язку задач, в яких оператор while є вкладеним
4.1. Цикл while є вкладеним в оператор вибору switch

У прикладі цикл while є вкладеним в оператор вибору switch. В залежності від значення змінної a, вибирається відповідний варіант знаходження суми:

  • якщо a=1, то обчислюється s = 5+10+…+100;
  • якщо a=2, то обчислюється s = 5+10+…+20;
  • якщо a=3, то обчислюється s = 5+10;
  • інакше обчислюється s=100.


Програмний код додатку типу Console Application, який розв’язує дану задачу наведено нижче.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a;
            int s = 0;
            int i;          

            a = 7;

            // вибір алгоритму рішення задачі в залежності від значення a
            switch (a)
            {
                case 1:
                    i = 0;
                    while (i < 100)
                    {
                        i = i + 5;
                        s = s + i;
                    }
                    break;
               case 2:
                    i = 0;
                    while (i < 20)
                    {
                        i = i + 5;
                        s = s + i;
                    }
                    break;
               case 3:
                    i = 0;
                    while (i < 10)
                    {
                        i = i + 5;
                        s = s + i;
                    }
                    break;
                default:
                    s = 100;
                    break;
            }
            Console.WriteLine("s = {0}", s);
        }
    }
}

У результаті виконання вищенаведеного коду, на екран буде виведено наступний результат:

s = 100

 

4.2. Цикл while є вкладеним в операторі циклу for

Умова задачі. Знайти кількість дільників кожного з цілих чисел від 120 до 140.

Розв’язок. Нижче наведено програмний код, який розв’язує дану задачу для додатку типу Console Application:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            // кількість дільників кожного з цілих чисел від 120 до 140
            int i;
            int up;
            int t;
            int k;

            for (i = 120; i <= 140; i++)
            {
                // визначити максимально-допустиме значення дільника
                up = i / 2;
                k = 0; // кількість дільників
                t = 1;
                while (t <= up) // вкладений цикл while
                {
                    if (i % t == 0) // визначення, чи дільник, чи не дільник
                        k++;
                    t++;
                }

                // Вивести на екран дільник
                Console.WriteLine("{0}: k = {1}", i, k);
            }
        }
    }
}

У результаті виконання вищенаведеного коду, буде виведено наступний результат

120: k = 15
121: k = 2
122: k = 3
123: k = 3
124: k = 5
125: k = 3
126: k = 11
127: k = 1
128: k = 7
129: k = 3
130: k = 7
131: k = 1
132: k = 11
133: k = 3
134: k = 3
135: k = 7
136: k = 7
137: k = 1
138: k = 7
139: k = 1
140: k = 11

 


Зв’язані теми