Pengikut

Diberdayakan oleh Blogger.
RSS

Algoritma

Pengantar Algoritma
Algoritma berasal dari kata Algoris dan Ritmis yang pertama kali diungkapkan oleh Abu Ja’far Mohammed Ibn Musa Al-Khowarismi pada tahun 825 M dalam bukunya yang berjudul Al-Jabr Wa-al Muqabla.
Dalam bidang pemrograman, algoritma didefinisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara sistematis yang akan dikerjakan untuk menyelsesaikan masalah dengan bantuan komputer.
Algoritma merupakan pola piker terstruktur yang berisi tahap-tahap penyelesian masalah yang dapat disajikan dengan teknik tulisan maupun dengan gambar. Penyajian algoritma dalam bentuk tulisan menggunakan Structure English atau Pseudo Code (Kode Semu). Sedangkan penyajian algoritma dalam bentuk gambar menggunakan flowchart (diagram alir).
Penilaian sebuah algoritma di dasarkan pada beberapa hal sebagai berikut:

a. Waktu Eksekusi
b. Penggunaan memori/ sumber daya
c. Kesederhanaan dan kejelasan algoritma
Waktu eksekusi sebuah algortima dipengaruhi oleh:
a. Jenis data input
b. Jumlah data input
c. Pemilihan instruksi bahasa pemrograman.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Aturan Penulisan Teks Algoritma

Tidak ada notasi yang baku dalam penulisan teks algoritma. Algoritma bukanlah program yang harus mengikuti aturan-aturan tertentu tetapi dituliskan mendekati gaya bahasa pemrograman secara umum. Teks algortima disusun dalam 3 bagian, yaitu:
a. Bagian Kepala Algoritma
Kepala algoritma terdiri dari nama algoritma yang berisi penjelasan tentang algoritma yang menguraikan secara singkat hal-hal yang dilakukan oleh algoritma.
b. Bagian Deklarasi
Berisi semua nama yang digunakan, meliputi nama-nama tipe, konstanta, variable dan sub program.
c. Bagian Deskripsi Algortima
Berisi semua langkah-langkah atau aksi untuk menyelesaikan masalah. Algoritma dibaca dari atas ke bawah.
Setiap bagian disertai dengan penjelasan atau dokumentasi tentang maksud pembuatan teks. Bagian penjelasan dituliskan di dalam kurung kurawal {}.
Contoh: algoritma untuk menghitung luas lingkaran
Algoritma luas_lingkaran {kepala program}
{bagian deklarasi}
Const
Phi  3.14
Var
R, L : Real;
{bagian deskripsi}
Begin
{input data R}
Read(R)
{proses}
If R<= 0 then
write(“Data Salah”)
else
L  phi * R * R
End if
{output}
Write (L)
End.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

PENGERTIAN DASAR DAN SIMBOL FLOWCHART

Pengenalan Flowchart

Flowchart merupakan gambar atau bagan yang memperlihatkan urutan dan hubungan antar proses beserta instruksinya. Gambaran ini dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu. Sedangkan hubungan antar proses digambarkan dengan garis penghubung.
Flowchart ini merupakan langkah awal pembuatan program. Dengan adanya flowchart urutan poses kegiatan menjadi lebih jelas. Jika ada penambahan proses maka dapat dilakukan lebih mudah. Setelah flowchart selesai disusun, selanjutnya pemrogram (programmer) menerjemahkannya ke bentuk program dengan bahsa pemrograman.

Simbol-simbol flowchart

Flowchart disusun dengan simbol-simbol. Simbol ini dipakai sebagai alat bantu menggambarkan proses di dalam program. Simbol-simbol yang dipakai antara lain :


      




Kaidah-kaidah pembuatan Flowchart

Dalam pembuatan flowchart tidak ada rumus atau patokan yang bersifat mutlak. Karena flowchart merupakan gambaran hasil pemikiran dalam menganalisa suatu masalah dengan komputer. Sehingga flowchart yang dihasilkan dapat bervariasi antara satu pemrogram dengan pemrogram lainnya.
Namun secara garis besar, setiap pengolahan selalu terdiri dari tiga bagian utama, yaitu;
¨       Input berupa bahan mentah
¨       Proses pengolahan
¨       Output berupa bahan jadi.
Untuk pengolahan data dengan komputer, dapat dirangkum urutan dasar untuk pemecahan suatu masalah, yaitu;
q          START: berisi instruksi untuk persiapan perlatan yang diperlukan sebelum menangani pemecahan masalah.
q          READ: berisi instruksi untuk membaca data dari suatu peralatan input.
q          PROCESS: berisi kegiatan yang berkaitan dengan pemecahan persoalan sesuai dengan data yang dibaca.
q          WRITE: berisi instruksi untuk merekam hasil kegiatan ke perlatan output.
q          END: mengakhiri kegiatan pengolahan

Gambar berikut memperlihatkan flowchart dari kegiatan dasar diatas.





Dari gambar flowchart di atas terlihat bahwa suatu flowchart harus terdapat proses persiapan dan proses akhir. Dan yang menjadi topik dalam pembahasan ini adalah tahap proses. Karena kegiatan ini banyak mengandung variasi sesuai dengan kompleksitas masalah yang akan dipecahkan. Walaupun tidak ada kaidah-kaidah yang baku dalam penyusunan flowchart, namun ada beberapa anjuran yaitu:
§         Hindari pengulangan proses yang tidak perlu dan logika yang berbelit sehingga jalannya proses menjadi singkat
§         Penggambaran flowchart yang simetris dengan arah yang jelas.
§         Sebuah flowchart diawali dari satu titik START dan diakhiri dengan END.



  • Fungsi Algoritma
Dengan algoritma, kita dapat mengatasi masalah dari yang sederhana sampai yang kompleks sekalipun. Namun, seorang user harus mampu membuat suatu program dengan menggunakan bahasa yang difahami oleh komputer. Sebelum disajikan dalam bentuk bahasa pemrogaman, sebaiknya kitamembuat diagram alir (Flow Chart) dan Pseudocode. Hal ini dimaksudkanagar dapat mempermudah kerja atau mempermudah dalam membuat program.Selain itu, algoritma dapat mengatasi masalah logika dan masalahmatematika dengan cara berurutan, tetapi kadang-kadang algoritma tidakselalu berurutan, hal ini dikenal dengan proses percabangan
  • . Kriteria Program Algoritma dalam Bidang Komputer
Pada dasarnya, komputer adalah mesin digital, artinya komputer hanya bisa mengenal kondisi ada arus listrik (biasanya dilambangkan dengan 1) dan tidak ada arus listrik (biasanya dilambangkan dengan 0). Dengan kata lain, kita harus menggunakan sandi 0 dan 1 untuk melakukan pemrogaman komputer. Bahasa pemrogaman yang menggunakan sandi 0 dan 1 ini disebut bahasa mesin. Karena bahasa mesin sangat susah, maka muncul ide untuk melambangkan untaian sandi 0 dan 1 dengan singkatan kata yang lebih mudah difahami manusia biasa disebut dengan mnemonic code. Bahasa pemrogaman yang menggunakan singkatan kata ini disebut bahasa assembly. Program algoritma harus komplit, nyata, dan jelas. Meskipun tugas algoritma tidak menghasilkan solusi, tetapi proses harus berakhir hal ini disebut dengan semi algorithm (prosedur akan berjalan terus atau biasa disebut dengan perulangan). Intinya kita tidak boleh menambah masalah, akan tetapi kita harus mampu menyelesaikan masalah untuk mendapat hasil yang tepat.

Operator


1. Operator Numerik                                                           2. Operator Hubungan

+
Penjumlahan

=
Sama dengan
-
Pengurangan

#
Tidak sama dengan
*
Perkalian

< 
Lebih kecil
/
Pembagian

> 
Lebih Besar
^
Pangkat

<=
Lebih kecil sama dengan
sqrt
Akar pangkat dua

>=
Lebih besar sama dengan

3. Operator Logika

AND
Logika DAN
OR
Logika ATAU
NOT
Logika LAWAN

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Bahasa Pemrograman

Program adalah kumpulan instruksi/ perintah yang disusun sebagai satu kesatuan prosedur yang berupa urutan langkah-langkah untuk menyelesaikan suatu masalah sehingga dapat di eksekusi oleh komputer. Program memberitahukan kepada komputer apa yang harus dilakukan.
Pemrograman adalah proses mengimplementasikan urutan langkah untuk menyelesaikan suatu masalah dengan menggunakan bahasa pemrograman.
Bahasa pemrograman adalah prosedur/ tatacara penulisan program komputer. Bahasa pemrograman berfungsi sebagai media untuk mneyusun dan memahami suatu program komputer serta sebagai alat komunikasi antara programmer dengan komputer.
Pemakaian bahasa pemrograman selalu berhubungan dengan:
    1. Sintak,
urutan gramatikal yang mengatur tatacara penulisan kata, ekspresi dan pernyataan.
    1. Semantik
Aturan-aturan untuk menyatakan suatu arti yang terkandung dalam sebuah statement/ pernyataan.
    1. Kebenaran Logika
Apakah urutan langkah-langkah dan logika sudah benar dan sesuai dengan penyelesaian masalahnya.
Bahasa pemrograman digolongkan menjadi:
  1. Bahasa Mesin
Bahasa yang dapat dimengerti oleh komputer berupa bahasa numerik. Setiap jenis komputer memiliki bahasa mesin yang berbeda.
  1. Bahasa Tingkat Rendah /BTR (Low Level Language)
Bahasa pemrograman yang berorientasi pada mesin. Bahasa ini lebih dekat ke bahasa mesin daripada bahasa manusia. Contohnya bahasa assembly.
Kelebihan BTR:
-          Kecepatan eksekusi sangat tinggi
-          Executable file yang dihasilkan ukurannya paling kecil
Kekurangan BTR:
-          Sulit dipelajari
-          Bahasa assembly untuk setiap jenis mikroprosesor satu dengan yang lain sangat jauh berbeda karena belum ada standarisasi.
-          Fungsi-fungsi yang tersedia sangat terbatas

  1. Bahasa Tingkat Tinggi /BTT (High Level Language)
Bahasa pemrograman yang lebih dekat dengan bahasa manusia daripada bahasa mesin. BTT merupakan bahasa pemrograman yang memiliki aturan-aturan gramatikal dalam penulisan ekspresi atau pernyataan dengan standart yang mudah dipahami oleh manusia. Contoh: Basic, Fortran, Cobol, Pascal, Prolog, dll.
Kelebihan BTT:
-          Mudah dipelajari
-          Mempunyai fasilitas trace and debug untuk mendeteksi adanya kesalahan
-          Mempunyai fungsi/ library yang lengkap sehingga dapat mempermudah dan mempercepat pembuatan program
  1. Bahasa Tingkat Menengah (Middle Level Language)
Bahasa pemrograman yang mempunyai kelebihan hampir menyamai bahasa assembly karena kelengkapan fungsinya dalam mengakses perangkat keras. Contohnya bahasa C, C++.

Eksekusi program oleh komputer, dilakukan dengan cara menterjemahkan bahasa pemrograman BTT menjadi kode bahasa mesin. Yang bertugas menterjemahkan disebut Interpreter dan Compiler. Kedua penterjemah ini membaca perintah source code baris per baris kemudian menterjemahkannya menjadi kode mesin yang bersesuaian. Tetapi bedanya pada Interpreter kode mesin dijalankan seketika dan tidak disimpan, sedangkan pada Compiler kode mesin disimpan.




Eksekusi program oleh kompuetr digambarkan sebagai berikut:










Macam-macam teknik pemrograman :
1.      Pemrograan Terstruktur, merupakan teknik yang terstruktur dan sistematis, merupakan proses mengimplementasikan urutan langkah untuk menyelesaikan suatu masalah dalam bentuk program yang memiliki rancang bangun yang terstruktur dan tidak berbelit-belit sehingga mudah ditelusuri dan dipahami serta dikembangkan oleh siapa saja.
         Ciri-ciri dari pemrograman terstruktur adalah :
a.       Mengandung algoritma pemecahan masalah yang tepat dan benar, standart dan efektif.
b.      Memiliki struktur logika dan struktur program yang benar dan mudah dipahami.
c.       Memiliki dokumentasi yang baik.
2.            Pemrograman Modular, pemrograman dengan pembagian masalah yang besar dan komplek menjadi kelompok masalah yang lebih kecil yang disebut modul. Teknik pemrograman terstruktur yang digunakan untuk menyelesaikan masalah tersebut dinamakan teknik pemrograman modular, tetapi setelah masing-masing modul disusun maka harus dibuat suatu sistem untuk mengintegrasikannya sehingga menjadi satu kesatuan program yang lengkap. Modul program adalah sekumpulan instruksi yang memiliki operasi-operasi dan data yang didefinisikan memiliki struktur internal yang tidak tergantung pada sub program lain dan merupakan satu kesatuan yang akan dieksekusi secara berulang-ulang. Untuk menyusun program modular dapat digunakan konsep fungsi atau prosedur.
3.            Pemrograman Berorientasi Object, pemrograman berorientasi object diciptakan supaya konsep yang ada pada dunia nyata dapat diterapkan dalam pemrograman. Dalam pemrograman berorientasi object komponen-komponen dalam program disebut sebagai sebuah object yaitu sesuatu yang memiliki sifat (property), kerja (methode), dan respon terhadap kejadian (event), Object tersebut disusun dari sekumpulan data, prosedur dan fungsi yang dibungkus menjadi satu.
Langkah-langkah dalam proses pembuatan suatu program dijelaskan pada gambar dibawah ini: 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Bahasa Pemrograman Pascal

Bahasa pemrograman Pascal termasuk dalam bahasa pemrograman tingkat tinggi. Struktur Program dalam Pascal terdiri dari 3 bagian, yaitu:
    1. Kepala Program
    2. Bagian Deklarasi
    3. Bagian Pernyataan (program utama)

2.1.1        Kepala Program
Sebuah program pascal diawali bagian kepala program. Penulisan kepala program diawali dengan kata tercadang (reserved word) PROGRAM, kemudian diikuti oleh nama program dan diakhiri tanda titik koma.
Bentuk umum: PROGRAM nama_program;
Contoh: PROGRAM menghitung_luas_lingkaran;

Aturan Pemberian Nama Program Pascal
  1. Harus dimulai dengan huruf alphabet (a..z atau A..Z).
  2. Selanjutnya dapat diikuti oleh angka (0..9), alphabet atau garis bawah.
  3. Tidak boleh memuat spasi, spasi dapat digantikan dengan garis bawah.
  4. Tidak boleh memuat operator hitung dan karakter-karakter khusus (~ ! @ # $ % ^ & * ( ) - + = \ | [ ] { } : “ ; ‘ , >)
  5. tidak boleh memuat kata tercadang.
  6. panjang karakter yang dikenali adalah 32 karakter pertama.

2.1.2        Bagian Deklarasi
Bagian deklarasi berfungsi sebagai tempat untuk mendeklarasikan/ mengenalkan nama-nama yang akan digunakan dalam bagian pernyataan. Terdiri dari 5 macam deklarasi, yaitu:
  1. Deklarasi Label
Pendeklarasian nama label untuk menandai suatu bagian pernyataan dalam program utama.
  1. Deklarasi Konstanta
Pendeklarasian nama konstanta sebagai penampung data yang bersifat konstan/ tetap.
  1. Deklarasi Tipe
Pendeklarasian nama tipe yang digunakan untuk membuat tipe data baru.
  1. Deklarasi Variabel
Pendeklarasian nama variabel sebagai penampung data yang bersifat dinamis/ dapat diubah-ubah.
  1. Deklarasi Subprogram
Pendeklarasian fungsi atau prosedur yang akan dipanggil pada program utama.
Dari 5 macam deklarasi, tidak perlu dideklarasikan semuanya dalam program. Hanya bagian yang dibutuhkan saja yang harus dideklarasikan.

2.1.3        Bagian Pernyataan
Bagian pernyataan merupakan program utama dalam pemrograman Pascal. Pada saat dilakukan ekseskusi program, komputer akan menjalankan bagian pernyataan ini. Program utama diawali dengan kata tercadang BEGIN dan diakhiri dengan kata tercadang END dan tanda titik.

2.1.4        Unit
Dalam bahasa pemrograman Pascal menyediakan suatu cara pemrograman modular dengan menggunakan Unit.. unit adalah suatu pustaka yang umumnya terdiri dari fungsi atau prosedur serta variabel yang dapat dikompilasi secara terpisah. Dalam program dituliskan dengan clausa USES diikuti dengan nama unit dan diakhiri tanda titik koma.
Contoh: USES CRT;

2.1.5        Komentar
Dalam Pascal komentar ditulis dalam tanda kurung kurawal { }. Kita dapat menulis keterangan atau apa saja di dalam komentar. Komentar tidak akan dieksekusi oleh program. Tujuan penggunaa komentar adalah untuk dokumentasi dan memudahkan orang lain untuk memahami program yang telah kita buat.
2.1.6        Contoh kerangka program Pascal
PROGRAM contoh;
{----------------------------------------------------------}
{ contoh program dengan deklarasi yang lengkap }
{ ----------------------------------------------------------}
USES Crt;
LABEL
            Selesai;
CONST
            Phi = 3.14;
TYPE
            BilanganNyata = Real;
VAR
            Jari_jari : BilanganNyata;
PROCEDURE HitungLuas(Radius:BilangaNyata);
Begin
            Writeln(‘Luas = ‘,0.5*Phi*Radius*Radius);
End;
{ Program Utama }
            BEGIN
                        Clrscr;
Jari_jari:=10.5;
HitungLuas(Jari_jari);
GOTO Selesai;
Writeln(‘Lho, kok saya dilewati’);
Selesai:
Writeln(‘Selesai…..’);
END.

2.1.7        Pernyataan dalam Pascal
  1. Pernyataan Penugasan (assigment)
Pernyataan penugasan digunakan dalam proses pemberian harga/ nilai pada suatu variabel dalam sebuah ungkapan, penulisannya menggunakan simbol :=
Contoh:           x := 51;
                        Luas := p * l;
  1. Pernyataan Prosedur
Digunakan untuk mengaktifkan/ memanggil prosedur yang didefinisikan oleh pemrogram ataupun prosedur standart dari pascal sendiri. Penulisannya dengan cara menyebutkan nama prosedur dan diakhiri dengan tanda titik koma.
Contoh:           Randomize;
                        HitungLuas;
                        Clrscr;
  1. Pernyataan Input/ Output
    1. Input
Digunakan dalam proses pembacaan data melalui peralatan masukan (keyboard, mouse, dsb) atau melalui pengisian data langsung pada suatu variabel di dalam program yang akan digunakan untuk proses selanjutnya.
Pernyataan input menggunakan perintah READ atau READLN.
    1. Output
Digunakan sebagai informasi keluaran yang merupakan hasil dari proses program. Pernyataan output menggunakan perintah WRITE atau WRITELN.
  1. Pernyataan Majemuk
Merupakan kumpulan dari beberapa pernyataan yang diawali dengan Begin dan diakhiri dengan End dan tanda titik koma.


Bentuk Umum:
            Begin
Pernyataan 1;
Pernyataan 2;
.
.
Pernyataan n;
End;

2.1.8        Tipe data dan Operator
Sebuah program selalu berhubungan dengan data untuk diinputkan, diolah dan kemudian memberikan hasil yang diinginkan. Variabel dan konstanta merupakan penampung data di dalam program. Variabel bersifat dinamis sedangkan konstanta bersifat statis.
Setiap data yang disimpan di dalm variabel atau konstanta harus memiliki tipe data. Ada beberapa tipe data sederhana yang dapat digunakan dalam Pascal. Berikut adalah tipe data yang sering digunakan.
a.       Tipe bilangan bulat dapat dikelompokan menjadi:
Tipe: Ukuran memory: kawasan (range):
-          Byte 1 byte 0…255
-          Word 2 byte 0…65535
-          ShortInt 1 byte -128…127
-          Integer 2 byte -32768…32767
-          LongInt 4 byte -2147483638…2147483647
b.      Tipe bilangan pecahan (real)
c.       Tipe string yaitu data yang berisi nol atau beberapa karakter. Tipe
string diapit dengan tanda petik(‘….’).contoh:’nama’.
d.      Tipe Char yaitu untuk data yang berisi hanya sebuah karakter saja. Misalnya:’A’,’1’,’?’.
e.       Tipe Boolean adalah suatu data yang nilainya berupa false ( salah ) atau true ( benar ).
Disamping tipe –tipe tersebut masih terdapat beberapa tipe lainnya dan dapat juga tipe tersebut dibuat sendiri.

Data-data dalam program akan diproses dengan menggunakan operator. Operator adalah simbol atau kata yang digunakan dalam program untuk melakukan suatu operasi data seperti penjumlahan, pengurangan, pemberian nilai ke dalam variabel, membandingkan kesamaan dua buah nilai dan sebagainya.
Nilai data yang dioperasikan oleh operator bersama operand membentuk suatu ekspresi. Operator yang digunakan dalam Pascal:
Operator Matematik
Simbol
Keterangan
Prioritas
*
/
DIV
Mod
+
-
Perkalian
Pembagian bilangan real
Pembagian bilangan bulat
Sisa hasil pembagian
Penjumlahan
Pengurangan
1
1
1
1
2
2

Operator Perbandingan
> 
< 
>=
<=
<> 
=
Lebih besar
Lebih kecil
Lebih besar sama dengan
Lebih kecil sama dengan
Tidak sama dengan
Sama dengan

Operator Logika
AND
OR
NOT
Dan
Atau
Bukan

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

pemrograman

Secara umum, dalam pemrograman terstruktur terdiri dari 3 struktur, yaitu stuktur runtutan, percabangan dan perbandingan. Masing-masing struktur akan dijelaskan dibawah ini.

3.1  Struktur Runtutan
Pada struktur runtutan/ berurutan setiap pernyataan akan dikerjakan satu per satu sesuai dengan urutan penulisan algoritma program. Setiap pernyataan dilaksanakan tepat satu kali dan tidak ada pernyataan yang diulang atau pernyataan yang tidak dilaksanakan. Akhir dari pernyataan terakhir merupakan akhir dari algoritma program tersebut.

Jika pernyataan dilambangkan dengan A1, A2, A3……., An, maka pelaksanaan instruksi dapat digambarkan sebagai berikut:


Jika digambarkan dalam flowchart:











3.2  Struktur Percabangan
Pada struktur percabangan memungkinkan suatu pernyataan untuk dieksekusi hanya jika suatu kondisi tertentu terpenuhi atau tidak terpenuhi. Struktur percabangan disebut juga dengan struktur pemilihan. Terdapat beberapa pernyataan yang akan dipilih berdasarkan suatu kondisi. Sehingga terdapat bagian pernyataan yang dilewati atau tidak dijalankan oleh program.
Terdapat dua macam instruksi struktur percabangan dalam pemrograman, yaitu IF dan Case yang akan kita pelajari pada bab selanjutnya.
Jika digambarkan dalam flowchart:








3.3  Struktur Perulangan
Struktur perulangan merupakan struktur algoritma yang akan melakukan suatu proses/ eksekusi yang berulang-ulang jika suatu kondisi terpenuhi atau tidak terpenuhi. Proses perulangan ini biasanya digunakan untuk:
    1. Mengulang proses pemasukan data
    2. Mengulang proses perhitungan
    3. Mengulang Proses penampilan hasil pengolahan data
Struktur perulangan terdiri dari:
  1. Inisialisasi
Aksi yang dilakukan sebelum pengulangan dilakukan pertama kali.
  1. Kondisi pengulangan
Ekspresi boolean yang harus dipenuhi untuk melaksanakan pengulangan.
  1. Badan pengulangan
Satu atau lebih aksi/ pernyataan yang akan diulang.
  1. Terminasi
Aksi yang dilakukan setelah pengulangan selesai dilakukan.
Bentuk umum perulangan:
            <Inisialisasi>
Awal perulangan
Badan perulangan
Akhir perulangan
<Terminasi>
Kondisi perulangan dapat berada pada awal perulangan atau akhir perulangan.
Bentuk instruksi pengulangan dan pemrograman terstruktur ada tiga macam, yaitu:
  1. For – Next
  2. While – Do
  3. Repeat – Until







Jika digambarkan dalam flowchart:

















  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS