Algoritma Menghitung Segitiga

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.

segitiga sama kaki segitiga sembarang

segitiga sama sisi segitiga siku-siku

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:

  • samf

    $aa = $a*$a;
    $bb = $b*$b;
    $cc = $c*$c;

    if ($a == $b and $b == $c or $c == $a) { echo “segitiga sama sisi”; }
    elseif ($a == $b or $b == $c or $c == $a) { echo “segitiga sama kaki”; }
    elseif ($aa == $bb+$cc or $bb == $aa+$cc or $cc == $aa+$bb) { echo “segitiga siku-siku”; }

  • Sangat berguna gan artikelnya..

  • tommy bustomi

    bagaimana kalau dibuat sederhana saja.

    IMHO : untuk menjawab soal yang diberikan kita cukup tahu panjang 3 sisinya saja dengan kata lain mencari sudut bisa diabaikan.

    Algoritmanya :
    1. Masukan data a,b,c (1..3:integer)

    2. Lakukan sort terhadap data (increasing). Untuk ini kita asumsikan saja pakai algoritma atau fungsi sorting sehingga terurut U1, U2, U3 (blackbox)

    3. JIKA nilai urutan ke 3 yaitu U3 adalah lebih kecil dari jumlah nilai U1 + U2 MAKA “dapat disusun menjadi suatu segitiga”, SELAINnya “bukan segitiga”.

    4. JIKA U1=U2=U3 MAKA segi3 adalah “sama sisi”
    JIKA U1=U2 ATAU U2=U3, MAKA segi3 adalah “sama kaki”
    SELAINnya segi3 adalah “segi3 biasa”.

    5. Selesai.

    CMIIW,

    Salam.
    t. bustomi

  • ide yang menarik juga itu bustomi. Hehehehe… Thanks for share

  • tommy bustomi

    oya, untuk segitiga siku-siku, betul juga kalau pakai persamaan pitagoras, jika terpenuhi maka segitiga adalah siku2.

    Untuk algoritma (koment ) diatas jadinya jika U3^2 = U1^2 + U2^2 maka “segitiga siku-siku”

    CMIIW

    have a nice day Baiquni o/