Algoritma Materi Informatika Kelas IX SMP
ALGORITMA
Materi Informatika Kelas IX
Oleh: Annisa Syafira, S.Pd.
A. Pengertian Algoritma
Algoritma adalah urutan dari sejumlah langkah yang logis dan sistematis untuk memecahkan suatu masalah tertentu. Algoritma berisi langkah-langkah yang harus dilakukan secara teratur agar suatu permasalahan dapat diselesaikan dan menghasilkan tujuan atau keluaran yang diinginkan.
Dalam kehidupan sehari-hari, sebenarnya kita sering menggunakan algoritma tanpa menyadarinya. Misalnya, ketika seseorang ingin membuat teh manis. Ia harus melakukan beberapa langkah, seperti menyiapkan gelas, memasukkan teh, menambahkan gula, menuangkan air panas, kemudian mengaduknya. Langkah-langkah tersebut dilakukan secara berurutan agar menghasilkan teh manis.
Dalam dunia Informatika, algoritma memiliki peranan yang sangat penting karena komputer tidak dapat menyelesaikan suatu masalah tanpa diberikan instruksi yang jelas. Komputer bekerja dengan mengikuti perintah yang telah disusun oleh manusia.
Beberapa ahli menganggap algoritma sebagai urutan langkah-langkah yang harus diikuti dalam matematika atau perhitungan untuk memecahkan suatu masalah, terutama masalah yang berkaitan dengan komputer.
Dengan demikian, semua susunan langkah yang disusun secara logis, sistematis, dan berurutan untuk menyelesaikan suatu masalah dapat disebut sebagai algoritma.
Algoritma umumnya digunakan untuk melakukan berbagai kegiatan dalam komputer, seperti:
1. melakukan perhitungan;
2. melakukan proses pengambilan keputusan;
3. melakukan inferensi atau penarikan kesimpulan secara otomatis;
4. mengolah data;
5. menjalankan suatu program;
6. menghasilkan keluaran atau output tertentu.
Algoritma menjadi dasar penting dalam pemrograman karena sebelum sebuah program dibuat, seorang programmer perlu menentukan terlebih dahulu langkah-langkah penyelesaian masalahnya.
B. Fungsi Algoritma
Pada dasarnya, fungsi utama dari algoritma adalah untuk memecahkan suatu masalah. Dalam pemrograman, algoritma membantu seseorang menyusun langkah-langkah penyelesaian masalah secara teratur sebelum langkah tersebut diterjemahkan ke dalam bahasa pemrograman.
Algoritma merupakan hasil dari pemikiran yang terkonsep sehingga perintah-perintah yang terdapat di dalamnya dapat dilaksanakan oleh komputer melalui bahasa pemrograman.
Berikut beberapa fungsi dan manfaat algoritma.
1. Memecahkan masalah yang rumit
Semakin rumit suatu program yang dibuat, semakin besar pula kemungkinan munculnya berbagai permasalahan. Namun, serumit apa pun masalah yang dihadapi, jika sejak awal menggunakan algoritma yang tepat, proses pencarian dan penyelesaian masalah dapat dilakukan secara lebih teratur.
Algoritma membantu kita memecah masalah menjadi beberapa langkah kecil sehingga masalah yang besar menjadi lebih mudah dipahami dan diselesaikan.
Sebagai contoh, ketika ingin membuat program untuk menentukan nilai akhir siswa, masalah tersebut dapat dibagi menjadi beberapa langkah:
1. memasukkan nilai tugas;
2. memasukkan nilai ujian;
3. menghitung nilai rata-rata;
4. menentukan apakah siswa lulus atau tidak;
5. menampilkan hasil.
Dengan pembagian langkah tersebut, masalah yang awalnya terlihat rumit menjadi lebih terstruktur.
2. Membuat program lebih sederhana
Dalam sebuah program atau aplikasi, biasanya terdapat banyak fungsi yang kemudian dirangkai menjadi satu fungsi utama.
Penggunaan algoritma berperan penting karena algoritma dapat membantu menyusun berbagai fungsi tersebut secara teratur sehingga menghasilkan sebuah program yang dapat bekerja dengan baik.
Algoritma membantu programmer untuk menentukan:
1. apa yang harus dilakukan terlebih dahulu;
2. proses apa yang dilakukan setelahnya;
3. kondisi apa yang harus diperiksa;
4. kapan suatu proses harus diulang;
5. kapan proses harus dihentikan.
Dengan demikian, algoritma dapat membuat proses pembuatan program menjadi lebih sederhana dan terarah.
3. Dapat digunakan secara berulang
Dalam dunia pemrograman, bahasa pemrograman, perangkat lunak, dan berbagai tools terus mengalami perkembangan dan pembaruan.
Namun, logika dari sebuah algoritma dapat digunakan kembali apabila permasalahan yang diselesaikan masih sama.
Sebagai contoh, algoritma untuk menghitung luas persegi panjang tetap dapat digunakan meskipun program tersebut dibuat menggunakan bahasa pemrograman yang berbeda.
Perbedaan bahasa pemrograman dan tools hanya menyebabkan cara penulisan programnya berbeda. Sementara itu, langkah-langkah logis untuk menyelesaikan masalahnya dapat tetap sama.
Oleh karena itu, algoritma dapat digunakan lebih dari satu kali selama permasalahan dan tujuan yang ingin dicapai masih sesuai.
C. Jenis Algoritma
Berbagai jenis algoritma dikembangkan untuk menangani berbagai macam masalah atau tugas. Beberapa jenis algoritma yang umum digunakan antara lain algoritma pengurutan, algoritma pencarian, dan algoritma rekursif.
1. Algoritma pengurutan
Algoritma pengurutan digunakan untuk mengurutkan elemen-elemen data dalam urutan tertentu.
Data dapat diurutkan dari:
1. nilai terkecil ke nilai terbesar;
2. nilai terbesar ke nilai terkecil;
3. abjad A sampai Z;
4. abjad Z sampai A;
5. atau berdasarkan aturan tertentu.
Contohnya, terdapat data nilai siswa:
80, 65, 90, 75, 85
Jika diurutkan dari nilai terkecil ke terbesar, hasilnya:
65, 75, 80, 85, 90
Beberapa contoh algoritma pengurutan adalah:
1. Bubble Sort
2. Insertion Sort
3. Quick Sort
Algoritma pengurutan sangat berguna ketika kita memiliki banyak data dan ingin membuat data tersebut menjadi lebih teratur sehingga lebih mudah digunakan atau dianalisis.
2. Algoritma pencarian
Algoritma pencarian digunakan untuk menemukan nilai atau elemen tertentu dalam sekumpulan data.
Algoritma ini membantu menentukan apakah suatu data terdapat di dalam kumpulan data atau tidak.
Contohnya, terdapat daftar nama siswa:
Andi
Budi
Citra
Dinda
Eko
Kemudian kita ingin mencari apakah nama Citra terdapat dalam daftar tersebut.
Algoritma pencarian akan memeriksa data untuk menemukan nama yang dicari.
Beberapa contoh algoritma pencarian antara lain:
1. Linear Search
2. Binary Search
Linear Search dapat dilakukan dengan memeriksa data satu per satu dari awal sampai menemukan data yang dicari.
Sementara itu, Binary Search bekerja dengan cara membagi data menjadi beberapa bagian. Binary Search biasanya digunakan pada data yang sudah terurut.
3. Algoritma rekursif
Algoritma rekursif memanfaatkan konsep pemanggilan dirinya sendiri.
Algoritma ini dapat memecahkan masalah dengan membaginya menjadi submasalah yang lebih kecil. Setelah submasalah tersebut diselesaikan, hasilnya digunakan untuk menyelesaikan masalah yang lebih besar.
Contoh algoritma rekursif antara lain:
1. Faktorial
2. Fibonacci
Konsep rekursif dapat dibayangkan seperti sebuah proses yang terus memanggil proses yang sama dengan ukuran masalah yang semakin kecil hingga mencapai kondisi tertentu yang membuat proses berhenti.
D. Notasi Algoritma
Notasi algoritma merupakan cara untuk menuliskan atau menggambarkan langkah-langkah algoritma agar mudah dibaca, dipahami, dan dijalankan.
Keberadaan notasi algoritma bukan sebagai notasi dalam bahasa pemrograman tertentu. Artinya, seseorang dapat membuat notasi algoritma terlebih dahulu sebelum menerjemahkannya ke dalam bahasa pemrograman.
Hal yang paling penting dalam membuat notasi algoritma adalah mudah dibaca dan dimengerti oleh siapa pun.
Kepatuhan terhadap notasi algoritma juga perlu diperhatikan untuk menghindari kesalahan.
Secara umum, terdapat tiga bentuk notasi algoritma, yaitu:
1. notasi deskriptif;
2. notasi bagan alir atau flowchart;
3. notasi menggunakan pseudocode.
4. Notasi deskriptif
Notasi algoritma deskriptif dilakukan dengan cara menuliskan instruksi-instruksi yang harus dilaksanakan dalam bentuk uraian atau kalimat deskriptif menggunakan bahasa yang jelas dan tidak ambigu.
Notasi ini biasanya menggunakan bahasa manusia atau bahasa sehari-hari sehingga mudah dipahami.
Notasi deskriptif disarankan untuk algoritma yang pendek karena apabila digunakan untuk algoritma yang terlalu panjang, notasi deskriptif menjadi kurang efektif.
Ciri-ciri notasi deskriptif:
1. menggunakan bahasa sehari-hari;
2. mudah dipahami oleh manusia;
3. langkah-langkah dituliskan secara berurutan;
4. tidak terikat pada bahasa pemrograman tertentu;
5. kurang efektif jika digunakan untuk algoritma yang sangat panjang.
Secara garis besar, notasi deskriptif tersusun atas tiga bagian utama.
a. Bagian judul
Bagian judul merupakan bagian yang terdiri atas nama algoritma dan penjelasan atau spesifikasi algoritma tersebut.
Contohnya:
Algoritma Menghitung Luas Persegi Panjang
b. Bagian deklarasi
Bagian deklarasi merupakan bagian yang digunakan untuk mendefinisikan berbagai nama yang digunakan pada algoritma, seperti:
1. variabel;
2. konstanta;
3. tipe data;
4. fungsi.
c. Bagian deskripsi
Bagian deskripsi merupakan bagian inti dari algoritma yang berisi uraian langkah-langkah penyelesaian masalah.
Contohnya:
Algoritma Membuat Teh Manis
1. Siapkan gelas.
2. Masukkan teh ke dalam gelas.
3. Tambahkan gula.
4. Tuangkan air panas.
5. Aduk hingga gula larut.
6. Teh siap diminum.
Langkah-langkah tersebut merupakan algoritma dalam bentuk deskriptif.
2. Notasi bagan alir (flowchart)
Flowchart atau bagan alir digunakan untuk mengekspresikan instruksi-instruksi algoritma dalam bentuk visual menggunakan simbol-simbol tertentu.
Flowchart menggunakan berbagai bentuk geometri, seperti:
1. persegi panjang;
2. lingkaran;
3. jajargenjang;
4. belah ketupat;
5. dan bentuk lainnya.
Kelebihan utama flowchart adalah kita dapat melihat kumpulan instruksi algoritma dalam bentuk visual sehingga alur proses lebih mudah dipahami.
Flowchart cocok digunakan untuk algoritma atau program yang tidak terlalu besar atau kompleks.
Kelebihan flowchart antara lain:
1. dapat menggambarkan algoritma secara visual;
2. memudahkan seseorang memahami alur proses;
3. menunjukkan hubungan antara satu langkah dengan langkah lainnya;
4. membantu menemukan kesalahan dalam alur algoritma;
5. dapat digunakan sebagai dasar sebelum membuat program.
Selain memiliki kelebihan, flowchart juga memiliki beberapa kekurangan.
Flowchart kurang praktis apabila algoritmanya sangat besar karena:
1. membutuhkan banyak tempat;
2. dapat membutuhkan beberapa lembar kertas;
3. alur yang terlalu kompleks dapat membuat gambar sulit dibaca;
4. proses mengubah flowchart menjadi bahasa pemrograman terkadang membutuhkan usaha lebih.
Simbol-simbol flowchart yang umum digunakan merupakan simbol yang dikeluarkan oleh ANSI dan ISO.
Simbol-simbol flowchart
1. Flow line atau flow arrow
Garis alur atau flow line merupakan garis yang menghubungkan satu simbol dengan simbol lainnya.
Garis ini menunjukkan urutan atau langkah sistematis dari perintah yang dikerjakan dalam suatu proses.
Garis ini juga disebut sebagai connection line.
2. Terminal atau terminator
Simbol terminal atau terminator digunakan untuk menunjukkan awal dan akhir suatu program atau proses.
Biasanya simbol ini dilengkapi dengan kata:
Mulai
Start
Selesai
End
Simbol ini menunjukkan kapan sebuah proses algoritma dimulai dan kapan proses tersebut berakhir.
3. Input atau output
Simbol input/output digunakan untuk menunjukkan proses memasukkan data atau mengeluarkan data.
Simbol ini digunakan untuk:
1. memasukkan nilai ke dalam program;
2. menyimpan nilai pada variabel;
3. menampilkan nilai yang tersimpan di dalam variabel;
4. menghasilkan keluaran dari suatu proses.
Contohnya:
Input: memasukkan nilai siswa.
Output: menampilkan nilai siswa.
4. Proses
Simbol proses digunakan untuk menunjukkan suatu perintah atau pengolahan data.
Pengolahan tersebut dapat berupa:
1. perhitungan;
2. pengolahan nilai;
3. pengolahan bentuk;
4. perubahan data;
5. atau proses lainnya.
Contohnya:
Hitung luas = panjang × lebar
5. Kondisi
Simbol kondisi berbentuk belah ketupat.
Simbol ini menunjukkan operasi kondisi yang digunakan dalam proses seleksi atau pengambilan keputusan.
Hasil dari kondisi biasanya menghasilkan dua kemungkinan, yaitu:
Benar / Ya
Salah / Tidak
Contohnya:
Apakah nilai ≥ 75?
Jika Ya, maka siswa dinyatakan lulus.
Jika Tidak, maka siswa dinyatakan belum lulus.
6. One page connector
One Page Connector merupakan simbol yang digunakan untuk menghubungkan suatu algoritma dengan bagian algoritma lainnya pada satu program yang sama di dalam halaman yang sama.
Simbol ini membantu menghindari penggunaan garis alur yang terlalu panjang atau saling berpotongan.
7. Off page connector
Off Page Connector digunakan untuk menghubungkan suatu algoritma dengan bagian algoritma lainnya pada program yang sama tetapi berada di halaman yang berbeda.
Simbol ini berguna ketika sebuah flowchart terlalu panjang sehingga harus dilanjutkan pada halaman berikutnya.
8. Preparation
Simbol preparation digunakan untuk menunjukkan persiapan, inisialisasi, atau pengaturan sebelum suatu perintah dijalankan.
Dengan kata lain, simbol ini digunakan ketika terdapat langkah persiapan sebelum proses utama dilakukan.
9. Manual input
Manual Input merupakan simbol yang menunjukkan proses pemberian nilai pada variabel menggunakan perangkat input, misalnya keyboard.
Contohnya adalah ketika pengguna mengetikkan nama atau nilai melalui keyboard.
10. Manual process
Manual Process merupakan simbol yang menunjukkan suatu proses atau perintah yang tidak dilakukan oleh komputer, tetapi dilakukan oleh manusia atau subjek lainnya.
Contohnya adalah kegiatan yang memerlukan tindakan langsung dari manusia.
11. Input atau output single document
Simbol ini menunjukkan perintah input dari sebuah dokumen atau perintah yang menghasilkan output berupa sebuah dokumen.
Contohnya adalah proses memasukkan atau menghasilkan satu dokumen.
12. Input atau output multi document
Simbol ini melambangkan perintah input dari banyak dokumen atau perintah yang menghasilkan keluaran berupa banyak dokumen.
13. Storage atau penyimpanan
Simbol storage atau penyimpanan digunakan untuk menunjukkan proses pengambilan atau penyimpanan data ke media eksternal, seperti:
1. disk;
2. database;
3. atau media penyimpanan lainnya.
4. Notasi menggunakan pseudocode
Pseudocode adalah notasi yang digunakan untuk mendeskripsikan langkah-langkah algoritma dengan menggunakan bahasa manusia yang lebih sederhana.
Pseudocode bukan merupakan bahasa pemrograman yang spesifik. Pseudocode lebih tepat digunakan sebagai alat bantu dalam merencanakan dan mengomunikasikan logika suatu algoritma sebelum algoritma tersebut diterapkan atau diimplementasikan ke dalam bahasa pemrograman tertentu.
Pseudocode dibuat agar seseorang dapat memahami alur logika program tanpa harus terlebih dahulu memahami aturan penulisan bahasa pemrograman tertentu.
Dengan pseudocode, programmer dapat memikirkan:
1. input apa yang diperlukan;
2. proses apa yang dilakukan;
3. kondisi apa yang diperiksa;
4. proses apa yang harus diulang;
5. output apa yang dihasilkan.
Contoh sederhana pseudocode:
Algoritma Menentukan Kelulusan
MULAI
Masukkan nilai
Jika nilai >= 75 maka
Tampilkan "LULUS"
Jika tidak maka
Tampilkan "TIDAK LULUS"
SELESAI
Pseudocode tersebut belum merupakan program dalam bahasa pemrograman tertentu. Namun, logika penyelesaian masalahnya sudah terlihat dengan jelas.
E. Konsep Dasar Algoritma
Konsep dasar algoritma mencakup tiga hal utama, yaitu:
1. algoritma sekuensial;
2. algoritma perulangan;
3. algoritma percabangan atau bersyarat.
Ketiga konsep tersebut merupakan dasar penting dalam membuat algoritma dan program.
1. Algoritma sekuensial
Algoritma sekuensial adalah jenis algoritma yang dieksekusi secara berurutan atau langkah demi langkah.
Setiap langkah dijalankan satu per satu dan eksekusinya berlangsung dari awal sampai akhir.
Pada algoritma sekuensial, langkah kedua dilakukan setelah langkah pertama selesai. Kemudian langkah ketiga dilakukan setelah langkah kedua selesai, dan seterusnya.
Konsep ini mirip dengan sebuah panduan yang berisi langkah-langkah untuk menyelesaikan suatu tugas.
Contoh dalam kehidupan sehari-hari:
Misalnya membuat mi instan:
1. Siapkan panci.
2. Masukkan air.
3. Panaskan air.
4. Tunggu sampai air mendidih.
5. Masukkan mi.
6. Masukkan bumbu.
7. Masak beberapa saat.
8. Mi siap disajikan.
Langkah-langkah tersebut dilakukan secara berurutan.
Contoh sederhana dalam Informatika:
Untuk menghitung luas persegi panjang:
1. Masukkan panjang.
2. Masukkan lebar.
3. Hitung luas = panjang × lebar.
4. Tampilkan luas.
Tidak ada percabangan atau pengulangan dalam contoh tersebut.
2. Algoritma perulangan
Algoritma perulangan melibatkan pengulangan atau iterasi terhadap langkah-langkah tertentu.
Algoritma perulangan digunakan ketika suatu rangkaian instruksi perlu dijalankan lebih dari satu kali.
Perulangan dapat dilakukan berdasarkan:
1. kondisi tertentu;
2. jumlah pengulangan yang telah ditentukan;
3. atau sampai suatu kondisi terpenuhi.
Contoh dalam kehidupan sehari-hari:
Seorang siswa mengerjakan latihan soal.
Jika siswa belum memahami materi, ia dapat mengulangi latihan sampai memahami materi tersebut.
Contohnya:
Kerjakan soal → periksa jawaban → jika belum memahami, belajar kembali → kerjakan lagi.
Proses tersebut dapat dilakukan berulang kali sampai kondisi tertentu terpenuhi.
Contoh dalam pemrograman:
Misalnya ingin menampilkan angka 1 sampai 5.
Tampilkan 1
Tampilkan 2
Tampilkan 3
Tampilkan 4
Tampilkan 5
Daripada menuliskan perintah satu per satu, kita dapat menggunakan konsep perulangan.
3. Algoritma percabangan atau bersyarat
Algoritma percabangan atau bersyarat melibatkan pengambilan keputusan berdasarkan kondisi tertentu.
Langkah-langkah yang dijalankan dapat berbeda tergantung pada apakah suatu kondisi bernilai benar atau salah.
Dalam algoritma percabangan, biasanya terdapat pertanyaan atau kondisi yang harus diperiksa terlebih dahulu.
Contohnya:
Apakah nilai siswa ≥ 75?
Jika jawabannya Ya, maka:
Siswa dinyatakan LULUS.
Jika jawabannya Tidak, maka:
Siswa dinyatakan TIDAK LULUS.
Dengan demikian, algoritma percabangan memungkinkan komputer mengambil keputusan berdasarkan kondisi yang telah ditentukan.
F. Hubungan Algoritma dengan Pemrograman
Algoritma merupakan salah satu dasar penting dalam pemrograman.
Sebelum membuat sebuah program, seorang programmer perlu memahami masalah yang akan diselesaikan. Setelah itu, masalah tersebut dipecah menjadi langkah-langkah yang lebih kecil dan teratur.
Langkah-langkah tersebut kemudian disusun menjadi algoritma.
Setelah algoritma selesai dibuat, algoritma dapat dituliskan menggunakan notasi tertentu, misalnya:
1. notasi deskriptif;
2. flowchart;
3. pseudocode.
Selanjutnya, algoritma tersebut dapat diterjemahkan ke dalam bahasa pemrograman.
Jadi, secara sederhana alurnya dapat digambarkan sebagai berikut:
Masalah → Algoritma → Notasi Algoritma → Bahasa Pemrograman → Program
Algoritma menjadi jembatan antara permasalahan yang ingin diselesaikan dengan program komputer yang akan dibuat.
G. Contoh Sederhana Algoritma
Sebagai contoh, kita akan membuat algoritma untuk menentukan apakah seorang siswa lulus atau tidak lulus berdasarkan nilai.
Masalah:
Seorang guru ingin membuat program yang dapat menentukan kelulusan siswa.
Ketentuannya:
Jika nilai ≥ 75, siswa dinyatakan LULUS.
Jika nilai < 75, siswa dinyatakan TIDAK LULUS.
Algoritma secara deskriptif:
1. Mulai.
2. Masukkan nilai siswa.
3. Periksa nilai siswa.
4. Jika nilai lebih besar atau sama dengan 75, tampilkan "LULUS".
5. Jika nilai kurang dari 75, tampilkan "TIDAK LULUS".
6. Selesai.
Pseudocode:
MULAI
Masukkan nilai
Jika nilai >= 75 maka
Tampilkan "LULUS"
Jika tidak maka
Tampilkan "TIDAK LULUS"
SELESAI
Flowchart secara konsep:
Mulai → Input Nilai → Periksa Nilai → Kondisi Nilai ≥ 75?
Jika Ya:
Tampilkan "LULUS" → Selesai
Jika Tidak:
Tampilkan "TIDAK LULUS" → Selesai
Contoh tersebut menunjukkan penggunaan input, proses/kondisi, output, dan percabangan dalam sebuah algoritma.
H. Kesimpulan Materi
Algoritma adalah urutan langkah yang logis, sistematis, dan terstruktur untuk menyelesaikan suatu masalah.
Algoritma memiliki beberapa fungsi penting, yaitu:
1. memecahkan masalah yang rumit;
2. membuat program lebih sederhana;
3. dapat digunakan secara berulang;
4. membantu programmer menyusun langkah penyelesaian masalah;
5. menjadi dasar dalam pembuatan program.
Jenis algoritma yang dibahas meliputi:
1. algoritma pengurutan, yaitu algoritma untuk mengurutkan data;
2. algoritma pencarian, yaitu algoritma untuk mencari data tertentu;
3. algoritma rekursif, yaitu algoritma yang menggunakan konsep pemanggilan dirinya sendiri.
Untuk menuliskan algoritma, terdapat tiga jenis notasi utama:
1. notasi deskriptif, yaitu algoritma yang ditulis menggunakan kalimat atau bahasa manusia;
2. flowchart, yaitu algoritma yang digambarkan menggunakan simbol-simbol dan garis alur;
3. pseudocode, yaitu algoritma yang ditulis menggunakan struktur sederhana yang menyerupai bahasa pemrograman tetapi tidak terikat pada bahasa pemrograman tertentu.
Sementara itu, konsep dasar algoritma terdiri atas:
1. algoritma sekuensial, yaitu langkah-langkah yang dilakukan secara berurutan;
2. algoritma perulangan, yaitu langkah-langkah yang dilakukan berulang kali;
3. algoritma percabangan atau bersyarat, yaitu langkah yang dipilih berdasarkan suatu kondisi.
Dengan memahami algoritma, siswa akan lebih mudah memahami bagaimana komputer menerima input, melakukan proses berdasarkan aturan atau logika tertentu, mengambil keputusan, melakukan perulangan, dan menghasilkan output.


Komentar
Posting Komentar