Latihan Soal Bab 4_Program Python
Nama : Asrika Said
NIM : 411423049
Prodi / Kelas : Pendidkan Matematika / B
Mata Kuliah : Komaputasi dan Pemrograman
Dosen Pengampu : Agusyarif Rezka Nuha, S.Pd. M.Si
1. Apa itu fungsi?
Dalam pemrograman, fungsi adalah sekumpulan instruksi yang dikelompokkan menjadi satu kesatuan untuk melakukan tugas tertentu. Fungsi memungkinkan Anda untuk mengorganisir kode, membuatnya lebih mudah dibaca, dan menghindari pengulangan kode. Dengan menggunakan fungsi, Anda dapat memanggilnya berulang kali di berbagai bagian program tanpa harus menulis ulang instruksi yang sama.
Ciri-ciri Fungsi
- Nama Fungsi: Setiap fungsi memiliki nama yang unik yang digunakan untuk memanggilnya.
- Parameter (Argumen): Fungsi dapat menerima masukan berupa parameter, yang memungkinkan pengguna untuk memberikan data yang berbeda saat memanggil fungsi.
- Nilai Kembali: Fungsi dapat mengembalikan nilai setelah menyelesaikan tugasnya. Namun, tidak semua fungsi harus mengembalikan nilai.
- Modularitas: Fungsi membantu memecah program besar menjadi bagian-bagian kecil yang lebih mudah dikelola.
2. Apa itu prosedur
Prosedur dalam pemrograman adalah sekumpulan instruksi yang dikelompokkan untuk melaksanakan tugas tertentu. Prosedur mirip dengan fungsi, tetapi biasanya tidak mengembalikan nilai setelah eksekusi. Tujuan utama dari prosedur adalah untuk menyederhanakan dan mengorganisir kode, sehingga membuatnya lebih terstruktur dan mudah dipahami.
Ketika prosedur dipanggil, semua instruksi di dalamnya dijalankan secara berurutan. Prosedur dapat menerima parameter, yang memungkinkan pengguna untuk memberikan input yang berbeda saat memanggilnya. Penggunaan prosedur meningkatkan keterbacaan kode, meminimalkan pengulangan, dan memudahkan pemeliharaan serta pengujian. Dengan cara ini, prosedur membantu dalam pengembangan perangkat lunak yang lebih efisien, terutama dalam proyek yang lebih besar dan kompleks.
3. Perbedaan Fungsi dengan Prosedur
Fungsi Mengembalikan Nilai, Prosedur Tidak:
- Fungsi: Dirancang untuk melakukan perhitungan atau pengolahan data dan mengembalikan hasil. Ini memungkinkan pengguna untuk mendapatkan nilai dari fungsi yang dapat digunakan dalam ekspresi lain, menjadikannya fleksibel untuk berbagai aplikasi.
- Prosedur: Fokus pada menjalankan serangkaian instruksi atau tugas tertentu tanpa mengembalikan nilai. Prosedur lebih banyak digunakan untuk menjalankan aksi, seperti mengubah status atau menampilkan informasi, tanpa perlu memberikan hasil kembali ke pemanggil.
Tujuan dan Penggunaan yang Berbeda:
- Fungsi: Tujuan utama fungsi adalah untuk menghasilkan output berdasarkan input. Oleh karena itu, fungsi sering digunakan dalam konteks perhitungan atau pengolahan data, di mana hasil dari fungsi diperlukan untuk langkah selanjutnya dalam program.
- Prosedur: Prosedur lebih berorientasi pada tindakan dan pengelolaan alur program. Misalnya, prosedur mungkin digunakan untuk mencetak laporan, menyimpan data, atau mengubah tampilan antarmuka pengguna, di mana hasilnya tidak perlu dikembalikan.
Struktur dan Sintaksis:
- Fungsi: Menggunakan kata kunci return untuk mengembalikan nilai. Ini adalah bagian penting dari definisi fungsi, karena menunjukkan bahwa fungsi memiliki hasil yang bisa digunakan.
- Prosedur: Tidak memerlukan pernyataan return, sehingga strukturnya lebih sederhana dalam hal ini. Prosedur lebih fokus pada eksekusi instruksi tanpa perlu memikirkan nilai yang dikembalikan.
Penggunaan Parameter:
- Fungsi: Parameter yang diterima oleh fungsi digunakan untuk menghasilkan nilai kembali. Ini menciptakan interaksi yang lebih dinamis, karena hasil dapat bervariasi berdasarkan input.
- Prosedur: Parameter yang diterima oleh prosedur biasanya digunakan untuk memodifikasi tindakan yang dilakukan oleh prosedur tanpa perlu mengembalikan nilai. Ini memungkinkan prosedur untuk berfungsi dalam konteks yang lebih luas tanpa terikat pada hasil spesifik.
Perbedaan antara fungsi dan prosedur muncul dari tujuan dan cara mereka dirancang untuk digunakan dalam pemrograman:
- Fungsi dirancang untuk memberikan hasil yang dapat diandalkan dan digunakan dalam berbagai konteks perhitungan atau pengolahan data. Dengan mengembalikan nilai, fungsi memfasilitasi pengembangan kode yang lebih modular dan dapat digunakan kembali, sedangkan
- Prosedur dirancang untuk melaksanakan tugas atau aksi tanpa fokus pada hasil. Ini membuat prosedur lebih sesuai untuk mengelola alur dan interaksi dalam program, terutama dalam konteks aplikasi yang lebih kompleks di mana efek samping dari suatu tindakan lebih penting daripada nilai yang dihasilkan.
4. Apa itu iteratif, rekursif, dan apa perbedaan keduanya
IteratifIteratif adalah pendekatan dalam pemrograman yang menggunakan loop (seperti for atau while) untuk mengulangi serangkaian instruksi hingga kondisi tertentu terpenuhi. Dalam metode ini, proses berulang dilakukan dengan memanfaatkan variabel kontrol yang diubah setiap iterasi. Pendekatan ini sering digunakan ketika jumlah pengulangan dapat ditentukan sebelumnya atau ketika proses yang berulang tidak terlalu kompleks. Contoh penggunaan iteratif adalah menghitung jumlah angka dalam sebuah daftar atau mencetak elemen dari sebuah array.
RekursifRekursif adalah pendekatan yang melibatkan fungsi yang memanggil dirinya sendiri untuk menyelesaikan suatu masalah. Rekursi biasanya digunakan untuk menyelesaikan masalah yang dapat dibagi menjadi sub-masalah yang lebih kecil dan serupa. Setiap panggilan fungsi rekursif biasanya memiliki kondisi dasar yang menghentikan proses rekursi. Contoh penggunaan rekursif adalah menghitung faktorial dari suatu angka atau mencari elemen dalam struktur data seperti pohon.
Berikut adalah penjelasan mengenai perbedaan antara iteratif dan rekursif:
- Metode Pengulangan:
Iteratif: Menggunakan loop (seperti for atau while) untuk mengulangi blok kode. Proses berulang ini dilakukan dengan mengubah variabel kontrol di setiap iterasi.
Rekursif: Menggunakan fungsi yang memanggil dirinya sendiri untuk menyelesaikan masalah. Rekursi membagi masalah menjadi sub-masalah yang lebih kecil.
- Kondisi Berhenti:
Iteratif: Memiliki kondisi yang ditetapkan dalam loop untuk menghentikan iterasi. Misalnya, loop akan berhenti ketika variabel kontrol mencapai nilai tertentu.
Rekursif: Memiliki kondisi dasar yang menghentikan panggilan fungsi rekursif. Tanpa kondisi ini, rekursi dapat menyebabkan stack overflow.
- Penggunaan Memori:
Iteratif: Umumnya lebih efisien dalam penggunaan memori, karena tidak menyimpan banyak panggilan fungsi dalam stack.
Rekursif: Dapat mengkonsumsi lebih banyak memori, karena setiap panggilan fungsi disimpan dalam stack hingga mencapai kondisi dasar.
- Keterbacaan Kode:
Iteratif: Kode dengan pendekatan iteratif bisa lebih panjang dan mungkin lebih sulit dibaca untuk masalah yang kompleks.
Rekursif: Kode rekursif seringkali lebih ringkas dan lebih mudah dipahami untuk masalah yang cocok, seperti struktur pohon atau algoritma tertentu.
- Contoh Penggunaan:
Iteratif: Banyak digunakan untuk menghitung total atau memproses elemen dalam daftar menggunakan loop.
Rekursif: Sering digunakan untuk algoritma seperti pencarian dalam pohon, menghitung faktorial, atau menyelesaikan masalah Fibonacci.
5. Membuat fungsi yang digunakan untuk mengecek suatu bilangan, apakah bilangan tersebut positif atau negatif
Penjelasan:
Definisi Fungsi cek_bilangan:
- Fungsi
cek_bilangan()
didefinisikan tanpa argumen, dan di dalamnya terdapatloop while True
: yang artinyaloop
ini akan berjalan terus-menerus sampai ada kondisi tertentu yang menghentikannya.
Menerima Input dari Pengguna:
Program meminta pengguna memasukkan sebuah angka melalui fungsi input()
. Nilai yang dimasukkan oleh pengguna kemudian dikonversi menjadi tipe float
, sehingga program bisa menerima bilangan desimal (seperti 2.5, -3.7) atau bilangan bulat.
Cek Positif, Negatif, atau Nol:
- Setelah input diterima, program melakukan pengecekan menggunakan struktur kontrol
if
,elif
, danelse
:
- Jika angka yang dimasukkan lebih besar dari nol, maka akan dicetak bahwa bilangan tersebut positif.
- Jika angka lebih kecil dari nol, dicetak bahwa bilangan tersebut negatif.
- Jika angka sama dengan nol, maka program akan mencetak "Bilangan tersebut adalah nol."
Tanya Apakah Ingin Melanjutkan:
- Setelah mencetak hasil, program akan menanyakan kepada pengguna apakah mereka ingin mengecek bilangan lain:
- Jawaban dari pengguna disimpan dalam variabel
lanjut
dan diubah menjadi huruf kecil(.lower())
agar jawaban seperti "YA", "ya", atau "Ya" bisa dibaca dengan benar.
Kondisi Penghentian Program:
- Program mengecek apakah pengguna tidak menjawab "ya":
- Jika pengguna menjawab selain "ya" (misalnya "tidak" atau "no"), program akan mencetak pesan "Terima kasih! Program selesai." dan
break
digunakan untuk keluar dariloop while
, sehingga program berhenti berjalan.
Memulai Program:
- Terakhir, di luar definisi fungsi, ada pemanggilan fungsi
cek_bilangan()
untuk memulai program:
Tahapan ini membuat program terus-menerus mengecek apakah bilangan yang dimasukkan positif, negatif, atau nol, lalu menanyakan apakah pengguna ingin melanjutkan atau tidak.
Berikut hasil jika program dijalankan:
6. Membuat fungsi yang digunakan untuk mengecek suatu bilangan. apakah bilangan bulat atau bilangan ganjil
Penjelasan Kode:
Definisi Fungsi
def cek_bulat_ganjil(angka):
mendefinisikan sebuah fungsi dengan namacek_bulat_ganjil
. Fungsi ini menerima satu parameter, yaituangka
. Fungsi ini bertujuan untuk mengecek apakah angka yang diberikan adalah bilangan bulat atau bilangan ganjil.if angka % 2 == 0:
Dalam fungsi, kita menggunakan operator modulo (%
) untuk memeriksa apakah angka habis dibagi 2. Jikaangka % 2 == 0
, maka bilangan tersebut dianggap genap. Dalam konteks ini, jika bilangan genap, fungsi mengembalikan string:"Bilangan tersebut adalah bilangan bulat."
return "Bilangan tersebut adalah bilangan ganjil." :
Jikaangka
tidak habis dibagi 2 (yaituangka % 2 != 0),
maka bilangan tersebut dianggap ganjil.
Fungsi akan mengembalikan string: "Bilangan tersebut adalah bilangan ganjil."
angka = int(input("Masukkan sebuah bilangan: ")):
Setelah mendefinisikan fungsi, program meminta pengguna untuk memasukkan bilangan melaluiinput().
Input ini kemudian diubah menjadi tipeint
(bilangan bulat) untuk memastikan bahwa operasi matematika dapat dilakukan.hasil = cek_bulat_ganjil(angka) :
Setelah pengguna memasukkan bilangan, program memanggil fungsicek_bulat_ganjil()
dengan argumenangka.
Hasil dari fungsi disimpan dalam variabelhasil.
print(hasil):
program mencetak hasil yang disimpan di variabelhasil,
yang memberikan informasi kepada pengguna apakah bilangan yang dimasukkan adalah bilangan bulat (genap) atau bilangan ganjil.
Contoh hasil saat program dijalankan:
7. Membuat fungsi yang digunakan untuk mengecek apakah suatu tahun adalah tahun kabisat atau bukan
Penjelasan Kode:
def cek_tahun_kabisat(tahun):
Fungsicek_tahun_kabisat
didefinisikan untuk mengecek apakah tahun yang diberikan adalah tahun kabisat.kabisat = tahun % 4 == 0 and (tahun % 100 != 0 or tahun % 400 == 0)
: Di dalam fungsi, kita menggunakan logika untuk menentukan apakah tahun tersebut kabisat, yaitu dapat dibagi 4 dan (tidak dapat dibagi 100 atau dapat dibagi 400).if kabisat:
return f"{tahun} adalah tahun kabisat."
: Jika kabisat bernilaiTrue
, fungsi mengembalikan string yang menyatakan tahun tersebut adalah tahun kabisat.else:
return f"{tahun} bukan tahun kabisat."
: Jikakabisat
bernilaiFalse
, fungsi mengembalikan string yang menyatakan tahun tersebut bukan tahun kabisat.tahun = int(input("Masukkan tahun: "))
: Program meminta pengguna untuk memasukkan tahun dan mengonversinya menjadi integer.hasil = cek_tahun_kabisat(tahun)
: Fungsi dipanggil dengan argumen tahun yang dimasukkan, dan hasilnya disimpan dalam variabelhasil
.print(hasil)
: Program mencetak hasil pengecekan apakah tahun tersebut adalah tahun kabisat atau bukan.
contoh hasil saat program dijalankan:
8. Membuat sebuah program yang menerapkan proses rekursif
Penjelasan Kode:
- Definisi Fungsi
def faktorial_recursive(n):
Di sini, fungsi faktorial_recursive
didefinisikan untuk menghitung faktorial dari bilangan bulat n
yang diberikan sebagai argumen.
- Kasus Dasar
if n <= 1:
return 1
Dalam rekursi, kita perlu menentukan kasus dasar untuk menghentikan proses. Dalam hal ini, jika n adalah 0 atau 1, fungsi akan mengembalikan 1. Ini sesuai dengan definisi faktorial, di mana 0! = 1
dan 1! = 1.
- Panggilan Rekursif
else:
return n * faktorial_recursive(n - 1)
Jika n lebih besar dari 1, fungsi akan memanggil dirinya sendiri dengan parameter n - 1. Proses ini akan terus berlanjut hingga mencapai kasus dasar. Hasil dari panggilan rekursif tersebut dikalikan dengan n saat ini, sehingga kita mendapatkan hasil faktorial.
- Input
angka = int(input("Masukkan sebuah bilangan bulat non-negatif: "))
: Program memeriksa apakah angka yang dimasukkan pengguna valid (non-negatif). Jika tidak, akan menampilkan pesan kesalahan.
- Menghitung dan Menampilkan Hasil
else:
hasil = faktorial_recursive(angka)
print(f"Faktorial dari {angka} adalah {hasil}.")
Jika input valid, program memanggil fungsi faktorial_recursive
dengan angka yang dimasukkan. Hasilnya kemudian dicetak ke layar.
Contoh hasil saat menjalankan program:
Latihan Soal Bab 3_Program Python
Nama : Asrika Said
NIM : 411423049
Prodi / Kelas : Pendidikan Matematika / B
Mata Kuliah : Komputasi dan Pemrograman
Dosen Pengampu : Agusyarif Rezka Nuha, S.Pd. M.Si
1. Apa yang dimaksud dengan counted loop dan uncounted loop?
- counted loop adalah perulangan yang udah ditentukan berapa kali akan diulang. Misalnya, kalau kita mau loop 5 kali, kita udah tau pasti bakal berhenti setelah 5 kali. Contohnya:
loop ini akan mengulang 5 kali, dari 0 sampai 4.
- uncounted loop adalah perulangan yang berjalan terus sampai suatu kondisi tertentu terpenuhi, jadi kita tidak tau pasti kapan loop akan berhenti. Contohnya:
loop ini akan berhenti setelah i tidak lagi kurang dari 5, jadi kita tidak langsung tau dari awal berapa kali bakal mengulang.
Jadi, counted loop punya jumlah iterasi yang pasti, sedangkan uncounted loop bergantung sama kondisi tertentu buat berhenti.
2. Apa yang dimaksud dengan nested loop?
Nested loop adalah struktur perulangan di dalam perulangan lainnya. Dalam hal ini, satu loop (perulangan) berada di dalam blok kode loop yang lain. Nested loop biasanya digunakan untuk menyelesaikan masalah yang melibatkan pengulangan yang kompleks, seperti ketika kita perlu bekerja dengan data dalam bentuk matriks atau tabel.
3. Apa yang dimaksud dengan controlled jump?
Controlled jump adalah pernyataan dalam pemrograman yang digunakan untuk mengubah alur eksekusi program dengan cara melompat ke bagian tertentu dari kode berdasarkan kondisi tertentu. Dengan menggunakan controlled jump, program dapat melanjutkan eksekusi dari titik yang berbeda, sehingga memberikan kontrol yang lebih besar atas bagaimana dan kapan bagian tertentu dari kode dijalankan.
4. Apa yang dimaksud dengan perulangan jenis iteratif?
Perulangan jenis iteratif adalah jenis perulangan dalam pemrograman yang dilakukan dengan cara mengulang blok kode tertentu secara berulang-ulang sampai kondisi tertentu terpenuhi atau jumlah iterasi yang diinginkan tercapai. Dalam perulangan iteratif, kita umumnya menggunakan struktur kontrol seperti for, while, atau do-while untuk menjalankan suatu blok kode.
5. Membuat tabel algoritma dengan kode semu dan program untuk membuat tabel perkalian dengan menggunakan perulangan.
Penjelasan Kode:
Loop Pertama:
- for a in range (0, 11) : Ini adalah loop luar yang mengulangi angka dari 0 hingga 10 (inklusif).
- for b in range(1, 6) : Ini adalah loop dalam yang mengulangi angka dari 1 hingga 5.
- print(f"{b} * {a} = {b * a}", end="\t") : Mencetak hasil perkalian b dengan a, dipisahkan dengan tab (\t) sehingga hasilnya tersusun rapi di satu baris.
- print() : Setelah menyelesaikan satu set hasil perkalian, program akan pindah ke baris baru.
Loop Kedua:
- for a in range(0, 11) : Mirip dengan loop pertama, mengulangi angka dari 0 hingga 10.
- for b in range(6, 11) : Mengulangi angka dari 6 hingga 10.
- print(f"{b} * {a} = {b * a}", end="\t") : Mencetak hasil perkalian b dengan a dengan format yang sama.
- print() : Pindah ke baris baru setelah menyelesaikan satu set hasil perkalian.
Ketika kode tersebut dijalankan, hasilnya akan terlihat seperti ini:
6. Membuat algoritma dengan kode semu dan program untuk konversi suhu dari Celcius, Reamur, Fahrenheit, dan Kelvin. Menggunakan rumus konversi suhu: R=(4/5)*C, K=C+273, F=(9/5)*C+32.
Penjelasan Kode:
- Fungsi konversi_suhu:
- Tujuan: Menghitung suhu dalam Reamur, Kelvin, dan Fahrenheit berdasarkan suhu dalam Celcius.
- Rumus:
- Return: Mengembalikan tiga nilai hasil konversi.
2. Input Batas Suhu:
- Meminta pengguna untuk memasukkan batas bawah dan batas atas suhu dalam Celcius.
- Menggunakan float(input(...)) untuk mengizinkan angka desimal.
3. Header Tabel:
- Menampilkan nama kolom untuk hasil konversi menggunakan format string untuk merapikan tampilan.
- Menampilkan garis pemisah dengan panjang 60 karakter.
4. Loop untuk Konversi:
- Menginisialisasi variabel celcius dengan batas_bawah.
- Menggunakan loop while untuk iterasi dari batas_bawah hingga batas_atas.
- Di dalam loop, fungsi konversi dipanggil, dan hasil konversi dicetak dalam format tabel.
- celcius diincrement sebanyak 1 untuk melanjutkan ke suhu berikutnya.
Contoh menjalankan program:
Jika kita memasukkan batas bawah 0 dan batas atas 5, outputnya akan terlihat seperti ini:
7. Membuat algoritma dengan kode semu dan program untuk menampilkan pola segitiga
Penjelasan Kode
- Input: Program meminta pengguna untuk memasukkan nilai n.
- Inisialisasi: Variabel angka diatur ke 1 untuk memulai penomoran.
- Loop Pertama: Mengiterasi dari 1 hingga n, untuk menentukan jumlah baris.
- Loop Kedua: Mengiterasi dari 1 hingga i, untuk menampilkan angka yang bertambah sesuai dengan nomor kolom.
- Print dengan Spasi: print(angka, end=" ") menampilkan angka diikuti dengan spasi tanpa pindah ke baris baru.
- Increment: angka += 1 untuk meningkatkan nilai angka untuk setiap output.
Hasil Menjalankan Program
Jika kita memasukkan n = 4, keluaran program akan terlihat seperti ini:
8. Membuat algoritma dengan kode semu dan program untuk menampilkan pola segitiga
Penjelasan Kode:
- Input: Program meminta pengguna untuk memasukkan nilai n.
- Inisialisasi: List huruf berisi huruf "V", "J", "K", "S", "G".
- Loop Pertama: Mengiterasi dari 1 hingga n, untuk menentukan jumlah baris.
- Loop Kedua: Mengiterasi dari 1 hingga i, untuk menampilkan huruf yang sama di setiap baris.
- Print dengan Spasi: print(huruf[i - 1], end=" ") menampilkan huruf diikuti dengan spasi tanpa pindah ke baris baru.
- Baris Baru: print() setelah loop dalam menambahkan pindah ke baris baru.
Hasil Menjalankan Program:
Jika kita memasukkan n=5, keluaran program akan terlihat seperti ini:
Program Python_Menghitung Luas dan Volume Bola
Nama : Asrika Said
NIM : 411423049
Prodi / Kelas : Pendidikan Matematika / B
Mata Kuliah : Komputasi Dan Pemrograman
Dosen Pengampu : Agusyarif Rezka Nuha, S.Pd., M.Si
Langkah-Langkah Menghitung Volume dan Luas Permukaan Bola
1. Inisialisasi Konstan
Kita menginisialisasi konstanta phi dengan nilai 3.14 , yang merupakan pendekatan untuk nilai phi.
2. Masukan Jari-Jari
Program meminta pengguna untuk memasukkan nilai jari-jari bola. Fungsi input ( ) mengembalikan nilai dalam bentuk string, sehingga kita mengubahnya menjadi float menggunakan float ( ) agar bisa digunakan dalam perhitungan.
3. Menghitung Volume Bola
Rumus untuk menghitung volume bola adalah 4/3 * phi * r**3. Kita mengalikan 4/3 dengan phi dan jari-jari r yang dipangkatkan 3 (r**3).
4. Menghitung Luas Permukaan Bola
Rumus untuk luas permukan bola adalah 4 * phi * r**3. Kita mengalikan 4 dengan phi dan jari-jari r yang dipangkatkan 2 (r**2).
5. Menampilkan Hasil
Program mencetak hasil perhitungan volume dan luas permukaan bola. Teks yang ditampilkan menjelaskan apa yang diwakili oleh nilai-nilai tersebut.
Ringkasan :
- Program ini menggunakan rumus matematika untuk menghitung dua aspek dari bola: volume dan luas permukaan, berdasarkan input jari-jari dari pengguna.
- Penting untuk memastikan bahwa rumus yang digunakan adalah benar, dan format output mudah dibaca.
Contoh Eksekusi Program
1. Menjalankan Program
Saat program dijalankan, kita akan melihat prompt untuk memasukkan jari-jari bola.
2. Input
Pengguna memasukkan nilai jari-jari. Dalam contoh ini, kita memasukkan 5.
3. Output
Setelah menghitung, program akan menampilkan hasil volume dan luas permukaan bola.
Ringkasan Langkah Eksekusi
- Kita memasukkan nilai jari-jari (misalnya 5).
- Program menghitung volume menggunakan rumus 4/3 phi r^3 dan luas permukaan menggunakan rumus 4 phi r^2.
- Hasil perhitungan ditampilkan di layar.
Contoh Perhitungan
- Volume : 4/3 x 3.14 x 5^3 = 4/3 x 3.14 x 125 = 523
- Luas Permukaan : 4 x 3.14 x 5^2 = 4 x 3.14 x 25 = 314
PKKMB 2023
PKKMB 2023 SERU!!!
Kategori
- Masih Kosong
Blogroll
- Masih Kosong