Kumpulan Materi Kuliah http://hendroagungs.blogspot.co.id/ Pengenalan Struktur Data MATERI KULIAH • • • • • • • Review materi AlPro Sorting Searching Linked List Stack Queue Graph dan Tree What is programming? • PROGRAM = ALGORITMA + STRUKTUR DATA • ALGORITMA : • SEQUENTIAL • BRANCHING • LOOPING/ REKURSI • STRUKTUR DATA : • ARRAY • LINKED LIST • ADT : STACK, QUEUE, GRAPH, TREE, DLL Review Materi AlPro • • • • Variabel dan tipe data Kontrol Alur Fungsi/Method Array Variabel dan tipe data Ruby • Numeric class • Integer • Fixnum • Bignum • Float • Complex (standard library) • BigDecimal (standard library) • Rational (standard library) • Contoh operasi aritmetika pada number: • • • • x=5/2 y=5.0/2 z=5/2.0 x=5%2 Variabel dan tipe data Ruby • String class • Single-quoted string literals: • S=‘Ini string sederhana dalam Ruby’ • Double-quoted string literals: • Lebih fleksibel • S="360 degrees=#{2*Math::PI} radians“ output: S="360 degrees=6.283185307179586 radians” • String.new → membuat tipe data string baru dan kosong (empty string) • Append operator (<<): greeting=“Hello” greeting<<“ “<<“World” puts greeting Variabel dan tipe data Ruby • Concat operator (+): planet=“Earth” “Hello”+” “+planet • Array class • Array di Ruby tidak memiliki tipe dan resizable • Contoh: • • • • • [1, 2, 3] [[1,2],[3,4],[5]] empty=Array.new zeros=Array.new(4,0) count=Array.new(3) {|i| i+1} • More on Array in resource [3] chapter 9.5.2 Variabel dan tipe data Ruby • Object class • Ruby adalah bahasa pemrograman berorientasi objek →all values are objects • Semua objek diturunkan dari class Object. • Untuk mengetahui class dari object, gunakan perintah .class • Contoh: o=“test” o.class #returns an object with String class CONTROL STRUCTURES • SEQUENTIAL/ URUTAN Program dijalankan mulai dari perintah paling atas/ awal sampai paling akhir secara berurutan/ sekuensial. • BRANCHING/ PERCABANGAN Penyeleksian kondisi (TRUE/ FALSE) untuk menentukan statemen selanjutnya • LOOPING/ PERULANGAN Mengulangi proses selama syarat/ kondisi Sequential/Urutan Entry Action 1 Action 2 Action 3 Exit Branching Entry Condition 1 TRUE FALSE Action 1 Condition 2 FALSE TRUE Action 2 Exit Action 3 IF - ELSE • • • • Biasa digunakan untuk seleksi nilai/ data Kondisi jamak → ((kondisi_1) &&/ || (kondisi_2)) if (kondisi=TRUE) jalankan_statement_ini if (kondisi=TRUE) statement_1 else statement_2 // if kondisi=FALSE • if (kondisi=TRUE) statement_1 else if (kondisi=TRUE) statement_2 else statement_3 // if kondisi=FALSE • if (kondisi=TRUE) if (kondisi=TRUE) nested_statement If - else • If syntax • if var == 10 print “Variable is 10″ end • If Else Syntax • if var == 10 print “Variable is 10″ else print “Variable is something else” end • If Else If Syntax • Here’s the key difference between Ruby and most other languages. Note that “else if” is actually spelled “elsif” without the e. • if var == 10 print “Variable is 10″ elsif var == “20″ print “Variable is 20″ else print “Variable is something else” end SWITCH - CASE • Biasa digunakan untuk membuat menu dalam program switch (variabel_pilihan) { case nilai_1 : statemen_1; break; case nilai_2 : statemen_2; break; case nilai_3 : statemen_3; break; … default: statemen_default; } • Bisa berbentuk nested/ bersarang Switch case Switch Case syntax [variable = ] case when bool_condition statements when bool_condition statements else # the else clause is optional\ statements end Looping Entry Action 1 Action 2 Looping 1 Y Y T if 1 if 2 Looping 2 T Action 3 Exit Looping dengan “while” x=10 #initialize a loop counter variable while x>= 0 do #Loop while x is greater than/equal to 0 puts x #Print out the value of x x=x-1 #Subtract 1 from x end #The loop ends here Looping dengan “until” #Count back up to 10 x=0 until x>10 do puts x x=x+1 end Looping dengan “for in” array=[1,2,3,4,5] for element in array puts element end Function or Method • Sekelompok blok kode yang memiliki parameter dan berasosiasi dengan 1 atau lebih objek • Contoh method: # Define a method named 'factorial' with a single # parameter 'n' def factorial(n) if n < 1 # Test the argument value for validity raise "argument must be > 0" elsif n == 1 # If the argument is 1 1 # then the value of the method invocation is 1 else # Otherwise, the factorial of n is n times n * factorial(n-1) # the factorial of n-1 end end Method with return value def factorial(n) raise "bad argument" if n < 1 return 1 if n == 1 n * factorial(n-1) end Method with more than 1 return values #Convert the Cartesian point (x,y) to #polar (magnitude, angle) coordinates def polar(x,y) return Math.hypot(y,x), Math.atan2(y,x) end Contoh lain: # Convert polar coordinates to Cartesian coordinates def cartesian(magnitude, angle) [magnitude*Math.cos(angle), magnitude*Math.sin(angle)] end Cara pemanggilan method: distance,theta=polar(x,y) x,y=cartesian(distance,theta) Tipe Data Abstrak (Abstract Data Type – ADT) • ADT adalah model formal dari struktur data yang menspesifikasikan: • Tipe data yang disimpan • Operasi yang dapat dilakukan • Tipe parameter dari operasi tersebut • ADT menspesifikasikan operasi apa yang dapat dilakukan, bukan bagaimana melakukan operasi tersebut ADT • Objek pada Ruby adalah sebuah abstraksi. • Tingkat abstraksi meliputi: atribut (nama, alamat, nilai, masa hidup, cakupan, tipe, dan ukuran) • Contoh ADT: Fixnum • Jika kita membuat objek, x, bertipe Fixnum, kita tahu bahwa x dapat merepresentasikan integer dalam range [-231, 231-1] dan kita dapat melakukan operasi penambahan, pengurangan, perkalian, dan pembagian • Kita tidak perlu tahu bagaimana cara yang dilakukan Fixnum untuk melakukan operasi tersebut, hanya perlu tahu operasi apa yg ada pada Fixnum Cakupan ADT • Struktur linier: • • • • Stack Queue Deque List • Tree • Heap • Priority Queue • Hash-table • Set • String • Graph Hirarki class di Ruby Larger Image Hirarki class • Dua jenis class dalam Ruby: Abstract dan Concrete • Abstract class: • Class yg mendefinisikan sebagian dari implementasinya • Kita tidak dapat membuat objek dari abstract class • Digunakan sebagai base class darimana sebuah class diturunkan • Class turunan meng-override abstract methods • Concrete Class: • Kita dapat membuat objek dari concrete class → dengan .new method Contoh abstract class class Animal def initialize end def move end end class Cheetah < Animal def initialize @type = :Cheetah end def move "Running!" end end Contoh concrete class class Die def roll 1+rand(6); end # akhir method roll end # akhir class Die dice=Die.new; puts dice.roll ]