Задание №1

Даны 2 числа a и b. Нужно вывести на экран значение числа, которое больше.

Решение:

a <- 10
b <- 5
if (a > b) {
  print(a)
} else {
  print(b)
}
## [1] 10

Этот код можно перевести так: "Если число a больше числа b, вывести на экран a, иначе вывести b.

Задание №2

Дано число. Нужно узнать отрицательное оно или нет.

Решение:

Эта задача похожа на первую. Но сравнивать будем с 0.

a <- 10
if (a >= 0) {
  print("Неотрицательное")
}else{
  print("Отрицательное")
}
## [1] "Неотрицательное"

Задание №3

Условие задачи 2, но теперь нужно определять, равно ли число нулю. То есть, если число равно 0, то выводить “Число равно 0!”.

Решение:

a <- 0
if (a >= 0) {
  if (a == 0) {
    print("Число равно 0!")
  }else{
    print("Положительное")
  }
}else{
  print("Отрицательное")
}
## [1] "Число равно 0!"

Задание №4

Даны 3 числа: a,b и c. Нужно вывести на экран значение числа, которое больше.

Решение:

Эту задачу можно представить в виде боя. Представим, что у нас есть три бойца: a,b и c. Мы не можем определить лучшего бойца за один раунд. За раз могут драться только два бойца. Так же и у нас, мы можем сравнить за один if только два числа. Давайте сравним двух бойцов, лучшего из них сравним с третьим.

a <- 10
b <- -2
c <- 0
if (a > b) {
  if (a > c){
    print(a)
  }else{
    print(c)
  }
}else{
  if (b > c){
    print(b)
  }else{
    print(c)
  }
}
## [1] 10

Либо с помощью логического И (&&):

if (a > b && a > c){
  print(a)
} else if (b > c && b > a){
  print(b)
} else {
  print(c)
}
## [1] 10

Задание №5

Дано число a. Вывести на экран четное оно или нет.

Решение:

Чтобы понять четное число или нет, нужно посмотреть на остаток от деления на 2. Если он равен 0, то число четное. Если равен 1, то нечетное. Для нахождения остатка в R используется %%.

a <- 18
if (a %% 2 == 0){
  print("Число четное!")
}else{
  print("Число нечетное!")
}
## [1] "Число четное!"

Задание №6

Дан массив, состоящий из рандомных чисел. Длина массива равна 15. Вывести на экран с 5 по 12 элементы массива.

Решение:

v <- sample(x = 1:10, size = 15, replace = TRUE)
for (i in 5:12) {
  print(v[i])
}
## [1] 7
## [1] 5
## [1] 1
## [1] 3
## [1] 3
## [1] 7
## [1] 7
## [1] 1

Задание №7

Дан массив, состоящий из рандомных чисел произвольной длины. Вывести на экран все элементы массива. Сделать код оптимальным в том смысле, что если длина массива поменяется вам не нужно будет переписывать код.

Решение:

v <- sample(x = 1:10, size = 8, replace = TRUE)
for (i in 1:length(v)) {
  print(v[i])
}
## [1] 1
## [1] 3
## [1] 4
## [1] 8
## [1] 2
## [1] 7
## [1] 9
## [1] 2

Задание №8

Имеется 2 числа: вывести все целые числа, которые находятся между ними.

Решение:

a <- 4
b <- 10
for (i in a:b) {
  print(i)
}
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

Задание №9

Дан массив. Найти сумму всех элементов этого массива.

Решение:

v <- c(1, 10, -5, 3)
s <- 0
for (i in 1:length(v)) {
  s <- s + v[i]
}
print(s)
## [1] 9

Задание №10

Дан массив. Найти произведение всех элементов этого массива.

Решение:

v <- c(1, 10, -5, 3)
p <- 1
for (i in 1:length(v)) {
  p <- p * v[i]
}
print(p)
## [1] -150

Задание №11

Найти факториал числа \(n\) (\(n!\)). Помним, что \(0! = 1\)

Решение:

n <- 5
f <- 1
if(n == 0 || n == 1){
  print(1)
} else {
  for (i in 2:n) {
    f <- f*i
  }
}

Задание №12

Дано число k. Нужно вывести треугольник с изчезающим первым значением. Например, k = 9, тогда вывод должен быть следующим.

Решение:

k <- 9
for (i in k:1) {
  print(i:1)
}
## [1] 9 8 7 6 5 4 3 2 1
## [1] 8 7 6 5 4 3 2 1
## [1] 7 6 5 4 3 2 1
## [1] 6 5 4 3 2 1
## [1] 5 4 3 2 1
## [1] 4 3 2 1
## [1] 3 2 1
## [1] 2 1
## [1] 1

Задание №13

Для настольной игры используются карточки с номерами от 1 до N. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек.

Решение:

N <- 5
x <- sample(1:N, N-1)
s1 <- 0
s2 <- 0
for (i in 1:N) {
  s1 <- s1 + i
}
for (i in 1:length(x)) {
  s2 <- s2 + x[i]
}
print(s1 - s2)
## [1] 1

Задание №14

Задан массив и числа a, b. Вывести все индексы переменных, где выполняется \(a < x[i] < b\).

Решение:

a <- 0
b <- 10
x <- c(5, -10, 1, 100)
for (i in 1:length(x)) {
  if (a < x[i] && x[i] < b) {
    print(i)
  }
}
## [1] 1
## [1] 3

Задание №15

Дан массив. Посчитать сумму всех четных элементов массива.

Решение:

x <- c(2, -1, 10, 15, 18, 21)
s <- 0
for (i in 1:length(x)) {
  if (x[i]%%2 == 0) {
    s <- s + x[i]
  }
}
print(s)
## [1] 30

Задание №16

Есть переменная action. Она может быть равна либо “Сложить”, либо “Перемножить”. В зависимости от этой переменной нужно сложить или перемножить все элементы массива.

Решение:

action <- 'Cложить'
x <- c(1, 10, -5, 8, 23)
if (action == 'Сложить') {
  s <- 0
  for (i in 1:length(x)) {
    s <- s + x[i]
  }
  print(s)
}else{
    s <- 1
  for (i in 1:length(x)) {
    s <- s * x[i]
  }
  print(s)
}
## [1] -9200

Задание №17

По данному натуральном n вычислите сумму \(1!+2!+3!+...+n!\). В решении этой задачи можно использовать только один цикл.

Решение:

n <- 5
k <- 1
s <- 0
for (i in 1:n) {
  k <- k * i
  s <- s + k
}
print(s)
## [1] 153

Задание №18

Есть матрица состоящая из нулей. Нужно заполнить её таким образом, чтобы значение элемента, который находится в i-ой строчке и j-ом столбце, равно i + j.

Решение:

m <- matrix(data = 0, nrow = 4, ncol = 5)
for (i in 1:nrow(m)) {
  for(j in 1:ncol(m)) {
    m[i, j] <- i + j
  }
}
print(m)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    2    3    4    5    6
## [2,]    3    4    5    6    7
## [3,]    4    5    6    7    8
## [4,]    5    6    7    8    9

Задание №19

Даны числа a и b (a < b). Нужно увеличивать число a на единицу и уменьшать число b на единицу пока число a меньше числа b.

Решение:

a <- 5
b <- 15
while (a < b) {
  a <- a + 1
  b <- b - 1
}
print(a)
## [1] 10
print(b)
## [1] 10

Задание №20

Дан массив длины n, состоящий из одних 0. Вы выбираете рандомное число от 1 до n (с помощью функции sample). Это рандомное число показывает индекс элемента массива, который нужно изменить с 0 на 1. После чего вы опять выбираете рандомное число. Это делается до тех пор пока массив не будет состоять из одних 1. Например: был массив с(0,0,0,0). Выпало рандомное число 3. Теперь массив выглядит так : c(0,0,1,0). Вы продолжаете так делать, пока все нули не исчезнут. Нужно посчитать, сколько раз выбиралось рандомное число.

Решение:

n <- 10
x <- rep(0, n) 
i <- 0 # переменная, отвечающая за количество итераций
while (sum(x) != n) {
  k <- sample(1:n, 1)
  x[k] <- 1
  i <- i + 1
}

Задание №21 (!!)

Нужно подкинуть монетку 10 раз. Сколько раз выпала “Решка” и “Орел” в общем числе подкидываний? Теперь подкиньте монетку 100/1000/10000 раз. Какую закономерность вы видите?

Подсказка: Для того чтобы подкинуть монетку, можно использовать функцию sample, которая из двух значений (0 и 1, где 0 – “Решка”, а 1 – “Орел”) случайным образом выдает одно. И так n раз.

Решение:

vec <- c()
vec2 <- c()
n <- 10 

for (i in 1:n){
  x <- sample(0:1, size = 1)
  if (x == 0){
    vec <- append(vec, 'Решка')
  } else {
    vec2 <- append(vec2, 'Орел')
  }
}

print(length(vec) / n)
## [1] 0.5
print(length(vec2) / n)
## [1] 0.5

Закономерность состоит в том, что с ростом числа подбрасываний, вы получаете одинаковую вероятность для выпадение “Орла” и “Решки” (у каждого 0.5). Этот вывод – один из ключевых в теории вероятностей.