310 likes | 428 Views
ALGORITME & PEMROGRAMAN. Abdul Kudus, SSi ., MSi ., PhD. Senin, 6.30 – 9.00 Rabu, 12.00 – 14.00. STRUKTUR PEMROGRAMAN DALAM R. INSTRUKSI PERULANGAN ( LOOP ).
E N D
ALGORITME & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. Senin, 6.30 – 9.00 Rabu, 12.00 – 14.00
STRUKTUR PEMROGRAMAN DALAM R INSTRUKSI PERULANGAN (LOOP) Instruksiperulanganadalahinstruksi yang dapatmengulangpelaksanaansederetaninstruksi-instruksilainnyaberulang-ulangsesuaipersyaratan yang ditetapkan. • Strukturinstruksiperulanganpadadasarnyaterdiriatas: • Syaratperulangan: suatusyarat yang harusdipenuhi agar perulangandapatterjadi. • Bagianperulangan: deretaninstruksi yang akandiulang-ulangpengerjaannya. • Pencacah (counter) perulangan: suatuvariabel yang nilainyaharusberubah agar dapatterjadidanpadaakhirnyamembatasibanyaknyaperulangan yang dapatdikerjakan. Ada 3 macambentukinstruksiperulangan yang biasaditemukandalam program, yaitufor, whiledanrepeat.
awal:akhir 1. Perulanganfor Bentukumum for (variabelin vektornilai) { instruksi_instruksi } Maknanyaadalahulangiinstruksi-instruksitersebutberdasarkanvariabelperulanganmulainilaiawalhingganilaiakhir. Contoh: for (i in 1:10) { cat("Halo...","\n") }
x <- c(4,1,5,7,2,3) n <- length(x) akumulasi <- 0 for(i in 1:n) { akumulasi <- akumulasi + x[i] } rata <- akumulasi/n for(cacah in 10:1) { cat(cacah,"\n") } cat("lariiii...","\n")
Loop Menggunakanfor() jikabanyaknyapengulangandiketahui Perintah R for (i in nilai_nilai_i) { Perintah-perintah R } Contoh for (i in 1:10) { print(i) } for (i in c(3,2,9,6)) { print(i^2) } angkutan <- c("mobil", "bis", "kereta","sepeda") for (kendaraan in angkutan) { print(kendaraan) }
Fibo <- rep(0,times=12) Fibo[1] <- 1 Fibo[2] <- 1 for (i in 3:12) { Fibo[i] <- Fibo[i-2] + Fibo[i-1] }
Perulanganwhile while (syarat) { Instruksi_instruksi } Maknanyaadalahulangiinstruksi-instruksiselamasyarat yang diberikanmasihterpenuhi Perhatikan: Harusadainstruksi yang berkaitandengansyaratsebelummasukkewhilesehinggasyaratiniterpenuhidanpengulanganbisadilaksanakan. Bilatidak, makainstruksi while tidakbisadijalankan. Adasatuinstruksidiantarainstruksi-instruksi yang diulang agar padasatusaatsyaratperulangantidakterpenuhi, sehinggaperulangbisaberhenti.
Contoh: Algoritmaberikutmenggunakan while untukmenampilkanangka 1 hingga 10 secaraberurutan. angka <- 1 while(angka < 11) { cat("angka= ",angka,"\n") angka <- angka + 1 } kondisiawal instruksiygbisamengubahsyaratsehinggatidakterpenuhi pd saatangka 11
Loop Menggunakan while() Banyaknyapengulangantidakdiketahui Diulang selagi masih terpenuhinyasyarat Perintah R while (syarat) { Perintah-perintah R } Contoh: Hitungjumlahdaribilangan 1,2,3,… sampaijumlahnya > 1000 n <- 1 jumlah <- 0 while (jumlah <= 1000) { jumlah <- jumlah + n n <- n + 1 }
Misalkitainginmembuatbarisanbilangan Fibonacci yang kurangdari 300. Kita tidaktahuberapabanyaknyabilangan-bilanganini. Olehkarenaitukitataktahubagaimanamenghentikan loop menggunakanfor(),tetapi loop while() bisa. Fib1 <- 1 Fib2 <- 1 Fibo <- c(Fib1,Fib2) while (Fib2 < 300) { Fibo <- c(Fibo, Fib2) Fib2.lama <- Fib2 Fib2 <- Fib1 + Fib2 Fib1 <- Fib2.lama }
Perulanganrepeat danbreak repeat { Instruksi_instruksi if(syarat) break } Makna: ulangipelaksanaan instruksi_instruksi hinggasyaratterpenuhi. Perhatikan: Instruksi-instruksiakandiulanghanyaapabila syarat TIDAK terpenuhi, danketikasyaratterpenuhimakaperulanganberhenti. Instruksi-instruksidikerjakanterlebihdahulusebelumsyaratdiperiksa. Harusadasatuinstruksiygmendahului repeat agar syarattidakterpenuhisehinggaperulanganbisaberlangsung. Harusadainstruksi yang menyebabkansyaratterpenuhidanperulanganberhenti.
Contoh: Algoritmaberikutmenampilkan “Halo…” sebanyak 5 kali, denganmenggunakanrepeat. cacah <- 1 repeat { cat("Halo...","\n") cacah <- cacah + 1 if(cacah > 5) break } Contoh: Menggunakanrepeat untukmenghitungjumlah x1+x2+x3+…+xndan rata-ratanya x <- c(4,1,5,7,2,3) n <- length(x) akumulasi <- 0 i <- 1 repeat { akumulasi <- akumulasi + x[i] i <- i + 1 if (i > n) break } rata <- akumulasi/n
Break juga bisa dipakai di dalam pengulangan while selain di dalam pengulangan repeat > i <- 1 > while(TRUE) + { # pengulangan yg sama + i <- i+4 + if (i > 10) break + } > i [1] 13 > i <- 1 > while (i <= 10) + { + i <- i+4 + } > i [1] 13 > i <- 1 > repeat + { # pengulangan yg sama juga + i <- i+4 + if (i > 10) break + } > i [1] 13 break digunakan utk keluar dr pengulangan (loop) break juga dpt digunakan dlm pengulangan for
Perintah next akan melewatkan perintah di bawahnya dan langsung melompat pada iterasi berikutnya. Ket: is.na(x) adalah TRUE jika x merupakan data missing (NA) > x <- c(3,1,5,NA,6,9,NA,2) > jml <- 0 > for (unsur in x) + { + if (is.na(unsur)) next + jml <- jml + unsur + } > jml [1] 26
Pengulangan terhadap himpunan bukan vektor Perintah get() akan menjadikan karakter/string dr suatu obyek sebagai input, dan akan mengeluarkan obyeknya sebagai outputnya. > P <- matrix(c(2,4,1,3),2,2) > Q <- matrix(c(1,4,2,3),2,2) > for (M in c("P","Q")) + { + matrikku <- get(M) + print(det(matrikku)) + } [1] 2 [1] -5
INSTRUKSI PEMILIHAN denganPerintahif() Instruksipemilihanadalahinstruksi yang dipakaiuntukmemilihsatuaksidaribeberapakemungkinanaksiberdasarkansuatupersyaratan. Bentuk 1 kasus Tidak if (syarat) { aksi } Ya Apabilasyaratdipenuhi, maka “aksi” dijalankan. Contoh: Jika x lebihbesardr 100, makanilainyaakanditambah 5 if (x >100) { x <- x + 5 }
Bentuk 2 kasus if (syarat) { aksi_1 } else { aksi_2 } Apabilasyaratdipenuhi, maka “aksi_1” dijalankan. Tetapijikatidakterpenuhimaka “aksi_2” ygdijalankan.
Contoh: Jika x lebihbesardr 0, makaditampilkan “bilanganinipositif”. Selainituakanditampilkan “bilanganininegatif”. if (x >0) { cat("bilangan ini positif","\n") } else { cat("bilangan ini negatif","\n") }
BentukBersusun (Lebihdari 1 Syarat) if (syarat_1) { Aksi_1 } else { if (syarat_2) { Aksi_2 } else { Aksi_3 } }
Contoh: Penentuannilaiakhir: nilai <- function(skor) { if (skor >= 80) { nilai <- "A" } else { if (skor >= 60) { nilai <- "B" } else { nilai <- "C" } } return(nilai) }
> x <- c(TRUE,FALSE,TRUE) > y <- c(TRUE,TRUE,FALSE) > x & y [1] TRUE FALSE FALSE > x[1] && y[1] [1] TRUE > x && y # hanya memeriksa unsur pertama [1] TRUE > if (x[1] && y[1]) print("keduanya TRUE") [1] "keduanya TRUE" > if (x && y) print("keduanya TRUE") [1] "keduanya TRUE" > if (x & y) print("keduanya TRUE") [1] "keduanya TRUE" Warning message: In if (x & y) print("keduanya TRUE") : the condition has length > 1 and only the first element will be used
> 1 < 2 [1] TRUE > (1 < 2) * (3 < 4) [1] 1 > (1 < 2) * (3 < 4) * (5 < 1) [1] 0 > (1 < 2) == TRUE [1] TRUE > (1 < 2) == 1 [1] TRUE
MembuatFungsi R Sendiri • Kita bisamembuatfungsibaruuntuktujuantertentu, misalnyauntukmenghitungrumustertentu yang belumadadalamfungsibawaandari R. • Fungsimempunyai input dan output • Semuavariabel yang dibuatdidalamsuatufungsihanyadikenalsecara internal untukfungsiitusaja. BentukUmumFungsidalam R nama_fungsi<- function(input) { badan_dari_fungsi (perintah-perintah) return(output) }
Contoh: Berikutiniadalahfungsiuntukmenghitungpangkattigadarisuatu input bilangan. > kubik<-function(x) + { +y <- x^3 +return(y) + } nama_fungsi input perintah R output Jalankanfungsi yang barutersebut. > kubik(2) [1] 8
Atauinputnyaberupavektor. > dataku <- 1:5 > kubik(dataku) [1] 1 8 27 64 125 > kubik(dataku/2) [1] 0.125 1.000 3.375 8.000 15.625 Bisajugadipanggilsecararekursif. > kubik(kubik(dataku)) [1] 1 512 19683 262144 1953125
Suatufungsibisapunyalebihdarisatu input. > bagi <- function(x,y) + { + z <- x/y + return(z) + } Contoh: > bagi(15,3) [1] 5
Nilai Default bagi Input (Argumen) suatu Fungsi Ingat lagi contoh fungsi read.table utk membaca eksternal data. c:/ujian.txt input header=TRUE menunjukkan bhw file data mempunyai baris judul, sehingga datanya mulai baris kedua. "Exam 1" "Exam 2" Quiz 2.0 3.3 4.0 3.3 2.0 3.7 4.0 4.0 4.0 2.3 0.0 3.3 2.3 1.0 3.3 3.3 3.7 4.0 > dataujian <- read.table("c:/ujian.txt",header=TRUE) > head(dataujian) Exam.1 Exam.2 Quiz 1 2.0 3.3 4.0 2 3.3 2.0 3.7 3 4.0 4.0 4.0 4 2.3 0.0 3.3 5 2.3 1.0 3.3 6 3.3 3.7 4.0
lihat input (argumen) lengkap dari read.table > read.table function (file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown") { if (is.character(file)) { file <- if (nzchar(fileEncoding)) file(file, "rt", encoding = fileEncoding) else file(file, "rt") on.exit(close(file)) . . . dan seterusnya
Output dari suatu Fungsi oddcount <- function(x) { k <- 0 for (n in x) { if (n %% 2 == 1) k <- k+1 } return(k) } oddcount <- function(x) { k <- 0 for (n in x) { if (n %% 2 == 1) k <- k+1 } k } • Output adalah: • obyek yg di-return • obyek pada perintah terakhir