Berikut ini adalah pertanyaan dari unknown pada mata pelajaran TI untuk jenjang Sekolah Dasar
1. "fpb(a, b)", dan menghasilkan output berupa FPB dari bilangan a dan b.
2. "kpk(a, b)", dan menghasilkan output berupa KPK dari bilangan a dan b.
Batasan:
(1) a dan b adalah bilangan bulat positif.
(2) Dilarang menggunakan fungsi built-in dari bahasa pemrograman yang digunakan dan paket-paket yang mungkin sudah tersedia, untuk menghitung FPB dan KPK.
Jawaban dan Penjelasan
Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.
Kode Program (Python)
# fpbkpk.py
# oleh hy
class InterpreterMtk:
def __init__(self, prompt = ">>>") -> None:
"""Konstruktor"""
self.perintah = self.hasil = ''
self.prompt = prompt
self.judul = 'Interpreter Matematika Sederhana'
self.fitur = {
'fpb': {
'info': 'FPB dari 2 bilangan bulat positif',
'sintaks': 'fpb(a, b)'
},
'kpk': {
'info': 'KPK dari 2 bilangan bulat positif',
'sintaks': 'kpk(a, b)'
}
}
def info(self):
"""Tampilkan informasi."""
print('Fitur yang tersedia:')
i = 0
for fitur in self.fitur.values():
i += 1
print(f'{i:2}. {fitur["info"]}')
print(f' Sintaks: {fitur["sintaks"]}')
print('Untuk mengakhiri, tekan Enter saja.\n')
def mulai(self):
"""Interpreter dimulai."""
print()
print(self.judul)
self.info()
while True:
self.perintah = input(self.prompt + " ").strip()
if self.perintah == '':
self.selesai()
return
self.interpret()
def interpret(self):
"""Method utama untuk nterpretasi input."""
# Interpretasi perintah
# Cari perintah di dict fitur
key = self.perintah.lower().split('(')[0].strip()
fitur = self.fitur.get(key)
# Jika fitur tidak ada, atau sintaks salah
try:
if fitur is None:
raise SyntaxError
self.hasil = eval(f'self.{self.perintah}')
except SyntaxError:
print('[ERR] Sintaks salah, atau fitur tidak/belum tersedia.')
self.info()
except TypeError:
print('[ERR] Parameter a dan b harus merupakan bilangan bulat.')
self.info()
# Jika fitur ada, dan sintaks benar
else:
print(f'{" " * (len(self.prompt)+1)}= {self.hasil}\n')
def selesai(self):
"""Interpreter selesai."""
print("\nTerima kasih.\n")
def fpb(self, a: int, b: int) -> int:
"""Faktor Persekutuan terBesar"""
if not (isinstance(a, int) and isinstance(b, int)):
raise TypeError
# Baik a maupun b harus positif
a = abs(a); b = abs(b)
if a < b: # swap
return self.fpb(b, a)
if b == 0:
return a
return self.fpb(b, a % b)
def kpk(self, a: int, b: int) -> int:
"""Kelipatan Persekutuan terKecil"""
if not (isinstance(a, int) and isinstance(b, int)):
raise TypeError
if (a == 0) or (b == 0):
return 0
return (a * b) // self.fpb(a, b)
def program_utama():
interpreter = InterpreterMtk()
interpreter.mulai()
if __name__ == '__main__':
program_utama()
____________
Pembahasan
Pada saat membaca pertanyaan, saya berpikir akan lebih baik jika program dirancang menyerupai interpreter, yang menerima masukan terus menerus sampai suatu cara berhenti tertentu. Oleh karena itu, program di atas mengimplementasikan penyelesaian persoalan ini dalam bentuk interpreter, yang dibungkus pada class InterpreterMtk.
- Untuk menghitung FPB dari dua bilangan bulat positif, kita dapat menggunakan algoritma pembagian berulang Euclidean, yang diimplementasikan pada method fpb(self, a: int, b: int) -> int.
- Sedangkan untuk menghitung KPK, kita dapat memanfaatkan FPB. KPK dari bilangan bulat positif a dan badalah(a × b) / FPB(a, b). Hal ini diimplementasikan pada method kpk(self, a: int, b: int) -> int.
Method lain milik class InterpreterMtk hanya sebagai pendukung, sehingga program dapat berjalan sesuai rancangan awal.
Silahkan amati program, jika ada yang kurang dimengerti, silahkan bertanya.
____________
Contoh Hasil Eksekusi Program
Interpreter Matematika Sederhana
Fitur yang tersedia:
1. FPB dari 2 bilangan bulat positif
Sintaks: fpb(a, b)
2. KPK dari 2 bilangan bulat positif
Sintaks: kpk(a, b)
Untuk mengakhiri, tekan Enter saja.
>>> fpb(2, 5)
= 1
>>> kpk(2, 5)
= 10
>>> fpb(12, 18)
= 6
>>> kpk(12, 18)
= 36
>>> fpb(1024, 512)
= 512
>>> kpk(1024, 512)
= 1024
>>> fpb(145, 305)
= 5
>>> kpk(145, 305)
= 8845
>>> fpb (30, 70)
= 10
>>> kpk (30, 70)
= 210
>>> fpb(
[ERR] Sintaks salah, atau fitur tidak/belum tersedia.
Fitur yang tersedia:
1. FPB dari 2 bilangan bulat positif
Sintaks: fpb(a, b)
2. KPK dari 2 bilangan bulat positif
Sintaks: kpk(a, b)
Untuk mengakhiri, tekan Enter saja.
>>> kpk(
[ERR] Sintaks salah, atau fitur tidak/belum tersedia.
Fitur yang tersedia:
1. FPB dari 2 bilangan bulat positif
Sintaks: fpb(a, b)
2. KPK dari 2 bilangan bulat positif
Sintaks: kpk(a, b)
Untuk mengakhiri, tekan Enter saja.
>>>
Terima kasih.
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: Thu, 24 Nov 22