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:
Heumm,saya mah sama sekali ga mudeng nih gan....numpang nyimak lah....
BalasHapusOke2..
BalasHapussip gapapa gan..
barangkali kapan2 bermanfaat..
^_^
Caanggih
BalasHapusLebih canggih ini:
Hapushttps://plus.google.com/102198148545365435113/posts
.ada rumah di atas air.
Subhanallah..