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

 


Связанные темы