Buatlah sebuah program (Python/C++) yang dapat menentukan jenis barisan bilangan (aritmetika atau geometri, atau bukan keduanya) dari input yang berupa string dari barisan bilangan. Contoh: Input: 3, 7, 11, 15, 19 Output: Barisan aritmetika
def info_barisan(barisan: list) -> tuple: jenis = [ "BARISAN ARITMETIKA", "BARISAN GEOMETRI", "BUKAN BARISAN ARITMETIKA ATAU GEOMETRI", "TIDAK DAPAT DITENTUKAN" ] # Jika ukuran list barisan kurang dari 3, # maka jenis barisan tidak dapat ditentukan if (len(barisan) < 3): return (jenis[3], "")
# Pemeriksaan suku-suku # Asumsikan barisan adalah barisan aritmetika aritmetika = True beda = barisan[1] - barisan[0] for i in range(1, len(barisan)-1): if (barisan[i+1] - barisan[i] != beda): aritmetika = False break # Jika bukan barisan aritmetika, # maka asumsikan barisan adalah barisan geometri. if (not aritmetika): geometri = True rasio = barisan[1] / barisan[0] for i in range(1, len(barisan)-1): if (barisan[i+1] / barisan[i] != rasio): geometri = False break # Pengembalian nilai jenis barisan # beserta informasi suku pertama dan beda/rasio str_info = f'suku pertama = {barisan[0]} dan ' str_info += f'{"beda" if aritmetika else "rasio"} = ' str_info += f'{str(beda) if aritmetika else str(rasio)}' return (jenis[0], str_info) if aritmetika else ( (jenis[1], str_info) if geometri else (jenis[2], "") )
### Program Utama if __name__ == '__main__': print("\nMenentukan Jenis Barisan Bilangan") print("=================================") barisan = [float(item) for item in input("Input barisan (dipisahkan koma): ").split(",")] info_barisan_bilangan = info_barisan(barisan) print(f"=> Jenis barisan bilangan: {info_barisan_bilangan[0]}") if (info_barisan_bilangan[1] != ""): print(f" dengan {info_barisan_bilangan[1]}") ### Akhir Program Utama _________________
Pembahasan
Untuk persoalan ini, secara garis besar algoritmanya adalah:
Baca input barisan bilangan
Jika barisan bilangan (dari input) kurang dari 3 suku, maka jenis barisan bilangan tidak dapat ditentukan.
Jika sebaliknya: 1. Apakah barisan bilangan merupakan barisan aritmetika? 2. Jika bukan, apakah barisan bilangan merupakan barisan geometri?
Output jenis barisan bilangan (beserta informasi).
Pada penentuan jenis barisan, pertama-tama diasumsikan barisan bilangan merupakan barisan aritmetika. Lalu, beda antar suku dibandingkan. Jika terdapat beda/selisih yang tidak sama dengan beda/selisih sebelumnya, maka barisan tersebut bukan barisan aritmetika.
Lanjutkan dengan asumsi bahwa barisan bilangan merupakan barisan geometri. Lalu, rasio antar suku dibandingkan. Jika terdapat rasio yang tidak sama dengan rasio sebelumnya, maka barisan tersebut bukan barisan geometri.
Jika barisan tersebut bukan barisan aritmetika maupun geometri, maka jenis barisan tidak diketahui. Mungkin barisan bilangan berjenis khusus. Hal ini tidak perlu kita selidiki lebih lanjut, karena berada di luar ruang lingkup permasalahan. Yang penting, output-kan saja bahwa barisan bilangan bukan berjenis barisan aritmetika maupun geometri.
Silahkan amati alur program di atas. Saya rasa, komentar-komentar pada program sudah cukup dapat menjelaskannya.
Contoh hasil eksekusi dapat dilihat pada gambar. Pada contoh terakhir, saya inputkan barisan bilangan Fibonacci. Output yang diharapkan adalah barisan bukan berjenis aritmetika atau geometri.
2 votes Thanks 1
4dministraktor
terima kasih kak. suka banget, jd lebih semangat.
Kode Program (Python)
def info_barisan(barisan: list) -> tuple:
jenis = [
"BARISAN ARITMETIKA",
"BARISAN GEOMETRI",
"BUKAN BARISAN ARITMETIKA ATAU GEOMETRI",
"TIDAK DAPAT DITENTUKAN"
]
# Jika ukuran list barisan kurang dari 3,
# maka jenis barisan tidak dapat ditentukan
if (len(barisan) < 3): return (jenis[3], "")
# Pemeriksaan suku-suku
# Asumsikan barisan adalah barisan aritmetika
aritmetika = True
beda = barisan[1] - barisan[0]
for i in range(1, len(barisan)-1):
if (barisan[i+1] - barisan[i] != beda):
aritmetika = False
break
# Jika bukan barisan aritmetika,
# maka asumsikan barisan adalah barisan geometri.
if (not aritmetika):
geometri = True
rasio = barisan[1] / barisan[0]
for i in range(1, len(barisan)-1):
if (barisan[i+1] / barisan[i] != rasio):
geometri = False
break
# Pengembalian nilai jenis barisan
# beserta informasi suku pertama dan beda/rasio
str_info = f'suku pertama = {barisan[0]} dan '
str_info += f'{"beda" if aritmetika else "rasio"} = '
str_info += f'{str(beda) if aritmetika else str(rasio)}'
return (jenis[0], str_info) if aritmetika else (
(jenis[1], str_info) if geometri else (jenis[2], "")
)
### Program Utama
if __name__ == '__main__':
print("\nMenentukan Jenis Barisan Bilangan")
print("=================================")
barisan = [float(item) for item in input("Input barisan (dipisahkan koma): ").split(",")]
info_barisan_bilangan = info_barisan(barisan)
print(f"=> Jenis barisan bilangan: {info_barisan_bilangan[0]}")
if (info_barisan_bilangan[1] != ""):
print(f" dengan {info_barisan_bilangan[1]}")
### Akhir Program Utama
_________________
Pembahasan
Untuk persoalan ini, secara garis besar algoritmanya adalah:
1. Apakah barisan bilangan merupakan barisan aritmetika?
2. Jika bukan, apakah barisan bilangan merupakan barisan geometri?
Pada penentuan jenis barisan, pertama-tama diasumsikan barisan bilangan merupakan barisan aritmetika. Lalu, beda antar suku dibandingkan. Jika terdapat beda/selisih yang tidak sama dengan beda/selisih sebelumnya, maka barisan tersebut bukan barisan aritmetika.
Lanjutkan dengan asumsi bahwa barisan bilangan merupakan barisan geometri. Lalu, rasio antar suku dibandingkan. Jika terdapat rasio yang tidak sama dengan rasio sebelumnya, maka barisan tersebut bukan barisan geometri.
Jika barisan tersebut bukan barisan aritmetika maupun geometri, maka jenis barisan tidak diketahui. Mungkin barisan bilangan berjenis khusus. Hal ini tidak perlu kita selidiki lebih lanjut, karena berada di luar ruang lingkup permasalahan. Yang penting, output-kan saja bahwa barisan bilangan bukan berjenis barisan aritmetika maupun geometri.
Silahkan amati alur program di atas. Saya rasa, komentar-komentar pada program sudah cukup dapat menjelaskannya.
Contoh hasil eksekusi dapat dilihat pada gambar. Pada contoh terakhir, saya inputkan barisan bilangan Fibonacci. Output yang diharapkan adalah barisan bukan berjenis aritmetika atau geometri.