Spesifikasi program: INPUT: 1. Rumus suku ke-n (dalam n) dari barisan

Berikut ini adalah pertanyaan dari 4dministraktor pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas

Spesifikasi program:INPUT:
1. Rumus suku ke-n (dalam n) dari barisan bilangan
2. Nilai n.
OUTPUT:
n suku pertama dari barisan bilangan yang dimaksud.
BATASAN:
1. Jika terdapat koefisien (konstanta pengali) dari n, contohnya: 5n, maka input harus berupa "5*n", bukan "5n".
2. Rumus harus benar dalam n, maksudnya tidak ada variabel lain selain n.
3. Jenis barisan bilangan (aritmetika, geometri, bertingkat) tidak perlu ditentukan. Yang penting, dapat menampilkan n suku pertama sesuai rumus Un.
4. Tidak menangani barisan bilangan rekursif.

Buatlah program (Python/C++) yang memenuhi spesifikasi di atas. Sertakan listing program dan beberapa contoh hasil eksekusinya.

Jawaban dan Penjelasan

Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.

Kode Program (Python)

# maplambda.py
# oleh: hy
# Menampilkan n suku pertama dari barisan bilangan
# dengan input rumus Un dan n

def validasi_un(un: str) -> str:
   # Mengembalikan string rumus Un
   # yang sudah divalidasi
   # Jika tidak valid, kembalikan
   # string "invalid"
   un = un.strip().replace('^', '**')
   try:
       eval(un, {'n':1})
   except Exception as ex:
       print(f'{un}: Rumus suku ke-n TIDAK VALID.')
       return "invalid"
   return un

def barisan(un: str, n: int) -> list:
   # Mengembalikan list berisi
   # barisan bilangan berdasarkan
   # rumus suku ke-n (un) yang
   # diberikan
   return list(map(lambda n: eval(un), range(1, n+1)))

### Program Utama ###
print('\nBARISAN BILANGAN')
un = (input('Input rumus suku ke-n: '))
un_terformat = validasi_un(un)
if (un_terformat != "invalid"):
   n = int(input('Input banyak suku (n): '))
   if (n > 0):
       b = barisan(un_terformat, n)
       print('============================')
       print(f'-> Un = {un}')
       print(f'-> {n} suku pertama: {str(b)[1:-1]}')
   else:
       print('n = {n}: Nilai n TIDAK VALID.')
### Akhir Program Utama ###
_____________

Pembahasan

Untuk menyelesaikan persoalan ini, saya memilih menggunakan Python, karena pada Python terdapat fungsi lambdadanmap(), yang dapat menghasilkan nilai sesuai rumus pada lambda.

Contoh penggunaannya adalah sebagai berikut.

  • Misalkan: f(x) = x + 2, dan x = 3.
    >>> list(map(lambda x: x + 2, [3]))
    [5]
  • Misalkan: f(x) = x + 2, dan x = 1, 2, 3, 4, 5.
    >>> list(map(lambda x: x + 2, [1, 2, 3, 4, 5]))
    [3, 4, 5, 6, 7]
  • Dan seterusnya.

Kemudian, pada Python, juga terdapat fungsi eval() yang dapat mengevaluasi operasi aritmetika sesuai rumus dalam bentuk string (teks).

Contoh penggunaannya adalah sebagai berikut.

>>> eval("x + 2", {"x": 3})
5
>>> x = 100; eval("x - 2")
98
>>> eval("x + y + z", {"x": x, "y": 20, "z": 30})
150

Jadi, abstraksi rumus suku ke-n barisan bilangan dapat dilakukan dengan memanfaatkan map(), lambda, dan eval(). Fungsi eval() digunakan untuk menginterpretasikan rumus suku ke-n dalam bentuk string dari input.

Maka, jadilah fungsi barisan() seperti pada program di atas, yaitu:
def barisan(un: str, n: int) -> list:
   return list(map(lambda n: eval(un), range(1, n+1)))

Hanya 1 baris! Sederhana ya?

Contoh Hasil Eksekusi

  • Input tidak valid
    BARISAN BILANGAN
    Input rumus suku ke-n: 2n+3
    2n+3: Rumus suku ke-n TIDAK VALID.
  • Input: Un = 4*n + 3 (barisan aritmetika 7, 11, 15, 19, ...)
    BARISAN BILANGAN
    Input rumus suku ke-n: 4*n + 3    
    Input banyak suku (n): 10
    ============================
    -> Un = 4*n + 3
    -> 10 suku pertama: 7, 11, 15, 19, 23, 27, 31, 35, 39, 43
  • Input: Un = 2^(n-1) (barisan geometri 1, 2, 4, 8, ...)
    BARISAN BILANGAN
    Input rumus suku ke-n: 2^(n-1)
    Input banyak suku (n): 10
    ============================
    -> Un = 2^(n-1)
    -> 10 suku pertama: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512
  • Input: Un = 4*n^2 + 3*n + 2 (barisan aritmetika tingkat 2)
    BARISAN BILANGAN
    Input rumus suku ke-n: 4*n^2 + 3*n + 2  
    Input banyak suku (n): 10
    ============================
    -> Un = 4*n^2 + 3*n + 2
    -> 10 suku pertama: 9, 24, 47, 78, 117, 164, 219, 282, 353, 432
  • Input: n^3 + 2*n (barisan aritmetika tingkat 3)
    BARISAN BILANGAN
    Input rumus suku ke-n: n^3 + 2*n
    Input banyak suku (n): 10
    ============================
    -> Un = n^3 + 2*n
    -> 10 suku pertama: 3, 12, 33, 72, 135, 228, 357, 528, 747, 1020

(dapat juga dilihat pada gambar)

Kode Program (Python)# maplambda.py# oleh: hy# Menampilkan n suku pertama dari barisan bilangan# dengan input rumus Un dan ndef validasi_un(un: str) -> str:    # Mengembalikan string rumus Un    # yang sudah divalidasi    # Jika tidak valid, kembalikan    # string Kode Program (Python)# maplambda.py# oleh: hy# Menampilkan n suku pertama dari barisan bilangan# dengan input rumus Un dan ndef validasi_un(un: str) -> str:    # Mengembalikan string rumus Un    # yang sudah divalidasi    # Jika tidak valid, kembalikan    # string Kode Program (Python)# maplambda.py# oleh: hy# Menampilkan n suku pertama dari barisan bilangan# dengan input rumus Un dan ndef validasi_un(un: str) -> str:    # Mengembalikan string rumus Un    # yang sudah divalidasi    # Jika tidak valid, kembalikan    # string Kode Program (Python)# maplambda.py# oleh: hy# Menampilkan n suku pertama dari barisan bilangan# dengan input rumus Un dan ndef validasi_un(un: str) -> str:    # Mengembalikan string rumus Un    # yang sudah divalidasi    # Jika tidak valid, kembalikan    # string

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: Fri, 11 Nov 22