Buat program untuk menghitung volume dari sebuah kubus

dokumen-dokumen yang mirip
Selection, Looping, Branching

Bab 4. Decision 2 (Pengambilan Keputusan)

Kondisional/Pencabangan/Pemilihan. Konsep Pencabangan Sintaks Konsep if (kasus tunggal) Konsep if-else (2-3 kasus) Konsep switch (lebih dari 3 kasus)

Struktur Kontrol. (Repetition)

BAB 3 PENYELESAIAN KONDISI

Struktur Kontrol Pemrograman Java : PERCABANGAN

Minggu III STRUKTUR PEMILIHAN (KONTROL PROGRAM)

BAB I BILANGAN. Skema Bilangan. I. Pengertian. Bilangan Kompleks. Bilangan Genap Bilangan Ganjil Bilangan Prima Bilangan Komposit

Tipe Data dan Operator dalam Pemrograman

PEMROGRAMAN BERORIENTASI OBJEK. Percabangan. Budhi Irawan, S.Si, M.T

BAB VI. STATEMENT CONTROL

Bab 2. Dasar-Dasar Pemrograman C

Pada akhir pertemuan ini, diharapkan mahasiswa memiliki kemampuan untuk: Menggunakan struktur kendali pencabangan bersyarat dalam bahasa pemrograman.

PHP mendukung komentar yang digunakan pada C, C++ dan Shell Unix. Sebagai contoh:

MAKALAH FUNGSI KUADRAT GRAFIK FUNGSI,&SISTEM PERSAMAAN KUADRAT

Teori Algoritma. Struktur Algoritma

24/09/2017 PERCABANGAN

Pertemuan 2. Muhadi Hariyanto

BAB II OPERASI BERSYARAT DAN PERULANGAN

Pertemuan 5 PEMILIHAN/PERCABANGAN

PRAKTIKUM 4 PENGAMBILAN KEPUTUSAN

Pertemuan X. Pemrograman Web Dasar Semester 1

BAB IV PERTIDAKSAMAAN. 1. Pertidaksamaan Kuadrat 2. Pertidaksamaan Bentuk Pecahan 3. Pertidaksamaan Bentuk Akar 4. Pertidaksamaan Nilai Mutlak

PERTEMUAN 4 PENGEMBANGAN PSEUDOCODE STRUKTUR KONTROL PEMILIHAN

PRAKTIKUM 4 PENGAMBILAN KEPUTUSAN

PRAKTIKUM TUJUAN Pada akhir perkuliahan ini mahasiswa akan dapat: Dapat menjelaskan pemakaian if atau switch case dengan tepat

Praktikum 4 PENGAMBILAN KEPUTUSAN

Selection / Pemilihan PEMILIHAN

KUMPULAN SOAL-SOAL OMITS

Pengantar Pemrograman

Algoritma dan Struktur Data Tahar Agastani Teknik Informatika UIN

Bab 3. Decision 1 (Pengambilan Keputusan)

PENGENALAN MATLAB UNIVERSITAS MUHAMMADIYAH JEMBER ILHAM SAIFUDIN PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK. Senin, 06 Maret 2017

PERSAMAAN DAN PERTIDAKSAMAAN PERSAMAAN LINEAR

Pertemuan 4 Diagram Alur / Flowchart

a 2 e. 7 p 7 q 7 r 7 3. a. 8p 3 c. (2 14 m 3 n 2 ) e. a 10 b c a. Uji Kompetensi a. a c. x 3. a. 29 c. 2

Pemilihan. Overview. Tujuan. 1.1 Bentuk Umum IF dan Variasinya

PERNYATAAN DAN KONDISI

Operator Logika dan Pernyataan If. A ud Solehuddin::Januari2012

PERCABANGAN. Bentuk if Sederhana

OSK Matematika SMP (Olimpiade Sains Kabupaten Matematika SMP)

Dasar Pemrograman. Kondisi dan Perulangan. By : Hendri Sopryadi, S.Kom, M.T.I

Algoritma & Pemrograman #4. by antonius rachmat c, s.kom, m.cs

Mata Pelajaran Wajib. Disusun Oleh: Ngapiningsih

Materi Matematika Persamaan dan Pertidaksamaan kuadrat Persamaan Linear Persamaan Kuadrat Contoh : Persamaan Derajat Tinggi

MODUL IV Analisis Kasus/Pemilihan

Chapter 2 Tipe Data, Identifier, Operator dan Control Statement

PRAKTIKUM 4 PERCABANGAN

PERSAMAAN KUADRAT. Persamaan. Sistem Persamaan Linear

BAB IV MENGHITUNG AKAR-AKAR PERSAMAAN

GLOSSARIUM. A Akar kuadrat

A. TUJUAN 1. Menjelaskan tentang prinsip dasar fungsi. 2. Menjelaskan tentang.parameter formal dan parameter aktual

PERSAMAAN, FUNGSI DAN PERTIDAKSAMAAN KUADRAT

Persamaan dan Pertidaksamaan Linear

Aliran Kendali (Flow Control)

Fungsi : Dasar Fungsi

Pelatihan fortran JURUSAN TEKNIK SIPIL 2014 / 2015

Soal hari Jumat (16/10) Latihan 10 MS

BAB 5. Kondisional Perulangan. Materi. Pengenalan Perulangan Perulangan For Perulangan While Perulangan dengan menggunakan Kondisional If

PENGAMBILAN KEPUTUSAN

Pembahasan Soal SBMPTN 2014 SELEKSI BERSAMA MASUK PERGURUAN TINGGI NEGERI. Disertai TRIK SUPERKILAT dan LOGIKA PRAKTIS

TEKNIK MEMBILANG. b T U V W

SELEKSI OLIMPIADE TINGKAT KABUPATEN/KOTA TAHUN 2003 TIM OLIMPIADE MATEMATIKA INDONESIA TAHUN 2004

Pertemuan 4 Diagram Alur / Flowchart

A. TUJUAN PEMBELAJARAN

Latihan & Kisi-kisi UTS DASAR PEMROGRAMAN

Keg. Pembelajaran 5 : Perulangan dalam C++ 1. Tujuan Kegiatan Pembelajaran 2. Uraian Materi while do..while for continue dan break go to

IMPLEMENTASI NOTASI ALGORITMIK KE DALAM BAHASA C

MODUL. Operasi Kondisi. Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

KATA PENGANTAR. Penulis. Raizal Dzil Wafa M.

STRUKTUR KONTROL. IF kondisi THEN [blok] Statement ELSE [blok] Statement. IF kondisi THEN BEGIN END; IF kondisi THEN BEGIN IF kondisi THEN BEGIN

PERTEMUAN 5. Teori Himpunan

Praktikum 3 PENGAMBILAN KEPUTUSAN

DASAR PEMROGRAMAN. PERCABANGAN ( if, if else, if ternary, nested if, switch ) Djoko Soerjanto, M.Kom

Decission : if & if else

Pemrograman Dasar S E L E C T I O N

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL II PERCABANGAN. Bahasa Pemrograman : C / C++

P - 8 Bab 6 : PHP (Kondisi dan Perulangan)

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

Pertemuan II Algoritma Pemrograman & Struktur Data I

Matematika IPA (MATEMATIKA TKD SAINTEK)

Looping : break, continue, nested loop

Algoritma & Pemrograman #1. Antonius Rachmat C, S.Kom

NOTASI ILMIAH DAN ANGKA PENTING

BAB 1. PENDAHULUAN KALKULUS

STRUKTUR DASAR PHP ASUMSI 02/10/2014

ALGORITMA & FLOWCHART

PRAKTIKUM 07 DECISION SWITCH DWI SETIYA NINGSIH // PJJ D3 TI

BAHAN AJAR MATEMATIKA WAJIB KELAS X MATERI POKOK: PERTIDAKSAMAAN RASIONAL DAN IRASIONAL

FLOWCHART - LANJUTAN

Pengenalan Algoritma

BAB II DASAR-DASAR PEMROGRAMAN C

BAGIAN A. PILIHAN GANDA Silanglah Jawaban yang Benar Pada Lembar Jawaban. Jawaban benar bernilai 3, salah atau kosong bernilai 0.

OPERATOR DAN STATEMEN I/O

V. STRUKTUR PEMILIHAN

Struktur dan Kondisi Perulangan. Struktur Kondisi

D) 1 A) 3 C) 5 B) 4 D) 6

SELEKSI TINGKAT PROPINSI MATEMATIKA SMA/MA

SELEKSI TINGKAT PROPINSI CALON PESERTA OLIMPIADE SAINS NASIONAL 2008 MATEMATIKA SMA BAGIAN PERTAMA

matematika PEMINATAN Kelas X PERSAMAAN KUADRAT K-13 A. BENTUK UMUM PERSAMAAN KUADRAT

Transkripsi:

Soal 1: Volume Kubus Buat program untuk menghitung volume dari sebuah kubus Penjelasan: Dalam menulis sebuah program ada beberapa langkah yang harus dilakukan, yaitu: 1. Tentukan apa yang akan dicari atau dijadikan output dari program 2. Setelah dapat yang dicari, tentukan apa yang dibutuhkan untuk mencari itu 3. Dari berbagai hal yang dibutuhkan tersebut, tentukan mana yang sudah memiliki nilai dan mana yang belum punya nilai 4. Jika ada yang belum memiliki nilai maka nilainya akan diberikan lewat input data 5. Analisa cara memperoleh hasil (output) dari nilai-nilai yang ada (input maupun bukan), biasanya akan menghasilkan sebuah rumus atau langkahlangkah penyelesaian 6. Setelah caranya didapatkan, tentukan semua variabel yang terlibat, dari output, input maupun dari proses yang akan dilakukan Coba kita aplikasikan langkah-langkah tersebut pada soal di atas! Hasilnya sbb: 1. Hasil yang akan dicari pada soal tersebut adalah volume kubus 2. Untuk mencari volume kubus hanya dibutuhkan panjang sisi dari kubus tersebut 3. Dari soal jelas tidak disebutkan berapa panjang sisi kubus yang akan dihitung volumenya, jadi panjang sisi kubus belum memiliki nilai 4. Panjang sisi kubus harus dimasukkan lewat input 5. Volume kubus diperoleh dari rumus panjang sisi dipangkatkan tiga atau sisi kali sisi kali sisi 6. Jadi variabel yang terlibat disini adalah variabel untuk volume kubus dan variabel untuk panjang sisi kubus Dari langkah-langkah tersebut, berlanjut dengan memberikan nama setiap variabel yang akan dilibatkan ke dalam program. Nama variabel merupakan identifier, sehingga harus unik dan menganut cara penulisan identifier. Untuk variabel yang menampung nilai volume kubus, dapat menggunakan nama volume atau isi atau v atau vol, atau yang lainnya. Sedangkan untuk panjang sisinya dapat menggunakan nama sisi atau s atau panjang atau p. Supaya jelas, saya akan menggunakan nama volume dan sisi. Agar lebih singkat, Anda boleh saja menggunakan v dan s. Yang perlu diingat, sekali ditentukan, nama tersebut harus Anda gunakan terus dalam program dan ditulis apa adanya. Dan perlu diketahui juga bahwa nama variabel di PHP selalu diawali dengan tanda dolar ($). Nah, setelah selesai menentukan setiap variabel yang ada, saatnya menuliskan kode programnya. Secara umum, urutan dari sebuah program adalah dimulai dengan input data, dilanjutkan dengan pemrosesan dan diakhiri dengan output hasil. INPUT, 2

PROSES, OUTPUT!!! Itu yang harus Anda ingat baik-baik! Ada baiknya juga untuk memfokuskan penulisan program pada inti program terlebih dahulu, baru menambahkan user interface jika diperlukan dan jika ada waktu baru tambahkan kosmetik. Pada program PHP yang berbasis console, untuk melakukan input data digunakan perintah fgets(stdin). Pada program kita ini, variabel yang perlu diinput nilainya adalah variabel sisi yang akan menampung nilai panjang sisi kubus. Penulisannya adalah sebagai berikut: $sisi = fgets(stdin); Pada bagian proses, yang dilakukan adalah menghitung volume kubus berdasarkan rumus yang telah tersedia. Penulisannya adalah sebagai berikut: $volume = $sisi * $sisi * $sisi; Sedangkan bagian output digunakan untuk menampilkan nilai variabel volume yang telah dihitung di bagian proses tadi. Penulisannya adalah sebagai berikut: echo $volume; Selanjutnya ketiga bagian tersebut digabungkan dengan ditulis secara berurutan. Sehingga kalau hanya inti programnya saja maka hasilnya adalah sebagai berikut: <? $sisi = fgets(stdin); $volume = $sisi * $sisi * $sisi; echo $volume; Saatnya untuk menambahkan user interface. Untuk program berbasis console seperti program di atas biasanya hanya terdapat dua bagian untuk user interface, yaitu bagian instruksi input data dan penjelasan output atau hasil. Bagian instruksi input data biasanya adalah penulisan kalimat instruksi atau perintah pada user untuk memasukkan data sebelum kode untuk input data (fgets). Sedangkan bagian penjelasan output adalah penulisan kalimat sebelum melakukan output yang menjelaskan tentang apa yang dituliskan tersebut. Untuk bagian instruksi input data, bisa ditulis sbb: echo 'Masukkan panjang sisi kubus : '; Untuk bagian penjelasan output, bisa ditulis sbb: echo 'Volume kubus adalah : '; 3

Sehingga program menjadi sbb: <? echo 'Masukkan panjang sisi kubus : '; $sisi = fgets(stdin); $volume = $sisi * $sisi * $sisi; echo 'Volume kubus adalah : '; echo $volume; Dua baris terakhir dapat disingkat menjadi: echo 'Volume kubus adalah : ', $volume; Dan terakhir adalah pemberian kosmetik, seperti judul program dan ucapan terima kasih misalnya. Perlu juga diberi baris-baris pemisah bagian program sehingga program akan lebih mudah dibaca, seperti terlihat pada jawaban yang tertulis setelah penjelasan ini. Jawab: <? echo "PROGRAM MENGHITUNG VOLUME KUBUS\n"; echo "Copyright (c) 2010, Choerun Asnawi\n"; echo "Masukkan panjang sisi kubus : "; $sisi = fgets(stdin); $volume = $sisi * $sisi * $sisi; echo "Volume kubus : ", $volume; 4

Soal 2: Luas Persegi Panjang Buat program untuk menghitung luas persegi panjang Penjelasan: Langsung saja ke langkah-langkah penulisan program, sbb: 1. Output yang akan dihasilkan adalah luas persegi panjang 2. Luas persegi panjang didapat dari panjang dikalikan lebarnya, sehingga kita butuh panjang dan lebar persegi panjang tersebut 3. Kedua nilai tersebut tidak disebutkan di soal 4. Nilai panjang dan lebar perlu diinput 5. Nilai luas persegi panjang dapat dicari dengan rumus panjang kali lebar 6. Variabel yang terlibat adalah panjang, lebar dan luas persegi panjang Variabel-variabel yang terlibat saya beri nama luas, panjang dan lebar. Sehingga kalau hanya inti program maka akan terlihat sbb: <? $panjang = fgets(stdin); $lebar = fgets(stdin); $luas = $panjang * $lebar; echo $luas; Anda perhatikan bahwa terdapat dua buah input pada program di atas. Satu untuk variabel panjang, satu lagi untuk variabel lebar. Ditambah user interface maka akan menjadi sbb: <? echo 'Masukkan panjang persegi panjang : '; $panjang = fgets(stdin); echo 'Masukkan lebar persegi panjang : '; $lebar = fgets(stdin); $luas = $panjang * $lebar; echo 'Luas persegi panjang adalah : ', $luas; Ingat, urutan input tidaklah penting asal penulisan instruksinya tepat. Jadi mau memasukkan panjang dulu atau lebar dulu sama saja artinya. Sehingga Anda bisa saja menulis baris-baris input di atas menjadi: echo 'Masukkan lebar persegi panjang : '; $lebar = fgets(stdin); echo 'Masukkan panjang persegi panjang : '; $panjang = fgets(stdin); 5

Tetapi Anda tidak boleh menulisnya menjadi seperti berikut: echo 'Masukkan lebar persegi panjang : '; $panjang = fgets(stdin); echo 'Masukkan panjang persegi panjang : '; $lebar = fgets(stdin); atau juga tidak boleh menulisnya menjadi seperti ini: echo 'Masukkan lebar persegi panjang : '; echo 'Masukkan panjang persegi panjang : '; $panjang = fgets(stdin); $lebar = fgets(stdin); Urutannya harus menuliskan instruksi diteruskan dengan melakukan input yang sesuai, menuliskan instruksi lagi diikuti dengan melakukan input yang sesuai, dst. Jadi kalau instruksinya untuk memasukkan panjang, inputnya ya harus panjang juga. Jawab: <? echo "PROGRAM MENGHITUNG LUAS PERSEGI PANJANG\n"; echo "Copyright (c) 2010, Choerun Asnawi\n"; echo 'Masukkan panjang persegi panjang : '; $panjang = fgets(stdin); echo 'Masukkan lebar persegi panjang : '; $lebar = fgets(stdin); $luas = $panjang * $lebar; echo 'Luas persegi panjang adalah : ', $luas; 6

Soal 3: Keliling & Luas Lingkaran Buat program untuk menghitung keliling dan luas lingkaran Penjelasan: Langsung saja ke langkah-langkah penulisan program, sbb: 1. Output yang akan dihasilkan adalah keliling dan luas lingkaran 2. Keliling maupun luas lingkaran dapat dicari dari nilai jari-jari (radius atau r) lingkaran tersebut dan suatu nilai yang disebut sebagai pi (π) 3. Nilai jari-jari tidak disebutkan di soal, sedangkan nilai π adalah sekitar 3,14 4. Nilai jari-jari perlu diinput, sedangkan nilai π tidak perlu Keliling 2 r 5. Nilai keliling dan luas lingkaran memiliki rumus: 2 Luas r 6. Variabel yang terlibat adalah keliling, luas dan jari-jari lingkaran Variabel-variabel yang terlibat saya beri nama keliling, luas dan jari2. Kalau ingin lebih singkat Anda dapat menggunakan nama-nama seperti k, l dan r. Sehingga kalau hanya inti program maka akan terlihat sbb: <? $jari2 = fgets(stdin); $keliling = 2 * 3.14 * $jari2; $luas = 3.14 * $jari2 * $jari2; echo $keliling; echo $luas; Anda perhatikan bahwa hanya ada satu input saja tapi terdapat dua buah proses dan dua output pada program di atas. Proses dan output adalah untuk variabel keliling dan untuk variabel luas. Perhatikan bahwa urutan proses dan output dapat Anda bolakbalik sesuka hati asalkan sebuah output harus ditulis setelah (di bawah) proses yang bersangkutan. Misalkan untuk menampilkan nilai keliling maka nilai keliling tersebut harus sudah dihitung sebelumnya. Contoh penulisan alternatif yang diperbolehkan adalah: $luas = 3.14 * $jari2 * $jari2; $keliling = 2 * 3.14 * $jari2; echo $luas; echo $keliling; atau: $luas = 3.14 * $jari2 * $jari2; echo $luas; 7

$keliling = 2 * 3.14 * $jari2; echo $keliling; atau: $luas = 3.14 * $jari2 * $jari2; $keliling = 2 * 3.14 * $jari2; echo $keliling; echo $luas; atau: $keliling = 2 * 3.14 * $jari2; echo $keliling; $luas = 3.14 * $jari2 * $jari2; echo $luas; Sedangkan contoh yang tidak diperbolehkan adalah: $luas = 3.14 * $jari2 * $jari2; echo $keliling; $keliling = 2 * 3.14 * $jari2; echo $luas; atau: $keliling = 2 * 3.14 * $jari2; echo $luas; $luas = 3.14 * $jari2 * $jari2; echo $keliling; Perhatikan baris-baris yang digarisbawahi pada dua cuplikan kode program di atas. Baris-baris tersebut berisi perintah output yang mendahului proses perhitungan yang berkaitan. Hal itulah yang tidak diperbolehkan! Lebih lanjut lagi, jika ada lebih dari satu output yang dihasilkan oleh program, maka penulisan kode seperti di atas akan membuat kedua nilai yang ditulis tersebut akan tampil berdampingan tanpa pembatas sehingga menjadi tidak jelas mana yang luas dan mana yang keliling. Untuk itu menjadi perlu untuk menuliskan kedua nilai tersebut pada barisnya sendiri-sendiri. Caranya adalah dengan menuliskan karakter newline ("\n") yang fungsinya sama dengan tombol Enter. Contohnya adalah sbb: echo $keliling; echo "\n"; echo $luas; atau: 8

echo $keliling, "\n"; echo $luas; atau kalau mau lebih menghemat kode bisa ditulis sebagai: echo $keliling, "\n", $luas; Bahkan kalau sudah tahu tentang interpolasi string, bentuk tersebut masih dapat disingkat menjadi: echo "$keliling\n$luas"; Jawab: <? echo "Masukkan panjang jari-jari lingkaran : "; $jari2 = fgets(stdin); $keliling = 2 * 3.14 * $jari2; $luas = 3.14 * $jari2 * $jari2; echo "Keliling lingkaran : ", $keliling, "\n"; echo "Luas lingkaran : ", $luas; 9

Soal 4: Total Pembayaran Buat program untuk menghitung harga yang harus dibayarkan jika membeli sejumlah barang tertentu, dengan harga satuannya diinputkan Penjelasan: Program pada soal 4 ini sebenarnya secara substansial sama saja dengan program pada soal 2 (menghitung luas persegi panjang). Kesamaan itu dapat dilihat dari rumus yang dipakai untuk menghitung output. Rumus untuk menghitung luas persegi panjang adalah perkalian dua bilangan, yaitu panjang kali lebar. Sedangkan rumus untuk menghitung total harga juga merupakan perkalian dua bilangan, yaitu harga satuan kali jumlah barang. Tinggal mengganti aja kan Adapun langkah-langkah penulisan programnya adalah sbb: 1. Output yang dicari adalah total harga yang dibayarkan 2. Untuk mencari total harga dibutuhkan harga satuan dan banyaknya barang 3. Kedua nilai belum disebutkan di soal 4. Harga satuan dan banyaknya barang harus diinput 5. Rumusnya adalah: total harga = harga satuan kali banyaknya barang 6. Variabel yang terlibat adalah total harga, harga satuan dan banyaknya barang Sedangkan untuk variabel, saya beri nama total untuk total harga, harga untuk harga satuan dan jumlah untuk banyaknya barang yang dibeli. Tanpa user interface, programnya sebagai berikut: <? $harga = fgets(stdin); $jumlah = fgets(stdin); $total = $harga * $jumlah; echo $total; Sekali lagi, antara variabel harga dan jumlah bisa dibolak-balik baik inputnya maupun penulisan pada prosesnya. Sehingga penulisan-penulisan potongan program berikut dapat dianggap BENAR: $jumlah = fgets(stdin); $harga = fgets(stdin); dan $total = $jumlah * $harga; 10

Ditambah user interface dan kosmetik maka program akan menjadi seperti jawaban berikut. Jawab: <? echo "PROGRAM MENGHITUNG HARGA TOTAL\n"; echo "Copyright (c) 2010, Choerun Asnawi\n"; echo "Masukkan harga satuannya : "; $harga = fgets(stdin); echo "Masukkan jumlah barang yang dibeli : "; $jumlah = fgets(stdin); $total = $harga * $jumlah; echo "Total harga yang harus dibayar : ", $total; 11

Soal 5: Harga Diskon + Pajak Buat program untuk menghitung harga yang harus dibayarkan jika harga asli barang masih harus ditambah pajak 10% dari harga aslinya dan masih didiskon 15% dari harga aslinya juga Penjelasan: Langkah-langkahnya sbb: 1. Output yang diminta adalah harga yang harus dibayarkan 2. Dari soal terlihat bahwa untuk menghitung harga tersebut dibutuhkan harga aslinya (harga awal), besar pajak dan diskonnya 3. Harga asli jelas belum disebutkan di soal, sedangkan besar pajak dan diskon walaupun tidak disebutkan secara langsung tetapi di soal terdapat petunjuk cara mencari atau menghitung nilainya 4. Harga asli jelas harus diinputkan, sementara besar pajak dan diskon tidak perlu malahan tidak boleh diinputkan, karena nilainya harus dihitung berdasarkan harga aslinya 5. Rumus-rumusnya adalah sbb: Harga_Bayar = Harga_Asli + Pajak Diskon, dimana Pajak = 10% Harga_Asli dan Diskon = 15% Harga_Asli 6. Variabel-variabelnya adalah harga yang dibayarkan, harga asli (awal) barang, besarnya pajak dan diskon Dalam PHP tidak dikenal adanya tanda persen menggunakan tanda %. Untuk menulisnya Anda harus ingat terlebih dahulu arti tanda %, yaitu per seratus alias dibagi dengan seratus. Jadi kalau 10% artinya 10 per seratus atau 10/100 yang hasilnya adalah 1/10 atau kalau ditulis ke bentuk desimal menjadi 0,1. Demikian juga 15% jika ditulis ke dalam bentuk desimal menjadi 0,15. Bahasa PHP menggunakan notasi bilangan yang digunakan di Inggris. Dalam PHP, tanda desimal bukannya koma (,) melainkan titik (.). Sehingga 10% dalam PHP ditulis 0.1, bukan 0,1. Dalam PHP juga tidak boleh menuliskan pemisah ribuan, sehingga bilangan sejuta dalam PHP ditulis 1000000, bukannya 1.000.000. Tanpa user interface, jawaban soal di atas kira-kira sbb: <? $asli = fgets(stdin); $pajak = 0.1 * $asli; $diskon = 0.15 * $asli; $bayar = $asli + $pajak - $diskon; echo $bayar; Sebenarnya untuk yang sudah terbiasa menulis program, jawaban di atas masih bisa disingkat dengan menghilangkan variabel pajak dan diskon, dan penghitungan keduanya langsung dimasukkan ke dalam satu proses sekaligus, sbb: 12

<? $asli = fgets(stdin); $bayar = $asli + (0.1 * $asli) (0.15 * $asli); echo $bayar; Atau bahkan untuk yang lebih jeli dapat menyederhanakannya menjadi sbb: <? $asli = fgets(stdin); $bayar = 0.95 * $asli; echo $bayar; Kok bisa seperti itu? Silahkan cari sendiri! Hanya penyederhanaan rumus kok! Jawab: <? echo "PENGHITUNG HARGA PEMBAYARAN\n"; echo "===========================\n"; echo "Masukkan harga aslinya : "; $asli = fgets(stdin); $pajak = 0.1 * $asli; $diskon = 0.15 * $asli; $bayar = $asli + $pajak - $diskon; echo "Harga yang harus dibayarkan : ", $bayar; 13

Soal 6: Fungsi Matematis Buat program untuk menghitung nilai fungsi kuadrat berikut: 2 f ( x) x 4x 3 Penjelasan: Soal ini sebenarnya sangat sederhana sehingga saya rasa sudah tidak perlu penjelasan lebih lanjut lagi. Yang perlu diterangkan adalah bagaimana caranya menerjemahkan rumus matematis tersebut ke dalam program PHP. Sebelumnya saya tulis dulu langkah-langkah awalnya, sbb: 1. Output yang akan dicari adalah nilai fungsi f(x) 2. Untuk mencarinya dilihat dari rumus pada soal diperlukan nilai x saja (Ingat!!! Bukan x 2, 4x dan 3, lho!!!) 3. Nilai x jelas tidak tertera pada soal 4. Nilai x harus diinput oleh user 2 5. Rumusnya adalah: f ( x) x 4x 3 6. Variabel yang terlibat adalah fungsi f(x) dan x Output yang dicari pada soal tersebut yaitu f(x) dalam program harus ditampung ke dalam suatu variabel. Karena nama f(x) sendiri tidak valid digunakan sebagai identifier karena mengandung tanda kurung, maka kita harus mencari nama lain untuk mewakilinya. Dalam hal ini saya gunakan nama fx sebagai nama variabel yang mewakili f(x). Anda boleh hanya menggunakan nama f saja, atau nama fungsi juga boleh. Bahkan jika Anda ingin menggunakan nama variabel y juga diperkenankan. Yang penting disini bukan nama literalnya namun arti yang tersirat di dalamnya. Bentuk x 2 dalam PHP atau kebanyakan bahasa pemrograman lainnya juga dapat ditulis sebagai perkalian dua buah nilai x, ditulis x * x. Sehingga, bentuk matematis 2 f ( x) x 4x 3 jika ditulis dalam PHP akan menjadi: $fx = $x * $x + 4 * $x + 3; Atau jika kurang yakin bisa ditambahkan tanda kurung sbb: $fx = ($x * $x) + (4 * $x) + 3; Sehingga jika hanya inti programnya saja program dapat ditulis menjadi: <? $x = fgets(stdin); $fx = $x * $x + 4 * $x + 3; echo $fx; 14

Program selengkapnya dapat dilihat pada jawaban berikut. Jawab: <? echo "Masukkan nilai x : "; $x = fgets(stdin); $fx = $x * $x + 4 * $x + 3; echo "Nilai f(x) adalah : ", $fx; 15

Soal 7: Kecepatan Atlet Buat program untuk menghitung besarnya kecepatan dari seorang atlet yang berlari pada lintasan 100 m Penjelasan: Dalam ilmu Fisika disebutkan bahwa kecepatan dapat dicari dari jauhnya jarak tempuh dibagi waktu yang diperlukan untuk menempuhnya. Dari pengertian ini maka dapat kita susun langkah-langkah awal berikut: 1. Output yang mau dihasikan adalah besarnya kecepatan 2. Untuk mencari kecepatan diperlukan jarak dan waktunya 3. Jarak tempuh sudah disebutkan di soal, yaitu 100 m, sedangkan waktunya belum disebutkan 4. Jarak tempuh tidak perlu diinput, sedangkan waktu perlu diinput s 5. Rumusnya, kecepatan = jarak per waktu atau singkatnya V t 6. Variabel yang terlibat adalah kecepatan dan waktu, jarak tidak perlu dibikin variabel karena nilainya udah fix (tetap), yaitu 100 m Untuk nama variabel saya gunakan nama kecepatan dan waktu. Kalau ingin lebih singkat bisa saja Anda gunakan nama v dan t, sesuai rumus di atas. Sehingga inti programnya sebagai berikut: $waktu = fgets(stdin); $kecepatan = 100 / $waktu; echo $kecepatan; Hanya saja disini ada tambahan dikarenakan adanya pembagian pada rumus yang digunakan. Yang perlu diingat adalah jikalau ada pembagian dalam program maka kita sebagai programmer harus mencegah jangan sampai terjadi pembagian dengan nol (divided by zero). Dalam komputer pembagian dengan nol adalah suatu error yang sangat fatal yang dapat menghentikan jalannya suatu program. Rumus kecepatan melibatkan pembagian dengan nilai waktu yang digunakan. Untuk itu kita harus mencegah agar supaya nilai waktu tersebut tidak bernilai nol. Tetapi kalau dilihat bahwa nilai waktu tersebut diinputkan oleh user maka pencegahan tersebut menjadi tidak memungkinkan (untuk saat ini) karena user memang bisa memasukkan nilai apa saja disitu, termasuk nlai nol. Oleh karenanya yang dapat kita lakukan adalah tidak melakukan proses jika nilai waktu yang diinput adalah nol. Jadi proses pencarian kecepatan hanya akan dilakukan jika waktu tidak sama dengan nol. Sekalian saja, waktu yang digunakan untuk menempuh jarak juga tidak mungkin negatif, sehingga dengan dasar ini maka proses pencarian kecepatan hanya akan dilakukan jika nilai waktu lebih besar dari nol. 16

Output juga hanya akan ditampilkan jika proses dilakukan. Tidak mungkin kita akan menampilkan output jika apa yang akan ditampilkan tersebut tidak dihitung dulu. Sehingga jika proses tidak dilakukan, maka output juga tidak ada. Dengan kata lain, proses dan output hanya akan dilakukan jika nilai waktu lebih besar dari nol. Dalam PHP, hal tersebut ditulis menjadi: if ($waktu > 0) { $kecepatan = 100 / $waktu; echo $kecepatan; Ada baiknya kalau user diberi peringatan jika memasukkan nilai nol. Contohnya sbb: if ($waktu <= 0) { echo 'Waktu tidak boleh nol atau negatif!'; Sehingga lengkapnya menjadi: if ($waktu > 0) { $kecepatan = 100 / $waktu; echo $kecepatan; if ($waktu <= 0) { echo 'Waktu tidak boleh nol atau negatif!'; Pada potongan kode di atas Anda dapat melihat bentuk konstruksi if yang tertulis berurutan. Bentuk umumnya adalah: if (A) { statements_a; if (B) { statements_b; Jika terdapat bentuk seperti ini maka perlu dilihat hubungan antara kondisi A dengan kondisi B. Dengan mencermati hubungan keduanya memungkinkan kita untuk menuliskan program yang lebih efisien. Kondisi A dan kondisi B dikatakan berhubungan jika mengandung variabel yang sama. Jika tidak berisi variabel yang sama maka dikatakan tidak berhubungan. Hubungan antara dua kondisi A dan B bisa berbentuk: 1. A sama persis dengan B, jika semua keadaan yang memenuhi kondisi A juga memenuhi kondisi B dan juga demikian sebaliknya Contoh: A : x adalah bilangan genap B : x adalah kelipatan 2 17

2. A merupakan bagian dari B, jika semua keadaan yang memenuhi kondisi A juga memenuhi kondisi B, tapi tidak sebaliknya, yaitu ada suatu keadaan yang memenuhi kondisi B tetapi tidak memenuhi kondisi A Contoh: A : x > 10 B : x > 2 3. A beririsan dengan B, jika ada keadaan yang memenuhi keduanya tetapi juga ada keadaan yang memenuhi salah satunya (A saja atau B) saja Contoh: A : x > 6 B : x < 8 4. A terpisah dari B, jika tidak ada keadaan yang memenuhi keduanya (tidak beririsan) tapi masih ada keadaan yang tidak memenuhi keduanya Contoh: A : x < 10 B : x > 20 5. A kebalikan dari B, jika tidak ada keadaan yang memenuhi keduanya (tidak beririsan) dan juga tidak ada keadaan yang tidak memenuhi keduanya Contoh: A : x adalah bilangan genap B : x adalah bilangan ganjil Atau kalau ditulis dalam bentuk tabel: No. Hubungan Ada keadaan yang memenuhi keduanya A saja B saja tidak dua 2 nya 1. A sama persis dengan B ada - - mungkin 2. A bagian dari B ada - ada mungkin 3. A beririsan dengan B ada ada ada mungkin 4. A terpisah dengan B - ada ada ada 5. A kebalikan dari B - ada ada - Konsep ini sebenarnya sama dengan konsep himpunan. Adapun hubungan dan akibatnya terhadap program adalah sbb: 1. Jika kondisi A sama persis dengan kondisi B maka sebaiknya potongan program di atas diubah ke bentuk: if (A) { statements_a; statements_b; 2. Jika kondisi A bagian dari kondisi B maka sebaiknya ditulis menjadi: if (B) { if (A) { statement_a; statement_b; 18

Bentuk seperti di atas sering dinamakan sebagai Nested If atau Konstruksi If Bersarang, yang artinya konstruksi if yang berada di dalam konstruksi if lain. 3. Jika kondisi A beririsan dengan kondisi B maka harus ditulis apa adanya 4. Jika kondisi A terpisah dari kondisi B maka sebaiknya ditulis menjadi: if (A) { statements_a; else if (B) { statements_b; Bentuk di atas dinamakan Konstruksi If Bertingkat, dimana konstruksi if yang kedua dan seterusnya di serangkaian konstruksi if berurutan tersebut depannya diberi tambahan keyword else yang artinya selainnya itu. 5. Jika kondisi A merupakan kebalikan dari B maka bisa ditulis menjadi: if (A) { statements_a; else { statements_b; Adapun jika kondisi A dan B tidak berhubungan misalkan kondisi A melibatkan variabel x sementara kondisi B melibatkan variabel y maka bentuk konstruksi if berurutan tersebut tetap harus ditulis apa adanya. Sedangkan jika konstruksi if yang berurutan tersebut ada lebih dari dua, misalkan seperti bentuk berikut: if (A) { statements_a; if (B) { statements_b; if (C) { statements_c; if (D) { statements_d; maka sebaiknya Anda lihat hubungan antar kondisi secara berurutan dari atas ke bawah. Kondisi-kondisi yang sudah dicek hubungannya dicek lagi dengan kondisi yang di bawahnya, dan seterusnya. Pada contoh di atas, pertama kondisi A dicek hubungannya dengan kondisi B. Setelah itu gabungan kondisi A dan B dibandingkan dengan kondisi C. Terakhir gabungan kondisi A, B dan C dicek hubungannya dengan kondisi D. 19

Kembali ke bentuk: if ($waktu > 0) { $kecepatan = 100 / $waktu; echo $kecepatan; if ($waktu <= 0) { echo 'Waktu tidak boleh nol atau negatif!'; Potongan program ini kira-kira dapat dibaca sbb: Jika besarnya waktu yang diinput user lebih besar dari nol maka lakukan perhitungan kecepatan dan tampilkan hasilnya. Jika waktunya nol atau kurang maka kasih peringatan ke user. Dari kalimat ini maka dapat dilihat bahwa kondisi (Waktu > 0) dan kondisi (Waktu <= 0) adalah dua kondisi yang berkebalikan, sehingga sesuai aturan dapat diubah menjadi: if ($waktu > 0) { $kecepatan = 100 / $waktu; echo $kecepatan; else { echo 'Waktu tidak boleh nol atau negatif!'; Potongan program di atas kira-kira dibaca sbb: Jika besarnya waktu yang diinput user lebih besar dari nol maka lakukan perhitungan kecepatan dan tampilkan hasilnya, selain itu kasih peringatan ke user. Catatan terakhir, untuk blok statement (yang tertulis di dalam kurung kurawal) yang hanya terdiri atas satu statement saja, maka dapat ditulis tanpa tanda kurung kurawal. Dengan demikian blok setelah else di atas dapat disingkat menjadi: else echo 'Waktu tidak boleh nol atau negatif!'; Jawab: <? echo "PENGHITUNG KECEPATAN\n"; echo "====================\n"; echo 'Waktu tempuh (detik) : '; $waktu = fgets(stdin); if ($waktu > 0) { $kecepatan = 100 / $waktu; echo 'Kecepatannya adalah : ', $kecepatan; else echo 'Waktu tidak boleh nol atau negatif!'; 20

Soal 8: Harga Diskon Bervariasi Buat program untuk menghitung harga yang harus dibayarkan dari pembelian barang dengan ketentuan diskon sbb: Harga Barang Diskon Kurang dari Rp 50.000 Tanpa Diskon Rp 50.000 Rp 200.000 10% Lebih dari Rp 200.000 25% Penjelasan: Langkah-langkah penyelesaian untuk soal ini adalah sebagai berikut: 1. Output yang akan dihasilkan adalah harga akhir yang akan dibayarkan 2. Untuk menghitung harga akhir tersebut dibutuhkan harga awal dan diskon 3. Besarnya harga awal jelas tidak disebutkan di soal, sedangkan besarnya diskon dapat dihitung lewat harga awal 4. Harga awal harus diinput, sedangkan diskon dihitung (tidak perlu diinput) 5. Harga akhir dicari dari harga awal dikurangi diskon, sedangkan besarnya diskon bervariasi tergantung harga awalnya, dengan ketentuan: a. Jika harga awal kurang dari Rp 50.000 maka diskon = 0 b. Jika harga awal dari Rp 50.000 sampai Rp 200.000 maka diskon = 10% harga awal c. Jika harga awal lebih dari Rp 200.000 maka diskon = 25% harga awal 6. Variabel yang terlibat adalah harga akhir, harga awal dan diskon Jawaban soal ini sebenarnya sederhana, karena masih berupa program yang mengikuti alur INPUT, PROSES dan OUTPUT. Hanya saja prosesnya sedikit kompleks dari biasanya. Dalam soal ini proses untuk mencari output dibagi menjadi dua, yaitu: proses mencari diskon dan diikuti proses mencari harga akhirnya. Pencarian besarnya diskon pun bercabang menjadi tiga cabang yang ditentukan oleh tiga buah kondisi. Sebelumnya, kita beri nama dulu setiap variabel yang akan kita pakai. Saya menggunakan nama akhir untuk harga akhir, awal untuk harga awal dan diskon untuk besarnya diskon. Untuk mencari harga akhir gunakan kode program berikut: $akhir = $awal $diskon; Besarnya diskon harus dicari sebelum kode program di atas. Berikut ini adalah tiga kode program yang digunakan untuk mencari besarnya diskon: $diskon = 0; dan 21

$diskon = 0.1 * $awal; dan $diskon = 0.25 * $awal; Berikut ini kondisi beserta kode program untuk mencari diskonnya: 1. Kondisi jika harga awal kurang dari Rp 50.000, kondisi ini jika ditulis dalam PHP menjadi: $awal < 50000, sehingga lengkapnya menjadi: if ($awal < 50000) $diskon = 0; 2. Kondisi jika harga awal berkisar dari Rp 50.000 sampai Rp 200.000, kondisi ini jika ditulis dalam PHP menjadi: ($awal >= 50000) and ($awal <= 200000), sehingga lengkapnya menjadi: if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; 3. Kondisi jika harga awal lebih dari Rp 200.000, kondisi ini jika ditulis dalam PHP menjadi: $awal > 200000, sehingga lengkapnya menjadi: if ($awal > 200000) $diskon = 0.25 * $awal; Kalau ketiganya digabungkan maka akan menjadi: if ($awal < 50000) $diskon = 0; if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; if ($awal > 200000) $diskon = 0.25 * $awal; Bentuk di atas merupakan bentuk tiga konstruksi if berurutan yang berhubungan. Analisa hubungan ketiga kondisinya adalah sebagai berikut: 1. Kondisi pertama $awal < 50000 dan kondisi kedua ($awal >= 50000) and ($awal <= 200000) merupakan dua kondisi yang terpisah, artinya tidak ada satupun nilai awal yang dapat memenuhi kedua kondisi tersebut (coba pikir, ada gak suatu nilai yang kurang dari 50.000 sekaligus lebih dari 50.000???) tapi masih ada nilai awal yang tidak memenuhi keduanya, contohnya 250.000. Karena kedua kondisi terpisah maka sesuai aturan maka bentuknya dapat ditulis menjadi: 22

if ($awal < 50000) $diskon = 0; else if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; 2. Karena kondisi $awal >= 50000 sendiri merupakan kebalikan dari kondisi $awal < 50000 maka bentuk di atas dapat lebih disingkat jadi: if ($awal < 50000) $diskon = 0; else if ($awal <= 200000) $diskon = 0.1 * $awal; 3. Sekarang kedua kondisi pertama di atas yaitu $awal < 50000 dan ($awal >= 50000) and ($awal <= 200000) dibandingkan dengan kondisi ketiga, yaitu $awal > 200000. Yang satu bernilai 200.000 ke bawah, sedangkan yang satu nilainya lebih dari 200.000. Dari sini dapat diambil kesimpulan bahwa kedua kondisi tersebut merupakan suatu kebalikan, karena tidak ada satupun nilai awal yang memenuhi keduanya maupun yang tidak memenuhi keduanya. Sehingga kode program menjadi: if ($awal < 50000) $diskon = 0; else if ($awal <= 200000) $diskon = 0.1 * $awal; else $diskon = 0.25 * $awal; Perlu diketahui bahwa perhitungan besarnya diskon tidak perlu urut sesuai dengan tabel di soal. Hal ini disebabkan karena rumus diskon yang satu tidak ada kaitannya dengan rumus pencarian diskon yang lain. Artinya, bentuk yang semula: if ($awal < 50000) $diskon = 0; if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; if ($awal > 200000) $diskon = 0.25 * $awal; bisa saja dibolak-balik dan ditulis menjadi: if ($awal < 50000) $diskon = 0; if ($awal > 200000) $diskon = 0.25 * $awal; if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; atau 23

if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; if ($awal < 50000) $diskon = 0; if ($awal > 200000) $diskon = 0.25 * $awal; atau if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; if ($awal > 200000) $diskon = 0.25 * $awal; if ($awal < 50000) $diskon = 0; atau if ($awal > 200000) $diskon = 0.25 * $awal; if ($awal < 50000) $diskon = 0; if (($awal >= 50000) and ($awal <= 200000)) $diskon = 0.1 * $awal; Setiap bentuk di atas dapat dianalisa kembali dan akan menghasilkan kode program akhir yang berbeda bentuknya namun sama fungsinya. Contohnya, bentuk yang terakhir di atas jika dianalisa lebih lanjut akan menjadi sbb: if ($awal > 200000) $diskon = 0.25 * $awal; else if ($awal < 50000) $diskon = 0; else $diskon = 0.1 * $awal; Silahkan mencoba menganalisa bentuk yang lainnya! 24

Jawab: <? echo "PENGHITUNG HARGA DISKON\n"; echo "=======================\n"; echo 'Harga awal : '; $awal = fgets(stdin); if ($awal < 50000) $diskon = 0; else if ($awal <= 200000) $diskon = 0.1 * $awal; else $diskon = 0.25 * $awal; $akhir = $awal - $diskon; echo 'Harga akhir : ', $akhir; 25

Soal 9: Fungsi Bercabang (Bilangan Nyata) Buat program untuk menghitung nilai fungsi berikut: 0, untuk x 0 2 x 5, untuk 0 x 3 f ( x) 2x 1, untuk 3 x 5 5x, untuk 5 x 10 x, untuk x 10 untuk x anggota bilangan nyata Penjelasan: Langkah-langkah penyelesaian untuk soal ini adalah sebagai berikut: 1. Output yang akan dihasilkan adalah nilai fungsi f(x) 2. Untuk menghitung fungsi diperlukan nilai x 3. Besarnya nilai x jelas tidak disebutkan di soal 4. Nilai x harus diinput 5. Nilai fungsi f(x) dicari dengan rumus yang bervariasi (lihat soal) 6. Variabel yang terlibat adalah nilai fungsi f(x) dan nilai x Beberapa kondisi yang mempengaruhi hasil akhir adalah sbb: No. Kondisi Dalam PHP Perhitungan Nilai Fungsi 1. x 0 $x <= 0 $fx = 0 2. 0 x 3 ($x > 0) and ($x <= 3) $fx = $x * $x + 5 3. 3 x 5 ($x > 3) and ($x <= 5) $fx = 2 * $x + 1 4. 5 x 10 ($x > 5) and ($x <= 10) $fx = 5 * $x 5. x 10 $x > 10 $fx = $x Dari tabel di atas jika diimplementasikan ke dalam program menjadi sbb: if ($x <= 0) $fx = 0; if (($x > 0) and ($x <= 3)) $fx = $x * $x + 5; if (($x > 3) and ($x <= 5)) $fx = 2 * $x + 1; if (($x > 5) and ($x <= 10)) $fx = 5 * $x; if ($x > 10) $fx = $x; Bentuk di atas jika dianalisa lebih lanjut maka akan berubah menjadi: 26

if ($x <= 0) $fx = 0; else if (($x > 0) and ($x <= 3)) $fx = $x * $x + 5; else if (($x > 3) and ($x <= 5)) $fx = 2 * $x + 1; else if (($x > 5) and ($x <= 10)) $fx = 5 * $x; else $fx = $x; atau lebih dipersingkat menjadi: if ($x <= 0) $fx = 0; else if ($x <= 3) $fx = $x * $x + 5; else if ($x <= 5) $fx = 2 * $x + 1; else if ($x <= 10) $fx = 5 * $x; else $fx = $x; Penyingkatan di atas dapat dilihat penjelasannya pada penjelasan soal sebelumnya. Jawab: <? echo "PROGRAM PENGHITUNG FUNGSI\n"; echo "=========================\n"; echo 'Nilai x : '; $x = fgets(stdin); if ($x <= 0) $fx = 0; else if ($x <= 3) $fx = $x * $x + 5; else if ($x <= 5) $fx = 2 * $x + 1; else if ($x <= 10) $fx = 5 * $x; else $fx = $x; echo 'Nilai f(x) = ', $fx; 27

Soal 10: Fungsi Bercabang (Bilangan Bulat) Buat program untuk menghitung nilai fungsi berikut: 0, untuk x 0 2 x 5, untuk 0 x 3 f ( x) 2x 1, untuk 3 x 5 5x, untuk 5 x 10 x, untuk x 10 untuk x anggota bilangan bulat positif Penjelasan: Soal ini hampir sama dengan soal sebelumnya hanya saja tipe data untuk x berbeda. Yang sebelumnya menggunakan bilangan nyata sekarang menggunakan bilangan bulat positif. Penyelesaiannya sebenarnya sama saja, dan bagian proses dapat ditulis sama dengan jawaban soal sebelumnya, yaitu: if ($x <= 0) $fx = 0; else if ($x <= 3) $fx = $x * $x + 5; else if ($x <= 5) $fx = 2 * $x + 1; else if ($x <= 10) $fx = 5 * $x; else $fx = $x; Karena nilai x merupakan sebuah bilangan positif, maka nilai yang paling kecil adalah nilai nol dan tidak mungkin lebih kecil dari nol, sehingga dua baris pertama potongan kode di atas dapat diubah menjadi: if ($x == 0) $fx = 0; Kemudian karena nilai x merupakan bilangan bulat, maka dari setiap kondisi yang ada sudah jelas sekali berapa nilai x yang memenuhi kondisi tersebut. Berbeda dengan bilangan real yang tidak memiliki batas sampai berapa angka di belakang koma. Berikut tabel berisi setiap kondisi dengan nilai x yang memenuhi kondisi tersebut: No. Kondisi Nilai x yang Memenuhi Kondisi tersebut 1. x 0 0 2. 0 x 3 1, 2 dan 3 3. 3 x 5 4 dan 5 4. 5 x 10 6, 7, 8, 9 dan 10 5. x 10 11, 12, 13, dst (selain nilai yang di atas) 28

Dengan melihat hal tersebut, maka bentuk konstruksi if bertingkat tersebut dapat diubah ke dalam bentuk switch. Secara umum bentuk switch dapat ditulis sbb: switch (ekspresi) { case nilai_1: kelompok_statement_1; break; case nilai_2: kelompok_statement_2; break;... default: kelompok_statement_lainnya; Sehingga konstruksi if di atas jika diubah ke dalam bentuk switch menjadi sbb: switch ($x) { case 0: $fx = 0; break; case 1: $fx = $x * $x + 5; break; case 2: $fx = $x * $x + 5; break; case 3: $fx = $x * $x + 5; break; case 4: $fx = 2 * $x + 1; break; case 5: $fx = 2 * $x + 1; break; case 6: $fx = 5 * $x; break; case 7: $fx = 5 * $x; break; case 8: $fx = 5 * $x; break; case 9: $fx = 5 * $x; break; case 10: $fx = 5 * $x; break; default: $fx = $x; 29

Selanjutnya untuk nilai-nilai yang memiliki kelompok statement sama dapat digabung menjadi satu dipisah dengan tanda koma. Ilustrasinya begini, jika seandainya di dalam struktur switch ada pola berbentuk: case a: statement; break; case b: statement; break; Bentuk di atas dapat disingkat menjadi bentuk: case a: case b: statement; break; Dengan demikian, potongan kode program di atas dapat disingkat menjadi: switch ($x) { case 0: $fx = 0; break; case 1: case 2: case 3: $fx = $x * $x + 5; break; case 4: case 5: $fx = 2 * $x + 1; break; case 6: case 7: case 8: case 9: case 10: $fx = 5 * $x; break; default: $fx = $x; Baris-baris yang terlalu pendek bisa ditulis dalam satu baris saja untuk menyingkat kode program. Sehingga potongan kode program di atas dapat disingkat lagi menjadi: switch ($x) { case 0: $fx = 0; break; case 1: case 2: case 3: $fx = $x * $x + 5; break; case 4: case 5: 30

$fx = 2 * $x + 1; break; case 6: case 7: case 8: case 9: case 10: $fx = 5 * $x; break; default: $fx = $x; Lengkapnya dapat dilihat pada jawaban di bawah ini. Jawab: <? echo "PROGRAM PENGHITUNG FUNGSI\n"; echo "=========================\n"; echo 'Nilai x : '; $x = fgets(stdin); switch ($x) { case 0: $fx = 0; break; case 1: case 2: case 3: $fx = $x * $x + 5; break; case 4: case 5: $fx = 2 * $x + 1; break; case 6: case 7: case 8: case 9: case 10: $fx = 5 * $x; break; default: $fx = $x; echo 'Nilai f(x) = ', $fx; 31

Soal 11: Nama Hari dalam Seminggu Buat program untuk menampilkan nama hari berdasarkan nomor hari yang diinput oleh user Contohnya jika user menginput angka satu maka muncul output Senin, kalau user menginput dua muncul output Selasa, input tujuh muncul output Minggu Penjelasan: Jawaban soal ini sangat sederhana dan boleh dikatakan banyak sekali alternatifnya. Alternatif pertama adalah dengan tetap menggunakan alur yang biasanya yaitu INPUT, PROSES baru OUTPUT, seperti tertulis pada jawaban pertama di atas. Bagian INPUT hanya berisi input untuk nomor hari. Bagian PROSES isinya untuk menentukan nama hari berdasarkan input nomor hari. Bagian OUTPUT untuk menampilkan nama hari yang tadi sudah ditentukan pada bagian proses. Jika diperhatikan, ternyata bagian proses sebenarnya sangat sederhana, karena di dalamnya tidak ada proses perhitungan sama sekali. Yang ada hanyalah melakukan pemberian nilai kepada variabel yang mewakili nama hari. Oleh karena itu kita dapat menggunakan alternatif jawaban yang intinya adalah menggabungkan proses dan output menjadi satu. Dalam alternatif ini penentuan nama hari langsung diikuti dengan menampilkan outputnya. Karena penentuan nama harinya sangat sederhana maka proses dan output dilebur jadi satu bagian.. Pada alternatif kedua dapat dilihat bahwa variabel untuk nama hari sudah tidak diperlukan lagi. Hal tersebut karena nilai nama hari yang pada alternatif pertama disimpan dulu untuk ditampilkan nanti, pada alternatif kedua ini langsung ditampilkan dan tidak perlu disimpan (dalam variabel) dulu. Alternatif yang lainnya adalah mengganti konstruksi switch menjadi konstruksi if bertingkat, walaupun tentu saja konstruksi switch adalah pilihan yang lebih baik. Untuk latihan coba gantilah jawaban-jawaban di atas ke dalam bentuk konstruksi if bertingkat (yang menggunakan if-else-if). Supaya lebih jelas, berikut ini adalah langkah-langkah penyelesaian soal di atas: 1. Output yang akan dihasilkan adalah tampilan nama hari 2. Yang diperlukan adalah nomor harinya 3. Nomor hari tidak disebutkan di soal 4. Nomor hari diinputkan 5. Untuk mencari nama hari tidak diperlukan perhitungan atau rumus tertentu, tapi hanya perlu mengecek berapa nomor hari yang diinputkan oleh user 6. Variabel yang terlibat dan wajib ada adalah nomor hari, sedangkan nama hari boleh dijadikan variabel, boleh juga tidak 32

Jawab: <? echo "PROGRAM NAMA HARI\n"; echo "=================\n"; echo "Nomor hari : "; $nomor = fgets(stdin); switch ($nomor) { case 1: $nama = 'Senin'; break; case 2: $nama = 'Selasa'; break; case 3: $nama = 'Rabu'; break; case 4: $nama = 'Kamis'; break; case 5: $nama = 'Jumat'; break; case 6: $nama = 'Sabtu'; break; case 7: $nama = 'Minggu'; break; default: die('nomor hari hanya dari 1 sampai 7'); echo 'Nama hari : ', $nama; atau <? echo "PROGRAM NAMA HARI\n"; echo "=================\n"; echo "Nomor hari : "; $nomor = fgets(stdin); switch ($nomor) { case 1: echo 'Senin'; break; case 2: echo 'Selasa'; break; case 3: echo 'Rabu'; break; case 4: echo 'Kamis'; break; case 5: echo 'Jumat'; break; case 6: echo 'Sabtu'; break; case 7: echo 'Minggu'; break; default: echo 'Nomor hari hanya dari 1 sampai 7'; 33

Soal 12: Persamaan Kuadrat Buat program untuk mencari penyelesaian persamaan kuadrat berikut: 2 ax bx c 0, dengan nilai koefisien a, b dan c diinputkan Petunjuk: Gunakan rumus abc berikut: b D x1,2 dimana D b 2 4ac (Diskriminan) 2a Untuk akar kuadrat ( ) gunakan perintah sqrt (square root) Penjelasan: Soal ini sebenarnya tidak cocok buat orang yang ga suka pelajaran Matematika, apalagi buat yang tidak banyak mendapatkan pelajaran tersebut waktu sekolah. Bagi sebagian orang istilah persamaan kuadrat mungkin sangatlah asing. Sekilas saja, persamaan kuadrat adalah suatu persamaan polinomial (apa lagi ini??) dengan derajat (pangkat) tertingginya adalah 2 (dua) atau sering disebut berorde dua. Sekedar tambahan pengetahuan, polinomial orde satu dinamakan persamaan linier (linear). Bentuk umum dari persamaan kuadrat adalah: 2 ax bx c 0, dengan a 0 Huruf-huruf a, b dan c dalam persamaan tersebut dinamakan sebagai koefisien. Koefisien a dinamakan sebagai koefisien kuadrat, b dinamakan sebagai koefisien linier dan c dinamakan koefisien konstan atau disebut juga suku bebas. Untuk menjadi suatu persamaan kuadrat, nilai a harus tidak sama dengan nol, karena jika a bernilai nol maka persamaan tersebut menjadi persamaan linier. Beberapa contoh persamaan kuadrat adalah: Persamaan Nilai a Nilai b Nilai c 2 x 2x 1 0 1 2 1 2x 2 16x 0 2-16 0 3x 2 4x 9 0-3 4 9 5x 2 4 0 5 0-4 10x 2 0 10 0 0 Nah, penyelesaian dari persamaan kuadrat adalah berupa nilai-nilai yang mungkin untuk variabel x sedemikian sehingga persamaan tersebut bernilai benar. Artinya jika nilai penyelesaian menggantikan setiap variabel x pada persamaan tersebut maka ekspresi yang di sebelah (ruas) kiri tanda = (sama dengan) akan bernilai sama dengan nilai yang ada di sebelah (ruas) kanan, yaitu nol. 34

2 Contohnya gini lho, misalkan ada persamaan kuadrat berikut: x 2x 1 0, jika beberapa nilai kita cobakan sebagai nilai x sbb: Nilai x Proses Kesimpulan 2 x 2x 1 0 2 1 2 x 1 2 2 2 2.2 1 0 4 4 1 0 1 0 2x 1 0 2.1 1 0 1 2 1 0 0 0 Bukan Penyelesaian Penyelesaian Dari hitung-hitungan di atas (kolom Proses) dapat dilihat bahwa nilai 2 jika dimasukkan sebagai nilai x hasilnya tidak cocok, sehingga nilai 2 bukanlah penyelesaian dari persamaan di atas. Sedangkan nilai 1 ternyata cocok jika dimasukkan sebagai nilai x, sehingga nilai 2 adalah penyelesaian dari persamaan tersebut. Sebuah persamaan kuadrat maksimal memiliki dua buah penyelesaian. Dilihat dari banyak penyelesaiannya, persamaan kuadrat dibedakan menjadi tiga kasus, yaitu: 1. tidak memiliki penyelesaian, artinya tidak ada satupun bilangan nyata yang cocok sebagai nilai x. 2. hanya memiliki satu penyelesaian. 3. memiliki dua buah penyelesaian. Untuk selanjutnya dapat dianggap setiap persamaan kuadrat memiliki dua buah penyelesaian, yaitu x 1 dan x 2, hanya saja nilai penyelesaian tersebut bisa berupa bilangan imajiner (kasus pertama) atau bisa juga keduanya sama nilainya (kasus kedua). Nilai x 1 dan x 2 tersebut dapat dicari menggunakan rumus abc berikut: x 1 2 b b 4ac dan 2a x 2 b 2 b 4ac 2a dimana nilai b 2 4ac sering disebut Diskriminan atau disingkat D. Dengan melihat rumus di atas maka dapat diambil kesimpulan bahwa: 1. Nilai a tidak boleh sama dengan nol karena jika nol maka akan terjadi pembagian dengan nol 2. Jika nilai Diskriminan negatif (kurang dari nol) maka nilai x 1 dan x 2 berupa bilangan imajiner karena akar kuadrat dari bilangan negatif adalah bilangan imajiner, sehingga persamaan tidak memiliki penyelesaian bilangan nyata 3. Jika nilai Diskriminan sama dengan nol maka nilai x 1 dan x 2 sama, sehingga dapat dianggap hanya ada satu penyelesaian 4. Jika nilai Diskriminan lebih besar dari nol maka nilai x 1 dan x 2 berbeda, sehingga terdapat dua penyelesaian 35

Demikian tentang persamaan kuadrat. Sekarang kembali ke persoalan. Berikut ini langkah-langkah penyelesaian soal di atas: 1. Output yang akan dihasilkan adalah penyelesaian persamaan kuadrat, yang direpresentasikan dengan lambang x 1 dan x 2 2. Untuk mencari output tersebut diperlukan persamaan kuadratnya, yang diwakili oleh koefisien a, b dan c, dan untuk tahu ada tidaknya output diperlukan nilai diskriminan 3. Nilai koefisien a, b dan c tidak disebutkan dalam soal, sedangkan nilai diskriminan dapat dicari dari ketiga nilai koefisien tersebut 4. Nilai koefisien a, b dan c harus diinputkan, diskriminan tidak 5. Rumus pencarian menggunakan rumus abc seperti tertera di soal 6. Variabel yang terlibat adalah penyelesaian x 1 dan x 2, koefisien a, b dan c serta diskriminan Untuk nama variabel supaya singkat saya gunakan nama x1 dan x2 untuk nilai penyelesaian, nama a, b dan c untuk koefisien dan D untuk diskriminan. Sekali lagi tahapan dalam program seperti biasa adalah INPUT, PROSES dan OUTPUT. Bagian INPUT-nya adalah berupa input untuk ketiga koefisien, sbb: $a = fgets(stdin); $b = fgets(stdin); $c = fgets(stdin); Setelah melakukan input kemudian masuk ke dalam PROSES, yang terdiri dari menghitung besarnya diskriminan dan kedua penyelesaian. Untuk menghitung diskriminan kodenya adalah: $D = $b * $b 4 * $a * $c; Sedangkan untuk menghitung kedua penyelesaian adalah: $x1 = (-$b + sqrt($d)) / (2 * $a); $x2 = (-$b - sqrt($d)) / (2 * $a); Setelah melakukan proses perhitungan dan ditemukan hasilnya maka masuk ke tahap OUTPUT, yaitu untuk menampilkan hasil pencarian kedua penyelesaian. Kode programnya adalah sbb: echo $x1; echo $x2; Sehingga jika digabungkan akan menjadi sbb: $a = fgets(stdin); $b = fgets(stdin); 36

$c = fgets(stdin); $D = $b * $b 4 * $a * $c; $x1 = (-$b + sqrt($d)) / (2 * $a); $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x1; echo $x2; Lebih lanjut, program di atas masih perlu dimodifikasi untuk mengantisipasi jika user memasukkan nilai nol untuk koefisien a. Seperti yang telah disebutkan, sebagai persamaan kuadrat maka koefisien kuadrat a tidak boleh bernilai nol. Sehingga jika user memasukkan nilai nol untuk a, maka tidak perlu melakukan proses perhitungan maupun output. Dengan kata lain proses perhitungan dan output hanya akan dilakukan jika nilai a tidak sama dengan nol. Berikut kode programnya: if ($a!= 0) { $D = $b * $b 4 * $a * $c; $x1 = (-$b + sqrt($d)) / (2 * $a); $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x1; echo $x2; Selainnya itu, jika user memasukkan nol untuk nilai a maka perlu diberi peringatan supaya dia tahu kalau melakukan kesalahan. Dengan demikian potongan kode program di atas perlu ditambah kode berikut: else echo ' Koefisien a tidak boleh nol'; Setelah menghitung dan mendapatkan nilai diskriminan, perlu diingat juga bahwa proses selanjutnya dan penulisan output hanya akan dilakukan jika diskriminan tidak negatif. Dengan kata lain proses perhitungan x1 dan x2 hanya akan dilakukan jika nilai diskriminan D nilainya nol ke atas. Jika diimplementasikan ke kode program maka bentuk di atas akan menjadi konstruksi nested if sbb: if ($a!= 0) { $D = $b * $b 4 * $a * $c; if ($D >= 0) { $x1 = (-$b + sqrt($d)) / (2 * $a); $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x1; echo $x2; else echo ' Tidak memiliki penyelesaian'; else echo ' Koefisien a tidak boleh nol'; Ingat bahwa bentuk proses dan output yang lebih dari satu dan berurutan seperti potongan kode berikut (proses, proses, output, output): 37

$x1 = (-$b + sqrt($d)) / (2 * $a); $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x1; echo $x2; Asalkan proses-proses yang di bawah tidak tergantung pada proses-proses yang ada di atasnya, maka bentuk tersebut dapat diubah menjadi bentuk berikut (proses, output, proses, output): $x1 = (-$b + sqrt($d)) / (2 * $a); echo $x1; $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x2; Sehingga konstruksi nested if di atas dapat diubah menjadi sbb: if ($a!= 0) { $D = $b * $b 4 * $a * $c; if ($D >= 0) { $x1 = (-$b + sqrt($d)) / (2 * $a); echo $x1; $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x2; else echo ' Tidak memiliki penyelesaian'; else echo ' Koefisien a tidak boleh nol'; Nah, jika sudah pada bentuk ini maka analisa lanjut dapat kita lakukan. Seperti yang sudah dijelaskan di atas, penyelesaian akan berjumlah dua hanya jika nilai diskriminan lebih besar dari nol. Jika nilai diskriminan sama dengan nol maka kedua penyelesaian akan bernilai sama atau dapat dianggap hanya ada satu penyelesaian saja. Artinya jika diskriminan sama dengan nol maka cukup menghitung x1 saja dan tidak usah menghitung x2. Dengan kalimat lain, nilai x2 hanya akan dihitung dan ditampilkan jika nilai diskriminan D lebih besar dari nol. Kodenya adalah sebagai berikut: if ($D > 0) { $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x2; Sehingga bentuk konstruksi nested if di atas akan menjadi satu tingkat lebih dalam lagi dan hasilnya adalah: if ($a!= 0) { $D = $b * $b 4 * $a * $c; if ($D >= 0) { $x1 = (-$b + sqrt($d)) / (2 * $a); echo $x1; 38

if ($D > 0) { $x2 = (-$b - sqrt($d)) / (2 * $a); echo $x2; else echo ' Tidak memiliki penyelesaian'; else echo ' Koefisien a tidak boleh nol'; Selengkapnya dapat dilihat pada jawaban di bawah ini. Jawab: PENYELESAIAN PERSAMAAN KUADRAT ============================== <? echo 'Masukkan nilai a : '; $a = fgets(stdin); echo 'Masukkan nilai b : '; $b = fgets(stdin); echo 'Masukkan nilai c : '; $c = fgets(stdin); if ($a!= 0) { $D = $b * $b 4 * $a * $c; if ($D >= 0) { $x1 = (-$b + sqrt($d)) / (2 * $a); echo "Nilai x1 : ", $x1, "\n"; if ($D > 0) { $x2 = (-$b - sqrt($d)) / (2 * $a); echo "Nilai x2 : ", $x2; else echo 'Tidak memiliki penyelesaian'; else echo 'Koefisien a tidak boleh nol'; 39

Soal 13: Konversi Suhu Buat program untuk melakukan konversi suhu dari Celcius ke Kelvin, Fahrenheit, Reaumur, Newton dan Delisle sekaligus Rumusnya: o K o o F o C 273,15 C 1,8 32 o R o C 0,8 33 o N o C 100 o o D ( 100 C) 1,5 Penjelasan: Ini soal yang sederhana, lebih sederhana dari soal sebelumnya. Jika ada yang bilang kalo soal ini susah karena ga pernah belajar soal IPA atau tentang suhu, itu cuman alasan yang dibuat-buat aja. Rumusnya kan dituliskan di soal. Jadi untuk bikin programnya orang ga perlu tahu secara detail apa itu Celcius, apa itu Kelvin, dll. Yang perlu diketahui hanyalah cara bikin programnya saja. Jawaban soal di atas memang proses dan outputnya banyak banget. Namun demikian inputnya cuman satu. Berikut ini langkah-langkah penyelesaiannya: 1. Output yang akan dihasilkan adalah suhu dalam satuan Kelvin, Fahrenheit, Reaumur, Newton dan Delisle 2. Sesuai dengan soal, yang dibutuhkan hanyalah nilai suhu dalam satuan Celcius 3. Nilai suhu Celcius belum tertera di soal 4. Jadi suhu Celcius harus diinputkan 5. Rumusnya sudah ada di soal 6. Variabel yang terlibat adalah suhu Celcius, suhu Kelvin, suhu Fahrenheit, suhu Reaumur, suhu Newton dan suhu Delisle Untuk menyingkat, nama variabelnya adalah C, K, F, R, N dan D diambil dari huruf awal satuan yang dipakai. Untuk input dan output tidak perlu saya terangkan dengan detail. Hanya saja untuk output, user interface menjadi sangat penting supaya user tahu bilangan-bilangan yang bermunculan di layar itu maksudnya apa dan dapat membedakan mana yang output Kelvin, mana yang output Fahrenheit, dan mana output yang lainnya. Untuk proses, berikut tabel yang berisi rumus dan padanannya dalam PHP: Rumus Matematis Bahasa PHP o K o C 273,15 $K = $C + 273.15; o F o C 1,8 32 $F = $C * 1.8 + 32; $F = 1.8 * $C + 32; o R o C 0,8 $R = $C * 0.8; $R = 0.8 * $C; 33 N o C 100 $N = $C * 33 / 100; $N = 0.33 * $C; o o D ( 100 C) 1,5 $D = (100 $C) * 1.5; 40