<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Zainuddin Nafarin &#187; Pascal</title>
	<atom:link href="http://www.nafarin.com/tag/pascal/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nafarin.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 20 Jul 2011 20:43:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Menghitung FPB dengan Algoritma Euclidean</title>
		<link>http://www.nafarin.com/menghitung-fpb-dengan-algoritma-euclidean</link>
		<comments>http://www.nafarin.com/menghitung-fpb-dengan-algoritma-euclidean#comments</comments>
		<pubDate>Tue, 20 Apr 2010 12:47:54 +0000</pubDate>
		<dc:creator>Zainuddin Nafarin</dc:creator>
				<category><![CDATA[Algoritma]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[BASIC]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[FPB]]></category>
		<category><![CDATA[GCD]]></category>
		<category><![CDATA[Pascal]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false">http://www.nafarin.com/?p=3</guid>
		<description><![CDATA[Algoritma Euclidean adalah salah satu algoritma tercepat untuk menghitung FPB (Faktor Persekutuan terBesar) / GCD (Greatest Common Divisor). FPB dari 2 angka adalah angka terbesar yang habis membagi 2 angka tersebut. Prinsip dari algoritma Euclidean ini adalah dari kenyataan bahwa FPB dari 2 angka tidak akan berubah jika angka terbesar dikurangi angka terkecil. Sebagai contoh, [...]]]></description>
			<content:encoded><![CDATA[<p>Algoritma Euclidean adalah salah satu algoritma tercepat untuk menghitung FPB (Faktor Persekutuan terBesar) /  GCD (Greatest Common Divisor). FPB dari 2 angka adalah angka terbesar yang habis membagi 2 angka tersebut. Prinsip dari algoritma Euclidean ini adalah dari kenyataan bahwa FPB dari 2 angka tidak akan berubah jika angka terbesar dikurangi angka terkecil. Sebagai contoh, 22 adalah FPB dari 198 dan 110 (198 = 22 x 9; 110 = 22 x 5), 198 &#8211; 110 = 88 dan 110 tetap mempunyai FPB 22. Proses ini bisa terus di-ulang sampai salah satu dari angka tersebut adalah 0, sehingga angka yang lainnya adalah FPB dari 2 angka paling awal. Jika dilihat langkah &#8211; langkahnya sampai selesai :</p>
<p>(198, 110) -&gt; (110, 88) -&gt; (88, 22) -&gt; (22, 0)</p>
<p><strong>Dapat juga dituliskan secara prosedural :</strong><br />
198 = 110 x 1 + 88<br />
110 = 88 x 1 + 22<br />
88 = 22 x 4 + 0</p>
<p>Berdasarkan prosedur di atas, sekarang akan dibuat implementasinya di 4 bahasa pemrograman (C/C++, Assembly, Pascal, dan BASIC). Implementasinya akan berbentuk fungsi FPB dengan input 2 bilangan bulat (integer) 32-bit, dan output juga integer. Berikut ini adalah kode-kode fungsi FPB algoritma Euclidean di 4 bahasa tersebut :</p>
<h2><strong>C/C++ </strong></h2>
<pre class="brush: cpp">int FPB(int a, int b)
{
    if (a &lt; b)
       {int t = a; a = b; b = t;} // Tukar a dan b jika a &lt; b

    int r = 0;

    do
    {
        r = a % b;
        a = b;
        b = r;
    } while (r); // Teruskan loop hanya jika r tidak 0 

    return a;
}
</pre>
<h2><strong>Assembly</strong></h2>
<pre class="brush: asm">FPB PROC
; Fungsi : FPB(a,b)
; Input  : (a,b) -&gt; (eax, ebx)
; Output : FPB -&gt; eax

	pushad              ; Simpan semua register
	cmp	eax, ebx    ; Bandingkan eax dan ebx
	ja	startloop   ; Jika  a &gt; b, langsung ke startloop
	xchg    eax, ebx    ; Jika tidak, tukar isi eax dan ebx
startloop:
	xor	edx, edx    ; edx = 0
	div	ebx         ; eax / edx, sisanya akan disimpan di edx
	cmp	edx, 0      ; Bandingkan edx dan 0
	je	endloop     ; Jika edx = 0, hentikan loop ke endloop
	mov	eax, ebx    ; eax = ebx
	mov	ebx, edx    ; ebx = edx
	jmp	startloop   ; Mulai lagi loop
endloop:
	popad               ; Kembalikan semua register ke asal
	mov eax, ebx        ; Simpan nilai FPB di eax
	ret                 ; Kembali ke pemanggil

FPB ENDP
</pre>
<h2><strong>Pascal</strong></h2>
<pre class="brush: pascal">Function FPB(a, b : Integer) : Integer;

Var t, r : Integer;

Begin
 If (a &lt; b) Then
    Begin
      t := a; a := b; b := t
    End;

 Repeat
    r := a Mod b;
    a := b;
    b := r
 Until r = 0;

 FPB := a;
End;
</pre>
<h2><strong>BASIC</strong></h2>
<pre class="brush: vb">Function FPB(ByVal a As Long, ByVal b As Long) As Long

    Dim t As Long, r As Long

    If a &lt; b Then t = a: a = b: b = t

    Do
        r = a Mod b
        a = b
        b = r
    Loop Until r = 0

    FPB = a

End Function
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nafarin.com/menghitung-fpb-dengan-algoritma-euclidean/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

