Minggu, 29 Mei 2011

Overloading Pada Java

Berikut contoh polymorphisme:

public class Bangun {
    int panjang;
    int lebar;
    int sisi;
   
    public void tampil(int sisi){
        int luas = sisi * sisi;
        System.out.println("Luas Persegi            : " + luas);
    }
   
    public void tampil(int panjang, int lebar){
        int luas = panjang * lebar;
        System.out.println("Luas Persegi Panjang    : " + luas);
    }
}

Perhatikan fungsi tampil yang di tulis tebal. Di sini peran overload akan tampak. Apabila temen - temen memanggil fungsi tampil(int sisi), maka yang akan tampil adalah luas dari persegi dan apabila temen - temen memanggil fungsi tampil(int panjang, int lebar), maka yang akan tampil adalah luas dari persegi panjang

Overriding Pada Java

Karena besok ada kuis nih di kampus, untuk membantu temen - temen yang belum ngerti ane pengen ngasih contoh ovveriding buat temen - temen:

Buat 3 class terlebih dahulu. pada contoh kali ini adalah Lingkaran, Tabung, Kerucut:
public class Lingkaran {

    int r;

    public int getLuasLingkaran(int r) {
        return (int) Math.PI * r * r;
    }

    public void luas() {
        int luas = getLuasLingkaran(this.r);
        System.out.println("Luas        : " + luas);
    }

    public int getKelilingLingkaran(int r) {
        return (int) Math.PI * (r * 2);
    }

    public void keliling() {
        int keliling = getKelilingLingkaran(this.r);
        System.out.println("Keliling    : " + keliling);
    }
}

public class Tabung extends Lingkaran{
    int tinggi;
    int jari;
   
    @Override
    public void luas(){
        int luas = (2 * super.getLuasLingkaran(this.jari)) + (tinggi * super.getKelilingLingkaran(this.jari));
        System.out.println("Luas        : " + luas);
    }
   
    public void volume(){
        int volume = super.getLuasLingkaran(this.jari) * tinggi;
        System.out.println("Volume      : " + volume);
    }
}

public class Kerucut extends Lingkaran{
    int tinggi;
    int jari;
   
    @Override
    public void luas(){
        int selimut = (int) Math.sqrt(Math.pow(this.tinggi,2) + Math.pow(this.jari,2));
        int luas = (super.getLuasLingkaran(this.jari) + (selimut * (int) Math.PI * this.jari));
        System.out.println("Luas        : " + luas);
    }
   
    public void volume(){
        int volume = (int)(0.333 * (super.getLuasLingkaran(this.jari) * tinggi));
        System.out.println("Volume      : " + volume);
    }
}

perlu diketahui bahwa class berwarna merah adalah super class dari class yang berwarna biru dan hijau. Dari sini akan tampak kegunaan overriding. Perhatikan fungsi luas() pada setiap class. ketiga fungsi tersebut bertipe fungsi sama, nama fungsi sama, dan nilai kembaliannyapun sama.Namun , di sinilah overriding berperan karena fungsi luas() di dalam tabung akan menampilkan luas tabung dan fungsi luas() pada kerucut akan menampilkan luas kerucut. Semoga Bermanfaat.

Sabtu, 28 Mei 2011

Segitiga Pascal Pada Java

Sebenarnya, menampilkan segitiga pascal dapat dilakukan hanya dalam fungsi main(public static void main(String[] args), namun cara ini lebih kompleks karena temen - temen harus mengatur fungsi faktorial sendiri di dalam fungsi main tersebut. Sebenarnya bisa, tapi lebih membingungkan. Sehubungan dengan kebingungan tersebut, pada artikel kali ini, akan ane buat fungsi - fungsi yang nantinya akan menjadi rumus menampilkan segitiga pascal tersebut. Fungsi ini ditunjukkan oleh script berwarna di bawah ini:

public class SegiTigaPascal
public int proc(int angka){
if(angka == 0){
return 1;
}
else
return angka;
}
public int minus(int x, int y){
if(x - y == 0){
return 1;
}
else
return x- y;
}
public int faktorial(int angka){
int faktorial = 1;
for(int x = 1; x <= angka; x++){
faktorial *= x;
}
return faktorial;
}
public static void main(String[] args) {
SegiTigaPascal panggil = new SegiTigaPascal();
int batas = 4;
int xFaktorial = 1;
int yFaktorial = 1;
int minFaktorial = 1;
int simpan;
int hasil = 0;
for (int x = 0; x <= batas; x++) {
xFaktorial *= panggil.proc(x);
for (int y = batas; y >= x; y--) {
System.out.print(" ");
}
for (int y = 0; y <= x; y++) {
yFaktorial *= panggil.proc(y);
minFaktorial = panggil.minus(x, y);
simpan = panggil.faktorial(minFaktorial);
hasil = xFaktorial/(yFaktorial * (simpan));
System.out.print(hasil + " ");;
}
yFaktorial = 1;
System.out.println("");
}
}
}

NB:
  • Script berwarna biru adalah fungsi untuk mengembalikan nilai 1 apabila angka pada parameter adalah 0, Fungsi ini berlaku karena (entah saya yang gak tahu atau emang gak ada) java tidak menyediakan prosedur faktorial sendiri, sehingga fungsi ini akan berjalan apabila dibutuhkan hasil 0 faktorial.
  • Sript berwarna merah adalah fungsi untuk menghitung hasil pengurangan. Hasil pengurangan ini diperlukan karena kombinasi nCr = n! / r!(n - r)!. Nah, fungsi ini yang berperan dalam menghitung (n - r)!.
  • Script berwarna kuning adalah fungsi untuk menghitung faktorial.

Sabtu, 21 Mei 2011

Penerapan Link List


Okeh brad... Pada kesempatan kali ini ane mau sedikit share tentang link list sebagai lanjutan dari artikel sebelumnya. Kali ini ane mau share tentang penerapan link list dalam hal yang lebih luas yaitu penerapan link list dalam mencari data terkecil, terbesar, dan mengurutkan data yang berupa angka. Berikut script untuk mencari data terkecil:
Sebelumnya, buat class baru terlebih dahulu. Pada contoh kali ini nama classnya adalah LinkedList.
public class LinkedList {
int data;
 LinkedList next;
public LinkedList(){
}   
public LinkedList(int data){
this.data = data;
}
public void tampil(){
System.out.print(data + " ");
}
}
Setelah itu buat class baru lagi. Pada contoh kali ini adalah Process.
public class Process {
LinkedList awal;
int k = 0;
public void masuk(int data) {
LinkedList link = new LinkedList(data);
link.next = awal;
awal = link;
}
public void tampil() {
LinkedList link = awal;
while (link != null) {
link.tampil();
link = link.next;
}
}
public int min(){
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] > data[y]){
is = false;
}
}           
if(is){
tampung = data[x];
}
}
return tampung;
}
}
public int max(){
System.out.println("Bilangan terbesar");
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}
if(is){
tampung = data[x];
}
}
return tampung;
}
Perhatikan pada blok yang berwarna merah, di dalamnya terdapat satu baris yang di tulis dengan huruf tebal dan berwarna hitam. Blok itu adalah blok yang digunakan untuk mencari data angka terkecil, apabila ingin mencari data  angka terbesar, hanya tinggal mengganti dengan if(data[x] < data[y]).
public int max(){
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}           
if(is){
tampung = data[x];
}
}
return tampung;
}
}
public int max(){
System.out.println("Bilangan terbesar");
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}
if(is){
tampung = data[x];
}
}
return tampung;
}

Nah, sekarang bagaimana untuk mengurutkan data menggunakan link list??? Pada contoh kali ini, data yang akan diurutkan akan ditampilkan yaitu fungsi berupa void. Kalo temen – temen ingin mengembalikan nilai dari data yang temen – temen urutkan, silahkan dimodifikasi sendiri. Silahkan tambahkan script mengurutkan data dengan fungsi tampil() yang ada di class process. Berikut scriptnya:
public void tampil() {
LinkedList link = awal;
while (link != null) {
int n = 1;
link.tampil();
link = link.next;
k += n;
}
System.out.println("\nAscending");
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
int temp;
for(int x = 0; x < data.length;x++){
for(int y = x + 1; y < data.length; y++){
if(data[x] > data[y]){
temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
System.out.print(data[x] + " ");
}
System.out.println("\nDescending");
for(int x = 0; x < data.length;x++){
for(int y = x + 1; y < data.length; y++){
if(data[x] < data[y]){
temp = data[x];
data[x] = data[y];
data[y] = temp;
}           
}
System.out.print(data[x] + " ");
}   
}
Lalu buat class baru untuk menampilkan data – data yang ingin dimasukkan. Pada contoh kali ini nama classnya adalah Main.
public class Main {
public static void main(String[] args){
Process angky = new Process();
angky.masuk(4);
angky.masuk(8);
angky.masuk(3);
angky.masuk(1);
angky.masuk(2);
System.out.print(angky.min());
System.out.println("");
Process cahaya = new Process();
cahaya.masuk(4);
cahaya.masuk(8);
cahaya.masuk(3);
cahaya.masuk(1);
cahaya.masuk(2);
System.out.print(cahaya.max());
System.out.println("");
Process putra = new Process();
putra.masuk(4);
putra.masuk(8);
putra.masuk(3);
putra.masuk(1);
putra.masuk(2);
putra.tampil();
}
}
PENTING!!!
Tabulasi dalam java sangatlah penting, apabila temen – temen mengcopas script di atas, pasti nantinya tabulasi di atas akan lurus rata kiri. Solusinya (khusus yang menggunakan netbeans) yaitu setelah temen – temen mengcopas script di atas, tekan Shift + Alt + F. Secara otomatis netbeans akan mengatur tabulasi script yang tentu saja akan memudahkan pembacaan script.

Jumat, 20 Mei 2011

Selection sort

Ok, kali ini ane mau share tentang bagaimana sorting secara selection sort. Pada kesempatan kali ini ane coba jelasin selection sort dengan menambah penjelasan dalam program itu sendiri. Silahkan membuat class baru lalu copy script di bawah ini:

    public static void main(String[] args) {
        int[] data = {8, 4, 2, 6, 3, 7, 17, 28};
        int tampung = 0;
        for (int x = 0; x < data.length; x++) {
            for (int y = x + 1; y < data.length; y++) {
                System.out.println("\nmembandingkan " + data[x] + " dengan " + data[y]);
                System.out.print("awalnya data[x] adalah " + data[x] + " lalu ");
                if (data[x] > data[y]) {
                    tampung = data[x];
                    data[x] = data[y];
                    data[y] = tampung;
                    System.out.print("data[x] menjadi " + data[x] + ", data[y] menjadi " + data[y] + ". ");
                }
                else{
                    System.out.print("data[x] tidak ditukar karena tidak memenuhi kondisi if dan data[y] berlanjut. ");
                }
            }
            System.out.println("");
        }
    }

Keterangan yang warna merah akan membantu temen" dalam mengerti tentang  selection sort.
Semoga bermanfaat!!!

Senin, 02 Mei 2011

Perkalian Matriks

Berikut adalah contoh script perkalian matrix berordo 2 X 2:
public class Matrix {
    public static void main(String[] args){
        int a[][] = {{1,5},{2,8}};
        int b[][] = {{6,7},{9,3}};
        System.out.println("a * b");
        int[][] temp = new int[a.length][a.length];//variable array 2D untuk menyimpan hasil a * b
        int kali;//variable untuk menyimpan hasil perkalian
        int tambah = 0;//variable untuk menyimpan hasil penjumlahan dari perkalian
        for(int x = 0; x < a.length; x++){
            for(int y = 0; y < a.length; y++){
                for(int z = 0; z < a.length; z++){
                    kali = a[x][z] * b[z][y];
                    tambah += kali;
                }
                tempa[x][y] = tambah;
                tambah = 0;//mengeset nilai tambah menjadi 0 agar perulangan berikutnya, variable tambah tidak membawa nilai sebelumnya
            }
        }
        for(int x = 0; x < temp.length; x++){
            for(int y = 0; y < temp.length; y++){
                System.out.print(temp[x][y] + " ");//menampilkan hasil akhir matrix dari proses di atas
            }
            System.out.println("");
        }
    }
}

Contoh si atas merupakan contoh perkalian matrix 2 X 2, Temen - temen bisa nambahin sendiri sesuai keinginan temen - temen, script di atas berlaku untuk ordo 3 X 3, 4 X 4, 5 X 5,dst.
Semoga Bermanfaat!

Minggu, 24 April 2011

Link List

Sebagai lanjutan dari artikel sebelumnya tentang cara menampilkan Linked List, kali ini Ane mau sedikit share tentang cara mengakses linked list.
Oke, pada contoh kali ini nama class yang berisi data adalah Kotak:
berikut ini adalah cara untuk menghapus angka setelah data yang di cari:
public Kotak hapusSetelah(int cari){
        Kotak point = awal;
        while(awal.angka != cari){//Proses selama angka awal tidak sama dengan angka yang dicari
            awal = awal.next;
        }
        return point;
    }
cara untuk menghapus data sebelum data yang dicari:
    public Kotak hapusSebelum(int cari){
        Kotak point = awal;
        while(awal.angka == cari){
            if(awal.next == null){//Proses ini mengeset nilai setelah angka yang di cari null, link list akan berhenti
                return null;
            }
        }
        return point;
    }
cara untuk menghapus salah satu data pada Link List:
Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != hapus){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){//proses ini berlaku apabila angka yang keluar dari perulangan while adalah angka yang paling awal
            awal = awal.next;//data awal "loncat" ke data berikutnya sehingga data paling awal tidak dicetak
        }
        else{//proses ini berlaku apabila angka yang keluar dari perulangan while selain angka paling awal
            point2.next = point1.next;
        }
        return point2;
    }
cara untuk mencari data yang diinginkan:
Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != cari){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){//apabila angka yang dicari berada paling awal
            point1.next = null;
        }
        else{//apabila angka yang dicari selain data awal
            awal = point2.next;//mengeset nilai awal menjadi data yang di cari
            point1.next = null;//mengeset nilai setelah data yang dicari adalah null, link list berhenti
        }
        return point1;
    }
cara untuk memasukkan data setelah angka yang ditunjuk:
public Kotak insertSetelah(int insert){
        Kotak masuk = new Kotak(7, 7.0, "tujuh");
        Kotak point1 = awal;
        Kotak point2 = awal;
        while(point2.angka != insert){
            if(point2.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point2 == awal){//apabila data yang dimasukkan setelah data awal
            awal.next = masuk;
            masuk.next = point1;
        }
        else{//apabila data yang dimasukkan setelah data selain
            point2.next = masuk;
            masuk.next = point1;
        }
        return point1;
    }
cara untuk memasukkan data sebelum angka yang ditunjuk:
    public Kotak insertSebelum(int insert){
        Kotak masuk = new Kotak(6, 6.0, "enam");
        Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != insert){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){
            point1 = null;
        }
        else{
            point2.next = masuk;
            masuk.next = point1;
        }
        return point1;
    }

Jangan lupa bahwa method di atas diletakkan di class KotakList. Untuk lebih jelasnya lihat artikel sebelumnya.
Semoga artikel ini bermanfaat. Mohon maap apabila ada kesalahan :)

Pada artikel mendatang akan dijelaskan tentang penerapan link list.Check it out!!!

Rabu, 06 April 2011

5 Istilah

Internet itu interconnected networking (network yang dapat saling terkoneksi). Dari namanya saja kita bisa mendefinisikan bahwa internet adalah koneksi network yang sangat luas, bisa mencapai seluruh dunia yang dapat terkoneksi. Karena network yang luas tersebut saling terkoneksi, maka diperlukan suatu jaringan. Jaringan komputer di bagi menjadi tiga berdasarkan luas jangkauannya yaitu 1. LAN (Local Area Network) 2. (Metropolitam Area Network) 3. (Wide Area Network). contoh dari internet adalah e-book, e-mail, e-commerce semuanya adalah contoh dari internet dimana setiap layanan juga menyediakan informasi yang berbeda. Karena di dalam internet ada proses pertukaran informasi, pastinya ada pihak yang menyediakan informasi dan ada juga pihak yang menerima informasi. Pihak yang menyediakan informasi disebut juga dengan server. Komputer server dilengkapi dengan spek yang besar karena server ini harus melayani berbagai informasi yang dibuthkan oleh pihak - pihak yang membutuhkan informasi seperti sistem operasi khusus, RAM yang besar, dll.  Contoh HTTP server dan FTP server. Pihak yang menerima informasi tersebut dapat juga disebut dengan client contoh client TFTP dan client FTP. Untuk mendapatkan informasi yang dibutuhkan, pastinya dibutuhkan suatu alat yang dapat digunakan untuk menemukan informasi yang dibutuhkan. alat ini disebut juga dengan search engine (alat pencari). Alat yang digunakan ini bukan dalam bentuk hardware, namun alat ini dalam bentuk software.Software inilah yang nantinya menjadi alat untuk mencari informasi yang kita inginkan. Contoh dari search engine adalah www.google.com dan www.ask.com. Nah, dalam pengiriman dan penerimaan suatu informasi dibutuhkan suatu jaringan.Jaringan juga mempunyai metode - metode tertentu untuk bertukar informasi yang dapat disebut juga dengan routing. Routing dapat digunakan untuk meneruskan jaringan satu dengan jaringan lainnya. Routing juga dapat digunakan untuk menggabungkan jaringan satu dengan jaringan lainnya sehingga data dapat diteruskan dari jaringan yang satu ke jaringan lainnya. Alat yang digunakan untuk routing disebut juga dengan router. Contohnya adalah Microtik routerOS dan cisco router.

Selasa, 05 April 2011

Menampilkan Link List

"Jadi Linked List adalah blabalabla....". Beginilah kata dosen struktur data pas nerangin tentang linked list. Alhasilbanyak temen - temen yang gak ngerti...
tapi ada juga yang ngerti, selamat untuk temen - temen yang udah ngerti d^_^b
untuk ngebantu temen - temen yang belum ngerti, ane coba jelasin linked list versi ane sendiri. Sebelumnya, bersihkan otak kalian yang beranggapan bahwa linked list adalah suatu metode yang di sediakan oleh java. linked list adalah methode yang kita buat sendiri dengan gambaran sebagai berikut:




berikut ini cara menampilkan linked list:
public class Kotak{
int angka;
String nomer;
Link next;//attribut yang mencakup seluruh attribut dan method yang berada dalam class Link

public Kotak(int angka, String nomer){
this.angka = angka;
this.nomer = nomer;
}

public void tampilLink(){
System.out.print(angka + " " + nomer + " ");
}
}

public class LinkList{
Link awal;//attribut pada LinkList yang mencakup semua attribut dan methodnya
public LinkList(){
awal = null;
}
public void tambahAwal(int angka, String nomer){//fungsi untuk memasukkan data
Link kotak = new Link(angka, nomer);
kotak.next = awal;//mindah inputan pertama jadi inputan berikunya
awal = kotak;//masukin data ke kotak kosong pertama
}
public void KotakList(){
System.out.println("Data: ");
while(awal != null){
awal.tampilKotak();
awal = awal.next;
}
}
}

public classs Main{
public static void main(String[] args){
KotakList test = new KotakList();
test.tambahAwal(1, "satu");
test.tambahAwal(2, "dua");
test.tambahAwal(3, "tiga");
test.tampilKotakList();
}
}

Sebenernya nampilin Linked List cuma pake script di atas, untuk mengakses Lingked List akan ane bahas di artikel ane berikutnya.

Kamis, 17 Maret 2011

FIBONACCI

Biography/Biografi/Biodata Biografi Fibonacci – Penemu Deret Fibonacci

Perkembangan matematika pada abad pertengahan di Eropa seiring dengan lahirnya Leonardo dari Pisa yang lebih dikenal dengan julukan Fibonacci (artinya anak Bonaccio). Bonaccio sendiri artinya anak bodoh, tapi dia bukan orang bodoh karena jabatannya adalah seorang konsul yang wewakili Pisa. Jabatan yang dipegang ini membuat dia sering bepergian. Bersama anaknya, Leonardo, yang selalu mengikuti ke negara mana pun dia melakukan lawatan.
Fibonacci menulis buku Liber Abaci setelah terinspirasi pada kunjungannya ke Bugia, suatu kota yang sedang tumbuh di Aljazair. Ketika ayahnya bertugas di sana, seorang ahli matematika Arab memperlihatkan keajaiban sistem bilangan Hindu-Arab. Sistem yang mulai dikenal setelah jaman Perang Salib. Kalkulasi yang tidak mungkin dilakukan dengan menggunakan notasi (bilangan) Romawi. Setelah Fibonacci mengamati semua kalkulasi yang dimungkinkan oleh sistem ini, dia memutuskan untuk belajar pada matematikawan Arab yang tinggal di sekitar Mediterania. Semangat belajarnya yang sangat mengebu-gebu membuat dia melakukan perjalanan ke Mesir, Syria, Yunani, Sisilia.
Mengarang buku
Tahun 1202 dia menerbitkan buku Liber Abaci dengan menggunakan – apa yang sekarang disebut dengan aljabar, dengan menggunakan numeral Hindu-Arabik. Buku ini memberi dampak besar karena muncul dunia baru dengan angka-angka yang bisa menggantikan sistem Yahudi, Yunani dan Romawi dengan angka dan huruf untuk menghitung dan kalkulasi.
Pendahuluan buku berisi dengan bagaimana menentukan jumlah digit dalam satuan numeral atau tabel penggandaan (baca: perkalian) dengan angka sepuluh, dengan angka seratus dan seterusnya. Kalkulasi dengan menggunakan seluruh angka dan pembagian, pecahan, akar, bahkan penyelesaian persamaan garis lurus (linier) dan persamaan kuadrat. Buku itu dilengkapi dengan latihan dan aplikasi sehingga menggairahkan pembacanya. Dasar pedagang, ilustrasi dalam dunia bisnis dengan angka-angka juga disajikan. Termasuk di sini adalah pembukuan bisnis (double entry), penggambaran tentang marjin keuntungan, perubahan (konversi) mata uang, konversi berat dan ukuran (kalibrasi), bahkan menyertakan penghitungan bunga. (Pada jaman itu riba, masih dilarang). Penguasa pada saat itu, Frederick, yang terpesona dengan Liber Abaci, ketika mengunjungi Pisa, memanggil Fibonacci untuk datang menghadap. Dihadapan banyak ahli dan melakukan tanya-jawab dan wawancara langsung, Fibonacci memecahkan problem aljabar dan persamaan kuadrat.
Pertemuan dengan Frederick dan pertanyaan-pertanyaan yang diajukan oleh ahli-ahli tersebut, dibukukan dan diterbitkan tidak lama kemudian. Tahun 1225 dia mengeluarkan buku Liber Quadrotorum (buku tentang Kuadrat) yang dipersembahkannya untuk Sang raja. Dalam buku itu tercantum problem yang mampu mengusik “akal sehat” matematikawan yaitu tentang problem kelinci beranak-pinak Pertanyaan sederhana tapi diperlukan kejelian berpikir.
“Berapa pasang kelinci yang akan beranak-pinak selama satu tahun. Diawali oleh sepasang kelinci, apabila setiap bulan sepasang anak kelinci menjadi produktif pada bulan kedua”
- Akhir bulan kedua, mereka kawin dan kelinci betina I melahirkan sepasang anak kelinci beda jenis kelamin.
- Akhir bulan kedua, kelinci betina melahirkan sepasang anak baru, sehingga ada 2 pasang kelinci.
- Akhir bulan ketiga, kelinci betina I melahirkan pasangan kelinci kedua, sehingga ada 3 pasang kelinci.
- Akhir bulan keempat, kelinci betina I melahirkan sepasang anak baru dan kelinci betina II melahirkan sepasang anak kelinci, sehingga ada 5 pasang kelinci.
Akan diperoleh jawaban: 55 pasang kelinci. Bagaimana bila proses itu terus berlangsung seratus tahun? Hasilnya (contek saja): 354.224.848.179.261.915.075.
Apakah ada cara cepat untuk menghitungnya? Di sini Fibonacci memberikan rumus bilangan yang kemudian dikenal dengan nama deret Fibonacci.
Deret Fibonacci
Orang Kristen menolak angka nol; namun pedagang dalam melakukan transaksi membutuhkan angka nol. Alasan yang dipakai oleh Fibonacci adalah nol sebagai batas. Apabila diperoleh hasil negatif berarti kerugian. Orang yang mengenalkan angka nol ini ke dunia Barat adalah Leonardo dari Pisa. Meskipun ayahnya seorang Konsul sekaligus pedagang, profesi Fibonacci – tidak mau menjadi konsul, adalah seorang pedagang. Anak muda – yang lebih dikenal dengan nama Fibonacci – belajar matematika dari orang-orang Islam dan menjadi matematikawan piawai dengan cara belajar sendiri. Menemukan deret bilangan yang diberi nama seperti namanya.
Deret Fibbonacci yaitu: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 …
Pola deret di atas terbentuk dari susunan bilangan berurutan (dari kecil makin besar) yaitu merupakan penjumlahan dua bilangan sebelumnya. Angka 3, urutan keempat, adalah hasil penjumlahan 1 (urutan 2) + 2 (urutan 3); angka 5 urutan kelima, adalah hasil penjumlahan 2 (urutan 3) + 3 (urutan 4); angka 8 urutan keenam, adalah hasil penjumlahan 3 (urutan 4) + 5 (urutan 5) dan seterusnya. Deret di atas mampu menjawab problem kelinci beranak-pinak, alur bunga lily, pola dan jumlah mata nanas, jumlah kelopak dan alur spiral bunga jenis-jenis tertentu. Lewat deret Fibonacci ini dapat diketahui diketahui urutan atau alur yang akurat pada alam. Ukuran ruangan binatang berkulit lunak (moluska) yang berbentuk spiral, nautilus *; jumlah searah jarum jam atau berlawanan jarum jam ‘mata‘ nanas, jumlah kelopak bunga matahari dan ada 2 alur spiral (ke kanan 34 dan ke kiri 55) sesuai dengan deret Fibonacci.