Tukar Integer dengan Operator ^

..

Dulu saat masih kuliah, saya sempat menemui tantangan programming semacam ini:

Bagaimana cara melakukan swap/tukar 2 buah integer menggunakan operator ^ ?

Saat itu saya kira yang dimaksud adalah operator pangkat, jadi algoritma yang terpikir di otak saya kira-kira seperti ini:

misal yang akan ditukar adalah variabel a dan b.


a = a^b
b = a^(1/b)
a = ln(a)/ln(b)

Contoh:


a = 20
b = 13

a = 20^13
b = (20^13)^(1/13) = 20
a = ln(20^13)/ln(13) = 13*ln(20)/ln(20) = 13

akhirnya diperoleh a = 13 dan b = 20.

Namun saya agak kurang srek kalau jawabannya memang seperti itu, karena selain operator ^, ternyata dibutuhkan juga operator / dan ln. Algoritmanya juga kurang praktis, serta tidak cocok jika bilangannya besar.

Belakangan ini saya baru tahu bahwa ternyata di sebagian besar bahasa (misal C dan Perl), ^ bukan berarti pangkat, tetapi XOR bitwise. #mindblown 😛

Yang sudah pernah belajar logika, pasti paham maksudnya operator XOR, kira-kira seperti ini:

p q (p XOR q)
0 0 0
0 1 1
1 0 1
1 1 0

Gampangannya, jika beda maka hasilnya 1, dan jika sama hasilnya 0.

Untuk operator ^ dalam programming, berhubung operannya berupa integer, maka dilihat dalam bentuk binary dan setiap bit yang bersesuaian diterapkan operator XOR ini. Contoh:


12^21 = (01100)^(10101)
= (0^1)(1^0)(1^1)(0^0)(0^1)= (1)(1)(0)(0)(1) = (11001) = 25

Dengan operator seperti ini, maka algoritma untuk tukar integer jadi elegan dan sederhana:


a = a^b
b = a^b
a = a^b

//iya, gitu doank : )

Contoh:


a = 20 (00010100)
b = 13 (00001101)

a = (00010100)^(00001101) = (00011001)
b = (00011001)^(00001101) = (00010100) = 20
a = (00011001)^(00010100) = (00001101) = 13

diperoleh a = 13 dan b = 20 🙂

Advertisements

Konversi Double ke String (C++)

Malam mingguan kali ini saya isi dengan ngoding dengan C++.. Saya sempat menemui kesulitan dalam mengubah tipe double untuk dikonkat dengan string. Awalnya saya coba kode semacam ini:

Saya pikir ini akan berhasil seperti halnya ketika dikonkat dengan tipe integer ataupun char. Namun saat saya compile, ternyata terjadi error:

error: invalid operands of types ‘const[17]’ and ‘double’ to binary ‘operator+’

Wah, kok ternyata gagal ya. Akhirnya saya pun mengakalinya dengan memanfaatkan tipe stringstream seperti berikut:

dan akhirnya compile dan run berhasil dilakukan.. 🙂

cukup mudah kan.. Haduuh, udah lama sih gak ngoding pake C++, jadi banyak lupa deh..

anyway, ada yang bisa menjelaskan kenapa tipe double tidak bisa otomatis tercasting menjadi string saat dikonkat dengan suatu string?!

Menyalin Source Code dari Notepad++ ke Ms. Word

Dalam mendokumentasikan suatu program yang kita buat, sering kali kita diminta untuk memasukkan source code ke dalam laporan (misalnya pada tugas kuliah). Kita ambil contoh saja program sederhana berikut ini:

kulonuwun.cpp

Terlihat bahwa kode tersebut ditulis di Notepad++. Dan kode tersebut terlihat “indah” karena tiap hurufnya diberi warna sesuai perannya dalam kode bahasa C++. (Misal dalam hal ini warna biru muda dan hijau untuk komentar, coklat untuk include, ungu untuk tipe data, abu-abu untuk string, dsb.)

Namun, apa yang terjadi saat kode ini di-copas secara langsung ke Ms. Word:

Wah, ternyata warna-warna nya tidak ikut ter-copy, jadinya mengikuti format di Ms. Word. Jadi tidak terlihat seperti suatu source code kan ya. Oke, selanjutnya kita ganti jenis hurufnya menjadi Courier New:

Nah, sekarang baru deh terasa feel-nya bahwa ini adalah suatu source code. Tapi tetap saja kurang nikmat dipandang gara-gara warnanya hitam. Tapi emang rata-rata orang memasukkan source code dengan cara seperti ini. Hayooo ngaku aja, hehehe..

Terus gimana dong biar bisa di-copy tapi tetep berwarna? Masa’ diwarnai satu-satu?!?! Capek deeeh.. 😛

OK.. Bagi yang belum tau, sebenarnya ada kok cara yang lebih mudah. Sudah ada fiturnya di Notepad++, yaitu cukup klik menu Plugins >> Npp Export >> Copy RTF to clipboard

Selanjutnya tinggal di-paste ke Ms. Word. Terus biar lebih afdol lagi, dikasih border.

Nah, dengan begini kode yang disalin tetep terlihat bagus kan.

Terus, kalo ngodingnya gak di Notepad++ gimana? Ya yang paling simpel sih, di-copy dulu ke Notepad++ baru dipindahin ke Ms. Word, hehehe..

OK sekian saja, selamat mencoba..

Salam Coder!! 🙂

Berlatih Ngoding yang Rapi dan Terstruktur

Pada kerja praktek yang telah saya jalani, tugas saya adalah membuat sistem informasi berbasis web menggunakan PHP. Nah, dari pengalaman KP tersebut, saya telah belajar dan berlatih beberapa hal tentang pembuatan source code yang ‘sedikit lebih rapi’, dalam hal ini menggunakan bahasa HTML dan PHP.

OK, langsung saja.. berikut ini 5 dari sekian banyak ‘teknik ngoding rapi dan terstruktur’ yang saya coba terapkan berdasarkan dari kesalahan-kesalahan yang pernah saya lakukan:

Indentasi

Kalo yang ini, hampir seluruh programmer pasti udah terbiasa lah yaa.. Dari awal diajarin, pasti udah ditekankan bahwa indentasi itu penting biar kode mudah dibaca. Contohnya adalah sebagai berikut:

perbandingan kode tanpa indentasi (kiri) dan dengan indentasi (kanan)

Terlihat bahwa kode yang gak pake indentasi (kiri) terlihat membingungkan, tidak jelas mana tag penutup dari suatu tag yang ada. Sedangkan yang kanan terlihat lebih bagus dan terstruktur, sehingga jelas susunan DOMnya, dan mudah terdeteksi saat ada kesalahan.

Berikan Komentar yang Jelas

Ya, ini juga sangat jelas manfaatnya. Dengan adanya komentar, kode menjadi mudah dipahami. Karena seringkali, programmer menggunakan sintaks dan algoritma yang rumit dan aneh-aneh, sehingga cuma dia sendiri yang paham. Untuk itu, perlu diberi penjelasan berupa komentar agar tidak membingungkan orang yang ingin mengembangkannya.

Gunakan si ‘echo’ Seperlunya

Untuk ‘mengirim’ suatu string dari PHP untuk ditampilkan di HTML, tentu saja menggunakan fungsi echo. Dulu saya sering menggunakan kode semacam ini dan ini:

Namun, saya pikir kode tersebut kurang bagus karena terdapat banyak elemen HTML di dalam string yang di-echo. Sehingga tag-tag yang ada tidak dianggap sebagai tag HTML, tetapi dianggap sebagai string biasa. Hal ini tentu saja dapat mempersulit proses debugging. Untuk itu, menurut saya lebih cocok menggunakan cara seperti ini:

Jadi intinya, apa yang bisa dituliskan sebagai kode HTML ‘murni’, tampilkan dalam HTML (di luar PHP). Terutama jika terdiri dari beberapa baris dan tidak mengandung variabel di PHP. Dengan begitu, saat ada kesalahan sintaks di HTML tersebut, tetap dapat terdeteksi oleh editor. Sedangkan jika di-echo dalam bentuk string, editor tidak dapat mendeteksi jika ada kesalahan sintaks.

Bikin Daftar Menu Pake List

Dalam suatu website, biasanya terdapat daftar menu untuk navigasi ke halaman-halaman lain, contoh sederhananya adalah tampilannya seperti ini:

Terdapat berbagai metode dalam membuat daftar menu, di antaranya:

Dengan tabel:

merancang daftar menu dengan tabel

Cara ini yang dulu saya pake pas masih gak kenal apa itu HTML dan CSS, jadi cuma ngasal bikin web pake template di Dreamweaver jadul, dan ternyata daftar menunya dibikin pake tabel.

Kelebihan: tanpa pake style/CSS pun sudah bagus dan rapi posisinya.

Kelemahan: sulit diganti antara bentuk menu vertikal dan horizontal

Dengan Container (misalnya div):

membuat daftar menu dengan div

Terlihat bahwa satu link menu ditaruh di dalam satu tag <div> sehingga nantinya daftar menu akan terbagi-bagi secara alami menjadi beberapa blok menu.

Kelebihan: bisa diatur posisi dan desainnya dengan CSS

Kelemahan: tidak lazim konsepnya, kurang cocok jika menunya bertingkat (ada submenu)

Dengan List:

membuat daftar menu dengan list

Hampir semua website yang ada saat ini menggunakan list seperti contoh di atas dalam menyajikan daftar menu. Karena memang paling sesuai dan mudah ‘dimanipulasi’ sesuai kebutuhan.

Kelebihan: terstruktur, dapat digunakan untuk menu bertingkat

Kelemahan: kalo gak ada style/CSS nya, jadi terlihat aneh karena berupa list

Oleh karena itu, menurut saya membuat daftar menu dengan list is the best lah. Selanjutnya tinggal mengatur nama class/id untuk tagnya, dan membuat desain yang bagus dengan CSS.

Bikin Struktur Tabel yang ‘Baik’

Dulu, saya kira tag-tag untuk membuat tabel di HTML hanyalah <table>, <tr>, dan <td>. Selanjutnya saya belajar bahwa ada tag <th> untuk field header agar desainnya dapat dibedakan di CSS. Dan untuk membuat tabel yang lebih ‘sempurna’, dapat pula menggunakan tag <thead>, <tbody>, dan <tfoot> untuk memastikan header tabel selalu di atas dan footer selalu di bawah.

Lalu, kita juga tidak bisa sembarangan menyisipkan tag lain di sela-sela tabel. Misalnya perhatikan contoh penyisipan form di tabel dalam susunan kode berikut:

Pada contoh pertama, keseluruhan tabel dijadikan form. Hal ini bisa dilakukan, dan banyak digunakan dalam berbagai hal.

Pada contoh kedua, form dibuat untuk sebuah sel di tabel. Hal ini juga bisa dilakukan. Misal form untuk mengubah isi tabel.

Namun, untuk contoh ketiga. Terlihat bahwa kita mencoba membuat form untuk suatu baris di tabel. Awalnya saya pikir ini berhasil, tetapi ternyata TIDAK BISA DILAKUKAN!! Soalnya tag <form> ini memisahkan tag <table> dengan <tr>. Makanya, pas KP kemaren saya sempat pusing mikirin gimana caranya membuat suatu form di masing-masing baris tabel. Ada ide?

===

OK, sekian dulu yang bisa saya share..

CMIIW.. Sekali lagi, ini hanya berdasarkan dari pengalaman saya. Jadi mohon maaf kalo ternyata ada kekurangan, kesalahan ataupun ternyata ada yang lebih baik. Silakan bagi yang mau menambahkan dan berkomentar..

Anyway, semoga bermanfaat deh.. Saya yakin masih ada banyak coder yang masih kurang peduli dengan common mistake seperti ini. Apalagi bagi para mahasiswa informatika yang sedang dikejar deadline, seringkali sudah tidak memperhatikan kerapian source code. Yang penting lulus compile dan programnya jalan (kecuali bagi yang emang udah mendewa dan terbiasa, hahaha). Kalo ini jadi kebiasaan, khawatirnya kebawa juga di dunia kerja.

Karena bagaimana pun, kita tidak boleh sembarangan dalam membuat aplikasi/software untuk suatu perusahaan. Akan sangat tidak profesional jika source code yang dihasilkan sangat berantakan dan sulit dibaca. Hal ini tentu berakibat fatal saat ada developer lain dari perusahaan yang ingin mengembangkan aplikasi tersebut. Jika kodingannya saja semrawut dan dokumentasinya juga asal-asalan, tentu saja sulit untuk melakukan maintenance.

Baik.. Sekian dan terima kasih..

Ternyata Laptop Saya Laki-Laki

Kemaren saya menjelajahi dunia maya, eh nemu artikel tentang cara mengetahui jenis kelamin komputer.

Saya pun iseng2 mencobanya di laptop saya. Caranya gampang kok..

  1. Buka notepad
  2. Isi dengan kode teks menggunakan format:
    CreateObject("SAPI.SpVoice").Speak ("<kalimat>")

    Ganti <kalimat> dengan kalimat yang diinginkan, misalnya:

    CreateObject("SAPI.SpVoice").Speak ("Hello, I am your laptop")
  3. Save file berisi kode tersebut dengan nama <namafile>.vbs, misal h2c.vbs
  4. Klik dua kali file yang disimpan tadi. Jika scriptnya jalan, Kamu akan mendengar suara orang yang berbicara sesuai kalimat yang Kamu tuliskan tadi.
  5. Perhatikan suaranya, jika itu suara wanita berarti komputer/laptop kamu wanita. Kalo suara laki-laki berarti ya laki-laki.

Dan ternyataaa… Laptop saja berjenis kelamin laki-laki!! Hahaha..

Pantes aja ni laptop bandel banget, susah diaturnya.. Tapi tahan banting juga dink, selalu siap siaga buat diajak begadang, hahaha…

Aneh-aneh aja ya..

Sebenarnya kode yang dibuat di atas adalah script dalam visual basic (terlihat bahwa ekstensinya .vbs). SAPI.SpVoice adalah object yang menjalankan Microsoft text-to-speech voice ketika diinstansiasi dengan method CreateObject. Microsoft text-to-speech voice ini lah yang fungsinya mensintesis teks menjadi suara.

Microsoft text-to-speech voice ini ada berbagai macam. Ada yang bersuara laki-laki kayak Microsoft Sam dan Microsoft Mike. Sedangkan yang bersuara wanita misalnya Microsoft Mary dan Microsoft Anna. Dan masih beberapa lagi mas-mas dan mbak-mbak yang bisa ngomong di laptop. Jadi ‘jenis kelamin’ laptop/komputer kamu ya tergantung dari Microsoft text-to-speech voice mana yang digunakan. Jadi kalo pengin ‘ganti jenis kelamin’ komputer/laptop mu, ya tinggal install aja program text-to-speech voice yang diinginkan.

Settingannya dapat dilihat dengan membuka Control Panel, pilih “Sounds, Speech, and Audio Devices “ , lalu klik Speech (eh, itu kalo Windows XP, gak tau sama gak kalo OS lain, cari sendiri lah 😛 ).

Sedangkan method Speak adalah untuk ‘menyuruh’ Microsoft text-to-speech voice tersebut untuk ‘membacakan’ string kalimat yang dituliskan setelahnya. Berhubung laptop saya menggunakan Microsoft Sam (emang udah defaultnya Windows XP sih), jadi wajar jika laptop saya cowok, hahaha. Namun, dengan sedikit manipulasi script di atas, saya dapat mengubahnya menjadi suara cewek, yakni dengan mengubah pitch suaranya. Caranya dengan menambahkan string “<pitch middle=’n’>”. Dengan n berkisar dari -25 hingga 25. Makin besar n, makin tinggi nada suara yang dihasilkan. Jadi saat saya menggunakan kode berikut:

CreateObject("SAPI.SpVoice").Speak ("<pitch middle='25'>" & "Hello, I am your laptop")

Si Sam sekarang bersuara cewek, hehehe.. (sebenarnya masih suara cowok sih, cuma nadanya lebih tinggi. Kesannya malah kayak suara banci, wkwkwk 😛 )

OK deh, selamat mencoba…

Itu jenis kelamin laptopku.. Apa jenis kelamin laptopmu?! =P