Anda di halaman 1dari 44

Bab 1 Perkenalan Pemrograman

A.Definisi Algoritma
Dalam kehidupan kita sehari-hari, beragam permasalahan senantiasa muncul ditengah-tengah hiruk
pikuk aktivitas kita. Contoh sederhananya adalah, jika ruangan kotor, kita menyapu. Kita tahu jika
ruangan kotor (permasalahan), maka kita harus membersihkannya, agar permasalah tersebut
terselesaikan.
Sehingga kita tahu bahwa permasalahan dapat diselesaikan dengan cara-cara prosedural, yaitu dengan
mencari solusi untuk memecahkan permasalahan tersebut. Untuk memecahkan permasalahan tersebut
bisa menggunakan berbagai macam cara yang ada.
Nah Algoritma dalam dunia pemograman sebenarnya dapat dimengerti keberadaannya dari gambaran
peristiwa diatas, dimana Algoritma ini hadir sebagai suatu bentuk jiwa dan kerangka dari struktur
program guna memenuhi kebutuhannya mulai dari penujukan dan pencapaian-pencapaian hasil yang
diharapkan dari keberadaan progam itu sendiri.
Secara bahasa atau etimologis, jika kita cari asal-usul kata dari Algoritma yaitu Algorism, yang berarti
proses menghitung dengan angka Arab. Sedangkan kata Algorist dikenakan bagi seseorang yang ahli
dalam menggunakan perhitungan dengan angka Arab. Menurut sejarah perjalanan matematik, kata
Algorism didapat dari penulis buku Arab terkenal yaitu Abu Jafar Muhammad ibnu Musa al-Kuwarizmi.
Dalam buku yang berjudul Kitab al jabr walmuqabala atau Buku Pemugaran dan Pengurangan (The
book of restoration and reduction).
Karena penggunaan kata Algorism sering di salah artikan dalam dunia matematik dengan penggunaan
kata Arithmetic, maka sm berubah menjadi -thm yaitu menjadi Algorithm. Dalam bahasa Indonesia,
kata Algorithm diserap menjadi Algoritma. Secara istilah atau termonologis, menurut buku Kamus Besar
Bahasa Indonesia terbitan Balai Pustaka 1988, dikatakan bahwa Algoritma adalah urutan logis
pengambilan keputusan untuk pemecahan masalah.
Dengan uraian dari pengertian diatas, maka kita dapat mendefinisikan Algoritma sebagai metoda atau
urutan dari langkah-langkah yang logis dalam penyelesaian suatu masalahdan tersusun secara
sistematis.
Keberadaan Algoritma didalam dunia informatika atau ilmu komputer dinilai sangatlah penting. Banyak
cabang dari ilmu komputer yang diacu ke dalam termonolgi Algortima ini. Secara umum, pemroses
(Processor) merupakan pihak yang melakukan suatu proses dengan melaksanakan atau mengeksekusi
Algoritma yang terdefinisikan dan terjabarkan didalam proses tersebut. Adapun pihak-pihak yang dapat
dikatakan pemroses secara umum dapat berupa manusia, mesin, robot, komputer dan alat-alat mesin
lainnya.
Algoritma harus dibuat secara benar dan dituangkan ke dalam bahasa yang dapat dimengerti oleh
pemroses, karena pemroses mesti melakukan urutan langkah secara pasti dan benar terhadap
Algortima. Selain itu agar penyelesaian permasalahan yang sesuai dapat terjadi, dari sudut pandang
pemroses setidaknya ada beberapa hal yang mesti diperhatikan yaitu pemroses mesti memahami setiap
langkah dalam Algoritma dan pemroses harus dapat mengerjakan operasi yang bersesuaian dengan
langkah tersebut.
Algoritma yang dituangkan ke dalam bahasa tertentu (notasi) yang dapat dimengerti oleh pemroses
dapat dikatakan sebagai program. Adapun notasi yang dimaksud merupakan suatu bahasa pemograman
tertentu. Dengan kata lain program merupakan implementasi dari Algoritma. Sedangkan dalam
melakukan pemograman senantiasa melibatkan data maka dapat dikatakan secara simbolik program =
Algoritma +struktur data.
Menurut Donald E Knut, algoritma harus memiliki ciri-ciri sebagai berikut:
1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah-langkah yang telah ditentukan.
2. Setiap langkah yang telah ditentukan harus terdefinisi dengan jelas dan tepat sehingga tidak
mempunyai arti ganda.
3. Algoritma dapat mempunyai nol atau lebih masukan.
4. Algoritma dapat mempunyai nol atau lebih keluaran.
5. Algoritma harus efektif dan sedeherna sehingga dapat dikerjakan dengan waktu yang rasional.
B.Sekilas Mengenai Bahasa Pemrograman Pascal
Pascal merupakan Bahasa Pemrograman yang pertama kali di buat dan dikembangkan pada awal tahun
70-an oleh Profesor Niklaus Wirth di Technical University, Zuurich-Swiss.
Nama PASCAL di ambil dari nama seorang ahli matematikawan Perancis, yaitu Blaise Pascal, yang
pertama kali menciptakan mesin penghitung, Profesor Niklaus Wirth membuat bahasa Pascal ini sebagai
alat bantu untuk mengajarkan konsep pemrograman komputer kepada mahasiswanya. Selain itu,
Profesor Niklaus Wirth membuat Pascal juga untuk melengkapi kekurangan-kekurangan bahasa
pemrograman yang ada pada saat itu.
Pada sebuah program Pascal berisi kepalaprogram, anak kalimat (tidakharus ada), serta blok
pengumuman dan pernyataan. Kepala program menunjukkan nama program. Anak kalimat
menggunakan unit-unit yang dipakai oleh program tersebut. Bagian terakhir merupakan blok yang berisi
pengumuman dan pernyataan yang akan dijalankan.
C.Membuat Program Pertama Anda
Untuk memulai langkah anda menjadi programmer, tentu dimulai dari sebuah program sederhana. Anda
membuat program hello world!, seperti berikut :
begi n
wr i t e( ' Hel l o Wor l d' ) ;
end.
Adapun syntax-syntax pascal untuk program pertama anda yang perlu anda pelajari adalah
1. read/readln: Berfungsi untuk mengambil input untuk sebuah variabel
2. write/writeln: Berfungsi untuk menuliskan hasil komputasi, ke dalam layar komputer
3. begin : awal dari sebuah program
4. end : akhir dari sebuah program
5. var : menunjukkan nama-nama variabel yang akan digunakan dalam program
D.Input dan Output
Input, adalah masukkan yang akan diproses oleh komputer, sebelum dikeluarkan dalam bentuk output
yang ditampilkan ke dalam layar.
Oke, langsung saja menuju sebuah permasalahan.
Contoh soal :Buatlah sebuah program yang berfungsi untuk menuliskan kalimat yang telah diinput
sebanyak N kali!
Solusi :
var a: st r i ng;
i , n: i nt eger ;
begi n
r eadl n( n) ;
r eadl n( a) ;
f or i : =1 t o n do
wr i t el n( a) ;
r eadl n end.
Latihan Soal!
1. Diberikan inputan A dan B. Tuliskan hasil penjumlahan antara A dan B dalam program
pascal/C++sederhana!
2. Luas segitiga mempunyai rumus A T. Buatlah program penghitung luas segitiga menggunakan
bahasa pemrograman pascal/C++sederhana, dengan pembulatan 2 angka di belakang koma!
3. Pak Anu mempunyai N buah coklat yang akan dibagikan untuk M orang temannya. Sementara
itu, sisa dari coklat yang dibagikan akan diberikan untuk Ana, anak dari pak Anu. Hitunglah
berapakah coklat yang akan dibagikan bagi teman-teman Pak Anu, dan coklat yang akan
diberikan bagi Ana (Hint : Ana bisa saja tidak mendapat coklat sama sekali)
4. Trapesium memiliki rumus luas (A+B) T. Buatlah program penghitung luas trapesium
menggunakan bahasa pemrograman pascal/C++, dengan pembulatan 2 angka di belakang koma!
E.Percabangan
Percabangan adalah suatu keadaan dimana pernyataan dapat dieksekusi apabila suatu kondisi
memenuhi syarat untuk mengerjakan pernyataan tersebut.
Percabangan dibagi menjadi IF, dan Case.
E.1 IF (IF tunggal dan bercabang)
Struktur IF umumnya mencakup
i f ( kondi si ) t hen ( st at ement )
el se ( j i ka kondi si t i dak benar ) i f ( kondi si ) t hen ( st at ement )
Untuk lebih jelasnya, akan dijelaskan melalui contoh soal.
Contoh soal 1: Tuliskan semua bilangan dari 1 hingga 100 yang dapat dibagi dengan 2.
Solusi :
var i : i nt eger ;
begi n
f or i : = 1 t o 100 do
i f ( i mod 2 = 0) t hen wr i t e ( i ) ;
r eadl n end.
Contoh soal 2: Tuliskan semua bilangan dari 1 hingga 100 yang dapat dibagi dengan 2. Jika tidak dapat
dibagi dengan 2, tuliskan bilangan yang dapat dibagi 3, dan jika tidak, tuliskan bilangan yang dapat
dibagi 5. Jika tidak memenuhi semuanya, tuliskan dengan output Tidak
Solusi :
var i : i nt eger ;
begi n
f or i : =1 t o 100 do
i f ( i mod 2=0) t hen wr i t el n( i )
el se i f ( i mod 3=0) t hen wr i t el n( i )
el se i f ( i mod 5=0) t hen wr i t el n( i )
el se wr i t el n( ' Ti dak' ) ;
r eadl n end.
E.2 Case
Berbeda dengan IF, CASE-OF digunakan untuk memilih jika terdapat lebih dari dua kondisi yang
setiapnya memerlukan penanganan yang berbeda.
Contoh Soal :Tuliskan nama-nama hari dengan input di variabel i. Jika i=1 maka senin, i=2 maka selasa,
dan seterusnya.
Solusi :
var i : i nt eger ;
begi n
r eadl n( i ) ;
case i of
1: Wr i t el n( Seni n ) ;
2: Wr i t el n( Sel asa ) ;
3: Wr i t el n( Rabu ) ;
4: Wr i t el n( Kami s ) ;
5: Wr i t el n( J umat ) ;
6: Wr i t el n( Sabt u ) ;
7: Wr i t el n( Mi nggu ) ;
End.
Latihan Soal!
Anda telah memahami materi mengenai struktur percabangan. Saatnya untuk menguji pemahaman
anda.
1. Tentukan nilai floor dan ceiling dari bilangan N. Jika floor adalah bilangan bulat terbesar yang
masih lebih kecil atau sama dengan bilangan tersebut, sebaliknya nilai ceiling dari sebuah
bilangan real adalah bilangan bulat terkecil yang masih lebih besar atau sama dengan bilangan
tersebut.
2. Diberikan sebuah bilangan N. Jika bilangan tersebut bernilai positif, tuliskan bilangan tersebut.
Jika tidak, outputnya kosong.
3. Diberikan sebuah bilangan N. Jika N berada di rentang 1-9, maka keluarkan output Satuan, jika
10-99 output Puluhan, 100-999 Ratusan, 1000-9999 Ribuan, 100000-999999 dengan
output Ratusan Ribu.
4. Diberikan sebuah bilangan N. Jika N dapat dibagi dengan 2, keluarkan output Habis dibagi 2.
Jika habis dibagi 3, keluarkan output Habis dibagi 3, jika habis dibagi 5, keluarkan output
Habis dibagi 5, selain itu keluarkan output Lainnya.
5. Diberikan sebuah bilangan N. Buatlah sebuah program yang berfungsi untuk memberikan
output berupa proses N dibagi dengan 2, 3, 5, 7, dan 13, hingga N =0. (Contoh : N =18, maka
output adalah : 9, 3, 1)
6. Sebuah lokasi di Google Mapsmemiliki koordinat di peta (dalam lintang dan bujur) adalah
(x,y). Jarak dari lokasi 1 ke lokasi berikutnya dinyatakan dalam : | x1-x2| +| y1-y2| . Buatlah
program untuk menentukan jarak antara kedua tempat!
7. Nilai seorang mahasiswa adalah M. Jika M berada di antara 85-100, maka indeksnya A dan IP
mahasiswa tersebut adalah 4. Jika M di antara 80-84, maka indeksnya A- dan IP nya 3,75. Jika di
antara65-80 indeksnya B dan IP nya 3,00. Jika diantara 55-65 maka indeksnya C dan IP nya 2,50.
Jika dibawah 55, maka indeksnya D dan IP nya 1,50. Mahasiswa tersebut mengikuti N buah
pelajaran. Buatlah : a. Daftar Indeks dan IP setiap pelajaran. B. IP rata-rata mahasiswa tersebut
F.Perulangan
Secara umum, struktur perulangan dibagi menjadi 3, yaitu for, while, dan repeat-until
F.1 Struktur FOR
Struktur for digunakan untuk menghasilkan pengulangan sejumlah kali tanpa penggunaan kondisi
apapun. Secara umum terdiri atas 2 macam : menaik dan menurun.
Contoh FOR menaik :
f or i : = 1 t o N do
wr i t el n( i ) ;
end;
Contoh FOR menurun :
f or i : = N downt o 1 do
wr i t el n( i ) ;
end;
Contoh Soal:Cetaklah angka dari 1 hingga N.
Solusi :
var i , n: i nt eger
begi n
r eadl n( n) ;
f or i : = 1 t o n do
wr i t el n( i ) ;
r eadl n end.
Contoh soal :Cetaklah semua angka dari N hingga 1 yang dapat dibagi dengan 2, 3 dan 5.
Solusi :
var i , n : i nt eger ;
begi n
r eadl n( n) ;
f or i : = n downt o 1 do
i f ( i mod 2=0) t hen wr i t el n( i )
el se i f ( i mod 3=0) t hen wr i t el n( i )
el se i f ( i mod 5=0) t hen wr i t el n( i )
end;
r eadl n end.
F.2 While
Kondisi while, adalah perulangan yang akan dilaksanakan jika kondisi yang diminta masih berlaku. Jika
kondisi perulangan bernilai false, pengulangan tidak akan dilaksanakan (selesai).
Struktur While :
i : =0;
whi l e i <n do
wr i t el n( i ) ;
i nc( i ) ;
end;
Pada mulanya, i bernilai 0, dan akan tertulis 0 di output. Lalu i bertambah menjadi 1, dan akan tertulis
kembali. Dan akan terus bertambah hingga n-i=1. Ketika i=n, perulangan berhenti. Maka akan tertulis
bilangan sebanyak n-i kali.
Contoh soal : hitunglah jumlah deret bilangan dari 1+2+3+...+N
Solusi :
var i , n, j uml ah: l ongi nt ;
begi n
r eadl n( n) ;
j uml ah: =0;
i : =1;
whi l e i <=n do begi n
j uml ah: =j uml ah+i ;
i nc( i ) ;
end;
wr i t e( j uml ah) ;
r eadl n end.
Contoh soal :Hitunglah rata-rata dari N buah bilangan yang diinput!
Solusi :
var i , n, x, sum: l ongi nt ;
r at a2: r eal ;
begi n
r eadl n( n) ;
sum: =0;
i : =1;
whi l e i <=n do begi n
r eadl n( x) ;
sum: =sum+x;
i nc( i ) ;
end;
r at a2: =sum/ n;
wr i t el n( r at a2) ;
r eadl n end.
F.3 Struktur Repeat
Repeat memiliki makna yang sama dengan while do, karena perulangan yang ada tetap berjalan hingga
kondisi bernilai salah. Pada struktur repeat perulangan diberikan pada akhir struktur, dan struktur while
perulangan diberikan pada awal struktur.
Contoh Repeat :
var i , n: i nt eger ;
begi n
r eadl n( n) ;
i : =1;
r epeat
wr i t el n( ' Aku Gant eng' ) ;
i nc( i ) ;
unt i l i =n;
r eadl n end.
Latihan Soal!
Anda telah mempelajari struktur for, while, dan repeat. Tugas anda sederhana, membuat program!
1. Pasukan Nasi Bungkus (PaNasBung) adalah pasukan yang gagah berani. Setiap kali berperang,
mereka selalu menghadapi lawan yang berjumlah lebih banyak dibandingkan mereka. Tugas
anda sederhana, buatlah program untuk menghitung selisih jumlah pasukan di kesatuan
PaNasBung dengan lawan mereka, jika jumlah lawan berkisar dari 1<=N<=2
64
dan tidak dalam
end of file (Hint : Hati-hati akan time limit exceeds/TLE)
2. Josua adalah seorang murid kelas 1 SD. Ia sering kesulitan dalam mengerjakan soal matematika.
Ia bertanya kepada anda, untuk mengerjakan PR matematikanya. Ia memberikan N buah angka
yang berbeda, dan tugas anda adalah menghitung jumlah angka-angka tersebut
3. Setelah anda menghitung jumlah angka-angka tersebut, Josua pun ingin anda mengetahui rata-
rata dari semua bilangan tersebut!
4. Pak Gian adalah direktur perusahaan Bangkrut. Ia harus mengupah karyawan-karyawannya
(dengan jumlah karyawan yang tidak diinputkan dengan variabel), berdasarkan jumlah jam
kerja. Jika jam kerja berkisar diantara 0-8 jam/hari, maka upahnya adalah jumlah jam kerja
dikalikan dengan 20000. Jika berada di antara 9-12 jam/hari, maka upahnya adalah
12*20000+(jumlah jam kerja 8)* 30000. Hitunglah pendapatan tiap-tiap karyawan Pak Gian
per bulannya!
5. Sebuah deret bilangan 1/x+1/x
2
+1/x
3
+1/x
n
. Hitunglah jumlah deret bilangan tersebut!
G.Function dan Procedure
G.1 Procedure
Prosedur adalahbagian dari program yang mengerjakan proses spesifik. Procedure tidak memiliki input,
hanya ada perintah-perintah tetap yang terdapat dalam prosedur tersebut.
Contoh Procedure
pr ocedur e swap ( x, y: i nt eger )
var t emp: i nt eger ;
begi n
t emp: =p;
p: =q;
q: =t emp;
end;
Pada potongan program diatas, tujuan prosedurnya adalah membalikkan 2 nilai, namun nilai akhirnya
tidak dapat ditampilkan ke layar, dan tidak ada input.
Contoh soal :Buatlah prosedur untukmenghitung jumlah N buah bilangan bulat!
Solusi :
pr ocedur e j uml ah( n: i nt eger ) ;
var i , x, sum: i nt eger ;
begi n
r eadl n( n) ;
sum: =0;
f or i : =1 t o n do
begi n
r eadl n( x) ;
sum: =sum+x;
end;
wr i t el n( sum) ;
end;
G.2 Variabel Global dan Variabel Lokal
Variabel global merupakan variabel yang dipanggil oleh semua fungsi. Variabel global juga dapat
digunakan jika ada variabel yang digunakan pada beberapa fungsi/prosedur sehingga menghemat
penulisan, karena tidak perlu berulang kali menuliskan variabel yang sama pada beberapa
fungsi/prosedur. Sementara variabel lokal adalah variabel yang hanya dapat digunakan dalam satu
prosedur/fungsi saja. Variabel lokal ini hanya dikenal oleh fungsi tempat variabel dideklarasikan dan
tidak ada inisialisasi secara otomatis.
G.3 Fungsi
Fungsi adalah bagian dari program yang mengembalikan nilai yang bertipe integer, real, boolean, dan
string. Sebelum mempelajari fungsi disini, pastinya anda telah mempelajari fungsi dalam matematika.
Fungsi dalam informatika memiliki definisi yang sama denganfungsi dalam matematika. Seperti halnya
contoh-contoh berikut.
1. f(x) =x
2
+2x+1
2. g(x,y) =3x
3
+2x
2
y+xy
2
+3y
3
Pada kedua contoh diatas, f dan g adalah nama fungsi, sedangkan x dan ya adalah parameter fungsi yang
bersangkutan. Nilai yang dikembalikan oleh fungsi bergantung pada input pada parameter. Contohnya
adalah
1. x=3. Maka f(3) =3
2
+2.3+1=16
2. x=4 y=2. Maka g(4,2) =3(4)
3
+2(4)
2
2+4(2)
2
+3(2)
3
=192+64+16+24=296
Nilai 16 dan 296 adalah nilai yang dikembalikan oleh fungsi f dan g.
Contoh Fungsi :
function jumlah(x,y:longint):longint;
begi n
j uml ah: =x+y;
end;
Pembahasan : Jika diinputkan x =5 dan y =10, maka:
Jumlah :=5+10 =15
Contoh Soal :Tahun diselenggarakannya Olimpiade Musim Panas adalah tahun dimana angka pada
tahun tersebut dapat dibagi dengan 4. Tuliskan fungsi untuk menentukannya.
Solusi :
f unct i on ol i mpi ade( t ahun: i nt eger ) : bool ean;
begi n
i f t ahun mod 4 = 0 t hen
ol i mpi ade: =t r ue
el se ol i mpi ade: =f al se;
end;
G.4 Rekursif
Rekursif secara definisi adalah pemanggilan sebuah fungsi secara rutin oleh fungsi tersebut. Maksudnya,
fungsi tersebut dipanggil secara terus menerus (oleh dirinya sendiri) hingga terbentuk sebuah nilai.
Pembahasan lebih lanjut mengenai rekursif akan dijelaskan pada bab 3.
Contoh soal dengan rekursif: Buatlah fungsi untuk menentukannilai dari sebuah bilangan faktorial!
Solusi :
f unct i on f akt or i al ( n: l ongi nt ) : l ongi nt ;
begi n
i f ( n=0) t hen f akt or i al : =1
el se f akt or i al : = n*f akt or i al ( n- 1) ;
end;
Dari contoh diatas, telah terjadi pengulangan hingga nilai n=0. Misalnya, kita masukkan dengan n
dengan angka 5. Maka alur programnya adalah :
faktorial(5):=5*faktorial(4);
faktorial(4):=5*4*faktorial(3);
faktorial(3):=5*4*3*faktorial(2);
faktorial(2):=5*4*3*2*faktorial(1);
faktorial(1):=5*4*3*2*1*faktorial(0);
Karena faktorial(0):=1, maka faktorial(5):=5*4*3*2*1=120
Latihan soal!
Anda telah memahami materi mengenai fungsi dan prosedur, saatnya untuk melatih pemahaman anda
pada materi fungsi dan prosedur
1. Diberikan 2 buah bilangan a dan b. Buatlah fungsi/prosedur untuk menukarkan kedua buah
bilangan tersebut!
2. Pak Josua mempunyai persediaan makanan untuk x buah hari sebanyak i buah makanan. Jika
keluarga Pak Josua menghabiskan 4 buah makanan/hari, buatlah fungsi/prosedur untuk
mengetahui seberapa lama jumlah persediaan makanan akan bertahan
3. Deret tribonacci adalah deret penjumlahan 3 bilangan sebelumnya. Jika 3 suku pertama deret
tribonacci adalah 0,1, dan 2, buatlah fungsi/prosedur untuk mengetahui bilangan tribonacci ke
N.
4. Buatlah fungsi untuk menghitung perpangkatan x
n
5. Buatlah fungsi untuk pemeriksaan password, jika diketahui password bersifat case sensitive
Uji Kompetensi Bab 1
Selamat, anda telah menyelesaikan Bab 1 ini. Untuk menguji kemampuan anda, telah disediakan
beberapa soal dengan tingkatan kesulitan yang berbeda. Soal-soal tersebut diambil dari soal-soal OSK
dan OSP.
Soal Pilihan Ganda dan isian singkat
1. Perhatikan potongan program berikut!
nDat a : = 10;
sum: = 0;
f or i : = 0 t o nDat a- 1 do
begi n
sum: = sum+ 2*i ;
end;
wr i t el n( sum) ;
Berapakah output dari program diatas?(OSK 2006)
(A)112
(B)110
(C)90
(D) 72
(E)100
2. Perhatikan potongan program berikut
f or i : = 1 t o n do begi n
f or j : = 1 t o n do begi n
f or k : = 1 t o n do begi n
wr i t el n( ' *' ) ;
end;
end;
end;
dengan sembarang harga n >0, keluaran '*' akan dicetak berulang-ulang dalam sejumlah baris yang..
(OSK 2006)
(A) merupakan fungsi kubik (pangkat 3)dari n
(B) merupakan fungsi kuadrat dari n
(C) merupakan fungsi linier dari n
(D) merupakan konstanta
(E) merupakan fungsi pangkat empat dari n
3. Perhatikanpotongan program berikut
a : = 2; b : = 5;
t mp : = 2*b;
b : = 2*a;
a : = t mp;
wr i t el n( b, a) ;
Berapakah output dari program di atas?(OSK 2006)
(A) 4 10
(B) 10 4
(C) 2 5
(D) 5 2
(E)4 4
4. Perhatikan potongan program berikut
i f a > b t hen
i f c > a t hen
t mp : = c;
el se t mp : = a;
el se
i f c > b t hen
t mp : = c;
el se t mp : = b;
wr i t el n( t mp) ;
Apabila diberikan nilai a=3, b=5 dan c=8, berapakah output dari program tersebut?(OSK 2006)
(A) 3
(B) 5
(C) 4
(D) 7
(E) 8
5. Perhatikan potongan algoritma berikut ini:
/ / x dan y ber t i pe i nt eger
x : = - 16; y : = 8;
x : = x + y;
x : = y - x;
Nilai variable x dan y setelah eksekusi operasi-operasi tersebut:(OSK 2010)
A. x=-8 dan y =8
B. x =24 dan y =-8
C. x =8 dan y =18
D. x =8 dan y =-16;
E. x =-8 dan y=16;
6. Perhatikan algoritma berikut ini.
i f ( a and not ( not c and not b) ) or not ( ( c and b) or not a) t hen
wr i t el n( ' di ng' )
el se wr i t el n( ' dong' ) ;
Pemeriksaan ekspresi lojik (dari struktur if-then)tersebut bisa digantikan dengan ekspresi berikut(OSK
2010)
A.((a <>c) or (a =b) or b)
B.((a =c) and (a <>b) and not b)
C.(a and (c or b)) or (not (c and b) and a)
D.((a and c) or b) or ((not c or not b) and a)
E. a and not b and not c
Perhatikan Potongan kode dibawah untuk soal no 7 dan 8
7. Perhatikanalgoritma berikut.
pr ocedur e Bi nt ang( t : i nt eger ) ;
begi n
i f ( t > 0) t hen
begi n
f or i : = 1 t o t do wr i t el n( ' *' ) ;
Bi nt ang( t di v 2) ; / / t di bagi 2 dan di bul at kan ke bawah
end;
end;
Pemanggilan Bintang(1000) menghasilkan pencetakan '*' sebanyak? (OSK 2010)
A. 2000 Baris
B. 1994 Baris
C. 1000 Baris
D. 500 baris
E. 10 Baris
8. Untuk menghasilkan penetakan '*' sebanyak 200 kali memerlukan pemanggilan dengan?(OSK 2010)
A. Bintang(100)
B. Bintang(102)
C. Bintang(116)
D. Bintang(200)
E. Bintang(1000)
9. Perhatikan potongan program berikut
var i , n: i nt eger
begi n
r eadl n( i , n)
wr i t el n( abs( i - n) ;
end.
Jika i =120 dan n=297 maka output yang dihasilkan?
10. Perhatikan program berikut
var j bi l , i , j ml , bi l : i nt eger ;
begi n
j ml : =0;
r ead( j bi l ) ;
f or i : =1 t o j bi l do
begi n
r ead( bi l ) ;
j ml : = j ml + bi l ;
end;
wr i t el n( j ml ) ;
end.
Jika program dipanggil dengan input 5 1 2 3 4 5 maka hasilnya adalah..
Soal Membuat Program Sederhana
1. Diberikan sebuah input N. Tugas anda sederhana, tulislah semua bilangan di antara 1 hingga N,
namun jika bertemu dengan kelipatan 5,7 dan 11, lompati bilangan tersebut. Jika bertemu
dengan bilangan 567, tuliskan LIMIT dan akhiri program.
2. Pak Franko adalah seorang arsitek. Ia biasanya merancang sebuah bangunan dengan bentuk
tertentu. Kali ini, pak Franko memberikan gambaran tentang bentuk bangunannya. Ia berkata
Jika N =2, maka luas bangunannya adalah 3,14. Anda belum yakin dengan jawaban Pak
Franko. Dan pak Franko memberikan sebuah gambaran lagi Jika N =14, maka luas
bangunannya adalah 154. Buatlah program untuk menentukan luas jika N adalah inputannya.
3. Buatlah sebuah program yang menunjukkan faktor-faktor dari bilangan N
4. Pak Anu meminta anda untuk menuliskan angka dari 1 hingga N. Namun, untuk bilangan
kelipatan M, anda harus menghilangkannya, dan diganti dengan a.
5. Buatlah sebuah program untuk memuat pola-pola berikut (sejumlah N baris)
*
**
***
****
*****
6. Pak Anu meminta anda untuk membuat sebuah program untuk membuat bingkai dari karakter
* dengan panjang P, lebar L, dan tebal T. Diketahui isi diantara 2 sisi lebar tidak diperbolehkan
untuk menulis karakter *. Buatlah algoritmanya
7. Buatlah sebuah program untuk menentukan tahun kabisat, jika tahun kabisat adalah tahun yang
habis dibagi 4. Jika tahun habis dibagi 100 namun tidak habis dibagi 400 bukan tahun kabisat,
dan tahun yang habis dibagi 400 adalah tahun kabisat.
Selamat! Anda telah menyelesaikan Bab 1. Untuk mengetahui seberapa pemahaman anda, anda dapat
mengirimkan jawaban anda ke email faisalfl98@yahoo.com
Bab 2 Array dan String
Setelah anda mempelajari materi perkenalan pemrograman, kini saatnya anda membahas mengenai
operasi pada Array dan operasi pada String. Untuk lebih jelasnya, mari kita simak.
A.Array
Array adalah struktur data yang menyimpan sekumpulan elemen yang bertipe sama, setiap elemen
diakses langsung melalui indeksnya. Indeks array haruslah tipe data yang menyatakan keterurutan
(seperti integer).
A.1 Cara Mendeklarasikan Array
Array umumnya dideklarasikan pada bagian deklarasi, seperti
var i , n: i nt eger ;
al ay : ar r ay[ 1. . 15] of l ongi nt ;
A.2 Contoh Program dengan Array
var i : i nt eger ;
al ay : ar r ay[ 1. . 15] of i nt eger ;
begi n
f or i : =1 t o 15 do
r eadl n( al ay[ i ] ) ;
f or i : = 1 t o 15 do
wr i t el n( al ay[ i ] ) ;
r eadl n end.
Program tersebut berfungsi mengambil nilai sebanyak 15 kali, setelah mengambil, lalu dicetak sebanyak
15 kali pula.
A.3 Array 2 Dimensi
Pada array 2 dimensi, data disimpan dalam baris dan kolom. Untuk mendeklarasikannya, adalah
*nama array* : array[1..baris,1..kolom] of tipe data;
Untuk menjumlahkan 2 array berukuran 2 dimensi, hanya tinggal menjumlahkannya saja.
Contoh : A[i,j]+B[i,j], berarti menjumlahkan nilai array A dan B di indeks [i,j].
A.4 Contoh program Array 2 Dimensi :
var
mat r i ks: ar r ay[ 1. . 100, 1. . 100] of Longi nt ;
n, m, i , j , x: Longi nt ;
{n unt uk j uml ah bar i s, dan munt uk j uml ah kol om}
begi n
r eadl n( n, m) ;
f or i : = 1 t o n do begi n
f or j : = 1 t o mdo begi n
r ead( x) ;
mat r i ks[ i , j ] : =x;
end;
r eadl n;
end;
f or i : = 1 t o mdo begi n
f or j : = n downt o 1 do begi n
wr i t e( mat r i ks[ j , i ] ) ;
i f ( j <>1) t hen begi n
wr i t e( ' ' ) ;
end;
end;
wr i t el n( ) ;
end;
end.
Latihan Soal!
1. Buatlah sebuah program untuk menampung N buah bilangan, kemudian membalikkan
(membalik indeks A[1] dengan A[N], A[2] dengan A[N-1] dan seterusnya)
2. Buatlah sebuah program untuk menampung N buah bilangan, lalu tunjukkan modus dari N buah
bilangan tersebut
3. Buatlah sebuah program untuk menjumlahkan 2 buah matriks.
B.Operasi String
Operasi pada string terbagi 2 bagian, yaitu prosedur standar dan fungsi standar. Untuk perbedaannya
bisa dilihat di materi dibawah ini.
B.1 Prosedur Standar
1. Delete
Delete berfungsi untuk menghapus substring dari sebuah string, dengan permulaan dari posisi i
sebanyak n buah string
Contoh :
var i , n : st r i ng;
begi n
i : = ' saya gant eng' ;
n: =del et e( i , 3, 4) ;
wr i t el n( n) ;
r eadl n end.
Output dari program tersebut adalah karakter "saanteng".
2. Insert
Berfungsi untuk menyisipkan substring ke dalam suatu string pada posisi tertentu
Contoh :
var i , n: st r i ng;
begi n
i : =' bel aj ar ' ;
n: =i nser t ( ' pr ogr ammi ng' , i , 8) ;
wr i t el n( n) ;
r eadl n end.
Output dari program tersebut adalah karakter "belajar programming"
3. STR
Berfungsi untuk mengubah bentuk numerik(x) menjadi nilai string(s)
Bentuk : STR(x[:n[:m]],string)
Nilai n menunjukkan format panjang dari nilai utuh dan nilai m menunjukkan format panjang desimal
(nilai dibelakang koma)
4. Val
Prosedur Val mengubah bentuk string menjadinilai numerik.
B.2 Fungsi Standar
1. Concat
Concat berfungsi untuk menggabungkan string. Selain itu bisa juga menggunakan '+' untuk
menggabungkan string
Bentuk :hasil:=concat(s1,s2);
hasil:=s1+s2;
2. Copy
Fungsi ini mengambil substring dari sebuah string, dimulai dari posisi i sebanyak n buah karakter.
Bentuk :hasil:=copy(s1,i,n);
3. POS
Mencari letak suatu substring, yang ada pada sebuah string. Hasil keluarannya berupa integer
Bentuk :hasil:=pos(subs1,s1);
4. Length
Berfungsi untuk memberikan nilai panjang sebuah string, berupa integer.
Bentuk :hasil:=length(s1);
Latihan Soal!
Anda telah menyelesaikan materi mengenai Operasi pada string. Saatnya untuk berlatih!
1. Diberikan sebuah string. Tugas anda sederhana, baliklah string tersebut!
2. Balikanlah N buah bilangan!
3. Anda telah mengetahui beberapa operasi matematika, seperti +, -, x , /, <, >, dan =.
Anda akan diberikan 2 buah bilangan, dan operasi yang akan diinput berbeda. Tugas anda
adalah menentukan hasil dari operasi tersebut! (Hint : operasi >,<, dan = hanya
mengeluarkan output berupa Benar dan Salah saja)
4. Bilangan komposit adalah bilangan yang lebih besar dari 1 yangmerupakan bilangan bukan
prima. Diberikan N buah bilangan, tentukan apakah bilangan tersebut merupakan bilangan
komposit atau bukan. Jika bilangan komposit keluarkan Ya jika bukan keluarkan Tidak.
Uji Kompetensi Bab 2
Selamat, anda telah menyelesaikan Bab 2. Ayo, uji kemampuan anda!
1. Suatu array X berindeks dari 1 s.d. 10 dan setiap elemennya berisi huruf-huruf berurutan dari 'a'
sampai 'j'. Perhatikan prosedur berikut.
Pr ocedur e swap( a, b: st r i ng) ;
f or i : = 1 t o 10 do
swap( X[ i ] , X[ 10- i +1] ) ;
f or i : = 1 t o 10 do wr i t e( X[ i ] ) ;
Hasil yang dicetak adalah: (OSK 2010)
A. abcdefghij
B. jihgfedcba
C. ebacdhfgij
D. fghijabcde
E. cdefghijab
2. Jika algoritma yang bekerja pada array tersebut adalah sbb
f or i : = 2 t o 9 do
swap( X[ i - 1] , X[ i +1] ;
f or i : = 1 t o 10 do wr i t e( X[ i ] ) ;
Hasil yang akan dicetak adalah(OSK 2010)
A. ebacdhfgij
B. abcdefghij
C. jihgfedcba
D. cdefghijab
E. fghijabcde
3. Dari soal no 1, suatu algoritma bekerja pada array tersebut sbb
pr ocedur e l agi ( a: i nt eger ; b: i nt eger ) ;
var t : i nt eger ;
begi n
t : = ( a+b) di v 2;
i f ( a <= b) t hen begi n
wr i t e( X[ t ] ) ;
l agi ( a, t - 1) ;
l agi ( t +1, b) ;
end
end;
pemanggilan lagi(1,10) akan mencetakkan keluaran: (OSK 2010)
A. ebacdhfgij
B. abcdefghij
C. jihgfedcba
D. fghijabcde
E. cdefghijab
Perhatikan fungsi dan potongan program sebagai berikut untuk soal nomor 4 dan 5
var i nput : st r i ng;
pr ocedur e ubah( s: st r i ng)
var i , j : i nt eger ;
begi n
f or i : =1 t o l engt h( s) - 1 do
begi n
s[ i ] : = chr ( ( ( ( or d( s[ i ] ) - 65) +
( or d( s[ i +1] ) - 65) ) mod 26) + 65) ;
end;
wr i t el n( s) ;
end;
begi n
ubah( i nput ) ;
end.
Catatan:
Fungsi ord(cc: char) menghasilkan nilai kode ASCII karakter CC;
Fungsi chr (K: integer) menghasilkan karakter yang kode ASCII-nya adalah K.
Potongan tabel konversi kode ASCII dari karakter A s.d. Z diberikan sebagai berikut:
ord(A) =65
ord(B) =66
ord(C) =67
.
dst
ord(X) =88
ord(Y) =89
ord(Z) =90
4. Apabila variabel input berisi nilai TOKIABSOLUTEWINNERIOI, apakah output yang dihasilkan
oleh program di atas? (OSK2014)
A. HYSIBTGZFNXAEVARVZWWI
B. IZTJCUHAGOYBFWBSWAXXJ
C. HYAIBTBZFNXCEVARVZWWI
D. IZTJCUHAGOYBFWBSWAXXJ
E. HZAJIUBAFOXBEWRSZAWXI
5. Apabila program di atas mengeluarkan output RIPTQHDLTMQMSS, nilai variabel input
adalah?(OSK 2014)
A. GOGETGOLDMEDAL
B. RAIHMEDALIEMAS
C. HYAIBTBZFNXCEVA
D. OSNINFORMATIKA
E. SUKSESSEMUANYA
6. Perhatikan potongan program berikut
var
alay:array[1..100000] of Longint;
x,n,y,i,max,temp:Longint;
begin
for i :=1 to 100000 do begin
alay[i]:=0;
end;
readln(n);
for i :=1 to n do begin
readln(temp);
alay[temp]:=alay[temp]+1;
end;
max:=0;
for i :=1 to 100000 do begin
if (max<=alay[i]) then begin
max:=alay[i];
y:=i;
end;
end;
writeln(y);
end.
Jika diberi inputan 7 1 3 2 4 6 6 3 maka outputnya adalah...
7.Perhatikan potongan program berikut
var
s1,s2:ansistring;
n,i:integer;
begin
readln(s1);
n:=Length(s1);
for i:=n downto 1 do begin
s2:=s2+s1[i];
end;
writeln(s2);
end.
Jika pogram tersebut diberi inputan mari belajar pemrograman maka outputnya adalah..
8.Perhatikan potongan program berikut ini
base : = QWERTYUI OPLKJ HGFDSAZXCVBNM ; kat a : = ;
r eadl n( kal i mat ) ;
f or i : = l engt h( kal i mat ) downt o 1 do begi n
i f pos( kal i mat [ i ] , base) > 0 t hen
kat a: = kat a & kal i mat [ i ] ;
end;
wr i t el n( kat a) ;
Fungsi pos (CC:char, str:string) adalah fungsi yang akan menghasilkan posisi CC di suatu string str, jika
suatu CC tidak terdapat di string, fungsi pos akan menghasilkan 0. Operator & adalah sebuah operator
untuk menambahkan sebuah karakter di akhir sebuah string. Jika program di atas diberi masukan s4yA-
BuK4N+oRanG aLaY!?, maka keluarannya adalah (OSP 2013)
9.Perhatikan fungsi berikut
f unct i on coba( a: i nt eger ) : st r i ng;
var
b : i nt eger ;
st r : st r i ng;
begi n
i f ( a=0) t hen
coba: = ' '
el se
begi n
b : = a mod 2;
i f ( b=0) t hen st r : = 0
el se st r : = 1 ;
coba: = coba( a di v 2) +st r ;
end;
end;
nilai yang dikembalikan oleh pemanggilan fungsi coba(155) adalah? Jawab: ... (OSP 2011)
10. Perhatikan potongan program berikut ini
{
ubah adal ah f ungsi yang mener i ma masukan i nt eger i dengan r umus:
ubah( 1) = A ; ubah( 2) = B ; ubah( 3) = C , dst .
}
var
kal i mat : ar r ay[ 1. . 10000] of st r i ng;
hi t ung : i nt eger ;
pr ocedur e ber ul ang( i dx, n: i nt eger ; kat a: st r i ng) ;
var
i : i nt eger ;
begi n
i f ( i dx = n) t hen
begi n
hi t ung : = hi t ung+1;
kal i mat [ hi t ung] : = kat a;
end
el se
begi n
f or i : =1 t o 5 do
ber ul ang( i dx+1, n, kat a+ubah( i ) ) ;
end;
end;
Jika diberikan program utama ini:
begi n
ber ul ang( 0, 5, ) ;
wr i t el n( kal i mat [ 1] , , kal i mat [ 10] , , kal i mat [ hi t ung] ) ;
end.
Apakah output yang tampil di layar? Jawab: ... (OSP 2011)
Soal Membuat Program
1. Diberikan sebuah bilangan N. Balikkan bilangan tersebut. Setelah anda balikkan, jumlahkan
dengan bilangan sebelumnya, hingga membentuk bilangan yangberupa palindrome.
2. Palililindrom (TOKI Open Contest Desember 2011)
Hari ini Ganeshi (anak pak Ganesh) berulang tahun, dan Dengkli (anak pak Dengklek) diundang
ke pesta ulang tahun. Sebagai teman yang baik, Dengkli ingin memberikan hadiah yang
berkesan. Dengkli tahu bahwa Ganeshi sangat menyukai kata palindrom, dan semakin panjang
palindromnya akan semakin berkesan untuk Ganeshi.
Dengkli sudah mempersiapkan hadiah berupa string palindrom kepada Ganeshi, namun sayang
karena kurang berhati-hati di jalan, Dengkli bertabrakan dengan rombongan bebek yang juga
diundang oleh Ganeshi. Akibatnya hadiah Dengkli dan bebek bebek jatuh dan berhamburan di
jalan. Sebagai anak kosan, Dengkli tidak mungkin membeli hadiah baru karena harus
menghemat uang bulanan, sehingga iamemutuskan untuk merangkai kembali kumpulan
karakter yang sudah tercampur dengan hadiah dari para bebek menjadi suatu string palindrom
baru, tentunya ia ingin merangkai string palindrom sepanjang mungkin.
Karena waktu semakin tipis, Dengkli juga tidak ingin terlambat sampai di pesta, maka ia pun
menelepon anda untuk meminta bantuan. Bantulah dia!
Input Format
Input hanya terdiri dari 1 buah string yang panjangnya tidak lebih dari 100.000 yang menyatakan
karakter yang berhamburan di jalan. Karakter dalam string dijamin hanya terdiri dari huruf besar
(A Z) dan huruf kecil (a z). Huruf kapital dan non-kapital dianggap sebagai karakter yang
berbeda.
Output Format
Untuk input yang diberikan output-kan sebuah string yang menyatakan palindrom terpanjang
yang dapat dibuat dari input yang ada dan sebuah bilangan bulat yang menyatakan berapa
banyak karakter yang harus dibuang untuk membuat palindrom tersebut. Antara string dan
bilangan bulat tersebut dipisahkan oleh 1 buah spasi. Jika terdapat lebih dari 1 solusi string
palindrom yang terpanjang, keluarkan yang paling awal secara leksikografis. Sebagai informasi,
huruf 'A' muncul lebih awal dari huruf 'a'.
3. Tentukan sebuah bilangan adalah bilangan 2
n
atau 3
n
atau 5
n
, atau bukan ketiganya. Jika
merupakan bilangan 2
n
atau 3
n
atau 5
n
, keluarkan Ya, jika bukan Tidak
4. Buatlah sebuah algoritma untuk menentukan nilai maksimum dari N buah bilangan
Selamat! Anda telah menyelesaikan Bab 2. Untuk mengetahui seberapa pemahaman anda, anda dapat
mengirimkan jawaban anda ke email faisalfl98@yahoo.com
Bab 3 Rekursif
Selamat, anda telah menyelesaikan 2 bab awal mengenai dasar-dasar pemrograman dan struktur data.
Untuk selanjutnya, anda akan mempelajari materi mengenai rekursif. Bagian rekursif memang sudah
disampaikan pada bab 1, namun untuk pendalamannya akan disampaikan pada bab ini.
Rekursif secara definisi adalah pemanggilan sebuah fungsi secara rutin oleh fungsi tersebut. Maksudnya,
fungsi tersebut dipanggil secara terus menerus (oleh dirinya sendiri) hingga terbentuk sebuah nilai.
Adapun macam-macam rekursif terbagi atas 3 macam, yaitu :
1. Top down recursion (rekursi menurun), yaitu parameter pada fungsi menurun nilainya hingga
terbentuk nilai fungsi (kasus berhenti).
2. Bottom Up recursion (rekursi menaik), yaitu parameter menaik nilainya hingga terbentuk nilai
fungsi (kasus berhenti).
3. Divides by Half, dimana rekursi terbagi menjadi dua bagian yang merupakan sub rekursi dari
rekursi utama, dan akan berjalan masing-masing.
A.Rekursif Top Down
Seperti namanya, rekursif top down itu rekursif dengan parameter pada fungsi tersebut menurun
nilainya hingga terbentuk nilai fungsi, dalam kata lain, nilai parameternya menurun terus hingga fungsi
tersebut berhenti. Contoh simple dari rekursif top down adalah faktorial.
f unct i on f akt or i al ( n: l ongi nt ) : l ongi nt ;
begi n
i f ( n=0) t hen f akt or i al : =1
el se f akt or i al : = n*f akt or i al ( n- 1) ;
end;
Nah, faktorial disebut rekursif top down karena nilai n akan terus berkurang pada setiap proses rekursi.
Contoh lainnya adalah fungsi berikut :
f unct i on abc( n: i nt eger ) : i nt eger ;
begi n
i f ( n=0) t hen abc: =0
el se abc: =hi t ung( n di v 7) + ( n mod 7) + 7;
end;
Pada program tersebut, nilai parameter n akan terus berkurang hingga n=0, sehingga dapat dikatakan
sebagai rekursif top-down.
B.Rekursif Bottom-Up
Rekursif bottom-up adalah kebalikannya dari rekursif top-down, yaitu nilai parameter berawal dari 0,
lalu menaik hingga kasus berhenti.
Contoh dari rekursif bottom-up (yang biasa saya gunakan) adalah menghitung nilai fibonacci.
f unct i on f i bonacci ( n: i nt eger ) : i nt eger ;
begi n
i f n: =1 t hen f i bonacci : =1
el se i f n: =2 t hen f i bonacci : =1
el se f i bonacci : =f i bonacci ( n- 1) +f i bonacci ( n- 2) ;
end;
Pada fungsi fibonacci tersebut, nilai parameter awalnya adalah 1, lalu menaik hingga n. Sehingga, nilai
fibonacci(n) dapat diketahui ketika kasus selesai.
C.Rekursif Divide by Half
Rekursif jenis ini berarti membagi rekursif menjadi 2 bagian subrekursif yang berjalan masing-masing,
lalu setelah didapatkan nilainya, nilai kedua subrekursif digabungkan, dan membentuk nilai fungsi (kasus
berakhir).
Rekursif dengan metode Divide by Half biasanya dipakai dalam prosessorting (terutama pada algoritma
quicksort). Berikut adalah contoh rekursif divide by half.
pr ocedur e qui cksor t ( a, b: l ongi nt ) ;
var ki , ka, mi d, t emp: l ongi nt ;
begi n
ki : =a; ka: =b; mi d: =ar r [ ( a+b) di v 2] ; {ar r adal ah var i abel unt uk
ar r ay}
whi l e ki <=ka do begi n
whi l e ar r [ ki ] <mi d do i nc( ki ) ;
whi l e ar r [ ka] >mi d do dec( ka) ;
i f ki <=ka do begi n
t emp: =ar r [ ki ] ;
ar r [ ki ] : =ar r [ ka] ;
ar r [ ka] : =t emp;
i nc( ki ) ; dec( ka) ;
end;
end;
i f a<ka t hen qui cksor t ( a, ka) ;
i f ki <b t hen qui cksor t ( ki , b) ;
end;
D.Teknik Membaca Rekursif
Biasanya pada soal algoritmik (baik di ajang OSK maupun OSP), peserta kebanyakan kesulitan dengan
soal-soal yang berbau rekursif. Padahal, soal-soal rekursif merupakan soal-soal yang terbilang mudah,
karena hanya mengikuti alur fungsi/prosedur yang ada di fungsi tersebut. Adapun teknik-teknik
membaca rekursif adalah :
1. Lihat parameter yang memiliki nilai
Biasanya, parameter dengan nilai 0 (contohnya if x=0 then abc:=1), merupakan parameter kunci. Anda
harus menentukan apakah akan mengerjakannya dengan cara bottom up, atau dengan cara top-down.
2. Operasikan mengikuti alur program
Biasanya, mengoperasikan dengan mengikuti alur program dilakukan dengan membuat tabel. Namun,
tak jarang juga menggunakan skema pohon faktor
3. Jika sudah mendapatkan nilai fungsi, maka jumlahkan nilai pada tiap tahap rekursifnya
Contoh penyelesaian soal rekursif
1. Perhatikan fungsi dari potongan program berikut!
f unct i on panggi l 1( x: l ongi nt ) : l ongi nt ;
begi n
i f ( x<3) t hen panggi l 1: =0
el se panggi l 1: =panggi l 1( x- 1) +2*panggi l 1( x- 2) +3;
end;
Bila fungsi di atas dipanggil dengan panggil1(7), maka hasil keluarannya adalah: (OSK 2013)
A. 7
B. 28
C. 34
D. 63
E. 97
Cara membaca fungsi tersebut adalah dengan :
panggil1(1) dan panggil1(2) bernilai 0
panggil1(3) =panggil1(2)+2*panggil1(1)+3=0+2*0+3=3
panggil1(4)=panggil1(3)+2*panggil1(2)+3=3+2*0+3=6
panggil1(5)=panggil1(4)+2*panggil1(3)+3=6+2*3+3=15
panggil1(6)=panggil1(5)+2*panggil1(4)+3=15+2*6+3=30
panggil1(7)=panggil1(6)+2*panggil1(5)+3=30+2*15+3=63 (D)
2. f unct i on Bunga( x: l ongi nt ) : l ongi nt ;
var
i , Bungai : l ongi nt ;
begi n
i f ( x = 0) t hen Bunga : = 1
el se
begi n
Bungai : = 0;
f or i : = 0 t o x- 1 do
Bungai : = Bungai + Bunga( i ) ;
Bunga : = Bungai ;
end;
end;
Berapakah hasil dari Bunga(3)? (OSK 2013)
A. 1
B. 2
C. 3
D. 4
E. A, B, C, D salah atau ada lebih dari satu jawaban yang benar di antara A, B, C, D
Cara pengerjaan :
Bunga(0) =1
Bunga(1) =Bunga(0) =1
Bunga(2)=Bunga(0)+Bunga(1) = 1+1 =2
Bunga(3) =Bunga(0) +Bunga(1) +Bunga(2) =1+1+2 =4
Latihan Soal!
1. Diketahui sebuah gudang memiliki nomor N. Jika gudang tersebut bernomor 1, maka memiliki
persediaan sebanyak 1, jika gudang tersebut bernomor 2, maka memiliki persediaan maksimal
3, dan selanjutnya memiliki persediaan diantara kapasitas nomor sebelumnya dan penjumlahan
kapasitas 2 nomor sebelumnya. Pak Anu menginstruksikan anda untuk membuat program
mengenai kapasitas gudang tersebut
2. Pak Anu memberikan anda N buah angka. Tugas anda sederhana, mengurutkan angka-angka
tersebut dari terkecil ke terbesar!
Uji Kompetensi Bab 3
Anda telah menyelesaikan Bab 3 mengenai rekursif, sekarang saatnya anda mengerjakan soal-soal uji
kompetensi.
Soal Bagian Pilihan Ganda dan Isian Singkat
1. Perhatikan potongan program tersebut untuk soal no 1-3!
f unct i on abc( a: i nt eger ) : i nt eger ;
begi n
abc : =a*3- ( a mod 7) ;
{a}
end;
f unct i on ghi ( x: i nt eger ; b: i nt eger ) : i nt eger ;
begi n
i f ( b=1) t hen
ghi : = x
el se
ghi : = ( x* ghi ( x, b- 1) ) mod 100;
end;
f unct i on def ( a: i nt eger ; b: i nt eger ) : i nt eger ;
begi n
i f ( b mod 2 = 1) and ( b>500) t hen
def : = ghi ( a, b) mod 100
{b}
el se
def : =def ( a, abc( b) ) ;
end;
Berapakah hasil dari pemanggilan fungsi def(7,100) ? (OSK 2013)
A. 1
B. 7
C. 43
D. 49
E. Jawaban A, B, C, D salah
2. Apabila bagian (a) diubah menjadi abc := a*2 - (a mod 5), maka berapakah hasil
pemanggilan fungsi def(7,151)?(OSK 2013)
A. 1
B. 7
C. 43
D. 49
E. Jawaban A, B, C, D salah
3. Apabila bagian (b) diubah menjadi def := ghi(a,b) mod 10, maka berapakah hasil
pemanggilan fungsi def(3,30)? (OSK 2013)
A. 1
B. 3
C. 7
D. 9
E. Jawaban A, B, C, D salah
4. Perhatikan fungsi di bawah ini.
f unct i on wow( x: i nt eger ) : i nt eger ;
begi n
i f ( x < 2) t hen wow : = x
el se wow : = wow( x- 2) + 3*wow( x- 1) ;
end;
Apa yang akan dikembalikan pada pemanggilan fungsi wow(8)? (OSK 2014)
A.3620
B.3760
C.3824
D.3927
E.4126
5. Perhatikan fungsi berikut untuk soal no 5 dan 6
f unct i on mangga( r ambut an : i nt eger ) : i nt eger ; begi n
i f ( r ambut an = 1) t hen mangga : = 1 el se
i f ( r ambut an mod 2 = 1) t hen mangga : = mangga( 3 *
r ambut an + 1) el se mangga : = mangga( r ambut an di v 2) ;
end;
f unct i on j er uk( anggur , mel on : i nt eger ) : i nt eger ; begi n
i f ( mel on = 1) t hen j er uk : = 0 el se
j er uk : = mangga( anggur ) * anggur + j er uk( anggur , mel on
- 1) ;
end;
Berapakah hasil pemanggilan fungsi mangga(49)? (OSK 2014)
A.1
B.7
C.14
D.21
E.49
6. Berapakah hasil pemanggilan fungsi jeruk(25, 20)?(OSK 2014)
A.425
B.450
C.475
D.500
E.525
7. Perhatikan fungsi dibawah ini untuk soal no 7 dan 8
f unct i on f ( a : i nt eger ) : i nt eger ;
begi n
i f a=0 t hen
f : = 1
el se
f : = 2*f ( a- 1) ;
end;
f unct i on g( b: i nt eger ) : i nt eger ;
begi n
i f b=0 t hen
g: = f ( b)
el se
g: = f ( b) + g( b- 1) ;
end;
Jika fungsi f(3) dipanggil maka nilai yang dihasilkan adalah... (OSK 2014)
A.1
B.3
C.4
D.15
E.16
8. Jika fungsi f(10) dipanggil maka nilai yang dihasilkan adalah... (OSK 2014)
A.1
B.9
C.10
D.1023
E.1024
9. Perhatikan potongan program berikut untuk soal no 9 dan 10!
pr ocedur e cal l f oo( var a : i nt eger ; b : i nt eger ) ;
var p, q : i nt eger ;
begi n
i f ( b <= 2) t hen
a : = 1
el se begi n
cal l f oo( p, b- 1) ;
cal l f oo( q, b- 2) ;
a : = p + q;
end;
end;
var x, y : i nt eger ;
begi n
x : = ; y : = ; {i ni si al i sasi } cal l f oo( x, y) ;
wr i t el n( x) ;
end.
Apakah output program jika inisialisasi x :=0; y := 5; ? (OSK 2014)
A.5
B.10
C.15
D.20
E.25
10. Apakah output program jika inisialisasi x := 0; y := 12; ?(OSK 2014)
A.12
B.24
C.48
D.72
E.144
11. Perhatikan potongan fungsi berikut untuk soal no 11 dan 12
f unct i on f l op( a, b: l ongi nt ) : l ongi nt ;
f or war d;
f unct i on f l i p( a, b: l ongi nt ) : l ongi nt ;
begi n
i f ( a = 0) t hen
f l i p: =0
el se
f l i p: =a+f l op( a- 1, b) ;
end;
f unct i on f l op( a, b: l ongi nt ) : l ongi nt ;
begi n
i f ( b = 0) t hen
f l op: =0
el se
f l op: =b+f l i p( a, b- 1) ;
end;
Berapakah nilai yang dihasilkan dari pemanggilan fungsi flip(4,7)? (OSP 2013)
12. Berapakah nilai yang dihasilkan dari pemanggilan fungsi flop(100,200)?(OSP 2013)
13. Perhatikan potongang fungsi untuk no 13 dan 14
f unct i on hap( x, t : i nt eger ) : i nt eger ; begi n
i f t = 1 t hen
hap : = x mod 5
el se
hap : = 5*x;
end;
f unct i on hi p( x, y: i nt eger ) : i nt eger ; begi n
i f x < y t hen
hi p : = hi p( y, x)
el se
hi p : = hap( x, 1) + hap( y, 2) ;
end;
f unct i on hop( x, y, z: i nt eger ) : i nt eger ; begi n
i f y > z t hen
hop : = hop( x, z, y)
el se i f x > y t hen
hop : = hop( y, x, z)
el se
hop : = hi p( x, y) + z;
end;
Apakah output dari pemanggilan writeln(hop(18, 3, 1993)) ?(OSP 2013)
14. Apakah output dari pemanggilan writeln(hip(hop(201,320,12), hop(20,1120,10)) +hap(21,30)) ?
(OSP 2013)
15. Perhatikan potongan program berikut!
f unct i on ki bo( n: i nt eger ) : i nt eger ;
begi n
i f ( n = 2) or ( n = 1) or ( n = 0) t hen ki bo : =
n
el se ki bo : = ki bo( n- 1) + ki bo( n- 3) ;
end;
Berapa kalikah kibo(3) dipanggil saat pemanggilan kibo(7) ? (OSP 2013)
Soal Bagian Membuat Program Sederhana
1. Pak Anu memiliki N buah buku di perpustakaan. Buku-buku tersebut memiliki nomor-nomor
yang berbeda setiap bukunya. Pak Anu ingin anda mengurutkan buku-buku tersebut. Buatlah
algoritma pengurutan buku-buku tersebut!
2. Sebuah bilangan mempunyai rumus f(n) =f(n-1)+3*f(n-2). Jika diketahui f(0) adalah 24 dan f(1)
adalah 42, buatlah program untuk mengetahui f(n) jika n>100.
3. Sebuah deret bilangan memiliki rumus 1/14+2/33+3/65+4/119+.... Pak Anu menyuruh anda
untukmembuat program untuk menghitung hasil penjumlahan deret tersebut, dengan
maksimal 4 angka dibelakang koma.
Selamat! Anda telah menyelesaikan Bab 3. Untuk mengetahui seberapa pemahaman anda, anda dapat
mengirimkan jawaban anda ke email faisalfl98@yahoo.com

Anda mungkin juga menyukai