Rabu, 15 Mei 2013

Membuat segitiga pascal di scilab


Bagaimana caranya membuat segitiga pascal di scilab?
Apa sih segitiga pascal itu?
Segitiga pascal itu seperti ini
           1                  //kombinasi 0
         1   1                //kombinasi 1
       1   2   1              //kombinasi 2
     1   3   3   1            //kombinasi 3
   1   4   6   4   1          //kombinasi 4
 1   5  10  10   5   1        //kombinasi 5
.......................
Masih ingat kombinasi?
Yang bentuknya seperti ini

Jadi segitiga pascal itu sebenarnya bisa ditulis seperti ini



Faktorial (!) dalam scilab sudah ada fungsinya, tinggal kita panggil saja. Sekarang berapa nilai dari 5! ?
Kita tulis di scilab perintah ini:
-->factorial(5)
 ans  =

    120. 
Segitiga pascal baris pertama adalah kombinasi 0, itu adalah c(0,0). Kita tulis dalam scilab
-->factorial(0)/(factorial(0)*factorial(0-0))
 ans  =

    1.
Sedangkan pada baris ke dua yang berisi kombinasi 1 adalah
-->factorial(1)/(factorial(0)*factorial(1-0))
 ans  =

    1.
dan
-->factorial(1)/(factorial(1)*factorial(1-1))
 ans  =

    1.
Untuk kombinasi 2, seperti ini
-->factorial(2)/(factorial(0)*factorial(2-0))
 ans  =

    1.
-->factorial(2)/(factorial(1)*factorial(2-1))
 ans  =

    2.
-->factorial(2)/(factorial(2)*factorial(2-2))
 ans  =

    1.
Untuk kombinasi 3 perintahnya seperti ini
-->factorial(3)/(factorial(0)*factorial(3-0))
 ans  =

    1.
-->factorial(3)/(factorial(1)*factorial(3-1))
 ans  =

    3.
-->factorial(3)/(factorial(2)*factorial(3-2))
 ans  =

    3.
-->factorial(3)/(factorial(3)*factorial(3-3))
 ans  =

    1.
Seperti itu seterusnya..
Jadi kalau kita menginginkan kombinasi 5 nya berarti perintahnya seperti ini
-->factorial(5)/(factorial(0)*factorial(5-0))
 ans  =

    1.
-->factorial(5)/(factorial(1)*factorial(5-1))
 ans  =

    5.
-->factorial(5)/(factorial(2)*factorial(5-2))
 ans  =

    10.
-->factorial(5)/(factorial(3)*factorial(5-3))
 ans  =

    10.
-->factorial(5)/(factorial(4)*factorial(5-4))
 ans  =

    5.
-->factorial(5)/(factorial(5)*factorial(5-5))
 ans  =

    1.


Ngulang lagi...
Dari script-script tadi, coba kita perhatikan. Ada hal yang sama bukan? Berarti bisa kita kerjakan dengan perulangan (looping). Kita singkat dengan script yang akan kita buat ini. Sebelumnya kita buka scinotes dengan mengeklik tombol ini pada toolbar.
Lalu kita tulis script ini. Mudah kok, Cuma tiga baris saja. (awalnya aja, :) selanjutnya berkembang deh..)
for i=0:5
    factorial(5)/(factorial(i)*factorial(5-i))
end
kemudian simpan dengan nama pascal.sce. Kita kembali ke console scilab dan menjalankan program pascal.sce tadi dengan perintah ini.
-->exec('pascal.sce')
Hal yang serupa akan muncul, tapi bedanya hanya dengan tiga baris script saja. Lebih mudah, bukan?
Sekarang kita masukkan nilai-nilai kombinasi itu ke dalam sebuah matriks, sebut saja matriks a. Yang perlu kita perhatikan adalah matriks tidak memiliki baris ke nol atau kolom ke nol, yang ada mulainya dari a(1,1). Jadi untuk mengatasinya kita tambahkan sedikit saja trik, menjadi seperti ini kemudian kita simpan lagi.
for i=0:5
    a(1,i+1)=factorial(5)/(factorial(i)*factorial(5-i))
end
Tapi ada yang aneh ketika kita jalankan programnya. Keluarannya seperti ini.
 a  =

    1. 
 a  =

    1.    5. 
 a  =

    1.    5.    10. 
 a  =

    1.    5.    10.    10. 
 a  =

    1.    5.    10.    10.    5. 
 a  =

    1.    5.    10.    10.    5.    1. 
Itu karena Scilab menampilkan hasil di setiap perulangan. Sebenarnya kalau kita panggil matriks a saja yang keluar cuma sekali saja.
-->a
a  =

    1.    5.    10.    10.    5.    1. 


Akan lain hasilnya kalau kita tambahkan titik koma di akhir perintah seperti ini.
for i=0:5
    a(1,i+1)=factorial(5)/(factorial(i)*factorial(5-i));
end
ketika kita jalankan yang muncul adalah tidak ada apa-apa. Makanya kita panggil matriks a pada akhir script.
for i=0:5
    a(1,i+1)=factorial(5)/(factorial(i)*factorial(5-i));
end
a
Setelah kita simpan, sekarang outputnya adalah seperti ini.
a  =

    1.    5.    10.    10.    5.    1. 
Itu adalah kombinasi ke lima dari segitiga pascal.


Melihat sekeliling lebih luas..

Sekarang kita generalisir untuk beberapa baris. Kalau untuk baris pertama (kombinasi 0) scriptnya seperti ini.
for i=0:0
    a(1,i+1)=factorial(0)/(factorial(i)*factorial(0-i));
end
a
untuk baris ke dua (kombinasi 1) scriptnya seperti ini.
for i=0:1
    a(1,i+1)=factorial(1)/(factorial(i)*factorial(1-i));
end
a
Untuk baris ke tiga (kombinasi 2), scriptnya seperti ini.
for i=0:2
    a(1,i+1)=factorial(2)/(factorial(i)*factorial(2-i));
end
a
baris ke empat (kombinasi 3) seperti ini
for i=0:3
    a(1,i+1)=factorial(3)/(factorial(i)*factorial(3-i));
end
a
baris ke lima (kombinasi 4) seperti ini
for i=0:4
    a(1,i+1)=factorial(4)/(factorial(i)*factorial(4-i));
end
a

baris ke enam (kombinasi 5) seperti ini
for i=0:5
    a(1,i+1)=factorial(5)/(factorial(i)*factorial(5-i));
end
a
dan seterusnya. Dari fakta-fakta di atas, kita bisa mempersingkat script untuk tiap baris, tinggal kita ganti saja bilangan yang berganti-ganti di atas menjadi seperti ini.
for j=0:6
    for i=0:j
        a(j+1,i+1)=factorial(j)/(factorial(i)*factorial(j-i));
    end
end
a
kita simpan, kemudian kita jalankan lagi hasilnya seperti ini.
a  =

    1.    0.    0.     0.     0.     0.    0. 
    1.    1.    0.     0.     0.     0.    0. 
    1.    2.    1.     0.     0.     0.    0. 
    1.    3.    3.     1.     0.     0.    0. 
    1.    4.    6.     4.     1.     0.    0. 
    1.    5.    10.    10.    5.     1.    0. 
    1.    6.    15.    20.    15.    6.    1. 
Ya! Kita sudah punya segitiga pascal secara otomatis. Tapi tunggu dulu, ada yang aneh, terlihat ada yang kurang nyaman di mata. Apa itu? Nolnya. Benar. Kenapa seperti itu? Itu karena matriks a itu isinya adalah bilangan. Sehingga sel yang kosong ditulis nol. Lalu, bagaimana biar nolnya hilang? Coba tebak, bagaimana caranya?

Tidak hanya di gitar,
String pun ada di sini..
Oke, ide yang bagus! Kita ganti matriks a menjadi matriks string. Untuk itu, agar matriksnya baru lagi, kita hapus dulu variabel yang ada, yaitu a dengan perintah clear. Perintah ini sebenarnya tidak hanya akan menghapus a saja, tapi semua variabel yang telah kita inputkan. Jadi sebaiknya di awal script kita tuliskan clear dulu. Setelah itu kita ubah tipe tiap unsur matriks itu menjadi string. Script akhirnya seperti ini.
clear
for j=0:6
    for i=0:j
        a(j+1,i+1)=string(factorial(j)/(factorial(i)*factorial(j-i)));
    end
end
a
ketika kita jalankan di console, keluarannya seperti ini nih..
a  =

!1                       !
!                        !
!1  1                    !
!                        !
!1  2  1                 !
!                        !
!1  3  3   1             !
!                        !
!1  4  6   4   1         !
!                        !
!1  5  10  10  5   1     !
!                        !
!1  6  15  20  15  6  1  !

Berinteraksi dengan User
Biar lebih keren, kita tulis permintaan “mau ditampilkan berapa kombinasi?” pada awal script. Pengguna aplikasi biasanya tidak mau terkekang oleh apapun. Semakin bebas ia bergerak, semakin lama juga ia akan menikmati program kita. Biarkan user memilih dan memasukkan bilangan yang menurutnya tepat. Dan tunggu saja, dia akan puas dengan hasil kerja keras kita. Ok, itu bisa dilakukan dengan mudah sekali, tinggal menambahkan perintah ini.
kombinasi=input('mau ditampilkan berapa kombinasi?')
selanjutnya kita ganti j nya yang tadinya dari nol sampai 6 saja, menjadi dari nol sampai variabel kombinasi. Script lengkapnya sekarang seperti ini.
clear
kombinasi=input('mau ditampilkan berapa kombinasi?')
for j=0:kombinasi
    for i=0:j
        a(j+1,i+1)=string(factorial(j)/(factorial(i)*factorial(j-i)));
    end
end
a
dan output yang muncul pertama kali seperti ini.
mau ditampilkan berapa kombinasi?
Kalau kita memasukkan nilai 10, maka secara otomatis segitiga pascal yang terbentuk itu seperti ini.

a  =

!1                                              !
!                                               !
!1  1                                           !
!                                               !
!1  2   1                                       !
!                                               !
!1  3   3   1                                   !
!                                               !
!1  4   6   4    1                              !
!                                               !
!1  5   10  10   5    1                         !
!                                               !
!1  6   15  20   15   6    1                    !
!                                               !
!1  7   21  35   35   21   7    1               !
!                                               !
!1  8   28  56   70   56   28   8    1          !
!                                               !
!1  9   36  84   126  126  84   36   9   1      !
!                                               !
!1  10  45  120  210  252  210  120  45  10  1  !
Canggih kan?



Jadikan ia lebih indah,
dengan simetri di tengah
Sudah merasa puas? Jangan dulu. Seitiga pascal yang terbentuk itu masih di pinggir. Sekarang bagaimana kalau segitiganya itu biar jadi benar-benar simetri di tengah gitu? Coba dikerjakan. Kuncinya adalah permainan letak dalam matriks. Baris pertama biar jadi di tengah-tengah, baris kedua dan seterusnya membentuk segitiga. Letak yang berpengaruh adalah pada kolom, jadi barisnya masih sama.
Nyerah? Jangan dulu, ayo coba dulu, asah otak kita biar jadi semakin tajam.
Sudah jadi? Ya! Betul sekali.. Seperti inilah scriptnya.
clear
kombinasi=input('mau ditampilkan berapa kombinasi?');
for j=0:kombinasi
    for i=0:j
        a(j+1,kombinasi-2*i+j+1)=string(factorial(j)/(factorial(i)*factorial(j-i)));
    end
end
a
dan keluarannya seperti ini.
-->exec('pascal.sce')

mau ditampilkan berapa kombinasi?7


-->a
 a  =

!                        1                           !
!                                                    !
!                    1       1                       !
!                                                    !
!                1       2       1                   !
!                                                    !
!            1       3       3       1               !
!                                                    !
!         1      4       6       4       1           !
!                                                    !
!      1     5       10      10      5      1        !
!                                                    !
!   1     6      15      20      15      6     1     !
!                                                    !
!1     7     21      35      35      21     7     1  !
Canggih!
Semoga bermanfaat.
:)
– 340706 –

Ku tantang kau!
Bagaimana biar segitiga pascalnya seperti ini?
a  =

!                         1  !
!                            !
!                      1  1  !
!                            !
!                  1   2  1  !
!                            !
!              1   3   3  1  !
!                            !
!          1   4   6   4  1  !
!                            !
!      1   5   10  10  5  1  !
!                            !
!   1  6   15  20  15  6  1  !
!                            !
!1  7  21  35  35  21  7  1  !

pdfnya bisa diunduh melalui google drive sini:

4 komentar:

  1. Heumm,saya mah sama sekali ga mudeng nih gan....numpang nyimak lah....

    BalasHapus
  2. Oke2..
    sip gapapa gan..
    barangkali kapan2 bermanfaat..
    ^_^

    BalasHapus
  3. Balasan
    1. Lebih canggih ini:
      https://plus.google.com/102198148545365435113/posts
      .ada rumah di atas air.
      Subhanallah..

      Hapus