Algoritma Pemrograman Bab 9 - 13
Untuk bab 1 sampai UTS bab 8 bisa cek di https://agusnurwantomuslim.blogspot.com/2022/10/kelas-algoritma-pemrograman.html
[09]: Studi Kasus Tumpukan (Stack)
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan. Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentang Studi Kasus Tumpukan (Stack). Selamat belajar!
Pada bab ini mahasiswa akan membuat contoh sederhana pembuatan algoritma:
- Membalik kalimat
- Membalik bilangan
Tugas 09: Studi Kasus Tumpukan (Stack)
- Silakan kirim jawaban dari soal yang disampaikan pada bagian: TI307-09: Studi Kasus Tumpukan (Stack), soal latihan 8.3 di halaman 70.
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
8.3 Soal Latihan
Buatlah flowchart untuk mengecek suatu kalimat termasuk palindrom apa bukan.
Kalimat palindrom adalah kalimat yang susunannya sama dengan keadaan terbaliknya.
Contoh:
Input: Masukkan kalimat = “KASUR RUSAK”
Output: Kalimat termasuk palindrom
Input: Masukkan kalimat = “MAKAN MALAM”
Output: Kalimat tidak termasuk palindrom
Format draw.io : https://drive.google.com/file/d/1cjv9UPEUSArb-hYrTHzYCjW0m63MTJfL/view?usp=share_link
[10]: Studi Kasus Konversi Bilangan
Assalamu 'Alikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan. Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentang Studi Kasus Konversi Bilangan. Selamat belajar!
Materi PDF: TI307-10: Studi Kasus Konversi Bilangan
Aplikasi converter desimal ke biner dan sebaliknya: https://www.rapidtables.com/convert/number/binary-to-decimal.html
Tugas 10: Studi Kasus Konversi Bilangan
- Silakan kirim jawaban dari soal yang disampaikan pada bagian: TI307-10: Studi Kasus Konversi Bilangan, soal latihan 9.3 di halaman 78.
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
9.3 Latihan
9.3.1 Permasalahan
Buatlah flowchart untuk konversi bilangan desimal negatif ke biner (maksimum bilangan=-127).
Contoh:
Masukkan bilangan desimal : -1
Bilangan biner : 11111111
Masukkan bilangan desimal : -13
Bilangan biner : 11110011
9.3.2 Cara Penyelesaian Masalah
Karena batasan permasalahan bahwa maksimum bilangan adalah -127, maka total bit
yang dipakai adalah sebanyak 8 bit. Pertama kali, signed bit (bit pada depan) diset dengan
nilai 1 sebagai tanda negatif. Sisa 7 bit yang lainnya adalah nilai bit hasil konversi dari input
bilangan desimal yang positif. Selanjutnya, 7 bit sisa tersebut (tidak termasuk signed bit)
dibalik nilainya (0 menjadi 1, 1 menjadi 0). Kemudian 7 bit sisa ditambahkan dengan nilai bit1. Susunan bit keseluruhannya adalah hasil dari konversi desimal negatif. Untuk lebih
mudahnya, perhatikan ilustrasi berikut:
Url flowchart draw.io : https://drive.google.com/file/d/1HXEMNYXECe-8YWiRiRO7R2FotxZwZk7e/view?usp=sharing
[11]: Studi Kasus Operasi Matriks
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan.
Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentang Studi Kasus Operasi Matriks. Selamat belajar!
Materi PDF: TI307-10 Studi Kasus Operasi Matriks.pdf
Materi video 2:
Tugas 11: Studi Kasus Operasi Matriks
- Silakan kirim jawaban dari soal yang disampaikan pada bagian: TI307-11: Studi Kasus Operasi Matriks, soal latihan 10.2 di halaman 83--84.
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
10.2 10.2. Latihan
10.2.1 Permasalahan
Buatlah suatu flowchart untuk menyelesaikan operasi penambahan matriks
10.2.2 Cara Penyelesaian Masalah
Operasi penambahan matriks dilakukan dengan cara mengalikan setiap elemen baris
pada Matriks 1 dengan elemen kolom pada Matriks 2 secara berturut-turut, dan kemudian
masing-masing dari hasil perkalian tersebut diakumulasikan.
[12]: Studi Kasus Shortest Path Problem
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan.
Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentangStudi Kasus Shortest Path Problem. Selamat belajar!
Materi PDF: TI307-12: Studi Kasus Shortest Path Problem
Tugas 12: Studi Kasus Shortest Path Problem
- Silakan kirim jawaban dari soal yang disampaikan pada bagian: TI307-12: Studi KasusShortest Path Problem, soal latihan 11.2 di halaman 92.
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
Flowchart:
File google dokumen: https://docs.google.com/document/d/1i970-3mBUf2xQIY1cVAX5Rmy2awhfR6mtDy2cOBdacc/edit?usp=sharing
[13]: Python Dasar (Bagian 1)
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan.
Link video tutorial: https://drive.google.com/file/d/1FzdBIW-v6n5H3aJi1O-cPIi2xuHFegMf/view?usp=sharing
Materi PDF:
- Python Dasar 1: 01. HelloWorld
- Python Dasar 1: 01. HelloWorld
Tugas 13: Python Dasar (Bagian 1)Penugasan
- Buatkan kode program Python dari jawaban algoritma yang anda jawab pada tugas:
- Tugas 04: Studi Kasus Permasalahan Sederhana (soal latihan 4.4 di nomor halaman 50 dan 51.)
- Tugas 05: Studi Kasus Perbandingan (soal latihan 5.3 di halaman 55)
- Tugas 06: Studi Kasus Konversi (soal latihan 6.3 di halaman 59.)
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
Jawaban google dokumen: https://docs.google.com/document/d/1mz3vt0qKjm5NxK9ydUeyO2Y5QdoNwRcmOf9IFPQUtc8/edit?usp=sharing
Jawaban 04: Studi Kasus Permasalahan Sederhana (soal latihan 4.4 di nomor halaman 50 dan 51.)
a = input('Input variable a = ')
b = input('Input variable b = ')
c = input('Input variable c = ')
a = int(a)
b = int(b)
c = int(c)
D = (b*b) - (4*a*c)
print('variable D =',D)
d = D
if(D == 0):
print("Akar-akar X1=X2 real kembar")
X1 = -b / (2*a)
X2 = X1
elif(D > 0):
print("Akar-akar X1=X2 real berlainan")
X1 = (-b + (D)) / (2*a)
X2 = (-b - (D)) / (2*a)
else:
print("Akar-akar X1=X2 imajiner berlainan")
i = (-D) / (2*a)
X1 = ((-b / (2*a)) + (-D)) / (2 * a) * i
X2 = ((-b / (2*a)) + (-D)) / (2 * a) * i
print(X1, X2)
Tugas 05: Studi Kasus Perbandingan (soal latihan 5.3 di halaman 55)
diskon = 10
print("Diskon = 10%")
batas_diskon = 1500000
print("Batas diskon lebih besar dari ", batas_diskon)
uang = input("Input uang ")
uang = int(uang)
if(uang > batas_diskon):
total = uang - ((uang * diskon) / 100)
else:
total = uang
print("Uang yang harus dibayar: ", total)
Tugas 06: Studi Kasus Konversi (soal latihan 6.3 di halaman 59.)
deret = [8,3,5,2,7,9,6,4]
jumlah = len(deret)
bil_max = deret[0]
bil_min = deret[0]
_min = bil_min
_max = bil_max
for i, data in enumerate(deret):
if(data > _max):
_max = data
if(data < _min):
_min = data
print(_max, _min)
[14]: Python Dasar (Bagian 2)
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan.
Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentang Python Dasar (Bagian 2). Selamat belajar!
Materi PDF:
- Python Dasar 2: 07. Mengambil Input
- Python Dasar 2: 08. Menampilkan Output
- Python Dasar 2: 09. Operasi Percabangan
- Python Dasar 2: 10. Operasi Perulangan For
- Python Dasar 2: 11. Operasi Perulangan While
- Python Dasar 2: 12. Operasi Perulangan Bertingkat
Tugas 14: Python Dasar (Bagian 2)
- Buatkan kode program Python dari jawaban algoritma yang anda jawab pada tugas:
- Tugas 07: Studi Kasus Konversi Percabangan dan Perulangan (latihan 7.3 di halaman 64.)
- Tugas 09: Studi Kasus Tumpukan / Stack (soal latihan 8.3 di halaman 70.)
- Tugas 10: Studi Kasus Konversi Bilangan (soal latihan 9.3 di halaman 78.)
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
Jawaban google dokumen: https://docs.google.com/document/d/1FvlZ30yHq0b0aEaxU3ASJqi2o3PspX1fSDAGPIbqiVs/edit?usp=sharing
Jawaban: Tugas 07: Studi Kasus Konversi Percabangan dan Perulangan (latihan 7.3 di halaman 64.)
input_bola = input("Input bola = ")
input_bola = int(input_bola)
jumlah_bola = 0
for i in range(0, input_bola):
jumlah_bola += input_bola - i
print("Jumlah bola triangle = ", jumlah_bola)
Tugas 09: Studi Kasus Tumpukan / Stack (soal latihan 8.3 di halaman 70.)
kalimat = input("Input kalimat = ")
_str = []
for i, huruf in enumerate(kalimat):
_str.append(kalimat[len(kalimat)-(i+1)])
if(kalimat == "".join(_str)):
print("Kalimat termasuk palindrom")
else:
print("kalimat tidak termasuk palindrom")
Tugas 10: Studi Kasus Konversi Bilangan (soal latihan 9.3 di halaman 78.)
stack = []
output = [];
bil = input("Input bilangan = ")
bil = int(bil)
if(\
bil > -127 \
and bil < 0 \
):
while (bil * -1) > 0:
bil = int( bil * -1 )
sisa = bil % 2
bil = ( bil - sisa ) / 2
stack.append(sisa)
jumlah_stack = len(stack)
bil = bil * -1
print(stack)
while jumlah_stack <= 8:
stack.append(0)
jumlah_stack += 1
print(stack)
while len(stack) > 0:
sisa = stack.pop()
sisa = ( sisa + 1 ) % 2
output.append(str(sisa));
# print(sisa)
print("".join(output))
[15]: Python Dasar (Bagian 3)
Assalamu 'Alaikum Wr. Wb.
Bagaimana kabar kalian semua, semoga saja diberikan kesehatan.
Berjumpa kembali dikuliah ini. Sekarang kita akan mempelajari tentang Python Dasar (Bagian 3). Selamat belajar!
Materi PDF:
- Python Dasar 3: 13. Jenis Data Set
- Python Dasar 3: 14. Struktur Dictionary
- Python Dasar 3: 15. Fungsi
- Python Dasar 3: 16. Fungsi Rekursif
- Python Dasar 3: 17. Pass
- Python Dasar 3: 18. Perbedaan List Tuple Set
Tugas 15: Python Dasar (Bagian 3)
- Buatkan kode program Python dari jawaban algoritma yang anda jawab pada tugas:
- Tugas 11: Studi Kasus Operasi Matriks (soal latihan 10.2 di halaman 83--84)
- Tugas 12: Studi Kasus Shortest Path Problem (soal latihan 11.2 di halaman 92.)
- Buatkan jawabannya ke dalam bentuk PDF, kirim ke kolom File submissions.
- Segera selesaikan agar dapat melanjutkan ke materi di minggu selanjutnya!
Jawaban versi google dokumen: https://docs.google.com/document/d/1c5qHOJEm2SCb1t-FP9-EFTBH8te2DM_CQx4M4mLdp20/edit?usp=sharing
Jawaban: Tugas 11: Studi Kasus Operasi Matriks (soal latihan 10.2 di halaman 83--84)
M1 = [ [5, 2, 3], [1, 7, 1] ]
M2 = [ [1, 0], [1, 1], [2, 4] ]
print("M1 ", M1)
print("M2 ", M2)
M3 = {}
for i, d in enumerate(M1):
M3[i] = {}
for ii, dd in enumerate(M1[i]):
for j, k in enumerate(M2):
for jj, kk in enumerate(M2[j]):
M3[i][jj] = 0
for i, d in enumerate(M1):
for ii, dd in enumerate(M1[i]):
for j, k in enumerate(M2):
for jj, kk in enumerate(M2[j]):
if(ii == j):
M3[i][jj] += M1[i][ii] * M2[j][jj]
print(M3[i][jj], '=', M1[i][ii], '*', M2[j][jj])
print("M3", M3)
M4 = []
for i in range(0, len(M3)):
M4.append([])
for ii in range(0, len(M3[i])):
M4[i].append(M3[i][ii])
print("M4", M4)
Tugas 09: Tugas 12: Studi Kasus Shortest Path Problem (soal latihan 11.2 di halaman 92.)
def dijkstra(graph, start, end):
distances = {node: float('inf') for node in graph}
distances[start] = 0
previous_nodes = {node: None for node in graph}
unvisited_nodes = graph.copy()
while unvisited_nodes:
current_node = min(unvisited_nodes, key=lambda x: distances[x])
if distances[current_node] == float('inf'):
break
for neighbor, weight in graph[current_node].items():
new_distance = distances[current_node] + weight
if new_distance < distances[neighbor]:
distances[neighbor] = new_distance
previous_nodes[neighbor] = current_node
unvisited_nodes.pop(current_node)
path = []
node = end
while node != start:
path.append(node)
node = previous_nodes[node]
path.append(start)
path.reverse()
return path, distances[end]
graph = {1: {2: 1, 3: 3},
2: {3: 1, 5: 5},
3: {1: 3, 4: 2},
4: {5: 1},
5: {}}
shortest_path, shortest_distance = dijkstra(graph, 1, 5)
print(shortest_path)
print(shortest_distance)
UAS
Soal 1
Apa ekstensi file yang benar untuk berkas kode program Python?
a. .pt
b. .pyt
c. .pl
d. .pyth
e. .py
Jawab: E
Soal 2
Setiap perintah di dalam Python selalu diakhiri dengan tanda?
a. :
b. Semua salah.
c. ]
d. ;
e. }
Jawab: B
Soal 3
Bentuk umum perulangan (bahasa pemrograman berbasis C): do while adalah?
a. do (kondisi) while (pernyataan);
b. do {pernyataan} while (kondisi);
c. while (kondisi) pernyataan;
d. do (pernyataan) while (kondisi)
e. while (do) {pernyataan}
Jawab: B
Soal 4
Di bawah ini merupakan jenis data numerik, kecuali?
a. Float.
b. Semua benar.
c. Integer.
d. Double
e. Char
Jawab: E
Soal 5
Jenis data yang digunakan di pemrograman Python untuk bilangan pecahan adalah?
a. Float
b. Double
c. Char
d. Integer
e. String
Jawab: A
Soal 6
Dibawah ini adalah contoh cara yang tepat untuk deklarasi variabel bilangan dengan jenis integer di Python?
a. bilangan int;
b. bilangan = 12
c. int bilangan;
d. bilangan = 12;
e. var bilangan;
Jawab: B
Soal 7
Jenis data yang digunakan di pemrograman Python untuk bilangan bulat adalah ?
a. Double.
b. Char.
c. Float.
d. String.
e. Integer.
Jawab: E
Soal 8
Kode program continue berfungsi untuk meloncat ke pernyataan awal yang terdapat dalam blok perulangan tanpa menjalankan sisa perintah di bawah pernyataan continue tersebut. Pernyataan ini bernilai?
Pilih salah satu:
a. Benar
b. Salah
Jawab: A
Soal 9
Perulangan while akan mengecek kondisi di bagian akhir setelah melakukan iterasi minimal 1 kali. Pernyataan ini bernilai?
Pilih salah satu:
a. Benar
b.Salah
Jawab: B
Soal 10
Bagaimana cara membuat fungsi di Python?
a. (namaFungsi)
b. namaFungsi()
c. namaFungsi[]
d. function namaFungsi
e. def nama_fungsi():
Jawab: E
Soal 11
Suatu wadah (sebuah lokasi memori komputer) yang berfungsi untuk menampung data atau nilai yang dapat berubah-ubah selama program berjalan disebut?
a. define.
b. Method.
c. function.
d. Konstanta.
e. Variabel.
Jawab: E
Soal 12
Untuk melakukan operasi perkalian maka harus menggunakan operator?
a. Operator percabangan.
b. Operator logika.
c. Operator pembanding.
d. Operator aritmatika
e. Operator relasi.
Jawab: D
Soal 13
Operator pembanding digunakan untuk melakukan?
a. Penjumlahan antara 2 nilai.
b. Hubungan antara 2 nilai.
c. Percabangan antara 2 nilai.
d. Perbandingan antara 2 nilai.
e. Kombinasi antara 2 nilai.
Jawab: D
Soal 14
Berikut adalah contoh cara yang benar untuk mendeklarasikan array (list) di Python, kecuali?
a. warna = []
b. hobi = ("membaca")
c. user01 = ["julia", 13, "indonesia"]
d. buah = ["jeruk", "apel", "mangga", "duren"]
e. hobi = ["membaca"]
Jawab: B
Soal 15
Berikut adalah bentuk umum (bahasa pemrograman berbasis C) perulangan for, yaitu?
a. for (syarat; inisialisasi; modifier) pernyataan;
b. for (modifier; syarat; inisialisasi) pernyataan;
c. for (inisialisasi; syarat; modifier) pernyataan;
d. Semuanya salah.
e. for (inisialisasi; syarat) pernyataan;
Jawab: C
Soal 16
Kode perintah untuk menginput suatu nilai dari keyboard untuk diproses di dalam program Python adalah?
a. output()
b. cout
c. input()
d. getch
e. cin
Jawab: C
Soal 17
Di bawah ini adalah salah satu contoh operator pembanding?
a. **
b. %
c. //
d. ==
e. ||
Jawab: D
Soal 18
Apa sintaks yang benar untuk menampilkan jenis variabel atau objek di kode program Python?
a. print(typeOf(x))
b. Semua salah.
c. print(typeof x)
d. print(type(x))
e. print(typeof(x))
Jawab: D
Soal 19
Array (list) di Python dapat menyimpan banyak data dengan jenis data yang berbeda. Pernyataan ini bernilai?
Pilih salah satu:
a. Benar
b. Salah
Jawab: A
Soal 20
Kata kunci yang digunakan untuk menyatakan nilai balikan di dalam fungsi?
a. return
b. get
c. Semua salah.
d. void
e. break
Jawab: A
Soal 21
Berikut ini contoh operator aritmatika, kecuali?
a. /
b. *
c. +
d. Semua benar.
e. <=
Jawab: E
Soal 22
Di bawah ini contoh operator logika, kecuali?
a. ||
b. Semua salah.
c. !
d. &&
e. **
Jawab: E
Soal 23
Berikut ini adalah operator increment dan decrement?
a. || dan &&
b. ++ dan --
c. -- dan !!
d. ++ dan **
e. // dan ||
Jawab: B
Soal 24
Berikut adalah struktur percabangan atau pemilihan di Python, kecuali?
a. for
b. if
c. if else
d. Semua benar.
e. elif
Jawab: A
Soal 25
Indeks array (list) dimulai dari 1. Pernyataan ini bernilai?
Pilih salah satu:
a. Benar
b. Salah
Jawab: B
Soal 26
Perhatikan kode program Python di bawah ini:
umur = 14
if umur <= 18:
if umur <= 10:
print("Anak-anak")
else:
print("Remaja")
else:
print("Bukan usia anak maupun remaja")
Program tersebut menghasilkan keluaran?
a. Semua salah.
b. Error
c. Anak-anak
d. Remaja
e. Bukan usia anak maupun remaja
Jawab: D
Soal 27
Berikut adalah pernyataan yang digunakan untuk menghentikan perulangan?
a. break
b. return
c. exit
d. stop
e. continue
Jawab: A
Soal 28
Untuk mendeklarasikan array (list) di Python, ditandai dengan simbol?
a. ||
b. <>
c. []
d ()
e. {}
Jawab: C
Soal 29
Bagaimana cara membuat komentar di Python?
a. // Ini komentar
b. < Ini komentar >
c. /* Ini komentar */
d. /* Ini komentar
e. # Ini komentar
Jawab: E
Soal 30
Berikut bentuk penulisan pernyataan if yang benar di bahasa pemrograman Python yaitu?
a. if x > y then:
b. if (x > y)
c. if (x > y) then:
d. if x > y:
e. Semua benar.
Jawab: D
Soal 31
Konstanta akan menampung nilai yang TIDAK dapat diubah-ubah selama program dijalankan. Pernyataan ini bernilai?
Pilih salah satu:
a. Benar
b. Salah
Jawab: A
Soal 32
Jenis data apa yang digunakan untuk menyimpan variabel di pemrograman Python dengan nilai teks?
a. Txt.
b. Float.
c. Double.
d. String.
e. Integer.
Jawab: D
Soal 33
Tipe data yang digunakan untuk menghasilkan nilai TRUE dan FALSE adalah?
a. Boolean.
b. Integer.
c. Double.
d. Semua salah.
e. Float.
Jawab: A
Soal 34
Perhatikan kode program Python berikut ini:
def f(x):
return str(x * 3) + '!'
print(f('informatika'))
Program tersebut menghasilkan keluaran?
a. informatikainformatikainformatika
b. informatikainformatikainformatika!
c. Semua salah.
d. Error
e. xxx!
Jawab: B
Soal 35
Berikut sintak yang benar untuk menghasilkan keluaran Hello World di Python ?
a. print << "Hello World";
b. puts("Hello World")
c. cout << "Hello World";
d. System.out.print("Hello World");
e. print("Hello World")
Jawab: E
Soal 36
Berikut ini tidak berhubungan dengan instruksi perulangan (loops) di Python?
a. continue
b. While
c. Switch
d. break
e. For
Jawab: C
Soal 37
Perhatikan kode program Python berikut ini:
def penjumlahan(a, b):
return a + b
print("Hasil penjumlahan 20 + 4 = ", penjumlahan(20,4))
Program tersebut menggunakan?
a. Class.
b. Fungsi.
c. Prosedur.
d. Object.
e. Array.
Jawab: B
Soal 38
Perhatikan kode program Python berikut:
for i in range(10):
if i == 5:
continue
else:
print(i)
Program tersebut menghasilkan keluaran?
a. Angka 0 sampai dengan 5.
b. Angka 0 sampai dengan 9.
c. Angka 1 sampai dengan 9.
d. Angka 0 sampai dengan 9, kecuali 5.
e. Angka 1 sampai dengan 10, kecuali 5.
Jawab: D
Soal 39
Berikut adalah contoh cara di pemrograman Python yang berfungsi untuk menambahkan kode atau modul lain, kecuali?
a. from math import pi
b. import mod as my_module
c. from math import *
d. #include <iostream>
e. import math
Jawab: D
Soal 40
Method atau fungsi yang digunakan untuk mendapatkan panjang string ?
a. len()
b. length()
c. Semua salah.
d. getLen()
e. getZise()
Jawab: A
Komentar
Posting Komentar
Semoga bermanfaat dunia dan akhirat