Anda di halaman 1dari 32

LAPORAN HASIL PRAKTIKUM 12

ALGORITMA DAN PEMROGRAMAN EP


“Pengenalan Subprogram/Metode”
Dosen Pengampu :
Rosalia Arum Kumalasanti M.T.

Oleh
Nama : Marta Yulianti
NIM : 215314154

PROGRAM STUDI INFORMATIKA


FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2021
A. TUJUAN

1. Mahasiswa menguasai konsep pembuaan program secara moduler memakai metode.


2. Mahasiswa mampu menyelesaikan masalah konkrit sederhana memakai pendekatan moduler
dengan cara membuat metode.

B. DASAR TEORI
Subprogram
10.1 Pengantar

Program yang kita buat bisa jadi akan sangat panjang dan rumit memuat sampai ribuan
baris perintah atau pernyataan. Supaya program yang panjang tersebut dapat kita kelola dengan
baik maka digunakan apa yang disebut subprogram atau subroutine. Pada dasarnya subprogram
adalah bagian dari program seperti halnya kita memahami subbagian atau sparepart dari sebuah
kendaraan. Subprogram ini kemudian dapat diberi nama tertentu dan program kita dapat disusun
sedemikian rupa terdiri atas rangkaian nama-nama subprogram ini.

Sebagai contoh, program untuk mencari akar persamaan kuadrat dapat diwujudkan
dengan membayangkan adanya 3 subprogram yakni subprogram untuk membaca data koefisien
a, b, dan c, kemudian subprogram untuk menghitung diskriminan D = b 2 – 4 * a * c dan akhirnya
subprogram untuk menampilkan akar-akar persamaan kuadrat tersebut. Cara pandang ini dapat
digambarkan memakai diagram berjenjang berikut:
Akar Persamaan Kuadrat

Membaca data koefisien Menghitung deskriminan D Menampilkan akar-akarnya

Memakai cara pandang ini maka program untuk mencari akar persamaan kuadrat
berdasar nilai koefisien a, b, dan c dapat berupa program berikut di mana bacaData(), hitungD(),
dan cetakAkar() masing-masing adalah nama subprogram sesuai dengan kepentingan di atas.

import java.util.Scanner; static void bacaData(){


// berisi perintah-perintah membaca data a, b, dan c
public class KuadratModuler { }

static double a, b, c, x1, x2, D; static void hitungD(){//hitung diskriminan


public static void main(String[] args) { D = b*b - 4 * a * c;
}
bacaData(); // memanggil subprogram baca data
hitungD(); // memanggil subprogram hitung D static void cetakAkar(){
cetakAkar();// mencetak akar-akar // berisi perintah-perintah untuk mencetak akar
}
} }
Perhatikan bahwa program di atas menjadi lebih mudah dipahami dan dibaca dibanding
program sebelumnya karena program menjadi kumpulan subprogram yang dapat pula disebut
dengan modul. Penyusunan program memakai pendekatan ini sering disebut sebagai
pemrograman moduler karena terdiri atas beberapa modul.

Diagram berjenjang untuk mencari akar permasamaan kuadrat seperti di atas dapat
diperluas untuk berbagai persoalan dengan mengembangkannya menjadi diagram berjenjang
yang mungkin akan lebih besar dan memiliki lebih dari 2 tingkat sesuai dengan kompleksitas
masalah yang diselesaikan. Artinya, sebuah subprogram dapat saja dipecah-pecah lagi menjadi
beberapa subprogram dan seterusnya subsubprogram ini dapat dipecah lagi menjadi beberapa
subprogram berikutnya. Demikian seterusnya. Nama lain dari strategi penyusunan program
seperti ini adalah divide and conquer atau pecah dan taklukkan. Sampai kapan pemecahan
menjadi subprogram ini berhenti ? Tergatung selera pemrogram tetapi sebagai pedoman adalah
ketika sudah cukup mudah untuk diimplementasikan.

10.2 Konsep Kotak Hitam (Black Box)

Dalam praktek pembuatan program yang sesungguhnya, kita akan banyak menggunakan
berbagai jenis subprogram yang bahkan telah tersedia secara gratis. Banyak pihak menyediakan
subprogram ini di internet dan NetBin Java juga telah menyediakan banyak subprogram tersebut.
Beberapa subprogram sebenarnya telah kita pakai misalnya Math.sqrt(), Math.sqr(), dan
System.out.println().

Dalam memakai subprogram tersebut, kita tidak perlu memikirkan apa yang
sesungguhnya dilakukan oleh subprogram tetapi kita hanya fokus kepada input dan output dari
subprogram tersebut. Oleh karena itu, subprogram paling mudah kita bayangkan sebagai kotak
hitam dan kita sebut dengan ‘hitam’ karena kita tidak perlu tahu apa yang terjadi di dalamnya.
Akan tetapi supaya kotak hitam ini dapat digunakan dengan baik dan tepat maka harus jelas dan
mudah dipahami tentang inputnya, fungsinya, dan outputnya. Dengan kata lain sebuah
subprogram atau kotak hitam harus mempunyai interface atau antar-muka (rincian input dan
output) yang mudah dipahami serta semantik atau fungsi/manfaat dari subprogram tersebut.
Bayangkan subprogram seperti sebuah TV yang jelas cara menggunkannya dan jelas pula apa
fungsinya.
Tugas kita di dalam bab ini tentu bukan pertama-tama memakai subprogram yang ada
tetapi justru bagaimana membuat subprogram atau kotak hitam tersebut. Untuk itu, selain
menyangkut kejelasan interface, pengembangan subprogram juga harus berpedoman kepada
kenyataan bahwa pembuat subprogram tidak perlu memikirkan sistem kerja di mana subprogram
tersebut akan digunakan.

10.3 Struktur /Format Subprogram

Khusus di Java, subprogram disebut dengan metode atau method. Metode ini akan selalu
berada di sebuah class tertentu. Nanti ketika kita belajar Pemrograman Berorientasi Obyek maka
metode ini menduduki posisi yang sangat penting. Untuk sementara, metode yang akan kita buat
akan manjadi bagian dari class yang memuat metode main(String[] args).

Secara umum struktur dari subprogram atau metode ini adalah:

<modifiers> <tipe-balikan> <nama subprogram> ( <daftar parameter> ) {

<pernyataan>
}

Untuk sementara <modifier> cukup diisi dengan perintah public static. Ada banyak
kemungkinan untuk pengisian <modifier> ini sejalan dengan berbagai kekhususan yang kita
kehendaki terhadap tingkah laku metode/subprogram.

Ada dua kemungkinan untuk mengisi bagian <tipe-balikan> atau <return-type> yakni
void atau tipe data yang lain seperti int, String, char, dll. Memang sebenarnya ada 2
kepentingan pokok dalam pembuatan subprogram. Pertama adalah demi penyusunan/penulisan
program yang efektif dalam arti mudah dimengerti dan bersifat moduler. Untuk itu subprogram
yang dibuat tidak lain dan tidak bukan hanyalah pengalihan/penempatan teksprogram ke bagian
lain seperti contoh pencarian akar persamaan kuadrat di atas.

Kedua, subprogram kita buat demi meningkatnya efisiensi penulisan program karena
dimungkinkan membuat sebuah subprogram yang dapat dipanggil berkali-kali untuk melakukan
perhitungan yang sama tetapi dengan input yang berbeda-beda. Sebagai contoh, bila kita
membuat program untuk menghitung nilai dari C(n,r) = n ! / [ (n-r) ! r !] yakni menghitung
jumlah kombinasi berbeda dari r buah elemen yang diambil dari n buah elemen di mana n ≥
r. Memakai rumus
tersebut maka program akan menghitung 3 kali nilai dari n !, (n-r) ! dan r !. Pembuatan program
akan sangat efisien bila kita buat sebuah subprogram yang dapat menghitung besarnya m ! ( m
faktorial yakni 1 x 2 x 3 x… m dan 0 ! = 1) untuk sebarang m ≥ 0. Teks program kita akan
pendek karena tidak perlu memuat 3 kali perhitungan faktorial dengan teks program yang
berbeda-beda. Oleh karena itu dapat dibayangkan sebuah metode yang seperti fungsi untuk
menghitung m !. Metode seperti ini akan memberikan nilai (balikan) berupa bilangan bulat yang
besarnya m! dan metode ini mempunyai input bilangan bulat m ≥ 0. Nilai balikan ini paling
mudah dipahami sebagai salah satu bentuk output metode ini yang berupa sebuah nilai dari tipe
data tertentu.

Misalkan metode untuk menghitung m ! tersebut kita beri nama faktorial maka metode
ini harus mempunyai nilai balikan int dan input bilangan bulat m ≥ 0. Bila metode faktorial
sudah kita buat maka untuk menghitung C(n,r) dapat dilakukan dengan perintah

kombinasiNR = faktorial(n) / (faktorial (n-r) * faktorial (r));

Bagian <daftar parameter> berfungsi sebagai interface karena menyediakan sarana


komunikasi antara metode dengan bagian program yang menggunakan metode tersebut. Bagian
ini juga dapat dipandang sebagai input dari metode tersebut. Namun demikian perlu kita sadari
bahwa <daftar parameter> ini boleh saja kosong tetapi juga boleh memuat beberapa variabel
dengan tipe yang berbeda-beda dan masing masing dipisahkan dengan koma.

Bagian terakhir dari struktur metode ini adalah <pernyataan> yang tidak lain dan tidak
bukan adalah implementasi dari metode tersebut. Pada dasarnya implementasi ini berupa
program. Oleh karena itu, di dalamnya dapat memuat berbagai perintah seperti dalam program
utuh mulai dari deklarasi variabel, penugasan, kendali, maupun perulangan.

10.4 Contoh-contoh.

Berikut adalah dua contoh penggunaan metode. Contoh yang pertama merupakan
program lengkap untuk menemukan akar persamaan kuadrat yang telah kita bahas secara umum
di awal bab ini. Di teks program berikut implementasi setiap metode yang digunakan dituliskan
secara lengkap. Silakan membaca komentar yang diberikan di teks program untuk
mempermudah memahami struktur dan penggunaan metode dalam contoh ini. Sedang contoh
kedua menunjukkan bagiamana metode faktorial yang mempunyai nilai balikan digunakan demi
penulisan program yang efisien.
Contoh 1:
1
2 package persamaankuadrat;
3
4 import java.util.Scanner;
5
6 public class KuadratModuler {
7
8 static double a, b, c, x1, x2, D;
9
10 public static void main(String[] args) {
11 bacaData(); // sampai di perintah ke 11, compiler menuju ke perintah baris 16 sampai 25
dan kembali ke 12
12 hitungD(); // sampai di sini compiler mengerjakan perintah baris 27 sampai 29 dan lalu kembali
ke 13
13 hitungAkar();// sampai di sini compiler menuju ke baris 31 sampai 45 dankemudian kembali ke 14
14 }
15 // Secara logika program berakhir di baris perintah ini karena meode main berakhir di sini
16 static void bacaData(){ // baca data a, b, dan c
17
18 Scanner tombol = new Scanner(System.in);
19 System.out.print("Masukkan koefisien x2 (a) : ");
20 a = tombol.nextDouble();
21 System.out.print("Masukkan koefisien x (b) : ");
22 b = tombol.nextDouble();
23 System.out.print("Masukkan konstanta (c) : ");
24 c = tombol.nextDouble();
25 }
26
27 static void hitungD(){//hitung diskriminan
28 D = b*b - 4 * a * c;
29 }
30
31 static void hitungAkar(){//hitung akar dan tampilkan
32
33 System.out.println("Akar dari "+a+" X2 + "+b+" X + "+c+ " = 0 adalah");
34 if (D < 0) System.out.println("Tidak mempunyai akar real");
35 else if (D == 0) {
36 x1 = -b/(2*a);
37 System.out.println("Akarnya tunggal yakni x1 = x2 = "+x1);
38 }
39 else {
40 x1 = (-b + Math.sqrt(D))/(2*a);
41 x2 = (-b - Math.sqrt(D))/(2*a);
42 System.out.println("Akar pertama x1 = "+x1);
43 System.out.println("Akar pertama x2 = "+x2);
44 }
45 }
46 }
Contoh 2.
import java.util.Scanner;
public class Metode {
public static void main(String[] args) {
int n,r, kombinasiNr;
Scanner tombol = new Scanner(System.in);
System.out.print("Masukkan nilai n : ");
n = tombol.nextInt();
System.out.print("Masukkan nilai r : ");
r = tombol.nextInt();

kombinasiNr = faktorial(n) / ( faktorial(n-r) * faktorial(r) ); // memanggil faktorial()

System.out.println("Jumlah kombinasi “+ r +” elemen yang diambil dari “ + r “


elemen adalah “ + kombinasiNr);
}

static int faktorial(int m) {// metode faktorial dimulai dari baris ini
int hasFak=1;
if (m == 0) return 1; // karena 0 ! = 1
else for(int i =1; i<=m; i++) hasFak = hasFak*i; // m! = 1 x 2 x … x m
return hasFak;
}// metode faktorial berakhir di sini
}

10.5 Parameter Formal dan Parameter Aktual


Bila subprogram/metode kita pahami sebagai kotak hitam maka <daftar parameter>
paling mudah kita pahami sebagai penghubung atau interface antara metode tersebut dengan
program yang menggunakan/memanggil metode tersebut. Dapat pula kita bayangkan <daftar
parameter> bagai sebuah daftar tombol yang harus kita setel supaya mesin AC dapat berfungsi
sesuai dengan besarnya suhu yang kita kehendaki.

Dalam contoh kedua di atas, metode faktorial (int m) hanya mempunyai sebuah
parameter yakni m yang bertipe int. Parameter ini dapat diperlakukan seperti variabel tetapi nilai
awalnya baru tersedia ketika metode tersebut dipanggil. Misalnya, ada program di main() yang
memanggil faktorial(5) dengan perintah fak5 = faktorial(5); maka bilangan bulat 5 ini mengisi
variabel m atau m akan bernilai 5 ketika compiler mengesekusi perintah-perintah di dalam
metode faktorial tersebut dan akhirnya fak5 akan bernilai sama dengan 120 sebab 1 x 2 x 3 x 4 x
5 = 120. ia
Sebenarnya kata ‘parameter’ merujuk ke dua hal yang berbeda yakni ke daftar variabel
yang ada di dalam kurung dari sebuah metode dan juga merujuk ke nilai atau pernyataan yang
ada di dalam tanda kurung ketika metode tersebut dipanggil. Dengan kata lain baik int m dalam
faktorial (int m) maupun 5 dalam faktorial(5) akan sama-sama dirujuk sebagai parameter. Akan
tetapi int m akan disebut sebagai parameter formal dan 5 disebut dengan parameter aktual.
Disebut dengan parameter formal karena int m hanyalah variabel yang baru ada nilainya ketika
metode tersebut dipanggil.

Parameter aktual adalah sebuah nilai yang sesungguhnya dipakai ketika sebuah metode
dipanggil/digunakan. Karena parameter aktual mengisi nilai dari parameter formal maka tipe
data darai kedua parameter harus sama. Selain itu, karena sebuah metode dapat memiliki lebih
dari satu parameter maka pemanggilan sebuah metode harus menggunakan parameter aktual
yang tipenya sama dengan parameter formal untuk parameter yang bersesuain. Kesesuaian ini
dikenali oleh compiler hanya berdasar letak urutannya. Jika ada metode myMethod ( int x,
double y, boolean z) maka pemanggilan metode myMethod(10, ab, sikapku) akan diterima bila
tipe data secara berurutan sesuai dari kiiri ke kanan yakni bahwa 10 bertipe bulat, ab variabel
yang berisi dan bertipe double, serta sikapku berupa variabel yang sudah terisi dan bertipe
boolean.

Parameter aktual tidak harus berupa nilai atau variabel tetapi dapat pula berupa ekspresi
atau pernyataan asalkan tipenya sama dengan parameter formal yang sesuai. Sebagai contoh, dari
metode

static void myJob(int N, double x, boolean tes) {


// perintah-perintah metode myJob
}
Dapat dipanggil memakai perintah
myJob(15, Math.sqrt(z + 1)

C. ANALISIS

1. Soal_No1

a. Uraian soal

Modifikasilah program latihan nomor 2 di atas sehingga program Anda dapat menghitung
besarnya C(n,r) = n ! / [ (n – r) ! r ! ] di mana besarnya n dan r dimasukkan lewat keyboard
serta memakai syarat bahwa r ≤ n.
b. Rancangan program
Output

Masukkan Nilai n : 8
Masukkan Nilai r : 3
Combinasi dari 8C3 adalah 56

Proses

public static void main (String [] args){

Menampilkan tulisan “Masukkan Nilai n : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Masukkan Nilai r : " dan input


angka/nilai yang akan diinput sendiri oleh user

Jika kondisi if (r <= n) bernilai true maka hitung


c  faktorial(n) / (faktorial(n - r) * faktorial(r) dan
Cetak "Combinasi dari " + n + "C" + r + " adalah " + c
else
Cetak "Nilai r harus <= n"
}

static int faktorial(int n){


hasFak  1
for(int i = 1; i <= n; i++){
hasFak  hasFak * i
}
return hasFak

Input

public static void main (String [] args){


Memesan memori Bernama n, r, c dengan tipe data
bilangan bulat.

Scanner input

static int faktorial(int n)

Memesan memori bernama hasFak, i dengan tipe data


bilangan bulat.

c. Algoritma memakai pseudocode informal (input, proses, output)

Pseudocode method main


1. Buat variable n, r, c : integer
2. Buat fungsi Scanner input
3. Input nilai n
4. Input nilai r
5. Jika if (r <= n) bernilai true
Hitung c  faktorial(n) / (faktorial(n - r) * faktorial(r)
println("Combinasi dari " + n + "C" + r + " adalah " + c)
6. else
println("Nilai r harus <= n")

Pseudocode method faktorial


1. Buat variabel hasFak, i : integer
2. hasFak  1
3. for(int i = 1; i <= n; i++){
hasFak  hasFak * i
}
4. Kembalikan nilai hasFak / return hasFak

d. Teks program memakai tabel berikut


Perintah Arti
import java.util.Scanner; Scanner merupakan kelas yang menyediakan fungsi-
fungsi untuk mengambil input dari keyboard. Agar
kita dapat menggunakan Scanner, kita perlu
mengimpornya ke dalam code import
java.util.Scanner
public class Soal_No1 { Deklarasi class Soal_No1
public static void main(String [] args) { Deklarasi metode main

int n, r, c; Memesan tempat untuk bilangan bulat dengan nama


n, r, c
Scanner input = new Scanner (System.in); Membaca variable input agar bisa mengaktifkan
kemampuan input dari keyboard

System.out.print("Masukkan Nilai n : "); Menampilkan tulisan "Masukkan Nilai n : " pada


output tanpa menambahkan baris baru.
n = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Masukkan Nilai r : "); Menampilkan tulisan "Masukkan Nilai r : " pada
output tanpa menambahkan baris baru.
r = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
if (r <= n){ Jika kondisi (r <= n) bernilai true maka,
c = faktorial(n) / (faktorial(n - r) * faktorial(r); Hitung c dengan memanggil factorial  faktorial(n) /
System.out.println("Combinasi dari " + n + (faktorial(n - r) * faktorial(r) dan cetak “Combinasi
"C" + r + " adalah " + c); dari " + menampilkan isi variable n + cetak "C" +
} menampilkan isi variable r + cetak " adalah " +
menampilkan isi variabel c pada output dengan
menambahkan baris baru.
else { Jika kondisi (r <= n) bernilai false maka, cetak “Nilai
System.out.println("Nilai r harus <= n"); r harus <= n" pada output dengan menambahkan
} baris baru.
} End metode main

static int faktorial(int n){ Membuat method untuk menghitung faktorial yang
bertipe int dan parameternya n yang bertipe int juga.
int hasFak = 1; Memesan tempat untuk bilangan bulat dengan nama
hasFak dan menyimpan bilangan bulat 1 ke variabel
hasFak.
for(int i = 1; i <= n; i++){ int i  Memesan tempat untuk bilangan bulat dengan
nama i

Variable i tugasnya untuk menyimpan i pengulangan.

i <= n artinya selama nilai i lebih kecil atau sama


dengan n, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak n kali.

i++ fungsinya untuk menambah satu (+1) nilai i pada


setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
hasFak = hasFak * i; Menghitung nilai dari hasFak
} End for
return hasFak; Mengembalikan niali hasFak atau return hasFak
} End metode faktorial
}

e. Screenshot Program dan Output


Screenshot Program
Screenshot Output

2. Soal_No2

a. Uraian soal

Segitiga Pascal adalah daftar bilangan bulat yang disusun berdasarkan jumlah dua bilangan
sebelah kiri dan kanan dari deret sebelumnya seperti dalam gambar di bawah

Angka-angka tersebut di atas juga dapat dihitung memakai rumus Kombinasi ( C(n,r) )
seperti dalam diagram berikut
Ini adalah soal praktikum IX no 5. Modifikasilah program Anda memakai pendekatan
moduler sedemikian rupa program Anda memakai 2 buah metode yakni metode untuk
menghitung n ! dan metode untuk menghitung C(n,r).

b. Rancangan program

Output
Segitiga Pascal
Masukkan nilai n untuk Segitiga Pascal : 5
Masukkan
1 Nilai n : 8
Masukkan
1 1 Nilai r : 3
Nilai1n!2 : 140320
Nilai
1 r!
3 3: 61
Nilai Combinasi
14 6 4 1 : 56
1 5 10 10 5 1

Proses

public static void main(String [] args){

Menampilkan tulisan “Masukkan Nilai n : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Masukkan Nilai r : " dan input


angka/nilai yang akan diinput sendiri oleh user

Jika if (r <= n) bernilai true maka,


Cetak "Nilai n! : " + faktorial(n)
Cetak "Nilai r! : " + faktorial(r))
Cetak "Nilai Combinasi : " + combinasi(n, r))
else
Cetak "Nilai r harus <= n"

Cetak ("")
Cetak "Segitiga Pascal"

Menampilkan tulisan “Masukkan nilai n untuk Segitiga


Pascal : " dan input angka/nilai yang akan diinput sendiri
oleh user

for(i = 0; i <= npascal; i++)


for(j = 0; j < npascal - i; j++)
static int faktorial(int n){
hasFak  1
for(int i = 1; i <= n; i++){
hasFak  hasFak * i
}
return hasFak
}

Input

public static void main(String [] args){

Memesan memori bernama i, j, n, r, c, npascal dengan


tipe data bilangan bulat.
Scanner input

static int combinasi(int n, int r){

Memesan memori bernama c dengan tipe data bilangan


bulat.

static int faktorial(int n){

Memesan memori bernama hasFak, i dengan tipe data


bilangan bulat.

c. Algoritma memakai pseudocode informal (input, proses, output)

Pseudocode method main


1. Buat variable i, j, n, r, c, npascal : integer
2. Buat fungsi Scanner input
3. Input nilai n
4. Input nilai r
5. Jika if (r <= n) bernilai true
println("Nilai n! : " + faktorial(n))
println("Nilai r! : " + faktorial(r))
println("Nilai Combinasi : " + combinasi(n, r))
6. else
println("Nilai r harus <= n")
7. println("Segitiga Pascal")
8. Input nilai npascal
9. for(i = 0; i <= npascal; i++){
for(j = 0; j < npascal - i; j++){
print(" ")
}
for(j = 0; j <= i; j++){
print(" " + combinasi(i, j))
}
println()
}
Pseudocode method combinasi
1. Buat variabel c : integer
2. Hitung c  faktorial(n) / (faktorial(n - r) * faktorial(r)
3. return c

Pseudocode method faktorial


1. Buat variabel hasFak, i : integer
2. hasFak  1
3. for(int i = 1; i <= n; i++){
hasFak  hasFak * i
}
4. Kembalikan nilai hasFak / return hasFak

d. Teks program memakai tabel berikut

Perintah Arti
import java.util.Scanner; Scanner merupakan kelas yang menyediakan fungsi-
fungsi untuk mengambil input dari keyboard. Agar
kita dapat menggunakan Scanner, kita perlu
mengimpornya ke dalam code import
java.util.Scanner
public class Soal_No2 { Deklarasi class Soal_No2
public static void main(String [] args) { Deklarasi metode main

int i, j, n, r, c, npascal; Memesan tempat untuk bilangan bulat dengan nama


i, j, n, r, c, npascal
Scanner input = new Scanner (System.in); Membaca variable input agar bisa mengaktifkan
kemampuan input dari keyboard

System.out.print("Masukkan Nilai n : "); Menampilkan tulisan "Masukkan Nilai n : " pada


output tanpa menambahkan baris baru.
n = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Masukkan Nilai r : "); Menampilkan tulisan "Masukkan Nilai r : " pada
output tanpa menambahkan baris baru.
r = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
if (r <= n){ Jika kondisi (r <= n) bernilai true maka,
System.out.println("Nilai n! : " + Menampilkan tulisan “Nilai n! : ” + menampilkan isi
faktorial(n)); variable factorial(n) pada output dengan
System.out.println("Nilai r! : " + faktorial(r)); menambahkan baris baru.
System.out.println("Nilai Combinasi : " +
combinasi(n, r)); Menampilkan tulisan “Nilai r! : ” + menampilkan isi
} variable factorial(r) pada output dengan
menambahkan baris baru.

Menampilkan tulisan “Nilai Combinasi : ” +


menampilkan isi dari combinasi(n, r) pada output
dengan menambahkan baris baru.
else { Jika kondisi (r <= n) bernilai false maka, cetak “Nilai
System.out.println("Nilai r harus <= n"); r harus <= n" pada output dengan menambahkan
} baris baru.
System.out.println(""); Perintah untuk memindahkan cursor ke baris baru
System.out.println("Segitiga Pascal"); Menampilkan tulisan “Segitiga Pascal” pada output
dengan menambahkan baris baru.
System.out.print("Masukkan nilai n untuk Menampilkan tulisan "Masukkan nilai n untuk
Segitiga Pascal : "); Segitiga Pascal : " pada output tanpa menambahkan
baris baru.
npascal = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user

for(i = 0; i <= npascal; i++){ Variable i tugasnya untuk menyimpan i pengulangan.

i <= npascal artinya selama nilai i lebih kecil atau


sama dengan npascal, maka pengulangan akan terus
dilakukan. Dengan kata lain, perulangan ini akan
mengulang sebanyak npascal kali.

i++ fungsinya untuk menambah satu (+1) nilai i pada


setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
for(j = 0; j < npascal - i; j++){ Variable j tugasnya untuk menyimpan j pengulangan.

j < npascal artinya selama nilai j lebih kecil dari


npascal – i, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak npascal - i kali.

j++ fungsinya untuk menambah satu (+1) nilai j pada


setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
System.out.print(" "); Perintah untuk memindahkan cursor ke baris baru
} End for
for(j = 0; j <= i; j++){ Variable j tugasnya untuk menyimpan j pengulangan.

j <= i artinya selama nilai j lebih kecil atau sama


dengan i, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak i kali.
j++ fungsinya untuk menambah satu (+1) nilai j pada
setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
System.out.print(" " + combinasi(i, j)); Menampilkan tulisan “ ” + menampilkan isi variable
combinasi(i, j) pada output tanpa menambahkan baris
baru.
} End for
System.out.println(); Perintah untuk memindahkan cursor ke baris baru
} End for
} End metode main

static int combinasi(int n, int r){ Membuat methode untuk menghitung combinasi
yang bertipe int dan parameternya n, r yang bertipe
int juga.
int c = faktorial(n) / (faktorial(n - r) * Memesan tempat untuk bilangan bulat dengan nama
faktorial(r); c
Hitung c dengan memanggil factorial  faktorial(n) /
(faktorial(n - r) * faktorial(r)
return c; Method akan mengembalikan nilai dengan
tipe int dari variabel c
} End metode combinasi
static int faktorial(int n){ Membuat methode untuk menghitung faktorial yang
bertipe int dan parameternya yang bertipe int juga.
int hasFak = 1; Memesan tempat untuk bilangan bulat dengan nama
hasFak dan menyimpan bilangan bulat 1 ke variabel
hasFak.
for(int i = 1; i <= n; i++){ int i  Memesan tempat untuk bilangan bulat dengan
nama i

Variable i tugasnya untuk menyimpan i pengulangan.

i <= n artinya selama nilai i lebih kecil atau sama


dengan n, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak n kali.

i++ fungsinya untuk menambah satu (+1) nilai i pada


setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
hasFak = hasFak * i; Menghitung nilai dari hasFak
} End for
return hasFak; Method akan mengembalikan nilai dengan
tipe int dari variabel hasFak
} End metode faktorial
}
e. Screenshot Program dan Output
Screenshot Program
Screenshot Output

3. Soal_No3

a. Uraian soal

Buat program untuk menghitung luas segitiga berdasarkan koordinat 3 titik sudutnya yang
dimasukkan lewat keyboard. Program Anda harus memakai beberapa metode berikut

a. bacaTitik() // membaca absis dan ordinat suatu titik dan tanpa nilai balikan
b. hitungJarak(int x1, int y1, int x2, int y2) // menghitung jarak antara 2 titik (x1,y1) dan
(x2,y2) dengan nilai balikan (return) jarak dua titik
c. hitungKeliling(double sisiA, double sisiB, double sisiC) //dengan nilai balikan keliling
segitiga atau jumlah sisiA, sisiB dan sisiC.
d. hitungLuas() // menghitung dan menampilkan luas segitiga memakai rumus yang sudah
pernah diajarkan

b. Rancangan program
Output

Absis (x) Titik A : 9


Ordinat (y) Titik A : 1
Absis (x) Titik B : 6
Ordinat (y) Titik B : 8
Absis (x) Titik C : 2
Ordinat (y) Titik C : 9

Jarak AB : 7.615773105863909
Jarak BC : 4.123105625617661
Jarak AC : 10.63014581273465

Keliling
Proses Segitiga : 22.36902454421622
Luas Segitiga ABC : 12.500000000000007
static double sisiA, sisiB, sisiC, keliling;

public static void main(String [] args){


memanggil method bacaTitik()
memanggil method hitungLuas()
}
static void bacaTitik(){

Menampilkan tulisan “Absis (x) Titik A : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Ordinat (y) Titik A : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Absis (x) Titik B : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Ordinat (y) Titik B : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Absis (x) Titik C : " dan input


angka/nilai yang akan diinput sendiri oleh user

Menampilkan tulisan “Ordinat (y) Titik C : " dan input


angka/nilai yang akan diinput sendiri oleh user

println()

sisiA = hitungJarak(x1, y1, x2, y2)


static void hitungLuas(){
keliling = hitungKeliling(sisiA, sisiB, sisiC)
double s  keliling / 2
double luas  Math.sqrt(s*(s - sisiA)*(s - sisiB)*(s -
sisiC)));
cetak "Jarak AB : " + sisiA
Cetak "Jarak BC : " + sisiB
Cetak "Jarak AC : " + sisiC
println()
Cetak "Keliling Segitiga : " + keliling
Cetak "Luas Segitiga ABC : " + luas
}
}

Input

Memesan variabel global bernama sisiA, sisiB, sisiC,


keliling dengan tipe data bilangan real.

static void bacaTitik(){


Scanner input
Memesan memori bernama x1, x2, x3, y1, y2, y3 dengan
tipe data bilangan bulat.

static void hitungLuas(){


Memesan memori bernama s, luas dengan tipe data
bilangan real.

c. Algoritma memakai pseudocode informal (input, proses, output)

Pseudocode method main


1. Panggil method bacaTitik
2. Panggil method hitungLuas

Pseudocode method bacaTitik


1. Membuat fungsi Scanner input
2. Buat variabel x1, x2, x3, y1, y2, y3 : integer
3. Input titik absis x1, x2, x3
4. Input titik ordinat y1, y2, y3
5. Gunakan variabel global untuk menampung method hitungJarak agar sisi ABC ini
ketika dipanggil di dalam method lain sudah memiliki nilai/method yang disimpan
sisiA = hitungJarak(x1, y1, x2, y2)
sisiB = hitungJarak(x2, y2, x3, y3)
sisiC = hitungJarak(x3, y3, x1, y1)

Pseudocode method hitungJarak


1. return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))

Pseudocode method hitungKeliling

1. Hitung keliling  sisiA + sisiB + sisiC


2. Kembalikan nilai keliling / return keliling

Pseudocode method hitungLuas


1. Panggil method hitungKeliling dan isi parameternya dengan variabel global sisiABC
2. Hitung s  keliling / 2
3. Hitung luas dengan rumus luas  Math.sqrt(s*(s - sisiA)*(s - sisiB)*(s - sisiC)))
4. println("Jarak AB : " + sisiA)
5. println("Jarak BC : " + sisiB)
6. println("Jarak AC : " + sisiC)
7. println()
8. println("Keliling Segitiga : " + keliling)
9. println("Luas Segitiga ABC : " + luas)

d. Teks program memakai tabel berikut

Perintah Arti
import java.util.Scanner; Scanner merupakan kelas yang menyediakan fungsi-
fungsi untuk mengambil input dari keyboard. Agar
kita dapat menggunakan Scanner, kita perlu
mengimpornya ke dalam code import
java.util.Scanner
public class Soal_No3 { Deklarasi class Soal_No3
static double sisiA, sisiB, sisiC, keliling; Membuat variabel global untuk 3 titik sudut segitiga
dengan nama sisiA, sisiB, sisiC, keliling. Variabel
global ini berfungsi agar variabel nya dapat
digunakan oleh berbagai method (sehingga tidak
perlu membuat variabel sendiri-sendiri lagi di setiap
method).
public static void main(String [] args) { Deklarasi metode main
bacaTitik(); Memanggil method bacaTitik. Method ini nanti
digunakan untuk menginput nilai absis dan ordinat
ketiga titik.
hitungLuas(); Memanggil method hitungLuas. Method ini nanti
digunakan untuk menampilkan nilai sisiABC,
keliling sisiABC, luas.
} End metode main

static void bacaTitik(){ Membuat method bacaTitik


Scanner input = new Scanner (System.in); Membaca variable input agar bisa mengaktifkan
kemampuan input dari keyboard
int x1, x2, x3, y1, y2, y3; Memesan tempat untuk bilangan bulat dengan nama
x1, x2, x3, y1, y2, y3

System.out.print("Absis (x) Titik A : "); Menampilkan tulisan "Absis (x) Titik A : " pada
output tanpa menambahkan baris baru.
x1 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Ordinat (y) Titik A : "); Menampilkan tulisan “Ordinat (y) Titik A : " pada
output tanpa menambahkan baris baru.
y1 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Absis (x) Titik B : "); Menampilkan tulisan “Absis (x) Titik B : " pada
output tanpa menambahkan baris baru.
x2 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Ordinat (y) Titik B : "); Menampilkan tulisan “Ordinat (y) Titik B : " pada
output tanpa menambahkan baris baru.
y2 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Absis (x) Titik C : "); Menampilkan tulisan “Absis (x) Titik C : " pada
output tanpa menambahkan baris baru.
x3 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.print("Ordinat (y) Titik C : "); Menampilkan tulisan “Ordinat (y) Titik C : " pada
output tanpa menambahkan baris baru.
y3 = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
System.out.println(); Perintah untuk memindahkan cursor ke baris baru

sisiA = hitungJarak(x1, y1, x2, y2); sisiA adalah nilai dari pemanggilan method : sisiA =
hitungJarak(x1, y1, x2, y2)
sisiB = hitungJarak(x2, y2, x3, y3); sisiB adalah nilai dari pemanggilan method : sisiB =
hitungJarak(x2, y2, x3, y3)
sisiC = hitungJarak(x3, y3, x1, y1); sisiC adalah nilai dari pemanggilan method : sisiC =
hitungJarak(x3, y3, x1, y1)
} End metode bacaTitik

static double hitungJarak(int x1, int y1, int x2, Membuat method hitungJarak yang bertipe double
int y2){ dan parameternya x1, y1, x2, y2 yang bertipe double
juga.
return Math.sqrt(Math.pow(x2 - x1, 2) + Method memiliki nilai balikan untuk menghitung
Math.pow(y2 - y1, 2)); jarak yaitu akar dari kuadrat (x2 – x1) + kuadrat (y2
– y1)
} End metode hitungJarak

static double hitungKeliling(double sisiA, Membuat method hitungKeliling yang bertipe double
double sisiB, double sisiC){ dan parameternya sisiA, sisiB, sisiC yang bertipe
double juga
keliling = sisiA + sisiB + sisiC; Method memiliki nilai balikan untuk menghitung
keliling yaitu sisiA + sisiB + sisiC
return keliling; Method akan mengembalikan nilai dari variabel
keliling
} End hitungKeliling

static void hitungLuas(){ Membuat method hitungLuas


keliling = hitungKeliling(sisiA, sisiB, sisiC) Panggil method hitungKeliling dan isi parameternya
dengan variabel global sisiABC

double s = keliling / 2; Hitung nilai s  keliling / 2


double luas = Math.sqrt(s*(s - sisiA)*(s - Hitung luas ketiga sisinya dengan rumus luas 
sisiB)*(s - sisiC))); Math.sqrt(s*(s - sisiA)*(s - sisiB)*(s - sisiC)))
System.out.println("Jarak AB : " + sisiA); Menampilkan tulisan “Jarak AB : ” + menampilkan
isi dari variable sisiA pada output dengan
menambakan baris baru.
System.out.println("Jarak BC : " + sisiB); Menampilkan tulisan “Jarak BC : ” + menampilkan
isi dari variable sisiB pada output dengan
menambakan baris baru.
System.out.println("Jarak AC : " + sisiC); Menampilkan tulisan “Jarak AC : ” + menampilkan
isi dari variable sisiC pada output dengan
menambakan baris baru.
System.out.println(); Perintah untuk memindahkan cursor ke baris baru

System.out.println("Keliling Segitiga : " + Menampilkan tulisan “Keliling Segitiga : ” +


keliling); menampilkan isi variable keliling pada output dengan
menambakan baris baru.
System.out.println("Luas Segitiga ABC : " + Menampilkan tulisan “Luas Segitiga ABC : ” +
luas); menampilkan nilai dari variable luas pada output
dengan menambakan baris baru.
} End metode hitungLuas
}

e. Screenshot Program dan Output


Screenshot Program
Screenshot Output

4. Soal_No4

a. Uraian soal

Fungsi densitas/kepadatan normal baku yang berbentuk lonceng atau bel dapat dirumuskan
memakai fungsi berikut ini.

2
1 − 12 Z
f (Z )= e , dimana−∞<Z <+ ∞
√ 2 π
Di mana e adaah bilangan alam yang besarnya sama dengan 2,71828
Kalau digambar maka fungsi f(z) di atas akan seperti ini

f(Z
)

Z
- - - - - - 0 1 2 3 4 5 6
6 5 4 3z 2 1 z2
1

Gambar di atas juga bisa disajikan menjadi


6 5
- -

f(Z)
4
-
3
-
z
1

2
-
1 0 1 2
-
3
z
2

4
5
6
Z

Tugas Anda adalah membuat grafik/gambar fungsi normal di atas yang


disederhananakan menjadi
*
**
***
*****
******
*******
********
*******
******
*****
****
***
**
*

b. Rancangan program
Output

Masukkan nilai n : 15

*
**
****
*****
******
*****
****
**
*
Proses

public static void main (String [] args){

do {
Menampilkan tulisan “Masukkan nilai n : " dan input
angka/nilai yang akan diinput sendiri oleh user
}
while(n < 10 || n > 20)
for(z = -4; z <= 4; z = z + 0.5){
jBintang = normal(n, z)
bintang(jBintang)
}
}

static int normal(int n, double z){


hitung f  (1 / Math.sqrt(2 * 3.14)) *
Math.pow(2.71828, (-0.5 * Math.pow(z, 2)))
return (int) Math.round(n * f)
}

static void bintang(int m){


for(i = 1; i <= m; i++)
Input cetak ("*")
cetak ()
}
public static void main (String [] args){
Memesan memori bernama n, jBintang dengan tipe data
bilangan bulat.
Memesan memori bernama z dengan tipe data bilangan
real.
Scanner input

static int normal(int n, double z){


Memesan memori bernama f dengan tipe data bilangan
real.

static void bintang(int m){


Memesan memori bernama i dengan tipe data bilangan
bulat

c. Algoritma memakai pseudocode informal (input, proses, output)

Pseudocode method main


1. Buat variabel n, jBintang : integer
2. Buat variabel z : double
3. Membuat fungsi Scanner input
4. do {
input nilai n
}
5. while(n < 10 || n > 20)
6. for(z = -4; z <= 4; z = z + 0.5){
jBintang = normal(n, z)
bintang(jBintang)
}

Pseudocode method normal


1. Buat variabel f : double
2. Hitung nilai f  (1 / Math.sqrt(2 * 3.14)) * Math.pow(2.71828, (-0.5 * Math.pow(z,
2)))
3. Hitung nilai dari n f(z) dengan rumus Math.round(n * f)
4. Kembalikan hasil pembulatan dari n f(z)

Pseudocode method bintang


1. Buat variabel i : integer
2. for(i = 1; i <= m; i++)
Cetak ("*")
Cetak ()
}

d. Teks program memakai tabel berikut

Perintah Arti
import java.util.Scanner; Scanner merupakan kelas yang menyediakan fungsi-
fungsi untuk mengambil input dari keyboard. Agar
kita dapat menggunakan Scanner, kita perlu
mengimpornya ke dalam code import
java.util.Scanner
public class Soal_No4 { Deklarasi class Soal_No4
public static void main(String [] args) { Deklarasi metode main

int n, jBintang; Memesan tempat untuk bilangan bulat dengan nama


n, jBintang
double z; Memesan tempat untuk bilangan real dengan nama z
Scanner input = new Scanner (System.in); Membaca variable input agar bisa mengaktifkan
kemampuan input dari keyboard

do { do merupakan perulangan untuk mengulang suatu


statement atau perintah selama kondisi yang ada pada
while masih terpenuhi atau bernilai true.
System.out.print("Masukkan nilai n : "); Menampilkan tulisan “Masukkan nilai n : ” pada
output tanpa menambahkan baris baru.
n = input.nextInt(); Perintah untuk membaca angka/nilai (dalam bilangan
bulat) yang diinput sendiri oleh user
} End do

while(n < 10 || n > 20); while dijalankan jika kondisi (n < 10 || n > 20) masih
memenuhi.
for(z = -4; z <= 4; z = z + 0.5){ Variable z tugasnya untuk menyimpan z
pengulangan.

z <= 4 artinya selama nilai z lebih kecil atau sama


dengan 4, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak 4 kali.

z = z + 0.5 fungsinya untuk menambah (+0.5) nilai z


pada setiap pengulangan.

Blok kode For dimulai dengan tanda ‘{’ dan diakhiri


dengan ‘}’
jBintang = normal(n, z); jBintang adalah nilai dari pemanggilan method :
jBintang = normal(n, z)
bintang(jBintang); Memanggil / eksekusi fungsi bintang(jBintang)
} End for
} End metode main
static int normal(int n, double z){ Membuat method normal yang bertipe int dan
parameter n yang bertipe int dan parameter z yang
bertipe double
double f = (1 / Math.sqrt(2 * 3.14)) * Memesan tempat untuk bilangan real dengan nama f
Math.pow(2.71828, (-0.5 * Math.pow(z, 2))); Hitung nilai f dengan rumus f  (1 / Math.sqrt(2 *
3.14)) * Math.pow(2.71828, (-0.5 * Math.pow(z, 2)))
return (int) Math.round(n * f); Method memiliki nilai balikan untuk int sebagai hasil
pembulatan dari (n * f).
} End metode normal
static void bintang(int m){ Membuat method bintang dan parameternya m yang
bertipe int
for(int i = 1; i <= m; i++) Memesan tempat untuk bilangan bulat dengan nama i

Variable i tugasnya untuk menyimpan i pengulangan.

i <= m artinya selama nilai i lebih kecil atau sama


dengan m, maka pengulangan akan terus dilakukan.
Dengan kata lain, perulangan ini akan mengulang
sebanyak m kali.

i++ fungsinya untuk menambah satu (+1) nilai i pada


setiap pengulangan.
System.out.print("*"); Cetak “*” pada output tanpa menambakan baris baru.
System.out.println(); Perintah untuk memindahkan cursor ke baris baru.
} End metode bintang
}

e. Screenshot Program dan Output


Screenshot Program
Screenshot Output

D. DAFTAR PUSTAKA
Modul XII “Pengenalan Subprogram/Metode”

Muhardian, Ahmad., 2021, Belajar Java: Menggunakan Prosedur dan Fungsi untuk Membuat
Sub-program, https://www.petanikode.com/java-prosedur-dan-fungsi/, diakses pada 19
November 2021 07 : 35 WIB.

Anda mungkin juga menyukai