Algoritma Matematika
Posted by gunawan on Monday, June 14, 2010
Apakah Anda sering kesulitan untuk
menyelesaikan permasalahan
matematika yang rumit atau
yang membutuhkan kesabaran? Kalau hal
itu terjadi pada Anda, Anda perlu tahu
bahwa kita dapat menggunakan komputer
untuk membantu mempermudah
pekerjaan kita yang satu ini. Algoritma
pemrograman dapat dimanfaatkan untuk
memecahkan berbagai macam masalah
matematika, kita menyebutnya dengan
algoritma matematika. Anda perlu tahu
bahwa sangat banyak fungsi matematika
yang dapat implementasikan dalam
bahasa pemrograman, salah satu bahasa
pemrograman yang sering digunakan
untuk menulis algoritma matematika yaitu
bahasa pemrograman C.
Beberapa contoh algoritma matematika
yang dapat ditulis dalam bahasa C misalnya
algoritma bilangan prima, fibbonaci, segitiga
pascal, dan penjumlahan polinom.
Sebenarnya masih banyak lagi persoalan
dalam matematika yang dapat dibuat
algoritmanya, namun dalam artikel ini saya
akan membahas algoritma untuk
memecahkan masalah matematika tersebut
dengan menggunakan bahasa C. Algoritma
yang dapat digunakan untuk menyelesaikan
persoalan matematika seperti di atas
sangatlah beragam jenisnya, namun tentu
saja tidak semuanya dapat saya bahas
dalam kesempatan ini.
Source code yang dibahas di dalam
artikel ini tidak bersifat absolut sehingga
bisa Anda kembangkan menurut gaya Anda
sendiri. Tidak tertutup kemungkinan
nantinya Anda dapat membuat sendiri
algoritma matematika yang lain setelah
Anda memahami contoh yang akan kita
bahas. Source code program yang ditulis di
sini tidak ditujukan untuk pemrograman
yang optimal, namun sengaja dibuat
supaya algoritma dapat lebih mudah untuk
dimengerti. Penulis menggunakan compiler
GCC untuk menjalankan algoritma yang
telah dibuat. Anda tidak perlu repot-repot
untuk mencari compiler C yang satu ini,
karena GCC sudah terdapat dalam paket
instalasi Linux Anda.
Algoritma berikut ini akan kita buat
dalam bentuk suatu fungsi sehingga untuk
menggunakannya fungsi tersebut dapat
dipanggil dari fungsi main. Tujuan kita
membuat algoritma dalam bentuk suatu
fungsi yaitu supaya program yang kita
buat tidak terlihat rumit, hal itu
disebabkan karena program terbagi atas
modul-modul terpisah yang sederhana dan
mudah untuk dipahami. Oleh karena C
merupakan bahasa yang case sensitive
maka Anda perlu ekstra hati-hati untuk
tidak salah menuliskan sintaks program
Anda.
Algoritma bilangan prima
Marilah kita awali dengan algoritma yang
pertama yaitu algoritma untuk membentuk
fungsi yang dapat memeriksa apakah
suatu angka merupakan bilangan prima
atau bukan. Kita tahu bahwa bilangan
prima merupakan bilangan yang hanya
dapat habis dibagi oleh bilangan 1 dan
oleh bilangan itu sendiri. Kita akan
menyusun algoritma untuk menampilkan
bilangan-bilangan tersebut pada terminal.
Langkah pertama yang perlu kita lakukan
yaitu membuat suatu fungsi yang dapat
melaksanakan pengecekan terhadap suatu
bilangan.
Cara kerja fungsi yang akan kita buat
yaitu dengan memeriksa parameter yang
telah ditransfer ke dalam fungsi. Kita
namakan fungsi pertama kita ini is_prima.
Fungsi tersebut akan mengecek apakah
bilangan tersebut hanya habis dibagi oleh
bilangan 1 dan oleh bilangan itu sendiri
ataukah juga dapat habis dibagi oleh
bilangan lain. Fungsi is_prima ini dipanggil
oleh fungsi main dan akan mengembalikan
nilai 1 (true) apabila bilangan yang telah
ditransfer ke dalam fungsi merupakan
bilangan prima dan akan mengembalikan
nilai 0 (false) apabila bilangan tersebut
bukan merupakan bilangan prima. Nilai 1
dan 0 kita sepakati untuk menunjukkan nilai
true atau false, yang merupakan tanda
bahwa bilangan tersebut merupakan
bilangan prima atau bukan.
/* Source code fungsi is_prima */
int is_prima(int N)
{
int x, flag;
switch(N)
{
case 1: flag=0; break;
case 2: flag=1; break;
default:
flag=1;
for(x=2; x<=N-1; x++)
{
if((N%x)==0)
{
flag=0;
break;
}
}
}
return(flag);
}
Penjelasan:
Nilai bilangan yang akan diuji diambil oleh
fungsi is_prima untuk dilakukan
pengecekan. Nilai tersebut diterima oleh
fungsi is_prima dan disimpan dalam
variabel N yang bertipe integer. Pertamatama
algoritma ini akan memeriksa nilai N
menggunakan perintah switch case. Jika
nilai N adalah 1 maka variabel flag
langsung akan bernilai 0 atau false hal
tersebut dikarenakan 1 bukanlah bilangan
prima. Jika nilai N bernilai dua maka
variabel flag akan diisi dengan 1 atau true
karena 2 merupakan bilangan prima yang
pertama. Tetapi jika N itu tidak bernilai 1
maupun 2 maka pada baris selanjutnya
program akan menguji apakah N habis![](file:///C:/DOCUME%7E1/admin/LOCALS%7E1/Temp/moz-screenshot-10.jpg)
dibagi oleh bilangan di antara 1 sampai bilangan itu sendiri. Sebelum pengujian ini kita telah mengisi nilai awal variabel flag bernilai 1 (true). Apabila dalam pengujian ditemukan bahwa bilangan itu bisa dibagi oleh bilangan diantara 1 sampai dengan bilangan itu sendiri maka variabel flag akan bernilai 0 (false) dan pengujian akan langsung berhenti tanpa perlu melanjutkan ke pengujian berikutnya, untuk itu kita menggunakan perintah break. Pengujian dalam program akan berhenti dikarenakan perintah ini. Kita tidak perlu menguji lagi apakah N habis dibagi bilangan
selanjutnya. Nilai akhir dari variabel flag menunjukkan hasil pengujian. Untuk mengembalikan nilai 1 (true) atau 0 (false)
dalam variabel flag yang menunjukkan apakah bilangan tersebut merupakan bilangan prima atau bukan maka kita dapat
menggunakan perintah berikut:
return(flag);
Selanjutnya dalam fungsi main bila kita
bermaksud untuk menampilkan bilangan
prima dari 1-20 kita dapat memanggil
fungsi is_prima yang telah dibuat dengan
cara sebagai berikut:
int main()
{
int i, nilai;
for(i=1; i<=20; i++)
{
nilai=is_prima(i);
if(nilai==1) printf(“%d “, i);
}
printf(“\n”);
return 0;
}
Cukup mudah bukan? Fungsi main ini memanggil fungsi is_prima untuk mengetahui apakah suatu bilangan yang akan dicek merupakan bilangan prima atau bukan. Lalu isi variabel flag yang dihasilkan oleh fungsi is_prima dikembalikan oleh fungsi is_prima ke dalam variabel nilai. Kita dapat mengetahui bilangan tersebut prima atau bukan dengan melihat isi dari variabel nilai. Dalam hal ini saya misalkan variabel nilai sebagai variabel untuk menampung nilai yang dikembalikan oleh fungsi
is_prima. Jika nilai yang dikembalikan oleh fungsi
is_prima bernilai 1, maka bilangan yang diuji akan dicetak, sehingga program hanya menampilkan bilangan prima antara
dari 1 sampai 20 sesuai dengan keinginan kita. Anda sudah selesai membuat sebuah fungsi is_prima yang dapat dipanggil dan pakai sewaktu-waktu dalam program utama Anda. Saya yakin tanpa kesulitan Anda telah mengerti algoritma bilangan prima di atas. Kita telah selesai membuatalgoritma bilangan prima dan akan melanjutkan ke algoritma fibonacci. Algoritma Fibonacci Sekarang kita masuk ke pokok pembahasan yang kedua yaitu algoritma
untuk menghasilkan deret fibbonaci. Berikut ini adalah beberapa bilangan
fibbonaci yang pertama, yaitu 1 1 2 3 5 8 13 dan seterusnya. Setiap bilangan
dalam deret tersebut merupakan hasil penjumlahan dari dua bilangan
sebelumnya, deret dimulai dari dua buah bilangan 1. Saya mengasumsikan Anda telah mengerti hubungan masing-masing bilangan di dalam deret tersebut. Setelah Anda bisa membuat algoritma bilangan
prima, tentu saja untuk membuat
algoritma yang menghasilkan bilangan
fibbonaci menggunakan bahasa C
bukanlah suatu hal yang sulit bagi Anda.
Namun karena kita akan mulai mencoba
membuat algoritma program yang bersifat
rekursif, maka Anda perlu memahami
proses rekursif yang terdapat dalam fungsi
ini. Saya akan menguraikan langkahlangkah
untuk membuat algoritma
tersebut. Fungsi yang akan kita buat
seperti biasanya akan dipanggil melalui
fungsi main dengan disertai parameter
yang serupa dengan algoritma program
kita sebelumnya.
/* Source code fungsi fibonacci */
long int fib(int N)
{
if(N==0||N==1) return n;
else return fib(N-2)+fib(N-1);
}
Fungsi fibbonaci yang akan kita buat
merupakan fungsi yang bersifat rekursif
dikarenakan fungsi tersebut dalam
menjalankan prosesnya membutuhkan
pemanggilan fungsi yang seperti dirinya
sendiri, karena dalam bahasa C sebuah
fungsi diperbolehkan untuk memanggil
dirinya sendiri maka kita akan memanfaat-
kan hal ini. Sekilas tampak bahwa fungsi ini
lebih singkat dari fungsi sebelumnya namun
sesungguhnya fungsi ini melaksanakan
prosedur yang cukup panjang. Mari kita
telusuri jalannya algoritma tersebut!
Bila N bernilai 0 atau 1 maka fungsi
akan mengembalikan nilai N itu sendiri,
namun apabila variabel N pada fungsi
bernilai lebih dari 1 (misalkan N) maka
fungsi akan memanggil fungsi fib(N-2) dan
fungsi fib(N-1), hasil yang dikembalikan
oleh fungsi fib(N-2) akan ditambahkan
dengan hasil yang dikembalikan oleh
fungsi fib(N-1). Fungsi tersebut pada
akhirnya akan mengembalikan nilai:
f(N)=f(N-2)+f(N-1);
sedangkan
f(0)=0;
f(1)=1;
Agar lebih jelasnya, Anda dapat
memperhatikan contoh berikut. Misalkan
kita mencari bilangan ke-4 dari deret
fibonacci maka jalannya fungsi:
1. f(N) = f(N-2) + f(N-1)
2. f(4) = f(2) + f(3)
3. f(4) = {f(0) + f(1)} + {f(1) + f(2)}
4. f(4) = {0 + 1} + {1 + [f(0) + f(1)]}
5. f(4) = {0 + 1} + {1 + [0 + 1]}
6. f(4) = 3
Maka deret fibonacci yang ke-4 bernilai 3.
1 1 2 3
^
Seperti pada fungsi prima, kita juga
memanggil fungsi fib melalui fungsi main.
Untuk menampilkan 8 bilangan pertama
dari deret fibonacci maka dalam fungsi
main fungsi fibo dapat dipanggil dengan
cara:
int main()
{
int n=10, i;
clrscr();
for(i=1; i<=n; i++) printf (“%ld “,
fib(i));
getch();
return 0;
}
Maka program akan mencetak tampilan
seperti di bawah ini:
1 1 2 3 5 8 13 21 34
Dengan ini telah selesailah algoritma
fibonacci Anda. Saya yakin apabila Anda
menyimak dengan baik, Anda dapat
mengerti bagaimana jalannya program
sehingga bilangan-bilangan tersebut dapat
tampil pada layar monitor Anda.
Algoritma segitiga Pascal
Algoritma ketiga berikut ini akan
menampilkan baris-baris yang membentuk
segitiga pascal yang seringkali diperlukan
dalam perhitungan matematika. Cara kerja
algoritma tersebut yaitu dengan menginputkan
jumlah baris dalam segitiga
Pascal yang ingin ditampilkan. akan
diproses oleh fungsi ini sekaligus menampilkannya
di layar. Untuk menghasilkan
segitiga pascal kali ini kita akan sekalian
menggunakan algoritma faktorial dan
kombinasi. Untuk melaksanakan proses
faktorial nantinya kita dapat dengan
mudah memanggil fungsi fact, sedangkan
untuk melaksanakan fungsi kombinasi,
kita dapat memanggil fungsi komb. Kedua
fungsi tersebut dapat digunakan untuk
menampilkan baris-baris segitiga Pascal di
terminal Linux Anda. Fungsi faktorial
tersebut sebagai berikut:
unsigned long int fact(int f)
{
if(f<2) return 1; else return f*fact(f-1);
}
Seperti fungsi rekursif yang terdapat
pada algoritma fibonacci, fungsi ini
memfaktorialkan variabel f. Proses yang
terjadi dalam fungsi fact bila diuraikan
adalah sbb:
1. fact(f)=f*fact(f-1)
2. fact(4)=4*fact(3)
3. fact(4)=4*{3*fact(2)}
4. fact(4)=4*{3*[2*1]}
5. fact(4)=24
Kemudian kita perlu membuat fungsi
untuk perhitungan kombinasi komb(n,r).
Fungsi ini sederhana dan tidak sulit, hanya
mengembalikan nilai perhitungan kombinasi
dengan memanfaatkan fungsi faktorial
sebelumnya. Kita hanya perlu mengembalikan
nilai kombinasi menggunakan rumus
kombinasi C(n,r) = n! / (r! * (n-r)!).
int komb(int n, int r)
{
return(fact(n)/(fact(r)*fact(n-r)));
![](file:///C:/DOCUME%7E1/admin/LOCALS%7E1/Temp/moz-screenshot-10.jpg)
![](file:///C:/DOCUME%7E1/admin/LOCALS%7E1/Temp/moz-screenshot-9.jpg)
selanjutnya. Nilai akhir dari variabel flag menunjukkan hasil pengujian. Untuk mengembalikan nilai 1 (true) atau 0 (false)
dalam variabel flag yang menunjukkan apakah bilangan tersebut merupakan bilangan prima atau bukan maka kita dapat
menggunakan perintah berikut:
return(flag);
Selanjutnya dalam fungsi main bila kita
bermaksud untuk menampilkan bilangan
prima dari 1-20 kita dapat memanggil
fungsi is_prima yang telah dibuat dengan
cara sebagai berikut:
int main()
{
int i, nilai;
for(i=1; i<=20; i++)
{
nilai=is_prima(i);
if(nilai==1) printf(“%d “, i);
}
printf(“\n”);
return 0;
}
Cukup mudah bukan? Fungsi main ini memanggil fungsi is_prima untuk mengetahui apakah suatu bilangan yang akan dicek merupakan bilangan prima atau bukan. Lalu isi variabel flag yang dihasilkan oleh fungsi is_prima dikembalikan oleh fungsi is_prima ke dalam variabel nilai. Kita dapat mengetahui bilangan tersebut prima atau bukan dengan melihat isi dari variabel nilai. Dalam hal ini saya misalkan variabel nilai sebagai variabel untuk menampung nilai yang dikembalikan oleh fungsi
is_prima. Jika nilai yang dikembalikan oleh fungsi
is_prima bernilai 1, maka bilangan yang diuji akan dicetak, sehingga program hanya menampilkan bilangan prima antara
dari 1 sampai 20 sesuai dengan keinginan kita. Anda sudah selesai membuat sebuah fungsi is_prima yang dapat dipanggil dan pakai sewaktu-waktu dalam program utama Anda. Saya yakin tanpa kesulitan Anda telah mengerti algoritma bilangan prima di atas. Kita telah selesai membuatalgoritma bilangan prima dan akan melanjutkan ke algoritma fibonacci. Algoritma Fibonacci Sekarang kita masuk ke pokok pembahasan yang kedua yaitu algoritma
untuk menghasilkan deret fibbonaci. Berikut ini adalah beberapa bilangan
fibbonaci yang pertama, yaitu 1 1 2 3 5 8 13 dan seterusnya. Setiap bilangan
dalam deret tersebut merupakan hasil penjumlahan dari dua bilangan
sebelumnya, deret dimulai dari dua buah bilangan 1. Saya mengasumsikan Anda telah mengerti hubungan masing-masing bilangan di dalam deret tersebut. Setelah Anda bisa membuat algoritma bilangan
prima, tentu saja untuk membuat
algoritma yang menghasilkan bilangan
fibbonaci menggunakan bahasa C
bukanlah suatu hal yang sulit bagi Anda.
Namun karena kita akan mulai mencoba
membuat algoritma program yang bersifat
rekursif, maka Anda perlu memahami
proses rekursif yang terdapat dalam fungsi
ini. Saya akan menguraikan langkahlangkah
untuk membuat algoritma
tersebut. Fungsi yang akan kita buat
seperti biasanya akan dipanggil melalui
fungsi main dengan disertai parameter
yang serupa dengan algoritma program
kita sebelumnya.
/* Source code fungsi fibonacci */
long int fib(int N)
{
if(N==0||N==1) return n;
else return fib(N-2)+fib(N-1);
}
Fungsi fibbonaci yang akan kita buat
merupakan fungsi yang bersifat rekursif
dikarenakan fungsi tersebut dalam
menjalankan prosesnya membutuhkan
pemanggilan fungsi yang seperti dirinya
sendiri, karena dalam bahasa C sebuah
fungsi diperbolehkan untuk memanggil
dirinya sendiri maka kita akan memanfaat-
kan hal ini. Sekilas tampak bahwa fungsi ini
lebih singkat dari fungsi sebelumnya namun
sesungguhnya fungsi ini melaksanakan
prosedur yang cukup panjang. Mari kita
telusuri jalannya algoritma tersebut!
Bila N bernilai 0 atau 1 maka fungsi
akan mengembalikan nilai N itu sendiri,
namun apabila variabel N pada fungsi
bernilai lebih dari 1 (misalkan N) maka
fungsi akan memanggil fungsi fib(N-2) dan
fungsi fib(N-1), hasil yang dikembalikan
oleh fungsi fib(N-2) akan ditambahkan
dengan hasil yang dikembalikan oleh
fungsi fib(N-1). Fungsi tersebut pada
akhirnya akan mengembalikan nilai:
f(N)=f(N-2)+f(N-1);
sedangkan
f(0)=0;
f(1)=1;
Agar lebih jelasnya, Anda dapat
memperhatikan contoh berikut. Misalkan
kita mencari bilangan ke-4 dari deret
fibonacci maka jalannya fungsi:
1. f(N) = f(N-2) + f(N-1)
2. f(4) = f(2) + f(3)
3. f(4) = {f(0) + f(1)} + {f(1) + f(2)}
4. f(4) = {0 + 1} + {1 + [f(0) + f(1)]}
5. f(4) = {0 + 1} + {1 + [0 + 1]}
6. f(4) = 3
Maka deret fibonacci yang ke-4 bernilai 3.
1 1 2 3
^
Seperti pada fungsi prima, kita juga
memanggil fungsi fib melalui fungsi main.
Untuk menampilkan 8 bilangan pertama
dari deret fibonacci maka dalam fungsi
main fungsi fibo dapat dipanggil dengan
cara:
int main()
{
int n=10, i;
clrscr();
for(i=1; i<=n; i++) printf (“%ld “,
fib(i));
getch();
return 0;
}
Maka program akan mencetak tampilan
seperti di bawah ini:
1 1 2 3 5 8 13 21 34
Dengan ini telah selesailah algoritma
fibonacci Anda. Saya yakin apabila Anda
menyimak dengan baik, Anda dapat
mengerti bagaimana jalannya program
sehingga bilangan-bilangan tersebut dapat
tampil pada layar monitor Anda.
Algoritma segitiga Pascal
Algoritma ketiga berikut ini akan
menampilkan baris-baris yang membentuk
segitiga pascal yang seringkali diperlukan
dalam perhitungan matematika. Cara kerja
algoritma tersebut yaitu dengan menginputkan
jumlah baris dalam segitiga
Pascal yang ingin ditampilkan. akan
diproses oleh fungsi ini sekaligus menampilkannya
di layar. Untuk menghasilkan
segitiga pascal kali ini kita akan sekalian
menggunakan algoritma faktorial dan
kombinasi. Untuk melaksanakan proses
faktorial nantinya kita dapat dengan
mudah memanggil fungsi fact, sedangkan
untuk melaksanakan fungsi kombinasi,
kita dapat memanggil fungsi komb. Kedua
fungsi tersebut dapat digunakan untuk
menampilkan baris-baris segitiga Pascal di
terminal Linux Anda. Fungsi faktorial
tersebut sebagai berikut:
unsigned long int fact(int f)
{
if(f<2) return 1; else return f*fact(f-1);
}
Seperti fungsi rekursif yang terdapat
pada algoritma fibonacci, fungsi ini
memfaktorialkan variabel f. Proses yang
terjadi dalam fungsi fact bila diuraikan
adalah sbb:
1. fact(f)=f*fact(f-1)
2. fact(4)=4*fact(3)
3. fact(4)=4*{3*fact(2)}
4. fact(4)=4*{3*[2*1]}
5. fact(4)=24
Kemudian kita perlu membuat fungsi
untuk perhitungan kombinasi komb(n,r).
Fungsi ini sederhana dan tidak sulit, hanya
mengembalikan nilai perhitungan kombinasi
dengan memanfaatkan fungsi faktorial
sebelumnya. Kita hanya perlu mengembalikan
nilai kombinasi menggunakan rumus
kombinasi C(n,r) = n! / (r! * (n-r)!).
int komb(int n, int r)
{
return(fact(n)/(fact(r)*fact(n-r)));