Beberapa waktu yang lalu, temanku bertanya tentang bagaimana membuat algoritma menghitung segitiga. Jadi, intinya sebuah program itu akan menilai apakah sebuah segitiga itu sama sisi, siku-siku, atau segitiga sembarang dengan berbekal tiga input masukan yang diberikan. Masalah menggunakan bahasa pemograman apa itu tidak menjadi soal.
Buat program untuk menentukan segitiga dengan data yang diinput. Ketentuan:
A. Data diinput untuk menentukan apakah segitiga itu sama sisi, siku-siku, sama kaki, atau sembarang. Program akan menjawabnya.
B. Buat program dengan bahasa apa saja dengan data segitiga yang diinput.
Awalnya aku berpikir bahwa soal tersebut sangat sederhana, hingga kemudian aku pun menjadi pusing dibuatnya.
Pertama sekali yang terlintas dalam pikiranku adalah bahwa jika semua sisi segitiga yang diinput adalah sama maka itu berarti segitiga sama sisi, kemudian jika dua sisi saja yang sama maka itu sama kaki. Waktu aku berpikir tentang bagaimana menentukan siku-siku, aku jadi kebingungan apakah harus menggunakan aturan Phytagoras?
Ternyata ada satu shortcut singkat dalam algoritma itu yang baru terpikirkan olehku, setelah membaca artikel tentang hukum kosinus dan artikel tentang sudut segitiga dari Wikipedia.
Setelah mengetahui karakteristik sebuah segitiga melalui sudutnya, untuk menentukan besar sudut dari segitiga sembarang kita bisa menggunakan rumus hukum kosinus seperti di bawah ini :
berbekal rumus hukum kosinus tersebut di atas, kita dapat membuat satu fungsi di dalam pemograman PHP sebagai berikut:
1 2 3 4 5 6 7 8 9 | < ?php function cosinus($c, $a, $b) { $sudutRadian = acos((pow($a,2) + pow($b,2) - pow($c,2)) / (2 * $a * $b)); return rad2deg($sudutRadian); } ?> |
Adapun algoritma untuk menentukan apakah sebuah segitiga itu sama sisi, siku-siku, sama kaki, atau sembarang bisa dilihat seperti program di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 | < ?php $cos_a = cosinus($a, $b, $c); $cos_b = cosinus($b, $a, $c); $cos_c = cosinus($c, $a, $b); if (is_nan($cos_a) or is_nan($cos_b) or is_nan($cos_c)) { echo "ada kesalahan dalam sudut segitiga"; } elseif ($cos_a == 60 and $cos_b == 60 and $cos_c == 60) { echo "segitiga sama sisi"; } elseif ($cos_a == 90 or $cos_b == 90 or $cos_c == 90) { echo "segitiga siku-siku"; } elseif ($cos_a == $cos_b or $cos_a == $cos_c or $cos_b == $cos_c) { echo "segitiga sama sisi"; } else { echo "segitiga sembarang"; } ?> |
Program di atas akan menilai apakah semua sudut setiga bernilai 60, jika iya dipastikan bahwa itu adalah sebuah segitiga sama sisi.
Kemudian program akan melanjutkan apakah ada salah satu sudut yang bernilai 90, jika ada maka dipastikan itu adalah sebuah segitiga siku-siku.
Kemudian program akan cek lagi apakah ada dua sudut yang sama dalam segitiga, jika ada berarti segitiga sama sisi dan jika semua uraian di atas tidak ada yang benar maka katakan saja bahwa itu sebuah segitiga sembarang.
Program lengkap PHP-nya bisa dilihat seperti di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Menghitung Segitiga</title> </head> <body> <center> <h1>Menghitung Segitiga</h1> <form method="post"> <table border=0 cellpadding=2 cellspacing=0> <tr> <td width=100>Sisi A</td><td width=100><input type="text" size="5" name="a" /></td> </tr> <tr> <td>Sisi B</td><td><input type="text" size="5" name="b" /></td> </tr> <tr> <td>Sisi C</td><td><input type="text" size="5" name="c" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="HITUNG" /></td> </tr> <tr> <td colspan="2"> < ?php $a = (int)$_POST['a']; $b = (int)$_POST['b']; $c = (int)$_POST['c']; /* model perhitungan akan menggunakan rumus dari cosinus dengan teori bahwa untuk setiap segitiga sama sisi maka sudut yang terbentuk adalah 60 derajat untuk setiap sisi dan untuk siku-siku maka ada sudut dengan nilai 90 derajat */ function cos_sudut($c,$a,$b) { $sudutRadian=acos((pow($a,2) + pow($b,2) - pow($c,2)) / (2 * $a * $b)); return rad2deg($sudutRadian); } if(!isset($a) or !isset($b) or !isset($c) or empty($a) or empty($b) or empty($c)) { echo "Belum ada masukkan input"; } else { if($a != 0 or $b != 0 or $c != 0) { $cos_a = cos_sudut($a,$b,$c); $cos_b = cos_sudut($b,$c,$a); $cos_c = cos_sudut($c,$a,$b); // echo "Sudut A = $cos_a | Sudut B = $cos_b | Sudut C = $cos_c <br />"; if (is_nan($cos_a) or is_nan($cos_b) or is_nan($cos_c)) { echo "ada kesalahan dalam sudut segitiga"; } elseif ($cos_a == 60 and $cos_b == 60 and $cos_c == 60) { echo "segitiga sama sisi"; } elseif ($cos_a == 90 or $cos_b == 90 or $cos_c == 90) { echo "segitiga siku-siku"; } elseif ($cos_a == $cos_b or $cos_a == $cos_c or $cos_b == $cos_c) { echo "segitiga sama sisi"; } else { echo "segitiga sembarang"; } } else { echo "tidak boleh ada masukan nol!"; } } ?> </td> </tr> </table> </form> </center> </body> </html> |
Ini adalah tampilan programnya: