<<<<<<< HEAD ======= >>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2 <<<<<<< HEAD ======= >>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2 Управляющие конструкции: if <<<<<<< HEAD ======= >>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2

<<<<<<< HEAD
=======
>>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2

Управляющие конструкции

Теперь приступим к более сложным вещам. Мы рассмотрим 3 наиболее часто употребляемых управляющих конструкций. Этот материал считается очень важным для понимания программирования в целом и его ни в коем случае нельзя разбирать поверхностно. Можно сказать, что он является фундаментом для всех алгоритмов, задач и функций, поэтому просьба быть чуточку внимательнее.

Основными конструкциями являются:

  • if
  • for
  • while
<<<<<<< HEAD

Условный оператор if

Перед тем, как приступать к самому оператору if, сделаем небольшое лирическое отступление и изучим логические операторы и операторы сравнения.

=======

Условный оператор if

Перед тем, как приступать к самому оператору if, сделаем небольшое лирическое отступление и изучим логические операторы и операторы сравнения.

>>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2

Операторы сравнения

С помощью операторов сравнения мы можем сравнивать объекты (числа/строки) друг с другом. Результатом операции сравнения является TRUE/FALSE, то есть логический тип.

Стандартные операторы сравнения:

  • a == b - равен ли объект a объекту b?
  • a != b - не равен ли объект a объекту b?
  • a > b - больше ли объект a чем объект b?
  • a < b - меньше ли объект a чем объект b?
  • a >= b - больше или равен объект a чем объект b?
  • a <= b - меньше или равен объект a чем объект b?

Зачастую объекты это числа.

<<<<<<< HEAD
5 == 5
## [1] TRUE
5 != 5
## [1] FALSE
5 > 5
## [1] FALSE
5 < 5
## [1] FALSE
5 >= 5
## [1] TRUE
5 <= 5
## [1] TRUE

Есть некоторый нюанс. Иногда происходит следующее.

0.1 + 0.2 == 0.3
## [1] FALSE
1/49 * 49 == 1
## [1] FALSE

Так происходит потому, что в R есть точность до определенного знака. Чтобы избежать этого можно использовать функцию all.equal.

all.equal(0.1+0.2, 0.3)
## [1] TRUE
all.equal(1/49 * 49, 1)
## [1] TRUE

Логические операторы

Несколько логических выражений можно объединять. Рассмотрим простой пример. Когда вы заходите в VK, вам нужно ввести логин и пароль. Чтобы авторизоваться вам нужно ввести правильно и логин, и пароль. Если же вы ввели что-то неправильно, то вы не войдете в систему. В данном примере мы использовали логический оператор И, который обозначается как &&.

login <- TRUE
password <- TRUE
login && password
## [1] TRUE
login <- TRUE
password <- FALSE
login && password
## [1] FALSE
login <- FALSE
password <- TRUE
login && password
## [1] FALSE
login <- FALSE
password <- FALSE
login && password
## [1] FALSE

Давайте попробуем соединить операторы сравнения вместе с логическими операторами. Пусть у нас есть число x, и нам нужно определить, находится ли оно в диапозоне от 0 до 100.

В данном случае должны выполняться два условия: число должно быть больше 0 И (т.е. одновременно) меньше 100.

x <- 200
x > 0 && x < 100
## [1] FALSE

Сначала выполняются операторы сравнения, после чего выражение упрощается до вида TRUE && FALSE. После чего выполняется логический оператор И.

Рассмотрим теперь логический оператор ИЛИ, который обозначается как ||. Для него важно выполнение хотя бы одного условия. Например, вам нужно оплатить покупку в 400 рублей. Нужно чтобы у вас были деньги на карте или были наличные.

card <- 29500
cash <- 100
card >= 400 || cash >= 400
## [1] TRUE
=======

Есть некоторый нюанс. Иногда происходит следующее.

Так происходит потому, что в R есть точность до определенного знака. Чтобы избежать этого можно использовать функцию all.equal.

Логические операторы

Несколько логических выражений можно объединять. Рассмотрим простой пример. Когда вы заходите в VK, вам нужно ввести логин и пароль. Чтобы авторизоваться вам нужно ввести правильно и логин, и пароль. Если же вы ввели что-то неправильно, то вы не войдете в систему. В данном примере мы использовали логический оператор И, который обозначается как &&.

Давайте попробуем соединить операторы сравнения вместе с логическими операторами. Пусть у нас есть число x, и нам нужно определить, находится ли оно в диапозоне от 0 до 100.

В данном случае должны выполняться два условия: число должно быть больше 0 И (т.е. одновременно) меньше 100.

Сначала выполняются операторы сравнения, после чего выражение упрощается до вида TRUE && FALSE. После чего выполняется логический оператор И.

Рассмотрим теперь логический оператор ИЛИ, который обозначается как ||. Для него важно выполнение хотя бы одного условия. Например, вам нужно оплатить покупку в 400 рублей. Нужно чтобы у вас были деньги на карте или были наличные.

>>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2

Ниже представлена таблица истинности для этих двух операторов.

a b a and b (a &&b) a or b (a || b)
TRUE TRUE TRUE TRUE
TRUE FALSE FALSE TRUE
FALSE TRUE FALSE TRUE
FALSE FALSE FALSE FALSE

Еще одним логическим оператором является НЕ, которое обозначается как !. Это отрицание в явном виде.

<<<<<<< HEAD
a <- TRUE
b <- FALSE
!a
## [1] FALSE
!b
## [1] TRUE

Переходим к if

А теперь можно разобрать условный оператор if. Зачастую действие алгоритма или какого-то кода может зависеть от условия. Например, у вас есть бот, который покупает акции. Когда цена акции меньше 100 он их покупает, а когда больше, продает.

Для такого типа задач и нужен условный оператор if. Он выглядит следующим образом.

if (condition) {
  # действия в случае TRUE 
}else{
  # действия в случае FALSE
}

Условие (condition) должно принимать значения либо TRUE, либо FALSE. То есть иметь логический тип.

В нашей задаче с ботом условие (condition) это price > 100.

if (price > 100) {
  # цена товара > 100
  # продаем
}else{
  # цена товара <= 100
  # покупаем
}

Попробуем написать реальный код.

Пример №1 Представим, что есть некоторый прибор, который измеряет температуру какого-то устройства. Если она больше 80, то нужно написать, что температура очень высокая и это опасно. В обратном случае пишем, что все хорошо.

temp <- 100
if (temp > 80) {
  print("Температура превысила порог в 80 градусов!")
}else{
  print("Температура в норме.")
}
## [1] "Температура превысила порог в 80 градусов!"
temp <- 50
if (temp > 80) {
  print("Температура превысила порог в 80 градусов!")
}else{
  print("Температура в норме.")
}
## [1] "Температура в норме."

Если нам не очень важно сообщения о том, что все в норме, а нужно знать, только когда наступают проблемы, то можно обойтись и без else:

temp <- 50
if (temp > 80) {
  print("Температура превысила порог в 80 градусов!")
}

Пример №2 Представим, что у нас есть потенциальных не 2, а 3 исхода. Например, нам нужно знать, что температура прибора в норме, что она близится к пороговым 80 градусам и что она достигла нашего максимального порога температуры. Тогда это можно сделать с помощью else if или if внутри if.

temp <- 70
if (temp >=  70 && temp < 80) {
  print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
  print("Температура достигла максимального значения!")
} else {
  print("Температура в норме")
}
## [1] "Температура близится к 80 градусам!"
temp <- 90
if (temp >=  70 && temp < 80) {
  print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
  print("Температура достигла максимального значения!")
} else {
  print("Температура в норме")
}
## [1] "Температура достигла максимального значения!"
temp <- 30
if (temp >=  70 && temp < 80) {
  print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
  print("Температура достигла максимального значения!")
} else {
  print("Температура в норме")
}
=======

Переходим к if

А теперь можно разобрать условный оператор if. Зачастую действие алгоритма или какого-то кода может зависеть от условия. Например, у вас есть бот, который покупает акции. Когда цена акции меньше 100 он их покупает, а когда больше, продает.

Для такого типа задач и нужен условный оператор if. Он выглядит следующим образом.

Условие (condition) должно принимать значения либо TRUE, либо FALSE. То есть иметь логический тип.

В нашей задаче с ботом условие (condition) это price > 100.

Попробуем написать реальный код.

Пример №1 Представим, что есть некоторый прибор, который измеряет температуру какого-то устройства. Если она больше 80, то нужно написать, что температура очень высокая и это опасно. В обратном случае пишем, что все хорошо.

## [1] "Температура превысила порог в 80 градусов!"
## [1] "Температура в норме."

Если нам не очень важно сообщения о том, что все в норме, а нужно знать, только когда наступают проблемы, то можно обойтись и без else:

Пример №2 Представим, что у нас есть потенциальных не 2, а 3 исхода. Например, нам нужно знать, что температура прибора в норме, что она близится к пороговым 80 градусам и что она достигла нашего максимального порога температуры. Тогда это можно сделать с помощью else if или if внутри if.

## [1] "Температура близится к 80 градусам!"
## [1] "Температура достигла максимального значения!"
>>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2
## [1] "Температура в норме"