Задание №1

Вычислите значение выражения \(\cos(\frac{\pi}{4})\). Результат округлите до 2 знака после запятой.

Решение:

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

cos(pi/4)
## [1] 0.7071068

А теперь обернем это в функцию округления в качестве первого аргумента. А второй аргумент поставим 2.

round(cos(pi/4), 2)
## [1] 0.71

Задание №2

Запустите следующий код. round(pi; 3). Работает ли она, если нет, то почему?

Решение:

Помним, что аргументы функций перечисляются через запятую, а не через точку с запятой.

Задание №3

Сложите какое-то число с NA. Что получилось и почему так получилось? Попробуйте повыполнять другие арифметические операции. Что-то изменилось? Что будет, если сложить NA с NA?

Решение:

NA + 2
## [1] NA
NA * 10
## [1] NA
NA - 20
## [1] NA
NA/15
## [1] NA
NA + NA
## [1] NA

Помним, что NA – это not available. То есть это значение недоступно, мы не знаем что за ним скрывается. Может это 5, а может 10. Все что угодно. Поэтому при любой арифметической операции мы не знаем что получим в итоге. Поэтому получается NA.

Задание №4

Создайте переменную n равную 3. После чего создайте переменную a равную \(n^n\). После чего присвойте переменной n новое значение равное 4. Изменится ли значение переменной a?

Решение:

(n <- 3)
## [1] 3
(a <- n^n)
## [1] 27
n <- 4
print(n)
## [1] 4
print(a)
## [1] 27

Значение числа a не изменилось, так как каждая переменная имеет свою ячейку памяти, поэтому она независима от изменений других переменных.

Задание №5

Создайте строковую переменную name равную “Alsu”. Умножьте эту переменную на 3, что получится?

Решение:

name <- "Alsu"
name * 3
## Error in name * 3: нечисловой аргумент для бинарного оператора

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

Задание №6

У вас имеются 2 переменные, как поменять их значения местами? Например, у вас имеются переменная a равная 5 и переменная b равная 10. Нужно, чтобы теперь в переменной a хранилось значение 10, а в переменной b хранилось значение 5. Эти значения могут меняться, поэтому нельзя просто написать a <- 10 и b <- 5.

Решение:

a <- 5
b <- 10

Для данной задачи нужно создать еще одну переменную, которая поможет нам. А потом перекидываем значения между переменными.

c <- a
a <- b
b <- c

print(a)
## [1] 10
print(b)
## [1] 5

Задание №7

Выведите последний элемент массива и его позицию.

Решение:

Чтобы вывести i-ый элемент массива a, нужно написать a[i]. Последний элемент находится на позиции равной длине массива. А длинну массива a можно найти с помощью функции length(a), которая и будет позицией последнего элемента.

a[length(a)] # последний элемент массива
## [1] 10
length(a) # позиция последнего элемента
## [1] 1

Такой код является универсальным. Если массив изменится, нам не нужно менять ничего в коде.

Задание №8

Создайте массивы четных и нечетных чисел от 1 до 100.

Решение:

Для решения нужно вспомнить функцию seq.

seq(1, 100, 2) # нечетные
seq(2, 100, 2) # четные

Задание №9

Создайте массив, состоящий из 100 единиц.

Решение:

А здесь нужно вспомнить функцию rep.

rep(1, 100)

Задание №10

Создайте массив, состоящий из 10 случайных двухзначных чисел. Посчитайте его сумму. Выполните весь код еще раз. Поменялся ли ответ?

Решение:

x <- sample(x = 9:99, size = 10)
sum(x)
## [1] 511

Конечно же ответ поменялся: массив же случайный!

Задание №11

Создайте два массива, состоящих из четырех случайных чисел от 1 до 10. Сложите эти два массива. Теперь замените 3ий элемент одного из массивов на NA. Сложите массивы еще раз. Что изменилось? Теперь добавьте элемент равный 100 в начало массива и сложите массивы в третий раз. Что случилось теперь?

Решение:

x1 <- sample(x = 1:10, size = 4)
x2 <- sample(x = 1:10, size = 4)

x1 + x2
## [1]  9 14 11 16
x1[3] <- NA

x1 + x2
## [1]  9 14 NA 16

На 3 месте при сумме появилось NA, так как любая арифметическая операция с NA дает в результате NA

x1 <- c(100, x1)
x1 + x2
## Warning in x1 + x2: длина большего объекта не является произведением длины
## меньшего объекта
## [1] 105  12  12  NA  14

Появилось предупреждение, так как длины массивов не совпадают.

Задание №12

Гонщик движется по кольцевой дороге, длина которой 4км. Сколько кругов он проедет через \(n\) метров (\(n > 0\))? Если гонщик не доехал круг, то сколько метров нужно ему еще проехать до финиша?

Решение:

Здесь нужно вспомнить, как находить остаток от деления и целую часть

n <- 5000
n%/%4000 # сколько кругов
## [1] 1
n%%4000 # сколько осталось проехать
## [1] 1000

Задание №13

Определите, сколько часов (число от 0 до 23) и минут (число от 0 до 59) будут показывать часы через \(t\) минут (\(t > 0\)) после начала суток.

Решение:

Здесь нужно понимать, что если количество минут, которые прошли от начала суток, больше, чем всего минут в сутках, то счетчик минут должен как бы обнуляться, тогда решением будет:

t <- 1441
t %% (60 * 24) %/% 60 # сколько часов
## [1] 0
t %% 60 # сколько минут
## [1] 1

Задание №14

В университете решили набрать три новых группы для занятий по программированию. В первой группе – \(n_1\) человек, во второй – \(n_2\), в третьей – \(n_3\). Сколько нужно будет закупить компьютерных столов для студентов, если известно, что за одним столом могут находиться не более 2х человек и что занятия студентов проходят в одно время?

Решение:

Снова задача на знание остатка и целого при делении.

n1 <- 20
n2 <- 14
n3 <- 30

(n1 + n2 + n3) %/% 2 + (n1 + n2 + n3) %% 2
## [1] 32