-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathch4-control_flow.R
More file actions
204 lines (147 loc) · 3.52 KB
/
ch4-control_flow.R
File metadata and controls
204 lines (147 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# A. Conditional Statement ----
## 1. program untuk mengecek bilangan ganjil atau genap ----
## Bilangan genap merupakan bilangan yang habis dibagi 2,
## sedangkan bilangan ganjil merupakan sebaliknya
bilangan <- 4
if(bilangan %% 2 == 0){
print("bilangan genap")
}else{
print("bilangan ganjil")
}
## 2. program untuk mengecek tahun kabisat dan bukan ----
## Tahun kabisat merupakan tahun dimana jumlah hari dalam
## setahunnya 366 hari atau pada tahun tersebut terdapat 29 hari di bulan Februari. Tahun kabisat hanya terjadi setiap 4 tahun sekali. Tahun kabisat memiliki ciri-ciri seperti berikut:
## - angka tahun dapat dibagi dengan 4
## - angka tahun tidak dapat dibagi dengan 100
## - angka tahun dapat dibagi dengan 400
## - mulai diperkenalkan sejak 1582 atau sejak kalender
## Gregorian diperkenalkan
tahun <- 1580
if(tahun > 1580){
if(tahun %% 4 == 0){
print("bukan tahun kabisat")
}else if(tahun %% 100){
print("tahun kabisat")
}else if(tahun %% 400){
print("tahun kabisat")
}
}else{
print("bukan dalam periode kalender Gregorian")
}
# B. Loops ----
## 1. For loop ----
### 1.1 program untuk mencetak deret bilangan kelipatan 2 -----
n <- 10
for(i in 1:n){
print(i * 2)
}
### 1.2 program untuk menghitung jumlah bilangan genap dalam vector -----
vec <- c(1, 2, 5, 7, 8, 12, 10)
count <- 0
for(i in vec){
if(i %% 2 == 0){
count <- count + 1
}
}
count
### 1.3 program untuk menghitung nilai vactorial ----
### nilai faktorial merupakan hasil perkalian dari 1 sampai
### bilangan yang ditanyakan. COntoh: 3! = 1x2x3 = 6.
num <- 8
faktorial = 1
# cek apakah angka yang akan dihitung merupakan positif
if(num < 0) {
print("Stop, faktorial harus bilangan positif")
} else if(num == 0) {
print("nilai faktorial dari 0 adalah 1")
} else {
for(i in 1:num) {
faktorial = faktorial * i
}
print(paste("nilai faktorial dari", num ,"adalah",faktorial))
}
## 2. While loop ----
### 2.1 program yang mencetak bilangan positif sebelum bilangan maksimumnya ----
start <- 1
end <- 10
while(start < end){
print(start)
start <- start + 1
}
### 2.2 program yang mencetak deret fibonacci ----
### deret fibonaci merupakan deret dimana suku ke 1 dan ke 2
### secara berurutan adalah 0 dan 1, sedangkan suku berikutnya
### merupakan hasil penjumlahan 2 suku di depannya.
n_suku <- 10
# suku pertama dan kedua
n1 = 0
n2 = 1
count = 2
# cek apakah n_suku merupakan bilangan positif
if(n_suku <= 0) {
print("Stop, n_suku harus bilangan integer positif")
} else {
if(n_suku == 1) {
print("Deret Fibonacci:")
print(n1)
} else {
print("Deret Fibonacci:")
print(n1)
print(n2)
while(count < n_suku) {
nth = n1 + n2
print(nth)
# update values
n1 = n2
n2 = nth
count = count + 1
}
}
}
## 3. break dan next -----
### break
x <- 1:5
for (val in x) {
if (val == 3){
break
}
print(val)
}
### next
x <- 1:5
for (val in x) {
if (val == 3){
next
}
print(val)
}
# C. Vectorised Operation -----
## 1. vectorised vs unvectorised sum() ----
### unvectorised
start_time <- Sys.time()
x <- 1:100000000
sum <- 0
for(i in x){
sum <- sum + i
}
sum
end_time <- Sys.time()
end_time - start_time
### vectorised
start_time <- Sys.time()
x <- 1:100000000
sum(x)
end_time <- Sys.time()
end_time - start_time
## 2. vectorised if ----
num <- 4
### unvectorised
if(num %% 2 == 0){
print("bilangan genap")
}else{
print("bilangan ganjil")
}
### vectorised
ifelse(num %% 2 == 0,
print("bilangan genap"),
print("bilangan ganjil"))