380 likes | 597 Views
ALGORITMA & PEMROGRAMAN. Abdul Kudus, SSi ., MSi ., PhD. Senin, 6.30 – 9.00. PENDAHULUAN. Konsep Algoritma Pondasi untuk menyelesaikan suatu masalah secara berstruktur , efektif dan efisien . Terutama untuk menyelesaikan suatu masalah dengan bantuan program komputer . . Definisi :
E N D
ALGORITMA & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. Senin, 6.30 – 9.00
PENDAHULUAN KonsepAlgoritma Pondasiuntukmenyelesaikansuatumasalahsecaraberstruktur, efektifdanefisien. Terutamauntukmenyelesaikansuatumasalahdenganbantuan program komputer. Definisi: Algoritma : Teknikpenyusunanlangkah-langkahpenyelesaianmasalahdalambentukkalimat yang tersusunsecaralogisdansistematis.
CatatanSejarah: Pencetusalgoritmaadalah Abu Ja’far Muhammad ibnu Musa al-Khwarizmi dalambukunyaAljabarwalmuqobalapadaabad IX. al-Khwarizmi algorism algorithm algoritma • CiriAlgoritma • Donald E. Knuth (penulisbeberapabukualgoritmaabad XX) menyatakancirialgoritma: • - Punyaawaldanakhir. • Didefinisikansecaratepatdantidakbermaknaganda (tidakambigu). • Punya input • Punya output • Efektif
Contoh: Algoritmauntukmencariangkaterbesar (maksimum) darisuatukumpulanbilanganbulat. Solusi: Anggapangkapertamaadalah yang terbesar. Bandingkandenganangkaberikutnya. Jikaangkaberikuttersebutlebihbesar, makajadikansebagai yang terbesar. Ulangilangkah 2, sehinggaangkaterakhir. Angkaterbesaradalahangkaterbesar yang terakhir. Cariangkaterbesardarihimpunan: 1. A = {12, 7, 15, 26, 10} 2. B = {9, 12, 17, 21, 27} 3. C = {15, 10, 8, 6, 2}
Suatualgoritmadapatditulisdenganmenggunakanbahasasehari-hari, tapiakansulitdiimplementasikankedalambahasapemrogramankomputer. • Perlulangkahperalihan.
StrukturAlgoritma • Agar dapatditulislebihteratur, makadibagikedalambeberapabagian: • Bagiankepala • Bagiandeklarasivariabel • Bagiandeskripsi/rincianlangkah Contoh 1: AlgoritmaLuas_lingkaran Deklarasi phi = 3.14 jari_jari = 13 Deskripsiluas = phi*jari_jari^2
Contoh 2: AlgoritmaCari_Rata_rata Deklarasi data = (2, 1, 3, 5, 8) n = 5 RincianLangkah akumulasi = 0 for (i in 1:n) { akumulasi = akumulasi + data[i] } Nilai_rata = akumulasi/n
Contoh 2b: AlgoritmaCari_Rata_rata Deklarasi data = (2, 1, 3, 5, 8) n = 4 RincianLangkah akumulasi = data[1] for (i in 2:n) { akumulasi = akumulasi + data[i] } Nilai_rata = akumulasi/(n+1)
Contoh 3: AlgoritmaCari_Terbesar Deklarasi data = (2, 1, 3, 5, 8) n = 5 RincianLangkah terbesar = data[1] for (i in 2:n) { if (data[i] > terbesar) terbesar = data[i] }
Diagram Alir (Flowchart) Untaiansimbol diagram yang menunjukkanaliranproses yang dikerjakanterhadap data. Simbol-simbol flowchart dibagimenjadisimboluntuk program dansimboluntuksistem (computer hardware). Simboluntuk program Terminator: untukmulaiatauselesai Proses: prosesterhadap data Input/Output: menerima input ataumenampilkan output
Seleksi/Pilihan: memilihaliranberdasarkansyarat Predefined-Data: definisiawaldarivariabel Predifened-Process: lambang sub-program Connector: penghubungpadahalaman yang sama Off-page Connector: penghubungpadahalaman yang berbeda
Simboluntuksistem Keyboard Printer File Monitor
Contoh 1: Pengaturanjadwaldanruangankuliah
Contoh 2: Bilangan yang lebihbesardariduabilangan Mulai • Mulai • Masukkan A dan B • Apakah A > B? • BilaYa, cetak A • BilaTidak, cetak B • Selesai A … B … A > B? Ya Cetak A Tidak Cetak B Selesai
Contoh 3: Bilangan yang terbesardaritigabilangan Mulai A … B … C …. Tidak Ya Cetak B A > B? B > C? Ya Tidak Tidak A > C? Cetak C Ya Cetak A Selesai
Tugas: Buatmakalahtentang al-khwarizmi (sumber: perpustakaanatau internet sepertigoogledanwikipedia) Gambar flowchart untukmenyiapkansecangkir kopi (dimulaidarimemasak air sampaimenghidangkan kopi)! Gambar flowchart untukmencaribilanganterbesardariempatbilangan! Gambar flowchart untukmencaribilanganterbesardarisekumpulanbilangan!
R • R adalah software ‘open-source’ untukpemrogramanstatistik. • ‘open-source’ = gratis • R dibangunberdasarkanbahasapemrograman S, yang diciptakanoleh John Chambers dkkdiLaboratorium Bell padatahun 1976. • Padatahun 1993, Robert Gentleman dan Ross Ihakadi University of Auckland bereksperimendenganbahasa S ini. Hasileksperimennyadisebut R. • Sejaktahun 1995, R menjadi ‘open-source’ danratusanilmuwanduniabersama-samamengembangkannya. • S-Plus adalah software komersial yang jugadikembangkanberdasarkanbahasa S.
Software R terutamaterdiriatasperintah-perintahkomputer, dimanakitaharusmengetikkanperintahnya agar supayakomputermenjalankanperintahtsb. • Mengapakitapilih software yang demikian? • Software yang berbasiskan menu memangmudahuntukdigunakan, tapiterbatashanyapadaperintah-perintahtertentusaja. • Software yang berbasiskanperintahadalahsangatterbukauntukmengerjakanapasaja. Kalaukitainginmengerjakansuatuperintahdengankomputer yang belumpernahdilakukanorang lain sebelumnya, kitabisabuatperintahtsbsendiri.
Syntax R • Perintah R diketikkandijendelaconsole setelahtanda ‘>’ • Sebagaicontoh, R dapatdigunakansebagaikalkulator • > 5 + 49 • [1] 54
> options(width=40) > 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12 [13] 13 14 15 16 17 18 19 20 > # "*" adalahsimboluntukperkalian > # Kata-katasetelahtanda # adalahkomentar > # yang akandiabaikanoleh R > 3 * 5 [1] 15 > 3 - 8 [1] -5 > 12 / 4 [1] 3
Operasidasar + (tambah), - (kurang), * (kali) dan / (bagi) bisalangsungdikerjakandalam R. • R jugabisamengerjakanpangkat. • > 3^4 • [1] 81 RuangPenyimpanan R punyaruangmemori yang disebutglobal environmentsebagaitempatuntukmenyimpanhasilperhitungandanmenyimpanobyek-obyek lain. > bunga.30 <- 1.0025^30 Begitudi-enter tidakadaapa-apa. Kita bisalihathasilnyadenganmengetikkannamadariobyektsb. > bunga.30 [1] 1.077783
Setelahkitamembuatobyek, kitabisamenggunakannyakemudian. > saldo.awal <- 3000000 > saldo.akhir <- saldo.awal*bunga.30 > saldo.akhir [1] 3233350 Contoh. Sayapinjamuangke Bank sejumlahPdenganbungabulanani. PinjamantersebutakandicicilselamanbulandenganbesarcicilanC.
Jikakitabuatobyeksbb: pinjamanuntuk P, dimanabesarnya 15000000 bungauntuk I, yang besarnya 1% nuntuk n (lamanyacicilan, misalnya 10 bulan), dan cicilanuntuk C, maka > bunga <- 0.01 > n <- 10 > pinjaman <- 15000000 > cicilan <- pinjaman*bunga/(1-(1+bunga)^(-n)) > cicilan [1] 1583731
R adalahcase-sensitive (membedakanhurufkecildanbesar) > cicilan<-pinjaman*bunga/(1-(1+bunga)^(-N)) Error: object 'N' not found Vektor Perintahc()digunakanuntukmembuatvektor data. > c(0, 7, 8) [1] 0 7 8 Kita jugabisamenyimpannyadalamsuatuobyek. > x <- c(0, 7, 8) # x : vektor dgn 3 elemen Untuk melihatnya kita ketik nama obyeknya > x [1] 0 7 8
Simbol ‘: ‘ digunakanuntukmembuatbarisanbilangan (baikmenaikataupunmenurun) > bil5sampai20 <- 5:20 > bil5sampai20 [1] 5 6 7 8 9 10 11 12 13 14 15 16 [13] 17 18 19 20 Vektorbisadigabungkandenganperintahc() > gabung <- c(bil5sampai20,x) > gabung [1] 5 6 7 8 9 10 11 12 13 14 15 16 [13] 17 18 19 20 0 7 8
Mengakseselemendarisuatuvektormenggunakan ‘[]’ > gabung[18] [1] 7 Kita bisamengakseslebihdarisatuelemen > gabung[c(1,5,17)] [1] 5 9 0 Untuk mengakses elemen-elemen yg berurutan gunakan ‘:’ > gabung[2:5] [1] 6 7 8 9 Untuk mengecualikan bisa menggunakan ‘-’ > gabung[-1] [1] 6 7 8 9 10 11 12 13 14 15 16 17 [13] 18 19 20 0 7 8
VektorAritmetik Mengalikansetiapelemendarisuatuvektordenganskalar: > x * 3 [1] 0 21 24 Tambah (+), kurang (-) danbagi (/) jugabisadilakukandgncara yang sama > y <- x - 5 > x ^ 3 # y dipangkatkan 3 > y ^ x # setiap unsur y dipangkatkan dengan setiap unsur x yang bersesuaian.
VektorBerpola Operator ‘:’ digunakanuntukmembuatbarisanbilanganbulat. Vektorberpoladapatdibuatdenganperintahseqdanrep. Contohbarisanbilanganganjil yang kurangdariatausamadengan 21 dibuatdengancara: > seq(1, 21, by=2) Polaberulangdibuatdenganrep(), contoh: > rep(3, times=12) # ulang nilai 3, 12 kali [1] 3 3 3 3 3 3 3 3 3 3 3 3 > rep(seq(2, 20, by=2), 2) # ulang pola 2 4 ... 20, dua kali [1] 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 > rep(c(1, 4), c(3, 2)) # ulang 1, 3 kali dan 4, 2 kali [1] 1 1 1 4 4
> rep(seq(2, 20, 2), rep(2, 10)) # ulangsetiapunsursebanyak 2 kali [1] 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 20 VektorHuruf (Character / String Vector ) Skalardanvektorbisajugaberisikata (kalimat) atauhuruf. Semuaunsurdarivektorharuslahmempunyaijenis yang sama. > colors <- c("red", "yellow", "blue") > more.colors <- c(colors, "green", "magenta", "cyan") > # tambahkanbbrpunsurbaru > z <- c("red", "green", 1) #cobacampurbedajenis > more.colors [1] "red“ "yellow“ "blue” "green" "magenta" "cyan" > z [1] "red“ "green" "1"
Fungsisubstr() Perintahlengkapnyaadalahsubstr(x, awal, akhir)yang gunanyauntukmengambilsebagiandarikata. xadalahvektorkata, awaldanakhiradalahposisihuruf yang akandiambil. Contohutkmengambil 2 hurufpertamadarivektorx. > substr(colors, 1, 2) [1] "re" "ye" "bl“ Untukmembentukkata (kalimat) melaluipenggabungan, gunakanperintahpaste. > paste(colors, "flowers") [1] "red flowers" "yellow flowers" "blue flowers" Perintahtambahansep, untukmengontrolpenggabungannya, dimana default-nyaadalahspasi. > paste("several ", colors, "s") [1] "several red s" "several yellow s" "several blue s" > paste("several ", colors, "s", sep="") [1] "several reds" "several yellows" "several blues”
Perintahtambahancollapse gunanyauntukmengubahsemuaunsurvektormenjadisatukata (kalimat). > paste("I like", colors, collapse = ", ") [1] "I like red, I like yellow, I like blue"
Struktur Data Matriksdan Array Untukmembuatmatrikskitagunakanfungsimatrix(), > m <- matrix(1:6, nrow=2, ncol=3) > m [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 Untukmengaksesunsurnya, gunakanduaindeks (barisdankolom), > m[1,2] [1] 3 Untukmengaksesbaristertentu , gunakanindekspertamasaja > m[1,] [1] 1 3 5 Untukkolomtertentu, gunakanindekskeduasaja > m[,1] [1] 1 2
Cara yang lebihumumadalahmenyimpandalamarray yang mempunyaiindeksbanyak > a <- array(1:24, c(3, 4, 2)) > a , , 1 [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 , , 2 [,1] [,2] [,3] [,4] [1,] 13 16 19 22 [2,] 14 17 20 23 [3,] 15 18 21 24 2 1 13 16 19 22 14 17 20 23 15 18 21 24 1 2 3 1 4 7 10 2 5 8 11 3 6 9 12 1 2 3 4
List List adalahstruktur data yang bisaberisilebihdarisatujenis data (angka, hurufdll). > unsur1 <- c(8,2,3) > unsur2 <- c(21,90,1,23,45) > unsur3 <- c("Ana","Ani","Aan","Iin") > listku <- list(ke1=unsur1,ke2=unsur2,ke3=unsur3) > listku $ke1 [1] 8 2 3 $ke2 [1] 21 90 1 23 45 $ke3 [1] "Ana" "Ani" "Aan" "Iin„ > listku[1] $ke1 [1] 8 2 3 > listku[[1]] [1] 8 2 3 > listku[[1]][2] [1] 2
Data Frame Iniadalahstruktur data yang paling banyakdipakaidalam R. Jenisnyasepertimatriks, tapisetiapkolomnyapunyanamasendiri. Kolom-kolomtersebutbisaberisi data berbedajenis. Gunakakanfungsidata.frame()untukmembuatnya. > tim <- c("Persib","Arema","Persipura","SFC", "Persija") > menang <- c(0,1,1,0,0) > seri <- c(1,0,1,0,1) > kalah <- c(1,1,0,2,0) > ILS <- data.frame(tim,menang,seri,kalah) > ILS tim menang seri kalah 1 Persib 0 1 1 2 Arema 1 0 1 3 Persipura 1 1 0 4 SFC 0 0 2 5 Persija 0 1 0
Cara untukmengaksesunsur-unsurnya > ILS$menang [1] 0 1 1 0 0 > ILS$tim=="Persib" [1] TRUE FALSE FALSEFALSEFALSE > ILS$kalah[ILS$tim=="Persib"] [1] 1 Jenis data logika