Pengikut

Rabu, 25 April 2012

Virus


1.      ASAL MUASAL VIRUS.

1949, John von Neumann, menggungkapkan " teori self altering automata " yang merupakan hasil riset dari para ahli matematika. 1960, Lab BELL (AT&T), para ahli di lab BELL (AT&T) mencoba-coba teori yang diungkapkan oleh John von.
Neumann, dengan membuat suatu jenis permainan/game. Mereka membuat program yang dapat memperbanyak dirinya dan dapat menghancurkan program buatan lawan. Program yang mampu bertahan dan menghancurkan semua program lain, akan dianggap sebagai pemenangnya. Permainan ini akhirnya menjadi permainan favorit di tiap-tiap lab komputer. Tetapi, semakin lama program yang diciptakan makin berbahaya, sehingga mereka melakukan pengawasan dan pengamanan yang ketat terhadap permainan ini.
1980, Program-program tersebut yang akhirnya dikenal dengan sebutan "virus" ini berhasil menyebar keluar lingkungan laboratorium, dan mulai beredar di masyarakat umum.

2.      PENGERTIAN VIRUS.
"A program that can infect other programs by modifying them to include a slighty altered copy of itself. A virus can spread throughout a computer system or network using the authorization of every user using it to infect their programs. Every programs that gets infected can also act as a virus that infection grows\u201c
Pertama kali istilah \u201cvirus\u201d digunakan oleh Fred Cohen pada tahun 1984 di Amerika Serikat. Virus komputer dinamakan \u201cvirus\u201d karena memiliki beberapa persamaan mendasar dengan virus pada istilah kedokteran (biological viruses).
Virus komputer bisa diartikan sebagai suatu program komputer biasa. Tetapi memiliki perbedaan yang mendasar dengan program-program lainnya,yaitu virus dibuat untuk menulari program-program lainnya, mengubah, memanipulasinya bahkan sampai merusaknya. Ada yang perlu dicatat disini, virus hanya akan menulari apabila program pemicu atau program yang telah terinfeksi tadi dieksekusi, disinilah perbedaannya dengan "worm". Tulisan ini tidak akan bahas worm karena nanti akan mengalihkan kita dari pembahasan mengenai virus ini.

3.      KRITERIA VIRUS.

Suatu program dapat disebut sebagai suatu virus apabila memenuhi minimal 5 kriteria berikut:
3.1. Kemampuan untuk mendapatkan informasi.
3.2. Kemampuan untuk memeriksa suatu file.
3.3. Kemampuan untuk menggandakan diri dan menularkan diri.
3.4. Kemampuan melakukan manipulasi.
3.5. Kemampuan untuk menyembunyikan diri.
Sekarang akan coba dijelaskan dengan singkat apa yang dimaksud dari tiap-tiap kemampuan itu dan mengapa ini sangat diperlukan.

3.1. Kemampuan untuk mendapatkan informasi
Pada umumnya suatu virus memerlukan daftar nama-nama file yang ada dalam suatu directory. Untuk apa? Agar dia dapat memperoleh daftar file yang bisa dia tulari. Misalnya, virus makro yang akan menginfeksi semua file data MS Word, akan mencari daftar file berekstensi *.doc. Disinilah kemampuan mengumpulkan informasi itu diperlukan agar virus dapat membuat daftar/data semua file, lalu memilahnya dengan mencari file-file yang bisa ditulari. Biasanya data ini tercipta saat file yang tertular/terinfeksi virus atau file program virus itu sendiri dibuka oleh user. Sang virus akan segera melakukan pengumpulan data dan menaruhnya (biasanya) di RAM, sehingga apabila komputer dimatikan semua data hilang. Tetapi data-data ini akan tercipta kembali setiap kali virus itu diaktifkan. Biasanya data-data ini disimpan juga sebagai hidden file oleh virus tersebut.
3.2. Kemampuan memeriksa suatu program.
Suatu virus juga harus bisa memeriksa suatu file yang akan ditulari, misalnya dia bertugas menulari program berekstensi *.doc, maka dia harus memeriksa apakah file dokumen tersebut telah terinfeksi ataupun belum, karena jika sudah, akan percuma menularinya lagi. Ini sangat berguna untuk meningkatkan kemampuan suatu virus dalam hal kecepatan menginfeksi suatu file/program. Yang umum dilakukan oleh virus adalah memiliki/memberi tanda pada file/program yang telah terinfeksi sehingga mudah untuk dikenali oleh virus tersebut. Contoh penandaan adalah misalnya memberikan suatu byte yang unik di setiap file yang telah terinfeksi.
3.3. Kemampuan untuk menggandakan diri.

Kalo ini memang virus "bang-get", maksudnya, tanpa kemampuan ini tak adalah virus. Inti dari virus adalah kemampuan mengandakan diri dengan cara menulari file lainnya. Suatu virus apabila telah menemukan calon.
Korbannya maka ia akan mengenalinya dengan memeriksanya. Jika belum terinfeksi maka sang virus akan memulai aksinya penularan dengan cara menuliskan byte pengenal pada file tersebut, dan seterusnya mengcopikan/menulis kode objek virus diatas file sasaran. Beberapa cara umum yang dilakukan oleh virus untuk menulari/menggandakan dirinya adalah :
a. File yang akan ditulari dihapus atau diubah namanya. Kemudian diciptakan suatu file berisi program virus itu sendiri menggunakan nama file yang asli.
b. Program virus yang sudah dieksekusi/load ke memori akan langsung menulari file-file lain dengan cara menumpangi seluruh file yang ada.

3.4. Kemampuan mengadakan manipulasi.
Rutin (routine) yang dimiliki suatu virus akan dijalankan setelah virus menulari suatu file. Isi dari suatu rutin ini dapat beragam mulai dari yang tidak berbahaya sampai yang melakukan perusakan. Rutin ini umumnya digunakan untuk memanipulasi file atau pun mempopulerkan pembuatnya ! Rutin ini memanfaatkan kemampuan dari suatu sistem operasi (Operating System), sehingga memiliki kemampuan yang sama dengan yang dimiliki sistem operasi. Misal :
a.       Membuat gambar atau pesan pada monitor.
b.      Mengganti/mengubah-ubah label dari tiap file, direktori, atau label dari drive di PC.
c.       Memanipulasi file yang ditulari.
d.      Merusak file.
e.       Mengacaukan kerja printer, dsb.

3.5.Kemampuan Menyembunyikan diri.

Kemampuan menyembunyikan diri ini harus dimiliki oleh suatu virus agar semua pekerjaan baik dari awal sampai berhasilnya penularan dapat terlaksana.
Langkah langkah yang biasa dilakukan adalah:

3.5.1. Program virus disimpan dalam bentuk kode mesin dan digabung dengan program lain yang dianggap berguna oleh pemakai.
3.5.2. Program virus diletakkan pada Boot Record atau track pada disk yang jarang diperhatikan oleh komputer itu sendiri.
3.5.3. Program virus dibuat sependek mungkin, dan hasil file yang diinfeksi tidak terlalu berubah ukurannya.
3.5.4. Virus tidak mengubah keterangan/informasi waktu suatu file.
3.5.5. dll.



4.      SIKLUS HIDUP VIRUS.

Siklus hidup virus secara umum, melalui 4 tahap :

4.1.Dormant phase ( Fase Istirahat/Tidur ).

Pada fase ini virus tidaklah aktif. Virus akan diaktifkan oleh suatu kondisi tertentu, semisal: tanggal yang ditentukan, kehadiran program lain/dieksekusinya program lain, dsb. Tidak semua virus melalui fase ini. 

4.2.Propagation phase ( Fase Penyebaran ).

Pada fase ini virus akan mengkopikan dirinya kepada suatu program atau ke suatu tempat dari media storage (baik hardisk, RAM dsb). Setiap program yang terinfeksi akan menjadi hasil \u201ckloning\u201d virus tersebut (tergantung cara virus tersebut menginfeksinya).
 
4.3.Trigerring phase ( Fase Aktif ).

Di fase ini virus tersebut akan aktif dan hal ini juga di picu oleh beberapa kondisi seperti pada Dormant Phase.

4.4.Execution phase ( Fase Eksekusi ).

Pada fase inilah virus yang telah aktif tadi akan melakukan fungsinya. Seperti menghapus file, menampilkan pesan-pesan, dsb

5.      JENIS-JENIS VIRUS.

Untuk lebih mempertajam pengetahuan kita tentang virus, saya akan coba memberikan penjelasan tentang jenis-jenis virus yang sering berkeliaran di masyarakat umum.

5.1.Virus Makro.
Jenis virus ini pasti sudah sangat sering kita dengar. Virus ini ditulis dengan bahasa pemrograman dari suatu aplikasi bukan dengan bahasa pemrograman dari suatu Operating System. Virus ini dapat berjalan apabila aplikasi pembentuknya dapat berjalan dengan baik. Sebagai contoh jika pada komputer mac dijalankan aplikasi Word, maka virus makro yang dibuat dari bahasa makro Word dapat bekerja pada komputer bersistem operasi Mac ini.
Contoh virus:

5.1.1.      Varian W97M, misal W97M.Panther.
Panjang 1234 bytes, akanmenginfeksi NORMAL.DOT dan menginfeksi dokumen apabila dibuka.
5.1.2.      WM.Twno.A;TW.
Panjang 41984 bytes, akan menginfeksi Dokumen Ms.Word yang menggunakan bahasa makro, biasanya berekstensi *.DOT dan *.DOC.
5.1.3.      Dll.

5.2. Virus Boot Sector.
Virus Boot sector ini sudah umum sekali menyebar. Virus ini dalam menggandakan dirinya, akan memindahkan atau menggantikan boot sector asli dengan program booting virus. Sehingga saat terjadi booting maka virus akan diload ke memori dan selanjutnya virus akan mempunyai kemampuan mengendalikan hardware tandar (contoh : monitor, printer dsb) dan dari memori ini pula virus akan menyebar ke seluruh drive yang ada dan yang terhubung ke komputer (contoh : floopy, drive lain selain drive c).
Contoh virus :
5.2.1. Varian virus wyx ex : wyx.C(B) menginfeksi boot record dan floopy; Panjang : 520 bytes; Karakteristik : memory resident dan terenkripsi.
5.2.2. Varian V-sign : Menginfeksi : Master Boot Record; Panjang 520 bytes; Karakteristik : menetap di memori (memory resident), terenkripsi, dan polymorphic.
5.2.3. Stoned.june 4th/ bloody!: Menginfeksi : Master Boot Record dan floopy; Panjang 520 bytes; Karakteristik : menetap di memori (memory resident), terenkripsi dan menampilkan pesan "Bloody!june 4th 1989" setelah komputer melakukan booting sebanyak 128 kali.

5.3. Stealth Virus.

Virus ini akan menguasai tabel interrupt pada DOS yang sering kita kenal dengan "Interrupt interceptor". Virus ini berkemampuan untuk mengendalikan instruksi-instruksi level DOS dan biasanya mereka tersembunyi sesuai namanya baik secara penuh ataupun ukurannya.

      Contoh virus :

5.3.1.   Yankee.XPEH.4928,Menginfeksi file*.COM dan*.EXE; Panjang 4298 bytes; Karakteristik : menetap di memori, ukuran tersembunyi, memiliki pemicu.
5.3.2.   WXYC (yang termasuk kategori boot record pun karena masuk kategri stealth dimasukkan pula disini), Menginfeksi floopy an motherboot record; Panjang 520 bytes; Karakteristik : menetap di memori; ukuran dan virus tersembunyi.
5.3.3.   Vmem(s): Menginfeksi file file *.EXE, *.SYS, dan *.COM; Panjang fie 3275 bytes; Karakteristik:menetap di memori, ukuran tersembunyi, di enkripsi.
5.3.4.   Dll.


5.4. Polymorphic Virus.

Virus ini Dirancang buat mengecoh program antivirus, artinya virus ini selalu berusaha agar tidak dikenali oleh
antivirus dengan cara selalu merubah rubah strukturnya setiap kali selesai menginfeksi file/program lain.
Contoh virus:

5.4.1.   Necropolis A/B, Menginfeksi file *.EXE dan *.COM; Panjang file 1963 bytes; Karakteristik: menetap di memori, ukuran dan virus tesembunyi,terenkripsi dan dapat berubah ubah struktur
5.4.2.   Nightfall, Menginfeksi file *.EXE; Panjang file 4554 bytes; Karakteristik : menetap di memori, ukuran dan virus tesembunyi,memiliki pemicu, terenkripsidan dapat berubah-ubah struktur
5.4.3.   Dll.

5.5.Virus File/Program.
Virus ini menginfeksi file-file yang dapat dieksekusi langsung dari sistem operasi, baik itu file *.EXE, maupun *.COM biasanya juga hasil infeksi dari virus ini dapat diketahui dengan berubahnya ukuran file yang diserangnya.
5.6. Multi Partition Virus.

Virus ini merupakan gabungan dari virus boot sector dan virus file. Artinya pekerjaan yang dilakukan berakibat dua, yaitu dia dapat menginfeksi file-file *.EXE atau *.COM dan juga menginfeksi boot sector.

6.      CARA VIRUS KOMPUTER BEKERJA.

Virus computer : Sebuah kode komputer yang mampu "berbiak dengan sendirinya" yang menempelkan sebagian atau seluruh kodenya pada file atau aplikasi, dan mengakibatkan komputer Anda melakukan hal-hal yang tidak Anda inginkan. Virus-virus komputer merupakan penyakit umum dalam dunia teknologi modern. Mereka dapat menyebar dengan cepat melalui jaringan komputer yang terbuka seperti Internet, dan mengakibatkan kerugian hingga milyaran dolar dalam waktu singkat. Lima tahun yang lalu, peluang untuk terjangkiti sebuah virus dalam periode 12 bulan adalah 1 berbanding 1000; sekarang perbandingan itu naik drastis hingga 1 berbanding 10. Statistik vital dari virus :

6.1.         Virus-virus masuk ke dalam sistem Anda melalui e-mail, download, floppy disk yang terinfeksi, atau (kadang-kadang) oleh hacking.
6.2.         Dari definisinya, sebuah virus harus dapat melakukan "pembiakan sendiri" (alias membuat kloning atau salinan dari dirinya sendiri) untuk dapat menyebar.
6.3.         Saat ini terdapat ribuan jenis virus, tetapi hanya sedikit yang ditemukan "di belantara" (berkeliaran, tak terdeteksi, di dalam jaringan) karena sebagian besar dari virus yang dikenal lahir dari laboratorium, yang merupakan varian dari virus "liar" yang banyak terdapat di dunia.
6.4.         Akibat yang ditimbulkan virus bervariasi, mulai dari yang menjengkelkan hingga yang sangat merusak, akan tetapi virus yang paling sederhana pun memiliki kecenderungan untuk merusak karena adanya bug pada kode komputer mereka (karena programmer virusnya sangat ceroboh atau memang punya niat jahat).
6.5.         Software antivirus yang ada di pasaran saat ini dapat mendeteksi hampir semua jenis virus yang ada, tetapi harus diupdate secara reguler untuk menjaga keefektifannya.


Sebuah virus hanyalah sebuah program komputer. Seperti program komputer lainnya, di dalamnya terdapat instruksi yang dapat menyuruh komputer untuk melakukan tugas tertentu. Tetapi berbeda dengan program aplikasi, sebuah virus biasanya memerintahkan komputer Anda untuk melakukan hal yang sebenarnya tidak Anda inginkan, dan biasanya dapat menyebarkan dirinya ke file-file yang ada di dalam komputer Anda--dan kadang-kadang ke komputer orang lain juga.
Bila Anda beruntung, sebuah virus paling-paling hanya menyebabkan komputer untuk melakukan tindakan yang aneh-aneh, seperti menyebabkan speaker komputer Anda berbunyi "blip-blip-blip" secara acak. Yang paling ditakuti adalah virus ganas yang dapat menyebabkan seluruh data pada harddisk Anda hilang (dengan memerintah komputer untuk memformat harddisk), bahkan ada virus yang dapat merusak hardware komputer Anda, seperti virus CIH yang merusakkan BIOS motherboard komputer Anda.


7.      BAGAIMANA KOMPUTER BISA TERKENA VIRUS?

Komputer Anda dapat terinfeksi virus saat Anda menyalin sebuah file yang terinfeks ke dalam komputer, kemudian mengaktifkan kode dari tubuhnya saat file yang terinfeksi tersebut dijalankan atau dibuka. Mungkin Anda tidak merasa menyalinkan file terinfeksi ke dalam komputer Anda: Hei, virus tidak peduli apakah mereka menempel pada attachment e-mail, saat Anda tengah mendownload file, atau melalui floppy disk yang sering dipinjam-pinjamkan. Dan saat ini, dengan meningkatnya pemakai Internet, trend penyebaran virus adalah melalui attachment e-mail. Pada saat Anda membuka file atau aplikasi yang terinfeksi, kode perusak menyalin dirinya sendiri ke dalam sebuah file pada sistem Anda, kemudian menunggu untuk mengirimkan isinya--apapun itu yang dirancang si programmer untuk dilakukan pada komputer orang lain. Dengan hanya menghapus e-mail yang terinfeksi setelah Anda membuka file attachment-nya tidak akan menolong, karena virus tersebut telah merasuk ke dalam sistem komputer Anda sebelumnya. Seorang penulis virus dapat mengeset waktu penyerangan virusnya, saat itu juga, pada waktu atau tanggal tertentu, atau pada saat suatu perintah tertentu dijalankan, misalnya sewaktu Anda memerintahkan menyimpan atau menutup sebuah file.

Contoh: virus Michaelangelo yang diprogram untuk melepas kode perusaknya setiap tanggal 6 Maret setiap tahunnya--yang merupakan tanggal ulang tahun.


8.      BEBERAPA CARA PENYEBARAN VIRUS

Virus layaknya virus biologi harus memiliki media untuk dapat menyebar, virus computer dapat menyebar ke berbagai komputer/mesin lainnya juga melalui berbagai media, diantaranya:
1.      Disket, media storage R/W.
Media penyimpanan eksternal dapat menjadi sasaran empuk bagi virus untuk dijadikan media. Baik sebagai tempat menetap ataupun sebagai media penyebarannya. Media yang bisa melakukan operasi R/W (Read dan Write) sangat memungkinkan untuk ditumpangi virus dan dijadikan sebagai media penyebaran.

2.      Jaringan ( LAN, WAN,dsb).
Hubungan antara beberapa computer secara langsung sangat memungkinkan suatu virus ikut berpindah saat terjadi pertukaran/pengeksekusian file yang mengandung virus.

3.      WWW (internet).
Sangat mungkin suatu situs sengaja ditanamkan suatu “virus” yang akan menginfeksi komputer-komputer yang mengaksesnya.

4.      Software yang Freeware, Shareware atau bahkan Bajakan.
Banyak sekali virus yang sengaja ditanamkan dalam suatu program yang disebarluaskan baik secara gratis, atau trial version.

5.      Attachment pada email, transfering file.
Hampir semua jenis penyebaran virus akhir-akhir ini menggunakan email attachment dikarenakan semua pemakai jasa internet pastilah menggunakan email untuk berkomunikasi, file-file ini sengaja dibuat mencolok/menarik perhatian, bahkan seringkali memiliki ekstensi ganda pada penamaan filenya.

9.      PENANGULANGANNYA.

9.1. Langkah-Langkah untuk Pencegahan.
Untuk pencegahan anda dapat melakukan beberapa langkah-langkah berikut :

9.1.1.      Gunakan antivirus yang anda percayai denganupdate terbaru. Tidak perduli apapun merknya asalkan selalu diupdate, dan auto-protect dinyalakan maka komputer anda terlindungi.
9.1.2.      Selaluscann ing semua media penyimpanan eksternal yang akan digunakan, mungkin hal ini agak merepotkan tetapi jika auto-protect antivirus anda bekerja maka prosedur ini dapat dilewatkan.
9.1.3.      Jika anda terhubung langsung ke Internet cobalah untuk mengkombinasikan antivirus anda dengan Firewall, Anti-spamming, dsb.
9.1.4.      Selalu waspada terhadap fle-file yang mencurigakan, contoh : file dengan 2 buah exstension atau file executable yang terlihat mencurigakan.
9.1.5.      Untuk software freeware + shareware, ada baiknya anda mengambilnya dari situs resminya.
9.1.6.      Semampunya hindari membeli barang bajakan, gunakan software-software open source.

9.2. Langkah-Langkah Apabila telah Terinfeksi.

9.2.1.      Deteksi dan tentukan dimanakah kira-kira sumber virus tersebut apakah di disket, jaringan, email dsb. Jika anda terhubung ke jaringan maka ada baiknya anda mengisolasi komputer anda dulu (baik dengan melepas kabel atau mendisable sambungan internet dari control panel).
9.2.2.      Identifikasi dan klasifikasikan jenis virus apa yang menyerang pc anda, dengan cara: Gejala yang timbul, misal : pesan, file yangcorrupt atau hilang dsb.
9.2.3.      Scan dengan antivirus anda, jika anda terkena saat auto-protect berjalan berarti virus definition di dalam komputer anda tidak memiliki data virus ini, cobalahu pda te secara manual atau mendownload virus definitionnya untuk kemudian anda install. Jika virus tersebut memblok usaha anda untuk mengupdate, maka upayakan untuk menggunakan media lain (komputer) dengan antivirus yang memiliki update terbaru.
9.2.4.      Bersihkan virus tersebut. Setelah anda berhasil mendeteksi dan mengenalinya maka usahakan segera untuk mencari removal atau cara-cara untuk memusnahkannya di situs-situs yang memberikan informasi perkembangan virus tersebut. Hal ini perlu dilakukan apabila antivirus dengan update terbaru anda tidak berhasil memusnahkannya.
Langkah terburuk. Jika semua hal diatas tidak berhasil adalah memformat ulang komputer anda .

Rabu, 11 April 2012

Algoritma


Logika dan Algoritma


PENGERTIAN DASAR LOGIKA DAN ALGORITMA

Pengertian Dasar

LOGIKA
   Di perkenalkan pertama kali oleh aristoteles (384-322 SM).
Definisi Logika
   Definisi Logika itu sendiri adalah :
  • Penalaran atau bentuk pemikiran.
  • Ilmu yang memberikan prinsip-prinsip yang harus di ikuti agar dapat berfikir valid menurut aturan yang berlaku.
ALGORITMA
   Diperkenalkan olehahli matematika :Abu ja’far Muhammad Ibnu Musa Al Khawarizmi.
Seorang ilmuan Persia yang menulis kitab Al jabr w’al muqabala (rules of restoration and reduction) sekitar tahun 825 M.
Definisi Algoritma.
   Definisi Algoritma itu sendiri adalah :
  • Langkah – langkah yang dilakukan agar solusi masalah dapat diperoleh.
  • Suatu prosedur yang merupakan urutan langka – langkah yang berintegrasi.
  • Suatu metode khusus yang digunakan untuk menyelesaikan suatu masalah yang nyata (Webster Dictionary).

Kriteria Pemilihan Algoritma.
  • Ada Output,
  • Efektifitas dan Efesiensi,
  • Jumlah langkahnya berhingga,
  • Berakhir (SEMI ALGORITMA),
  • Terstruktur,

   Suatu algoritma yang terbaik (the best) : “suatu Algoritma harus menghasilkan output yang tepat guna (efektif) dalam waktu yang relatif singkat dan penggunaan memori yang relatifsedikit (efesien) dengan langkah yang berhingga dan prosedurnya berakhir baik dalam keadaan diperoleh suatu solusi ataupun tidak ada solusinya. “

TAHAPAN ANALISA ALGORITMA
  • Bagaimana merencanakan suatu algorima.
  • Bagaimana menyatakan suatu algoritma :
1.      Dengan bahasa semu (pseudocode).
               2.   Dengan diagram alur atau flowchart,
               3.   Dengan statement program / penggalan program
  • Bagaiman validitas suatu algoritma.
  • Bagaimana menganalisa suatu algoritma.
  • gaimana menguji programdari suatu algoritma.

Tahap Proses  Uji Algoritma :
  • Fase Debugging
Yaitu fase dari proses program eksekusi yang akan melakukan koreksi terhadap kesalahan.
  • Fase Profilling
Yaitu fase yang akan bekerja jika program tersebut sudah benar (telah melewati fase debugging).

Analisis suatu algoritma
(untuk melihat faktor efesiensi dan efektifitas dari algoritma tersebut), Dapat dilakukan terhadap suatu algoritma dengan melihat pada :
  • Waktu tempuh (Running time) dari suatu Algoritma.
Hal – hal yang dapat mempengaruhi dari pada waktu tempuh adalah :
1.      Banyaknya langkah.
    2.   Besar dan jenis input data.
    3.   Jenis operasi.
    4.   Komputer dan kompilator.
  • Jumlah memori yang di gunakan.

Sifat – sifat Algoritma
  • Banyaknya langkah instruksi harus berhingga,
  • Langkah atau instruksi harus jelas,
  • Proses harus jelas dan mempunyai batasan,
  • Input dan output harus mempunyai batasan,
  • Efektifitas,
  • Adanya batasan ruang lingkup,

Konsep Algoritma
   Konsep Algoritma itu sendiri terbagi menjadi 2 bagian, yaitu :
  • Algoritma pe-ubah
Algoritma pe-ubah adalah Variabel yang nilainya BUKAN konstanta (selalu berubah – ubah sesuai dengan pariabel terKINI)
Sintaks            :           P = Q
Algoritma        :           P < Q
Arti                 :           Bahwa nilai P diberi harga nilai Q
Nilai P akan sama dengan nilai Q, dan ilai Q tetap
  • Algoritma Pertukaran
Algoritma pertukaran berfungsi mempertukarkan masing – masing isi Variabel sedemikian sehingga nilai dari tiap Variabel akan berubah / bertukar.




October 08, 2009 By: imadewira Category: Algo dan SD I
Definisi
Definisi algoritma adalah urutan langkah-langkah logis penyeselaian masalah yang disusun secara sistematis dan logis. Kata logis (logika) merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus dapat ditentukan bernilai benar atau salah.
Algoritma Dalam Kehidupan
Algoritma adalah jantung ilmu komputer atau informatika. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun algoritma juga digunakan dalam kehidupan sehari-hari, contohnya resep makanan. Di dalam resep makanan terdapat langkah-langkah yang merupakan algoritma. Selain itu masih banyak contoh algoritma yang lain.
Bahasa Pemrograman
Untuk melaksanakan suatu algoritma diperlukan suatu bahasa pemrograman, contoh bahasa pemrograman adalah : Pascal, C++, Basic, dll. Notasi algoritma dapat diterjemahkan kedalam bahasa pemrograman apapun, dengan kata lain notasi algoritma bersifat independen.
Flowchart
     Bagan alir (flowchart) adalah bagan (chart) yg menunjukkan alir (flow) di dalam program atau prosedur sistem secara logika. Digunakan terutama untuk alat Bantu komunikasi dan untuk dokumentasi. Pedoman untuk menggambarkannya:
  1. Sebaiknya digambar dari atas ke bawah dan mulai dari bagian kiri suatu halaman.
  2. Kegiatannya harus ditunjukkan dengan jelas
  3. Ditunjukkan dengan jelas dimulai dan berakhirnya suatu kegiatan
  4. Masing-masing kegiatan sebaiknya digunakan suatu kata yg mewakili suatu pekerjaan
  5. Kegiatannya sudah dalam urutan yang benar.
  6. Kegiatan yg terpotong dan akan disambung ditunjukkan dengan jelas oleh simbol penghubung
  7.  Digunakan simbol-simbol yang standar
Suatu flowchart adalah suatu representasi secara diagram yang mengilustrasikan urutan dari operasi yang dilakukan untuk mendapatkan suatu hasil. Dengan kata lain, flowchart membantu kita untuk mengerti dan melihat bentuk algoritma dengan menampilkan algoritma dalam simbol-simbol gambar.
Dalam menggambar flowchart, digunakan simbol tertentu seperti diatas. Contoh berikut bisa digunakan untuk lebih mengerti perbedaan kegunaan simbol-simbol tersebut. Misal kita ingin mencari jumlah dari 2 buah bilangan, maka flowchart-nya adalah sebagai berikut :
Contoh lain, misalkan kita ingin mengetahui apakah sebuah bilangan ganjil atau genap. Untuk itu kita harus membuat flowchart seperti ini :
Pseudo Code
Pseudo Code adalah urutan baris algoritma seperti kode pemrograman dan tidak memiliki sintak yang baku. Pseudo Code lebih umum digunakan oleh programmer yang berpengalaman. Akan tetapi, flowchart lebih mudah dimengerti oleh programmer pemula, pseudo code sangat mudah diimplementasikan ke dalam kode program dibandingkan dengan flowchart. Kita bisa bebas menulis pseudo code selama itu mudah dimengerti bagi orang lain. Tetapi disarankan untuk menggunakan keyword yang umum digunakan seperti : if, then, else, while, do, repeat, for, dan lainnya. Dan ikuti gaya penulisan pemrograman seperti Pascal, C++, dll. Perhatikan kode dibawah ini :
  1. Mulai
  2. Masukkan sebuah angka
  3. Masukkan sebuah angka dan tampilkan
  4. Ambil angka yang sebelumnya dan tampilkan
  5. Selesai
Walaupun pseudo code diatas masih bisa dimengerti tetapi ada beberapa statemen yang ambigu. Dari baris kedua, kita tidak tahu kemana angka tersebut disimpan dan kita juga tidak tahu angka yang mana yang dimaksud untuk “angka yang sebelumnya”. Apakah angka yang pertama atau yang kedua. Pseudo Code diatas dapat dimodifikasi menjadi seperti berikut :
  1. Start
  2. Masukkan A
  3. Masukkan B, Tampilkan B
  4. Tampilkan A
  5. End
Pseudo Code diatas lebih baik dibandingkan sebelumnya. Kita bisa dengan jelas melihat dimana angka disimpan dan angka yang mana yang ditampilkan. Sekarang kita akan mengubah flowchart pada gambar 1.2
  1. Start
  2. Masukkan A dan B
  3. C = A + B
  4. Tampilkan C
  5. End
 
Looping
Looping adalah pengulangan sesuatu atau serangkaian "kerja" dari program. Dalam C++, paling tidak dikenal ada 3 looping.
While
Perintah while adalah pengulangan yang dilakukan oleh program selama (while) dalam keadaan tertentu. Misalnya saja, ada sebuah kondisi yang mengharuskan program agar melakukan "pekerjaan" tertentu selama keadaan itu terpenuhi (true).
Contoh:
Mencetak angka 1 sampai 1000
#include <iostream>
using namespace std; 
void main() {
    int i = 1;
    //kondisi ditetapkan (bahwa selama i lebih kecil atau sama dengan
    //1000 ada perintah yang diberikan pada program...)
    while (i <= 1000) {
       //perintah untuk mencetak nilai dari i dan kemudian membuat
        //baris baru
        cout << i << "\n";
        //iterasi
        ++i;
        //i = i + 1;
        //i += 1;
    }
}

Nah, dari kode di atas kita lihat bahwa selama i lebih kecil atau sama dengan 1000, nilai dari i akan di cetak ke layar. Jadi, hasilnya adalah:
1
2
1000
Akan tercetak angka dari 1 sampai 1000 di layar. Perhatikan baik – baik ada sepenggal kode yang diberi komentar "iterasi". Apakah iterasi itu? Iterasi dalam looping adalah proses yang berpengaruh dalam nilai dari variabel yang ditetapkan sebagai acuan looping. Atau dapat pula dikatakan bahwa, iterasi adalah bagaimana penambahan nilai atau pengurangan dalam perulangan. Contohnya seperti nilai dari i di atas. Penulisan yang diberikan pada variabel i adalah:
++i; 
Itu sama saja dengan perintah yang berada di dalam komentar:
// i = i + 1;
Dan
//i += i;
Perintah ini berarti bahwa i menambahkan dirinya sendiri dengan 1. Tanda "++" pada i pada bagian depan dari i (prefix), berarti kita langsung menambahkan variabel i dengan 1, tanpa menggunaan terlebih dahulu nilai dari i. Jika kita menggunakan tanda "++" pada bagian akhir dari variabel i (postfix), berarti nilai dari i digunakan terlebih dahulu lalu kemudian ditambahkan dengan 1. Contoh lain dari hal ini adalah dengan menggunakan pengurangan sebagai pengulangan. Contoh: 
#include <iostream>
using namespace std; 
void main () {
    int i = 1000;
    while (i >= 1) {
        cout << i << "\n";
        //yang digunakan adalah "—-"
        --i;
    }
}
Hasil yang didapat mungkin saja berbeda, tapi persamaan dari keduanya adalah bahwa terjadi perulangan sebanyak 1000 kali, yaitu: 
1000
999
Perlu diketahui bahwa yang terjadi pada perulangan jika sudah mencapai false (dimana kondisinya tidak lagi true melainkan false) adalah perulangan akan segera keluar dan melanjutkan program. Misalnya saja dari program di atas, jika i tidak lagi lebih kecil atau sama dengan 1000 (misalnya 1001), perulangan akan menghasilkan nilai false (kondisi tidak lagi i <= 1000).

 
do...while
Biasanya in adalah perintah untuk tetap melakukan sesuatu dalam program sampai kondisinya terpenuhi (aku memanggilnya "kepala batu" atau "si keras kepala" :DDD). Misalnya perintah untuk tetap menampilan sebuah pesan sampai adanya input yang valid dari user. Contoh:

#include <iostream>
using namecspace std;
void main () {
    char yes_no;
    //lalu beberapa variabel diletakkan di sini...
    //... (di sini misalnya terdapat kerja dari program)

 
    // disini diletakkan do...while untuk "menunggu" inputan yang
    //valid dari user.
    do {
        cout << "masih mau lanjut? (y / n): ";
        cin >> yes_no;
    } while (yes_no != 'y' || yes_no != 'n');

 
    if (yes_no == 'y')
        //lakukan terserah apa aja yang anda mau lakukan di sini

 
    else
        //di sini juga anda bisa lakukan apa saja yang anda mau
        //lakukan
}
Jika kita perhatikan mungkin ada tanda yang di pergunakan dalam kode tersebut. Akan saya coba jelaskan mengenai beberapa operator logika yang terdapat dalam C++.

 
Operator logika biasanya dipakai dalam perbandingan (kondisi). Mengenai fungsi perbandingan ini akan dibahas dalam bab-bab berikutnya. Operator logika yang biasanya dipakai ada beberapa macam, yaitu:
  • Tanda "&&" (and), operator ini berfungsi jika kedua nilai pembandingnya bernilai true. Contoh: i >= 0 && i <= 1000. Ini berarti penggunaan kondisi dimana kondisi tersebut adalah i lebih besar atau sama dengan 0 dan lebih kecil atau sama dengan 1.000 (0 – 1.000).
  • Tanda "||" (or), operator ini berfungsi jika salah satu dari kedua nilai pembandingnya bernilai true. Contoh: i >= 1000 || i <= 0. Ini berarti penggunaan kondisi dimana kondisi tersebut adalah i lebih besar atau sama dengan 1.000 atau leih kecil atau sama dengan 0 (-1 ke bawah atau 1.001 ke atas).
  • Tanda "!" (not), seperti yang kita lihat terdapat di bagian dari kode di atas adalah merupakan tanda negasi, yang berarti semacam pembalik dari sesuatu. Misalnya seperti yang kita lihat pada potongan kode di atas:

 
while (yes_no != 'y' || yes_no != 'n');
Ini kurang lebih dapat dibaca: "ketika yes_no tidak sama dengan 'y' n atau
yes_no tidak tidak sama dengan 'n'.

 
Kembali ke masalah kode di atas, pada bagian "pembuka" kita membuat beberap variabel, salah satunya adalah yes_no yang berfungsi untuk "menampung" nilai atau karakter yang dipilih dari user. Jadi, kita membuat sebuah program yang entah kerjanya baagimana lalu pada bagian akhir dari program tersebut, kita memberikan sebuah pilihan apakah user masih mau lanjut atau tidak. Jika user memasukkan input yang tidak valid misalnya menekan angka 0 atau menekan huruf "t"), maka perintah yang berada dalam blok do…while akan di eksekusi, dan begitu seterusnya jika user masih tidak memasukan input yang valid.


for
Ini adalah (mungkin) perulangan yang paling sering dipakai dalam C++. Sintaknya adalah sebagai berikut:
for (inisialisasi; kondisi; iterasi) {
    //yang ingin dilakukan...
}
Dalam for, anda bisa melakukan inisialisasi, yaitu mendeklarasikan variabel baru dan langsung memasukan nilai di dalamnya, kemudian memberi kondisi dimana perulangan itu akan terus dilakukan, dan pada akhirnya menentukan iterasi. Contoh dari for adalah sebagai berikut:

 
#include <iostream>
using namespace std;

 
void main () {
    int num_masuk;
    cout << "berapa banyak anda mau melakukan perulangan?: ";
    cin >> num_masuk;

 
    for (int i = 1; i <= num_masuk; ++i) {
        cout << "ini adalah baris ke-" << i << "\n" ;
    }
}

 
Pada kode di atas, yang akan menjadi input dari user untuk menentukan berapa banyak perulangan akan dilakukan adalah num_masuk, dan variabel yang akan dijadikan patokan dalam perulangan adalah i, di mana i di buat di dalam perintah for dan kemudian langsung di assign (inisialisasi). Kondisi yang digunakan adalah kondisi dimana i <= num_masuk yang berarti, jika / selama i lebih kecil atau sama dengan num_masuk maka perulangan akan terus dilakukan. Iteasi yang ditentukan di sini adalah nilai dari i akan ditambah 1 (satu) dalam setiap perulangan (++i). Contoh program yang sudah di compile dari kode ini adalah:

 
Namun
for
juga bisa digunakan sebagai berikut:
for (int i = 1; i <= 10; ++i) {
    for (int j = 1; j <= 10; ++j) {
        cout << i * j << "\n";
    }
}
Program seperti ini dapat digunakan dalam perhitungan perkalian, misalnya saja hasilnya dapat menjadi sebagai berikut:
Koding untuk program ini adalah:
#include <iostream>
using namespace std; 
void main () {
    //untuk berapa banyak baris yang diinginkan...
    for (int i = 1; i <= 10; ++i) {
        //jumlah kolom, mengingat bagian ini yang akan
        //dieksekusi lebih lanjut dan sampe selesai daul baru
//dilanjutkan dengan bagian yang selanjutnya (bagian baris)
        for (int j = 1; j <= 3; ++j) {
            cout << i << " X " << j << " = " << j * i << "\t";
        }
        //baris baru, setelah ketiga kolom selesai "dibuat"
        cout << "\n";
    }
}
Break dan continue
Ketika melakukan perulangan, ketika sampai batas tertentu kita ingin memberhentikan perulangan tersebut. Untuk itulah, dibuat statement break dan continue. 
break
Adalah perintah untuk langsung keluar dari looping (perulangan). Contoh penggunaan statement break adalah:
while (i > 0) {
    cout << i << "\n";
    if (i == 2)
        break;
    --i;
}
Sudah bisa tebak apa kira – kira yang akan dihasilkan oleh program ini? Kalau belum, silahkan baca lebih lanjut.
Program tersebut akan dieksekusi sampai nilai i sama dengan 2. Seharusnya, progrma tersebut akan bejalan sampai dengan nilai i sama dengan 1. Tapi statement break yang diberikan pada kondisi dimana jika nilai i sama dengan 2 maka looping dihentikan, maka ketika nilai i sama dengan 2, nilai i tidak dikurangi lagi (--i;) dan looping keluar. Hasilnya kurang lebih bisa dilihat sama dengan contoh program berikut:

 
Kodenya adalah sebagai berikut:
#include <iostream>
using namespace std; 
void main () {
    int baris;
    cout << "berapa banyak anda ingin mencetak baris?: ";
    cin >> baris;

 
    for (int i = 1; i <= baris; ++i) {
        cout << "ok, ini adalah baris yang ke-" << i << "\n";

 
        if (i == (baris - 1))
            break;
    }
    cout << "sorry, hanya bisa sampe di situ doang... :D\n";
}
Continue
Nah, ini juga mirip dengan break tadi hanya saja ini kebalikannya. Langsung saja ke contohnya:
    for (int i = 1; i <= 20; ++i) {
        if (i % 7 == 0)
            cout << i << "\n";
        else
            continue;
    }
Yang di atas itu adalah (kurang lebih) contoh yang saya pelajari ketika saya belajar C++ juga :D. Itu adlaah kode untuk mencari bilangan kelipatan 7 dari 1 – 20. Fungs continue diatas adalah, jika bilangan itu tidak habis di bagi 7 (if (i % 7 == 0)), maka lopingnya dilanjutkan terus, tanpa adanya apa – apa yang akan dieksekusi. Contoh tampilannya adalah sebagai berikut (kali ini kita akan mencoba mencari dari 1 sampai 100):

 
Kodenya adalah sebagai berikut:
#include <iostream>
using namespace std;

 
void main () {
    for (int i = 1; i <= 100; ++i) {
        if (i % 7 == 0)
            cout << i << " adalah kelipatan 7!\n";
        else
            continue;
    }
}




PEMBAGIAN TIPE DATA :
  • TIPE SEDERHANA
a.int,bool,char.
b.tipe float.
  • TIPE STRING
  • TIPE TERSTRUKTUR
a.array dan struct.

VARIABEL DAN KONSTANTA

VARIABEL
  • Untuk menyimpan suatu nilai ,dan nilai yg ada padanya dpt diubah selama eksekusi berlangsung .
  • penaman variabel bersifat case sensitive.
  • Harus dideklarasikan dahulu sebelum digunakan
contoh :int alas ,tinggi;

KONSTANTA
Sebuah variabel dgn tipe data tertentu dan memiliki nilai data yg akan selalu tetap didalam program .
contoh: const phi=3,14;

I.TIPE SEDEHANA PADA C++
1.Tipe int:tipe data yg nilainya tidak memiliki titik desimal ( 16 -32 bit).
2.Tipe float :tipe data yg merupakan pecahan (32-64bit).
3.Tipe char :digunakan untuk menampung sebuah karakter .
contoh :'A'--> karakter huruf A
'1'-->karakter huruf angka 1
'*'--->karakter simbol *
4.Tipe bool :nilai penagambilan suatu keputusan pd program ,tipe ini mempunyai 2 nilai yaitu benar (T)/salah (F) .operator AND,OR /NOT
  • AND--->0 (SALAH) dan 1(benar)
  • NOT---->0(BENAR)dan 1(salah)
  • OR----->Satu salah lain bnr ( benar )
II .Tipe string(1-255 karakter) nilai string (")
bentuk umum:
tipe _data pengenal [panjang];
pengenal =nama variabel
panjang =bilangan bulat yg menunjukan jmlh karakter
contoh:char nama [15];
III.Tipe terstruktur
Untuk mengelompokan data dgn tipe yg berlainan.
contoh:
struct data_pegawai
{
int nip;
char nama[25];
char alamat[40];
}


CONTOH PROGRAM SEDERHANA
#include
#include
#include
main()
{
int x,y,z;
clrscr();
cout<<"\n input nilai x=";cin>>x;
cout<<"\n input nilai y=";cin>>y;
z=x+y;
cout<<"\n hasil penjumlahan='<
getch();
}


REKURSIF

•      Rekursif merupakan alat/cara untuk memecahkan masalah dalam suatu fungsi atau procedure yang memanggil dirinya sendiri.

•      Definisi menurut Niclaus Wirth :
“ An object is said be recursive if it partially consist or is defines in terms of itself”

•      perhitungan matematika ( contoh fungsi factorial dan bilangan Fibonacci)

Faktorial

•      Fungsi factorial dari bilangan bulat positif n didefinisikan sebagai berikut:
                        n!= n.(n-1)! , jika n>1
                        n!= 1          , jika n=0, 1

•      contoh :
                        3!= 3. 2!
                        3!= 3. 2. 1!
                        3!= 3. 2. 1
                        3!= 6

Kita dapat menuliskan fungsi penghitung factorial seperti dibawah ini
  1. int Faktorial(int n)
  2. {
  3.               if ((n == 0) || (n == 1 ))
  4.                           return (1);
  5.               else
  6.                           return (n * Faktorial(n-1));
  7. }

•      Pada baris 3 dari fungsi diatas,
            nilai n dicek sama dengan 0 atau 1,
            jika ya, maka fungsi mengembalikan nilai 1 {baris 4},
            jika tidak, fungsi mengembalikan nilai n * Faktorial (n -1)
               {baris 6}
•      disinilah letak proses rekursif itu, perhatikan fungsi factorial ini memanggil dirinya sendiri tetapi dengan parameter (n-1)

Bilangan Fibonacci

•      Fungsi lain yang dapat diubah ke bentuk rekursif adalah perhitungan Fibonacci. Bilangan Fibonacci dapat didefinisikan sebagai berikut:
                        fn = fn-1 + fn-2 untuk n > 2
                        f1 = 1
                        f2 = 1
            Berikut ini adalah barisan bilangan Fibonacci mulai dari n=1
                        1   1    2    3    5    8    13    21   34

Algoritma Fibonacci yang dipakai

Function Fibonacci(input n:integer) integer
Deklarasi Lokal
  {tidak ada}
Deskripsi
            If (n ==1 || n==2) Then
                        return (l)
            Else
                        return (Fibonacci(n-1)+Fibonacci(n-2))
            Endif

Contoh

•      Untuk ukuran n= 4, proses perhitungan Fibonacci dapat dilakukan sebagai berikut:
                        f4 = f3+f2
                        f4 = (f2+f1) + f2
                        f4 = (1+1) +1
                        f4 = 3

Kombinasi

Function Kombinasi (input n, r : integer) real
Deklarasi
 If (n < r) Then
            return (0)
 Else
            return (Faktorial(n)/Faktorial(r)*Faktorial(n-r))
 Endif

Permutasi

            Function Permutasi (input n, r : integer) real
            Deklarasi
      {tidak ada}
   Deskripsi
            If (n< r) Then
                                    return (0)
            Else
                                    return (Faktorial(n) / Faktorial(n-r))
            Endif

program untuk menghitung deret S = 1+2+3+4+5+...+n menggunakan function rekursi
Function S(input n:integer)  integer
Deklarasi Lokal
  {tidak ada}
Deskripsi
            If (n==1) Then
            return (l)
            Else
            return (n + S(n-1))
            Endif

program untuk menghitung deret S = 2+4+6+8+10+...+2n menggunakan function rekursi

Function S(input n:integer)  integer
Deklarasi Lokal
  {tidak ada}
Deskripsi
            If (n==1) Then
            return (2)
            Else
            return (2*n + S(n-1))
            Endif

program untuk menghitung deret S = 1+2+3+4+5+...+n menggunakan function rekursi

#include<iostream.h>
int S(int n);
main()
{
  int n;
  cout << “Masukkan n = “; cin >> n;
  cout << “Deret S=1+2+3+4+5+...+n \n”;
  cout << “Jumlah deret S = “ << S(n);
}
int S(int n)
{
              if (n == 1)
                          return (1);
              else
                          return (n + S(n-1));
}