C#. Вкладені оператори умовного переходу

Вкладені оператори умовного переходу. Оператор умови if як складова інших операторів. Приклади

Дана тема є продовженням теми:


Зміст


Пошук на інших ресурсах:

1. Поняття про вкладені оператори умовного переходу if

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

Якщо оператор умовного переходу вкладений в інший оператор умовного переходу, то програмний код може бути приблизно таким

if (condition1)
{
  ...

  if (condition2)
  {
    ...
  }

  ...
}

Якщо оператор умовного переходу вкладений в тіло оператора циклу for, то в найпростішому випадку програмний код такого вкладення наступний:

for (...)
{
  ...

  if (...)
  {
    ...
  }
  else
  {
    ...
  }

  ...
}

За подібним принципом можна реалізувати вкладення для будь-якого іншого керуючого оператора (while, do-while, when).

 

2. Оператор умовного переходу як складова інших операторів. Приклади
2.1. Оператор умовного переходу в тілі інших операторів умовного переходу

Умова задачі. Задано рік та номер місяця в цьому році. Визначити, скільки днів у цьому місяці.

Розв’язок.

fun main(args:Array<String>)
{
  // Вкладені оператори if.
  // Визначити кількість днів у заданому місяці заданого року

  // 1. Оголошення змінних
  val year : Int   // заданий рік
  val month : Int  // заданий місяць
  val days : Int   // результат - кількість днів

  // 2. Ввід даних
  print("year = ")
  year = readLine().toString().toInt()
  print("month = ")
  month = readLine().toString().toInt()

  // 3. Перевірка, чи коректно введені дані
  if ((year < 0) || (month<1) || (month>12))
  {
    println("Incorrect input.")
    return
  }

  // 4. Обчислення - вкладені оператори if
  if ((month==4)||(month==6)||(month==9)||(month==11))
    days = 30
  else
  if (month==2) // перевірка, чи місяць лютий
  {
    // Визначення високосного року - вкладений if
    if (year % 400 == 0)
      days = 29
    else
    if (year % 100 == 0)
      days = 28
    else
    if (year % 4 == 0)
      days = 29
    else
      days = 28
  }
  else
    days = 31

  print("days = " + days)
}

Результат виконання програми

year = 2020
month = 2
days = 29

 

2.2. Оператор умовного переходу в тілі циклу for. Приклад

Умова задачі. Вивести на екран всі цілі числа в діапазоні від a до b, які є кратні числу c.

Розв’язок.

fun main(args:Array<String>)
{
  // Вкладений оператор if в тілі оператора циклу.

  // 1. Оголошення змінних
  val a : Int
  val b : Int
  val c : Int

  // 2. Ввід чисел
  print("a = ")
  a = readLine().toString().toInt()
  print("b = ")
  b = readLine().toString().toInt()
  print("c = ")
  c = readLine().toString().toInt()

  // Перевірка, чи коректний ввід
  if ((a>b) || (c<=0))
  {
    println("Incorrect input.")
    return
  }

  // 3. Вивід чисел
  print("[" + a + "; " + b + "] % " + c + " => ")
  for (i:Int in a .. b) // цикл for
    if (i%c == 0) // оператор if в тілі циклу for
  print(" " + i)
  println()
}

Результат виконання програми

a = -22
b = 34
c = 3
[-22; 34] % 3 => -21 -18 -15 -12 -9 -6 -3 0 3 6 9 12 15 18 21 24 27 30 33

 

2.3. Оператор умовного переходу в операторі while. Приклад

Умова задачі. Дано натуральне число n та дійсні числа a1, a2, …, an. Визначити суму тих дійсних чисел, які більше числа x.

Розв’язок.

fun main(args:Array<String>)
{
  // Обробка даних під час вводу з клавіатури
  // 1. Оголошення змінних
  val n : Int
  var a : Double
  val x : Double
  var i : Int
  var summ = 0.0   // Шукана сума - результат

  // 2. Ввід даних
  print("n = ")
  n = readLine().toString().toInt()

  print("x = ")
  x = readLine().toString().toDouble()

  // 2. Цикл while вводу чисел та обчислення суми
  println("Enter numbers:")

  i = 0
  while (i<n)
  {
    // Ввести число a
    print("=> ")
    a = readLine().toString().toDouble()

    // Обчислити суму
    if (a>x)
      summ += a

    // збільшити лічильник
    i++;
  }

  // 4. Вивести результат
  println("summ = " + summ)
}

Результат виконання програми

n = 6
x = 2.5
Enter numbers:
=> 3.1
=> 2.8
=> 1.4
=> 2.5
=> 2.2
=> 4.3
summ = 10.2

 

2.4. Оператор умовного переходу в операторі do-while. Приклад

Умова задачі.

Дано послідовність цілих чисел, яка закінчується нулем. Знайти масимальне та мінімальне значення у цій послідовності.

Розв’язок.

Для вводу даних до отримання нуля найкраще підходить цикл do-while.

 

fun main(args:Array<String>)
{
  // Обробка даних під час вводу з клавіатури
  // 1. Оголошення змінних
  var number : Int // число, яке буде вводитись
  var max = 0
  var min = 0
  var f_first = true // сигналізує першу ітерацію циклу

  // 2. Цикл вводу чисел
  print("Enter numbers:")

  do {
    print("=> ")
    number = readLine().toString().toInt()

    if (number==0) break

    // Якщо перша ітерація
    if (f_first) {
      max = number
      min = number
      f_first = false
    }

    // Визначити максимум та мінімум
    if (max<number) max = number
    if (min>number) min = number
  } while (number!=0)

  // 3. Вивести результат
  println("max = " + max)
  println("min = " + min)
}

Тестовий приклад

Enter numbers:
=> 5
=> 1
=> 3
=> 4
=> 0
max = 5
min = 1

 


Споріднені теми