SELAMAT DATANG

Sabtu, 02 Juli 2011

Sandi Caesar

           Dalam kriptografi, sandi Caesar, atau sandi geser, kode Caesar atau Geseran Caesar adalah salah satu teknik enkripsi paling sederhana dan paling terkenal. Sandi ini termasuk sandi substitusi dimana setiap huruf pada teks terang (plaintext) digantikan oleh huruf lain yang memiliki selisih posisi tertentu dalam alfabet. Misalnya, jika menggunakan geseran 3, W akan menjadi Z, I menjadi L, dan K menjadi N sehingga teks terang "wiki" akan menjadi "ZLNL" pada teks tersandi. Nama Caesar diambil dari Julius Caesar, jenderal, konsul, dan diktator Romawi yang menggunakan sandi ini untuk berkomunikasi dengan para panglimanya.
Langkah enkripsi oleh sandi Caesar sering dijadikan bagian dari penyandian yang lebih rumit, seperti sandi Vigenère, dan masih memiliki aplikasi modern pada sistem ROT13. Pada saat ini, seperti halnya sandi substitusi alfabet tunggal lainnya, sandi Caesar dapat dengan mudah dipecahkan dan praktis tidak memberikan kerahasiaan bagi pemakainya.

Contoh

Cara kerja sandi ini dapat diilustrasikan dengan membariskan dua set alfabet; alfabet sandi disusun dengan cara menggeser alfabet biasa ke kanan atau ke kiri dengan angka tertentu (angka ini disebut kunci). Misalnya sandi Caesar dengan kunci 3, adalah sebagai berikut:
Alfabet Biasa:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
Alfabet Sandi:   DEFGHIJKLMNOPQRSTUVWXYZABC
Untuk menyandikan sebuah pesan, cukup mencari setiap huruf yang hendak disandikan di alfabet biasa, lalu tuliskan huruf yang sesuai pada alfabet sandi. Untuk memecahkan sandi tersebut gunakan cara sebaliknya. Contoh penyandian sebuah pesan adalah sebagai berikut.
teks terang:   kirim pasukan ke sayap kiri
teks tersandi: NLULP SDVXNDQ NH VDBDS NLUL
Proses penyandian (enkripsi) dapat secara matematis menggunakan operasi modulus dengan mengubah huruf-huruf menjadi angka, A = 0, B = 1,..., Z = 25. Sandi (En) dari "huruf" x dengan geseran n secara matematis dituliskan dengan,
E_n(x) = (x + n) \mod {26}.
Sedangkan pada proses pemecahan kode (dekripsi), hasil dekripsi (Dn) adalah
D_n(x) = (x - n) \mod {26}.
Setiap huruf yang sama digantikan oleh huruf yang sama di sepanjang pesan, sehingga sandi Caesar digolongkan kepada, substitusi monoalfabetik, yang berlawanan dengan substitusi polialfabetik.

[sunting] Sejarah dan Penggunaan

Julius Caesar menggunakan sandi ini dengan geseran tiga ke kiri.
Nama Sandi Caesar diambil dari Julius Caesar, yang menurut buku Suetonius Kehidupan Duabelas Caesar, menggunakan sandi ini dengan geseran tiga, untuk mengirim pesan yang mengandung rahasia atau taktik militer.
Jika ia memiliki suatu rahasia yang akan disampaikan, ia menuliskannya dalam sandi, dengan mengganti urutan abjad, sehingga tak satu kata pun dapat dimengerti. Jika ada yang ingin membaca pesan-pesan ini, ia harus mengganti huruf keempat dalam alfabet, yaitu D, untuk A, dan seterusnya untuk huruf-huruf lain. - Suetonius, Kehidupan Julius Caesar 56[1]
Keponakan Caesar, Augustus juga menggunakan skema sandi Caesar, namun dengan geseran satu ke kanan, dengan sedikit perbedaan.
Jika ia hendak menulis sandi, ia menuliskan B untuk A, C untuk B, dan seterusnya, serta AA untuk Z. — Suetonius, Kehidupan Augustus 88.[2]
Juga terdapat bukti bahwa Julius Caesar juga menggunakan sistem yang lebih rumit. Penulis Aulus Gellius, merujuk pada sebuah risalah (yang sekarang hilang) dalam sandi-sandinya.
Bahkan terdapat suatu risalah yang ditulis secara cerdas oleh ahli tatabahasa Probus mengenai arti rahasia dari huruf-huruf yang menyusun surat-surat Caesar — Aulus Gellius, 17.9.1–5.
Masih belum diketahui seberapa efektif sandi Caesar pada waktu itu, namun kemungkinan besar sandi tersebut cukup aman, karena amat sedikit dari musuh Caesar yang dapat membaca, apalagi yang dapat memecahkan sandi. Tidak ada catatan mengenai ditemukannya solusi untuk memecahkan sandi Caesar pada zaman itu. Catatan tertua mengenai pemecahan sandi substitusi monoalfabetik seperti sandi Caesar adalah pada abad ke-9, oleh kebudayaan Arab Muslim yang menemukan analisis frekuensi.
Juga diketahui bahwa sejenis sandi Caesar juga pernah digunakan sebelum masa Caesar. Sandi Caesar dengan geseran satu diklaim telah ditemukan di belakang Hezuzah. [3]
Pada abad ke-19, iklan pribadi di surat-surat kabar kadang-kadang dituliskan dengan sandi Caesar. David Kahn (1967) menuliskan beberapa pasangan kekasih berkomunikasi secara rahasia dengan sandi Caesar melalui iklan di The Times. Bahkan pada Perang Dunia I, Tentara Kekaisaran Rusia menggunakan sandi Caesar, karena banyak tentara yang tidak mampu menggunakan metode sandi yang lebih maju; akibatnya para kriptoanalis Jerman dan Austria dapat memecahkan sandi-sandi tentara Rusia dengan mudah.
Sekarang sandi Caesar tidak dapat digunakan untuk hal-hal yang penting, namun dapat digunakan untuk kepentingan sederhana seperti diari, surat cinta, menyembunyikan penghinaan, spoiler dan lain-lain yang tidak melibatkan para ahli. Sandi Caesar dengan geseran 13 disebut algoritma ROT13, digunakan pada forum-forum internet agar suatu tulisan (mis. spoiler) tidak langsung terbaca.
Pada akhir abad ke-16 ditemukan sandi Vigenère yang merupakan pengembangan lebih lanjut daripada sandi Caesar. Sandi Vigenère menggunakan sandi Caesar dengan bilangan geseran yang berbeda tiap hurufnya, sesuai dengan sebuah kata kunci. Berbeda dengan sandi Caesar yang dapat dipecahkan melalui analisis frekuensi sederhana, Sandi Vigenère pada saat itu terlihat sulit sekali dipecahkan. Sandi Vigenère dijuluki le chiffre indéchiffrable (sandi yang tak terpecahkan) hingga akhirnya dipecahkan pada abad ke-19 dengan cara analisis frekuensi lanjutan.
Pada April 2006, seorang bos mafia buronan Bernardo Provenzano tertangkap di pulau Sisilia. Keberhasilan ini tak lepas dari keberhasilan pihak berwenang memecahkan sandi yang digunakan sang buronan. Provenzano menggunakan suatu variasi dari sandi Caesar. [4]

[sunting] Memecahkan sandi Caesar

geseran yang
digunakan
calon teks terang
0 exxegoexsrgi
1 dwwdfndwrqfh
2 cvvcemcvqpeg
3 buubdlbupodf
4 attackatonce
5 zsszbjzsnmbd
6 yrryaiyrmlac
...
23 haahjrhavujl
24 gzzgiqgzutik
25 fyyfhpfytshj
Proses membaca teks tersandi menjadi teks terang disebut dekripsi. Sandi Caesar dapat dipecahkan bahkan jika seseorang hanya memiliki teks tersandi tanpa mengetahui nilai geserannya, ataupun bahwa sandi Caesar telah digunakan.
Jika pihak pemecah sandi hanya mengetahui bahwa digunakan substitusi monoalfabetik dalam suatu sandi, sandi tersebut dipecahkan dengan cara analisis frekuensi. Setiap bahasa memiliki huruf yang sering digunakan atau jarang digunakan. Misalnya huruf a sering sekali digunakan dalam bahasa Indonesia, dan q atau x jarang sekali muncul. Setiap bahasa memiliki pola frekuensi tertentu, yang menunjukkan frekuensi relatif dari digunakannya huruf-huruf dalam bahasa tersebut. Pola frekuensi huruf dalam bahasa Inggris ditunjukkan dalam gambar.
Pola frekuensi huruf-huruf dalam bahasa Inggris. Pola ini memiliki sifat tertentu, misalnya "lonjakan" pada e, atau tiga bar tinggi pada r-s diikuti 6 batang rendah pada u-z.
Jika pemecah kode menghitung frekuensi huruf pada teks tersandi, karakteristik khusus pada grafik disamping tentu masih ada pada teks tersandi, hanya saja posisinya telah digeser. Misalkan sang pemecah kode menemukan lonjakan di C, serta tiga batang tinggi berturut-turut diikuti enam batang rendah berturut-turut dimulai dari O, maka bisa ditebak bahwa sandi tersebut menggunakan geseran 5 ke kiri, dan dari kesimpulan ini kita dapat mendekripsi teks tersandi dengan menggeser setiap huruf sandi 2 posisi ke kanan.
Cara kedua yang lebih mudah, dapat dilakukan jika sang pemecah sandi mengetahui bahwa pengirim sandi menggunakan sandi Caesar. Sandi tersebut akan dipecahkan dengan menggunakan brute force attack, yaitu mencoba ke-26 kemungkinan geseran yang digunakan. Biasanya hanya satu dari ke-26 kemungkinan ini yang dapat dibaca. Misalkan suatu teks tersandi "EXXEGOEXSRGI". Pada tabel disamping ditunjukkan hasil percobaan yang dilakukan, dan hanya satu hasil yang dapat dibaca, yaitu attackatonce. Hal ini berarti pesan yang disandikan adalah pesan berbahasa Inggris "attack at once", yang berarti "serang sekarang juga".
Dengan kemajuan komputer dan teknologi informasi, kedua cara diatas dapat dijalankan dengan mudah dan cepat, sehingga saat ini sandi Caesar sama sekali tidak berguna untuk menyembunyikan atau menyandikan dokumen-dokumen atau perintah-perintah penting dan rahasia.

Structure of a program (stuktur program)

Mungkin cara terbaik untuk memulai belajar bahasa pemrograman adalah dengan menulis program. Oleh karena itu, di sini adalah program pertama kami:
12345678910

/ / Program pertama saya di C + +
# Includeusing namespace std;
int main (){
  
cout <<"Hello World!";
  
return 0;}


Hello World!


Panel pertama (dalam cahaya biru) menunjukkan kode sumber untuk program pertama kami. Yang kedua (dalam cahaya abu-abu) menunjukkan hasil dari program sekali dikompilasi dan dieksekusi. Ke kiri, angka abu-abu mewakili nomor baris - ini bukan bagian dari program, dan ditampilkan di sini hanya untuk tujuan informasi.
Cara untuk mengedit dan mengkompilasi sebuah program tergantung pada compiler yang anda gunakan. Tergantung pada apakah ia memiliki Interface Pembangunan atau tidak dan pada versi. Konsultasikan bagian compiler dan manual atau membantu disertakan dengan kompiler Anda jika Anda memiliki keraguan tentang bagaimana mengkompilasi program C + + konsol.
Program sebelumnya adalah program magang programmer khas yang menulis untuk pertama kalinya, dan hasilnya adalah pencetakan di layar dari "Hello World!" kalimat. Ini adalah salah satu program paling sederhana yang dapat ditulis dalam C + +, tapi sudah berisi komponen mendasar yang setiap C + + program telah. Kita akan melihat baris demi baris pada kode kita baru saja menulis:
/ / Program pertama saya di C + +
    
Ini adalah baris komentar. Semua baris yang dimulai dengan dua tanda garis miring (/ /) dianggap komentar dan tidak memiliki efek pada perilaku program. Programmer dapat menggunakannya untuk menyertakan penjelasan singkat atau pengamatan dalam kode sumber itu sendiri. Dalam kasus ini, garis adalah deskripsi singkat tentang apa program kami.# Include
    
Baris yang dimulai dengan tanda hash (#) adalah petunjuk untuk preprocessor. Mereka tidak teratur baris kode dengan ekspresi tapi indikasi untuk preprocessor compiler. Dalam kasus ini direktif # include memberitahukan preprocessor untuk menyertakan file standar iostream. Ini file spesifik (iostream) meliputi deklarasi perpustakaan standar dasar input-output dalam C + +, dan ini dimasukkan karena fungsinya akan digunakan nanti dalam program.using namespace std;
    
Semua elemen standar C + + perpustakaan dinyatakan dalam apa yang disebut namespace, namespace dengan nama std. Jadi untuk mengakses fungsionalitas kami menyatakan dengan ungkapan ini bahwa kita akan menggunakan entitas ini. Baris ini sangat sering di C + + program yang menggunakan standar perpustakaan, dan sebenarnya itu akan dimasukkan dalam sebagian besar kode sumber disertakan dalam tutorial ini.int main ()
    
Baris ini sesuai dengan awal dari definisi fungsi utama. Fungsi utama adalah titik oleh di mana semua program C + + mulai eksekusi mereka, terlepas dari lokasinya di dalam kode sumber. Tidak peduli apakah ada fungsi lain dengan nama yang lain didefinisikan sebelum atau sesudah itu - instruksi yang terdapat dalam definisi fungsi ini akan selalu menjadi yang pertama yang akan dieksekusi dalam setiap program C + +. Untuk itu alasan yang sama, adalah penting bahwa semua program C + + memiliki fungsi utama.

    
Kata utama adalah dalam kode diikuti oleh sepasang tanda kurung (()). Itu karena merupakan deklarasi fungsi: Dalam C + +, apa yang membedakan sebuah deklarasi fungsi dari jenis lain ekspresi kurung ini yang mengikuti namanya. Opsional, tanda kurung ini dapat melampirkan daftar parameter dalam diri mereka.

    
Tepat setelah kurung ini kita dapat menemukan tubuh dari fungsi utama diapit oleh kurung ({}). Apa yang terkandung di dalam kurung ini adalah apa fungsi tidak ketika dijalankan.cout <<"Hello World!";
    
Baris ini adalah C + + pernyataan. Sebuah pernyataan adalah ekspresi sederhana atau senyawa yang benar-benar dapat menghasilkan beberapa efek. Pada kenyataannya, pernyataan ini hanya melakukan tindakan yang menghasilkan efek yang terlihat dalam program pertama kami.

    
pengadilan adalah nama dari output stream standar dalam C + +, dan makna dari seluruh pernyataan adalah untuk menyisipkan rangkaian karakter (dalam hal ini urutan Hello World karakter) ke dalam aliran output standar (pengadilan, yang biasanya sesuai dengan layar).

    
pengadilan ini dideklarasikan pada file standar iostream dalam namespace std, jadi itu sebabnya kami perlu menyertakan file tertentu dan untuk menyatakan bahwa kami akan menggunakan namespace spesifik ini di awal kode kita.

    
Perhatikan bahwa pernyataan diakhiri dengan karakter titik koma (;). Karakter ini digunakan untuk menandai akhir dari pernyataan dan kenyataan itu harus disertakan pada akhir dari semua pernyataan ekspresi dalam semua program C + + (salah satu kesalahan sintaks yang paling umum memang lupa untuk menyertakan beberapa titik koma setelah pernyataan).return 0;
    
Pernyataan kembali menyebabkan fungsi utama untuk menyelesaikan. kembali mungkin akan diikuti oleh kode kembali (pada contoh kita adalah diikuti oleh kode kembali dengan nilai nol). Sebuah kode kembali 0 untuk fungsi utama umumnya ditafsirkan sebagai program bekerja seperti yang diharapkan tanpa ada kesalahan selama pelaksanaannya. Ini adalah cara yang paling biasa untuk mengakhiri program C + + konsol.

Anda mungkin telah memperhatikan bahwa tidak semua baris program ini melakukan tindakan saat kode dijalankan. Ada baris yang mengandung komentar saja (yang dimulai dengan / /). Ada baris dengan petunjuk untuk preprocessor compiler (yang dimulai dengan #). Lalu ada garis-garis yang mulai deklarasi fungsi (dalam kasus ini, fungsi utama) dan, akhirnya baris dengan pernyataan (seperti penyisipan ke pengadilan), yang semua termasuk dalam blok dibatasi oleh kurung ({}) dari fungsi utama.
Program ini telah terstruktur dalam baris yang berbeda agar lebih mudah dibaca, tapi di C + +, kita tidak memiliki aturan ketat tentang bagaimana memisahkan instruksi dalam baris yang berbeda. Misalnya, bukan
12345

int main (){
  
cout <<"Hello World!";
  
return 0;}


Kita bisa menulis:

 
int main () {cout <<"Hello World!"; return 0;}


Semua hanya dalam satu baris dan ini akan memiliki arti yang sama persis dengan kode sebelumnya.
Dalam C + +, pemisahan antara pernyataan ditentukan dengan titik koma berakhir (;) pada akhir masing-masing, sehingga pemisahan dalam baris kode yang berbeda tidak masalah sama sekali untuk tujuan ini. Kita dapat menulis banyak pernyataan per baris atau menulis pernyataan tunggal yang mengambil banyak baris kode. Pembagian kode dalam baris yang berbeda hanya melayani untuk membuatnya lebih mudah dibaca dan skematis untuk manusia yang mungkin membacanya.
Mari kita tambahkan instruksi tambahan untuk program pertama kami:
123456789101112

/ / Program kedua saya di C + +
# Include
using namespace std;
int main (){
  
cout <<"Hello World!";
  
cout <<"Aku C + + program";
  
return 0;}


Hello World! Aku C + + program


Dalam kasus ini, kami melakukan dua sisipan ke pengadilan dalam dua pernyataan yang berbeda. Sekali lagi, pemisahan dalam baris yang berbeda dari kode telah dilakukan hanya untuk memberikan pembacaan yang lebih besar untuk program ini, karena utama bisa telah sempurna berlaku didefinisikan dengan cara ini:

 
int main () {cout <<"Hello World!"; cout <<"Aku C + + program"; return 0;}


Kami juga bebas untuk membagi kode ke baris lagi jika kita dianggap lebih nyaman:
12345678

int main (){
  
cout <<
    
"Hello World!";
  
pengadilan
    
<<"Aku C + + program";
  
return 0;}


Dan hasilnya akan lagi sudah persis sama seperti pada contoh sebelumnya.
Arahan preprocessor (yang dimulai dengan #) adalah keluar dari aturan umum ini karena mereka tidak pernyataan. Mereka baris dibaca dan diproses oleh preprocessor dan tidak menghasilkan kode apapun sendiri. Preprocessor arahan harus dirinci dalam jalur sendiri dan tidak harus diakhiri dengan titik koma (;).
Komentar
Komentar adalah bagian dari kode sumber diabaikan oleh compiler. Mereka hanya melakukan apa-apa. Tujuan mereka hanya untuk memungkinkan para programmer untuk memasukkan catatan atau deskripsi tertanam dalam kode sumber.
C + + mendukung dua cara untuk menyisipkan komentar:
12

/ / Baris komentar/ * Blok komentar * /


Yang pertama dari mereka, yang dikenal sebagai baris komentar, membuang segala sesuatu dari mana sepasang tanda garis miring (/ /) ditemukan sampai akhir dari baris yang sama. Yang kedua, yang dikenal sebagai blok komentar, membuang segala yang ada antara karakter / * dan penampilan pertama dari * / karakter, dengan kemungkinan termasuk lebih dari satu baris.Kita akan menambahkan komentar ke program kedua kita:
123456789101112

/ * Program kedua saya di C + +
   
dengan komentar yang lebih * /
# Includeusing namespace std;
int main (){
  
cout <<"Hello World!"; / / mencetak Hello World!
  
cout <<"Aku C + + program"; / / mencetak aku C + + program
  
return 0;}


Hello World! Aku C + + program


Jika Anda memasukkan komentar dalam kode sumber dari program-program anda tanpa menggunakan karakter komentar kombinasi / /, / * atau * /, compiler akan membawa mereka seolah-olah mereka C + + ekspresi, kemungkinan besar menyebabkan satu atau pesan kesalahan beberapa saat compile .

Character Sequences(karakter urutan)

Seperti yang Anda mungkin sudah tahu, C + + Standard Library menerapkan kelas string yang kuat, yang sangat berguna untuk menangani dan memanipulasi string karakter. Namun, karena berada di urutan string fakta karakter, kita dapat mewakili mereka juga sebagai elemen array plain char.
Sebagai contoh, array berikut:

 
arang jenny [20];


adalah array yang dapat menyimpan hingga 20 jenis elemen char. Hal ini dapat direpresentasikan sebagai:

Oleh karena itu, dalam array ini, dalam teori, kita dapat menyimpan deretan karakter sampai 20 karakter. Tapi kita juga dapat menyimpan urutan lebih pendek. Sebagai contoh, jenny bisa menyimpan di beberapa titik dalam sebuah program baik urutan "Halo" atau urutan "Selamat natal", karena keduanya lebih pendek dari 20 karakter.
Oleh karena itu, sejak array karakter dapat menyimpan urutan lebih pendek dari panjang total, karakter khusus digunakan untuk menandakan akhir dari urutan yang valid: karakter null, yang harfiah konstan dapat ditulis sebagai '\ 0' (backslash, nol) .
Array kita dari 20 elemen dari tipe char, disebut jenny, dapat direpresentasikan menyimpan urutan karakter "Halo" dan "Selamat Natal" sebagai:

Perhatikan bagaimana setelah konten yang valid karakter null ('\ 0') telah dimasukkan untuk menunjukkan akhir urutan. Panel dalam warna abu-abu mewakili unsur-unsur arang dengan nilai-nilai ditentukan.
Inisialisasi null-diakhiri urutan karakterKarena array adalah array karakter biasa mereka mengikuti semua aturan yang sama mereka. Sebagai contoh, jika kita ingin menginisialisasi sebuah array karakter dengan beberapa urutan yang telah ditentukan karakter yang bisa kita lakukan hanya seperti array lain:

 
arang myword [] = {'H', 'e', ​​'l', 'l', 'o', '\ 0'};


Dalam hal ini kita akan mendeklarasikan sebuah array dari 6 elemen dari tipe char diinisialisasi dengan karakter yang membentuk kata "Halo" plus karakter null '0 \' di akhir.Tapi array elemen arang memiliki metode tambahan untuk menginisialisasi nilai-nilai mereka: menggunakan string literal.
Dalam ekspresi yang kita telah digunakan dalam beberapa contoh dalam bab-bab sebelumnya, konstanta string yang mewakili seluruh karakter telah muncul beberapa kali. Ini adalah ditentukan melampirkan teks menjadi sebuah string literal antara tanda kutip ganda (") Sebagai contoh.:

 
"Hasilnya adalah:"


adalah sebuah string konstan literal bahwa kita mungkin digunakan sudah.
String dikutip ganda (") adalah konstanta literal yang jenis sebenarnya array diakhiri null-karakter. Jadi string literal diapit tanda kutip ganda selalu memiliki karakter null ('\ 0') secara otomatis ditambahkan di akhir.
Oleh karena itu kita dapat menginisialisasi array dari elemen arang disebut myword dengan urutan diakhiri dengan null karakter oleh salah satu dari dua metode:
12

arang myword [] = {'H', 'e', ​​'l', 'l', 'o', '\ 0'};arang myword [] = "Halo";


Dalam kedua kasus array karakter myword dinyatakan dengan ukuran 6 elemen char: 5 karakter yang membentuk kata "Halo" plus karakter null akhir ('\ 0') yang menentukan akhir dari urutan dan yang , dalam kasus kedua, ketika menggunakan tanda kutip ganda (") itu ditambahkan secara otomatis.
Harap perhatikan bahwa kita berbicara tentang menginisialisasi sebuah array dari karakter pada saat itu sedang dinyatakan, dan bukan tentang menetapkan nilai-nilai kepada mereka setelah mereka telah dinyatakan. Bahkan karena jenis null-diakhiri array dari karakter array biasa kita memiliki pembatasan seperti yang kita miliki dengan array lain, sehingga kita tidak dapat menyalin data blok dengan sebuah tugas operasi.
Dengan asumsi mystext adalah char [] variabel, ekspresi dalam kode sumber seperti:
12

mystext = "Halo";mystext [] = "Halo";


tidak akan berlaku, seperti tidak akan:

 
mystext = {'H', 'e', ​​'l', 'l', 'o', '\ 0'};


Alasan untuk ini dapat menjadi lebih dipahami setelah Anda tahu lebih banyak tentang pointer, sejak saat itu akan dijelaskan bahwa sebuah array sebenarnya pointer konstan yang menunjuk ke blok memori.
Menggunakan diakhiri null-urutan karakter
Null-dihentikan urutan karakter adalah cara alami mengobati string di C + +, sehingga mereka dapat digunakan sebagai tersebut dalam banyak prosedur. Bahkan, string literal biasa memiliki tipe ini (char []) dan juga dapat digunakan dalam kebanyakan kasus.
Misalnya, cin dan dukungan pengadilan diakhiri null-urutan sebagai wadah berlaku untuk urutan karakter, sehingga mereka dapat digunakan secara langsung untuk mengekstrak string karakter dari cin atau untuk memasukkan mereka ke pengadilan. Sebagai contoh:
1234567891011121314

/ / Null-diakhiri urutan karakter# Includeusing namespace std;
int main (){
  
Pertanyaan char [] = "Silahkan, masukkan nama pertama Anda:";
  
arang ucapan [] = "Halo,";
  
namaAnda char [80];
  
cout <<pertanyaan;
  
cin>> namaAnda;
  
cout <<salam <<namaAnda <<; "!"
  
return 0;}


Tolong, masukkan nama pertama Anda: YohanesHalo, John!


Seperti yang Anda lihat, kita telah menyatakan tiga elemen array dari char. Dua yang pertama yang diinisialisasi dengan konstanta string literal, sedangkan yang ketiga yang tersisa uninitialized. Dalam kasus apapun, kita harus menentukan ukuran array: dalam dua pertama (pertanyaan dan ucapan) ukuran secara implisit didefinisikan oleh panjang konstanta literal mereka diinisialisasi ke. Sedangkan untuk namaAnda kita telah secara eksplisit ditentukan bahwa ia memiliki ukuran 80 karakter.
Akhirnya, urutan karakter yang disimpan dalam char array dengan mudah dapat diubah menjadi objek string yang hanya dengan menggunakan operator penugasan:
123

String mystring;arang myntcs [] = "beberapa teks";mystring = myntcs;

Rabu, 29 Juni 2011

ALGORITMA

Ditemukan dan dipopulerkan oleh seorang Ilmuwan Muslim yang bernama Muhammad ibnu Musa Al-Khwarizmi. Beliau adalah ilmuwan besar yang karya-karyanya banyak menjadi dasar perkembangan ilmu modern, antara lain dalam bidang Matematika, Astronomi, Astrologi, Geografi dan banyak cabang ilmu lainnya. Al-khwarizmi kemudian berubah menjadi Algorism, kemudian berubah lagi menjadi Algorithm dalam Bahasa Inggris dan terjemahkan secara bebas kedalam Bahasa Indonesia menjadi Algoritma.
Pengertian Algoritma sendiri adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis.1 Sedangkan dalam Kamus Besar Bahasa Indonesia (KBBI) terbitan Balai Pustaka (1988);
Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah
Dari dua definisi tersebut diatas maka kata kuncinya adalah “Urutan” dan “logis”, sehingga selain logis Algoritma juga mengharuskan agar langkah langkah tersebut berurutan secara sistematis, agar hasil akhirnya sesuai dengan yang diharapkan.

Menurut Donald E.Knuth dalam bukunya yang berjudul The Art of Komputer
Programming, Algoritma harus mempunyai lima ciri penting;
1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas. Program yang
tidak berhenti berarti mengandung algoritma yang salah.
2. Setiap langkah harus mempunyai langkah yang tepat dan tidak mempunyai tafsiran
ganda (Ambigu)
3. Algoritma memiliki masukan nol atau lebih sebelum algoritma itu sendiri bekerja (input)
4. Algoritma memiliki keluaran nol atau lebih sebagai output yang berhubungan dengan input. Dan keluaran tersebut harus benar adanya, artinya harus sesuai dengan yang kita harapkan.
5. Algoritma harus efektif, artinya setiap langkah harus sederhana sehingga dapat
dikerjakan dalam sejumlah waktu yang masuk akal.
Algoritma dapat diekspresikan melalui tiga cara, yakni;
1. Structured Indonesian (SI), yakni penulisan urutan langkah yang dilakukan oleh programmer sesuai dengan bahasa sehari-hari (dalam hal ini Bahasa Indonesia). Sebagai contoh, Algoritma untuk mencari luas segi tiga dalam Structured Indonesian adalah;
1. Mulai
2. Baca data Alas dan tinggi
3. Periksa apakah Alas dan tinggi mempunyai nilai lebih besar dari 0 (nol).Jika ya, maka lanjutkan ke langkah ke 4, jika tidak maka berhenti.
4. Luas adalah Alas kali Tinggi kali 0,5.
5. Tampilkan luas.
 

Operator Bitwise dalam C++

Operator bitwise biasanya ada dalam mata kuliah sistem digital. Tetapi, dalam C++ tersedia juga operator bitwise yang digunakan untuk keperluan memanipulasi data dalam bentuk bit. C++ menyediakan enam buah operator bitwise :

Seluruh operator bitwise hanya bisa dikenakan pada operator operand bertipe integer dan karakter. Kegunaan dari operator-operator ini diantaranya adalah untuk mengakses bit secara individual di dalam memori. Oerator bitwise mempunyai prioritas lebih rendah dibandingkan operator aritmatika.

Operator >> dan << berguna untuk menggeser bit-bit kedalam suatu bilangan bulat ke kiri atau ke kanan. Penggeseran bit ke kiri mempunyai efek seperti perkalian, sedangkan ke kanan memberikan efek seperti pembagian.

Untuk kebih jelasnya,perhatikan syntax berikut. Saya akan memasukkan keenam operator bitwise bersamaan dalam satu program.

#include "iostream.h"
#include "conio.h"

main()
{
  unsigned char x = 93;
  unsigned char y = 93;
  unsigned char a, b, c, d;
  unsigned char nilai1 = 81;
  unsigned char nilai2 = 99;
  clrscr();

  //pergeseran kekiri
  cout<<"Nilai X sebelum digeser : "<<
  x = x << 1; //geser ke kiri 1 bit
  cout<<"Nilai X setelah digeser "<<

  //pergeseran kekanan
  cout<<"Nilai Y sebelum digeser : "<<
  y = y >> 1;//geser kekanan 1 bit
  cout<<"Nilai Y setelah digeser : "<<

  //operasi atau, dan, XOR
  a = nilai1 | nilai2; //operasi atau
  b = nilai1 & nilai2; //operasi dan
  c = nilai1 ^ nilai2; //operasi XOR

  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;


  //komplemen
  d = ~nilai1; //komplemen dari nilai1
  cout<<"Nilai1 Setelah dikomplemen : "<<d<<endl;


  getch();
}

Menggunakan Operator Pada C++

- Operator Output Simbol << menginsert objek ke output stream, yang biasanya mengacu pada layar monitor. Cout juga disebut juga sebagai stream (aliran) karena bila beberapa pesan dikirimkan ke cout, maka pesan tersebut ditulis dilayar sesuai dengan urutannya.. Contoh Program : listing002-avriqblog's Penjelasan : 1. Mula-mula angka 7 disimpan dulu di variabel “panjang” bertipe integer 2. Kemudian variabel “panjang” tadi dipanggil 3. Maka outputnya adalah : 7 Karena 7 adalah nilai yang tersimpan dalam variabel “panjang”. - Operator Input Simbol >> adalah operator ekstraksi, atau operator input. Digunakan dengan input stream cin (Console Input).