PERTEMUAN 10 Algoritma Presented by : Sity Aisyah, M.Kom Email : dryesha@gmail.com Blog : yeshasalsabila.blogspot.com 1
Subrutin Sebuah programyang besar biasanya disusun atas sejumlah bagian yang lebih kecil yang dinamakan subrutin atau subprogram. Tujuan penggunaan subrutin adalah untuk memudahkan pengelolaan/pengembangan program mengingat setiap subrutin memiliki kode yang relatif sedikit (jika dibandingkna dengan kode program secara keseluruhan yang disusun tanpa melibatkan subrutin). Selain itu, subrutin juga dapat digunakan untuk mengurangi jumlah kode akibat sejumlah kode yang sama digunakan beberapa kali dalam program. 2
Gambar 1. Konsep program yang tersusun atas sejumlah subrutin subrutin_a() Program subrutin_a() subrutin_b() subrutin_c() subrutin_a() subrutin_a() 3
Penulisan Algoritma untuk Subrutin Suatu subrutin ditulis dg bentuk sbb : SUBRUTIN NamaSubrutin(daftar-parameter) Pernyataan-1 … Pernyataan-2 AKHIR-SUBRUTIN Dalam hal ini, bagian SUBRUTIN NamaSubrutin(daftar-parameter) disebut dengan judul subrutin. Sebuah subrutin dapat memberikan nilai balik ataupun tidak. Nilai Balik adalah nilai yang diberikan ke pemanggilnya. Nilai ini ditentukan melalui notasi seperti berikut : NILAI-BALIK nilai 4
hasil hitung_keliling_kotak(10,5) Contoh : Nama subrutin parameter SUBRUTIN hitung_keliling_kotak(panjang,lebar) keliling 2 x (panjang + lebar) NILAI-BALIK keliling AKHIR-SUBRUTIN Parameter = bagian untuk berkomunikasi dengan pemanggil subrutin. Padabagian subrutin, bagian ini akan diisi dengan argumen. Contoh : hasil hitung_keliling_kotak(10,5) Pada pemanggilan subrutin di atas, 10 dan 5 berkedudukan sbg argumen. Parameter Program Argumen .... hasil=hitung_keliling_kotak(10,5) Hitung)keliling_kotak(panjang,lebar) .... 5
hasil = fungsi() Translasi Subrutin pada C/C++ Didalam C/C++, subrutin biasa disebut dengan fungsi. Sebuah fungsi didefinisikan dg bentuk sbb : tipe_nilai_balik nama_fungsi(tipe argumen1, tipe argumen 2, …) { pernyataan_pernyataan; Return nilai_balik; } hasil = fungsi() Nilai balik fungsi diberikan ke hasil 6
Fungsi Tanpa Nilai Balik Dalam beberapa bahasa pemrograman, subrutin dibedakan menjadi 2 golongan, yakni fungsi dan prosedur. Fungsi adalah jenis subrutin yg menghasilkan nilai balik ketika subrutin dipanggil. Prosedur adalah jenis subrutin yg tidak menghasilkan nilai balik ketika subrutin dipanggil. Dalam bahasa C atau C++, kedua bentuk subrutin tsb tetap dinamakan fungsi. Hanya saja prosedur disebut sebagai fungsi tanpa nilai balik. Fungsi tanpa nilai balik dengan bagian tipe fungsi berupa void (void berarti tanpa nilai balik). 7
Contoh berikut menunjukkan fungsi yg memiliki nilai balik 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> double hitung_keliling_kotak(double panjang, double lebar) { double keliling; keliling=2*(panjang+lebar); return keliling; } int main() double keliling,panjang,lebar; printf("Masukkan panjang kotak : "); scanf("%lf",&panjang); printf("Masukkan lebar kotak : "); scanf("%lf",&lebar); keliling=hitung_keliling_kotak(panjang,lebar); printf("keliling = %.2lf\n",keliling); return 0; 8
Contoh berikut menunjukkan fungsi yg tidak memiliki nilai balik 1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> void infoperusahaan() { printf("STMIK BINA SARANA GLOBAL"); } int main() infoperusahaan(); return 0; Output : 9
Buatlah subrutin untuk menghitung bilangan terkecil dari 2 buah bilangan #include <stdio.h> double terkecil(double x,double y) { double min; if(x<y) min=x; else min=y; return min; } int main() double a,b,c; printf("Masukkan nilai a : "); scanf("%lf",&a); printf("Masukkan nilai b : "); scanf("%lf",&b); c=terkecil(a,b); printf("Terkecil dari %.2lf dan %.2lf = %.2lf\n",a,b,c); return 0; 10
Output : 11
Mengubah Nilai Argumen Pada bahasa pemrograman C/C++, pelewatan argumen ke dalam fungsi yg membuat nilai argumen dapat diubah dalam fungsi dikenal dg nama pemanggilan dengan referensi (call by reference). Dalam hal ini terdapat 2 hal yg perlu diperhatikan : Parameter dalam definisi fungsi perlu ditulis dg awalan tanda *. Hal serupa dikenakan pada semua akses parameter yg disebutkan dalam tubuh fungsi. Awalan & perlu ditulis di depan argumen pada pemanggilan fungsi. Sebagai perkecualian dari ketentuan di atas, tanda * tidak perlu disebutkan pada parameter dan argumen yg berupa larik. 12
Contoh : Buatlah subrutin yg digunakan untuk menukarkan isi kedua argumennya dan kemudian tuangkan dalam bentuk program. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> void tukar(double *x,double *y) { double z; z=*x; *x=*y; *y=z; } int main() double a,b; printf("Nilai a : "); scanf("%lf",&a); printf("Nilai b : "); scanf("%lf",&b); printf("----------------------------\n"); printf("b ditukar dengan a menjadi :\n"); tukar(&a,&b); printf("a=%.2lf, b=%.2lf\n",a,b); printf("----------------------------\n"); return 0; 13
Variabel z diisi dengan “nilai yg ditunjuk oleh x”. Pernyataan Output : Perhatikan bahwa x dan y dalam daftar parameter ditulis dg awalan * (yang menyatakan pointer). Pada pernyataan z = *x; Variabel z diisi dengan “nilai yg ditunjuk oleh x”. Pernyataan *x = *y; Berarti nilai yg ditunjuk oleh x diisi dengan nilai yg ditunjuk oleh y. 14
Referensi dinyatakan dengan tanda &. Secara khusus C++ memiliki penanganan tersendiri (yg tidak terdapat pada C) untuk melakukan pemanggilan dengan referensi yaitu dengan menggunakan referensi. Referensi adalah jenis pointer khusus yg memungkinkan suatu pointer diperlakukan seperti variabel biasa (non pointer). Referensi dinyatakan dengan tanda &. Berikut adalah contoh implementasi pertukaran data : 15
Buatlah subrutin yg digunakan untuk menukarkan isi kedua argumennya. Contoh : Buatlah subrutin yg digunakan untuk menukarkan isi kedua argumennya. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream.h> void tukar(double &x,double &y) { double z; z=x; x=y; y=z; } int main() double a,b; cout<<"Nilai a : "; cin>>a; cout<<"Nilai b : "; cin>>b; cout<<"----------------------------\n"; cout<<"b ditukar dengan a menjadi :\n"; tukar(a,b); cout<<"a = " << a << " b = " << b << "\n"; cout<<"----------------------------\n"; return 0; 16
T U G A S Buatlah subrutin untuk menentukan suatu bilangan terkecil dalam suatu larik. Dimana data dari lariknya adalah seperti berikut : {5.5 , 7.8 , 3.0 , 2.9 , 9.6} Output : 17