Berikut ini adalah pertanyaan dari qed pada mata pelajaran TI untuk jenjang Sekolah Dasar
2. Baris pertama adalah baris ke-0.
____________
Sy post ulang karena sblmnya dihapus oleh moderator.
Ada yg salah dgn tgs ini?
Jawaban dan Penjelasan
Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.
Kode Program (Python)
# segitigapascal.py
# Program oleh HY
from rich.console import Console
console = Console()
def segitiga_pascal(n) -> list:
# Menerima n: integer >= 0
# Mengembalikan list 2 dimensi segitiga Pascal
p = []
for i in range(0, n+1):
p.append(i)
if i in [0, 1]:
p[i] = [1 for item in range(0, i+1)]
else:
p[i] = [1, 1]
for j in range(1, i):
p[i].insert(j, p[i-1][j-1] + p[i-1][j])
return p
def output_segitiga_pascal(p) -> None:
# Menampilkan list p dalam bentuk segitiga Pascal
maxdigit = len(str(max(max(p))))
strlist = []
maxnumchars = 0
for i in range(len(p)-1, -1, -1):
strlist.insert(0, " ".join([str(item)
.center(maxdigit if maxdigit%2 == 1 else maxdigit+1, " ")
for item in p[i]]))
maxnumchars = max(maxnumchars, len(strlist[0]))
strlist[0] = f"n = {i:2d}: " + "[bold white]" + str(strlist[0]).center(maxnumchars, " ") + "[/bold white]"
console.print("\n".join(strlist))
### PROGRAM UTAMA ###
if __name__ == '__main__':
print()
print("Program SEGITIGA PASCAL")
n = int(input("Nomor baris maksimum (n) : "))
print("=================================================")
output_segitiga_pascal(segitiga_pascal(n))
print()
### END OF PROGRAM ###
_____________________
Pembahasan
Sebelum membuat program segitiga Pascal ini, terlebih dahulu dirancang algoritmenya.
Kita bisa saja menggunakan koefisien binomial, sehingga dapat langsung ketemu bilangan-bilangannya. Namun, saya gunakan cara yang lebih merujuk pada mekanisme menghasilkan bilangan-bilangan pada segitiga Pascal tersebut.
Jadi, untuk setiap baris, bilangan ujung kiri dan ujung kanan sudah pasti 1. Dari bilangan ke-2 hingga ke-2 dari terakhir merupakan penjumlahan dari pasangan 2 bilangan di baris sebelumnya (di atasnya).
Algoritma (Notasi Deskriptif)
Diberikan nilai (nomor baris terakhir).
- Inisialisasi array 2 dimensi p.
- Loop/iterasi i, dari i = 0 hingga i = n:
2.a. Tambahkan elemen p[i]. (p[i] adalah array 1 dimensi.)
2.b. Jika i = 0 atau i = 1, maka p[i] diisi dengan nilai 1.
2.c. Jika tidak (berarti i > 1), maka:
2.c.1. Inisialisasi p[i] dengan [1, 1].
2.c.2. Loop/iterasi j, dari j = i hingga j = i-1:
2.c.2.a. Pada p[i, j], sisipkan nilai p[i-1, j-1] + p[i-1, j].
Pada program, algoritma tersebut diimplementasikan pada fungsi segitiga_pascal(n) yang mengembalikan array 2 dimensi dari bilangan-bilangan segitiga Pascal.
Sedangkan fungsi output_segitiga_pascal(p) merupakan fungsi untuk mengolah array 2 dimensi tersebut sehingga dapat ditampilkan pada layar dalam bentuk "segitiga", atau minimal menyerupai.
Pada program tersebut, tidak ada pembatasan bahwa banyak baris maksimum adalah 20.
Contoh hasil eksekusi program disajikan pada beberapa gambar yang disertakan.
Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.
Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact
Last Update: Sun, 30 Oct 22