Skip to content

Latest commit

 

History

History
357 lines (253 loc) · 9.87 KB

06-chapter6.md

File metadata and controls

357 lines (253 loc) · 9.87 KB

Приклади задач та їх розв'язки {#chapter6}



Задачі {#chapter61}

Послідовності {#chapter611}

Задача {#task6111}

Написати програму, що обчислює $y = (x+2)^2 + ln(x)$, де $x$ число з послідовності 100, 105, 110, ..., 200. Результат вивести у вигляді data.fame з колонками $X$ та $Y$.

Задача {#task6112}

Написати програму, що обчислює $y = \frac{\sqrt{x+2}}{z}$, де $x$ число з послідовності 10, 15, 20, ..., 100, а $z$ - випадкові значення з діапазону [-10, 10], що відповідає кількості елементів у $x$. Результат вивести у вигляді data.fame з колонками $X$, $Z$ та $Y$.

Задача {#task6113}

Без використання спеціальних функцій написати програму, що сортує вектор за зростанням та спаданням. Елементи вектора є випадковими числами з діапазону [10,100). Кількість елементів у векторі 10.

Задача {#task6114}

Відсортувати вектор таким чином, щоб всі додатні елементи знаходилися на початку, а всі від'ємні – вкінці, і при цьому зберігся початковий порядок елементів в обох групах. Елементи вектора є випадковими числами з діапазону [-100,100]. Кількість елементів у векторі 10.

Наприклад, якщо початковий вектор x складається з елементів:

x <- c(1, -5, 10, -8, -2, 5, 4, -9)

то після "сортування" він матиме вигляд:

## [1]  1 10  5  4 -5 -8 -2 -9

Задача {#task6115}

Задано натуральне число $N$ (вводиться з клавіатури). Знайти суму його цифр.

Задача {#task6116}

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

Задача {#task6117}

Знайти найбільший спільний дільник двох натуральних чисел, використавши алгоритм Евкліда. Алгоритм Евкліда полягає в наступному: від більшого числа віднімається менше до тих пір, поки вони не стануть рівними; отримане в результаті число і буде найбільшим спільним дільником.

Задача {#task6118}

Знайти мінімальний елемент серед тих елементів масиву $A$, які не є елементами масиву $B$.

Задача {#task6119}

Написати програму, що обчислює середнє значення серед парних елементів вектора. Елементи вектора генеруються випадковим чином у діапазоні $[1; 10)$. Кількість елментів вектора 10.

Задача {#task6120}

Написати програму, що знаходить середнє значення елементів вектора. Елементи вектора генеруються випадковим чином у діапазоні $[100; 200]$. Усі елменти вектора повинні бути кратними $7$-ми.

Підзавдання 1. Генерацію випадкового числа кратного $7$-ми винести в окрему функцію.

Підзавдання 2. Написати функцію, що приймає 1 значення size (довжина вектора) і повертає вектор цієї довжини.

func.genMod7 <- function() {
  x <- 8
  while(x %% 7 != 0) {
    x <- sample(100:200, size = 1)
  }
  return(x)
}

func.genVectorMod7 <- function(size) {
  v <- c()
  
  for(i in 1:size) {
    v <- c(v, func.genMod7())
  }
  
  return(v)
}

vector <- func.genVectorMod7(100)
vector
##   [1] 189 119 119 175 154 161 105 154 119 154 133 105 168 189 105 140 112 168
##  [19] 154 182 147 168 189 154 182 161 133 196 119 168 140 175 147 189 175 140
##  [37] 105 175 112 105 133 168 133 161 147 126 133 133 126 175 105 105 126 133
##  [55] 112 168 140 140 105 112 119 175 189 126 126 196 168 140 140 154 112 196
##  [73] 182 119 182 147 133 189 161 119 112 105 140 175 119 133 105 119 133 182
##  [91] 182 189 126 126 196 147 196 154 126 112

Задача {#task6121}

Написати програму, що знаходить різницю між максимальним та мінімальним значенням елементів вектора, не використовуючи функції min() та max(). Елементи вектора генеруються випадковим чином у діапазоні $[10;50]$.

Задача {#task61211}

Написати програму, що знаходить різницю між максимальним та мінімальним значенням елементів вектора, не використовуючи функції min() та max(). Елементи вектора генеруються випадковим чином у діапазоні $[10;50]$.

Задача* {#task6122}

Написати програму, що дозволяє переставити значення деяких змінних без створення третьої змінної.

Наприклад, a <- 10 та b <- 25, але після виконання деякого коду виведення має наступний вигляд:

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

Задача {#task6123}

Написати функцію, що...

Задача {#task6124}

Завантажити з сайту kaggle.com інформацію про "індекс щастя" (https://www.kaggle.com/ajaypalsinghlo/world-happiness-report-2021). Завантажити дані в R.

Функції {#chapter612}

Задача {#task612}

Написати функцію, що обчислює для поданого вектора суму, середнє, медіану, мінімум та максимум. Результат роботи функції повертається у вигляді списку (list).

Рішення задач {#chapter62}

Послідовності та вектори {#chapter621}

Рішення до задачі 6.1.1.3:

x <- sample(10:100, size = 10)
  
for(j in 1:(length(x)-1)) {
  
  for(i in 1:(length(x)-1)) {
    
    if(x[i] > x[i+1]) {
      tmp = x[i]
      x[i] = x[i+1]
      x[i+1] = tmp
    }
  }
}

print(x)
##  [1]  16  25  27  50  55  79  90  92  95 100

Рішення до задачі 6.1.1.4:

x <- sample(-100:100, size = 10)
print("Vector before sort:")
## [1] "Vector before sort:"
print(x)
##  [1]  -6 -65  94 -38  24 -91 -35  42 -78 -77
for(j in 1:(length(x)-1)) {
  
  for(i in 1:(length(x)-1)) {
    
    if(x[i] < 0 & x[i+1] > 0) {
      tmp = x[i]
      x[i] = x[i+1]
      x[i+1] = tmp
    }
  }
}
print("Vector after sort:")
## [1] "Vector after sort:"
print(x)
##  [1]  94  24  42  -6 -65 -38 -91 -35 -78 -77

Рішення до задачі 6.1.1.5:

#number <- as.numeric(readline(prompt = "Введіть число:"))
number <- 15783
sum <- 0

while(number > 0) {
  last_digit = number %% 10
  sum = sum + last_digit
  number = (number - last_digit) / 10
  print(paste0("Number: ", number, " | Sum: ", sum, " | Last: ", last_digit))
}
## [1] "Number: 1578 | Sum: 3 | Last: 3"
## [1] "Number: 157 | Sum: 11 | Last: 8"
## [1] "Number: 15 | Sum: 18 | Last: 7"
## [1] "Number: 1 | Sum: 23 | Last: 5"
## [1] "Number: 0 | Sum: 24 | Last: 1"

Рішення до задачі 6.1.1.9 (спосіб 1):

x <- sample(1:10, size = 4, replace = T)
x
## [1] 1 1 3 6
x_parni <- c()

for(i in 1:length(x)) {
  
  if(x[i] %% 2 == 0) {
    x_parni <- c(x_parni, x[i])
  }
  
}

mean(x_parni)
## [1] 6

Рішення до задачі 6.1.1.9 (спосіб 2):

x <- sample(1:10, size = 10, replace = T)
x
##  [1] 7 3 6 9 3 5 8 7 7 8
sum <- 0
count <- 0

for(i in 1:length(x)) {
  
  if(x[i] %% 2 == 0) {
    sum = sum + x[i]
    count = count + 1
  }
  
}

mean_value = sum / count
mean_value
## [1] 7.333333

Функції {#chapter622}

Рішення до задачі 6.1.2.1:

x <- sample(10:100, size = 10)
print(x)
##  [1] 92 27 26 87 30 93 46 81 65 18
vector.info <- function(vector) {
  x <- list()
  x$Sum <- sum(vector)
  x$Mean <- mean(vector)
  x$Median <- median(vector)
  x$Min <- min(vector)
  x$Max <- max(vector)
  return(x)
}

vector.info(x)
## $Sum
## [1] 565
## 
## $Mean
## [1] 56.5
## 
## $Median
## [1] 55.5
## 
## $Min
## [1] 18
## 
## $Max
## [1] 93