Saturday, 22 October 2016

if else



Anda sekarang melihat bacaan ini karena rentetan keputusan yang telah anda buat sebelumnya, anda mungkin mengetikkan search keyword dari browser dan kemudian browser menampilkan banyak pilihan lalu kemudian anda memutuskan untuk mengunjungi blog ini. 

Dalam pemrograman, terkadang, bahkan hampir semua program membutuhkan suatu mekanisme pengambilan keputusan untuk menentukan tingkah laku dari program. Pengambilan keputusan ini dilakukan sengan menggunakan kombinasi if dan else yang telah disediakan oleh bahasa C/C++. Kita akan membahas bentuk yang paling sederhana, yaitu pernyataan if tunggal. Syntax penggunaan if adalah
a. syntax if
dimana kondisi harus merupakan sesuatu yang memiliki nilai benar atau salah. Dalam C/C++, yang dianggap salah hanya nilai 0, nilai selain nol termasuk negatif akan dianggap sebagai benar. Jika kondisi bernilai benar, maka perintah yang mengikuti if akan dieksekusi. Anda bisa menghilangkan blok if jika perintah yang akan dikerjakan hanya ada satu.
b. Flowchart if

Pernyataan yang berada dalam blok if hanya akan dikerjakan jika kondisinya bernilai benar, namun terkadang dalam pemrograman juga dibutuhkan tindakan ketika suatu kondisi bernilai salah. Untuk hal seperti inilah else digunakan. Syntax penggunaan if else adalah:         
c. Syntax if else

Blok else juga bisa dihilangkan jika perintah yang mengikutinya hanya ada satu. Jika antara pernyataan if dan else terdapat satu saja ekspresi atau pernyataan yang bukan bagian dari blok if, maka else tidak akan bisa digunakan karena chaining dengan pernyataan if telah terputus dan akan menghasilkan compile-time error. Misalnya :
d. kesalahan penulisan
e. flowchart if else

Listing OperatorAritmatika

Increment dan Decrement

 Increment dan decrement adalah bentuk lain dari penjumlahan dan pengurangan. Increment adalah kenaikan nilai pada variabel sedangkan Decrement adalah penurunan nilai pada variabel. Kenaikan atau penurunan nilai ini selalu sama dengan satu. Operator increment atau decrement tidak bisa diubah sehingga kenaikan atau penurunan kecuali sama dengan satu. Operator ini termasuk unary operator karena hanya membutuhkan satu operan. Bentuk penggunaannya adalah
  varSatu++; // ++ adalah operator decrement
  varDua--; // -- adalah variabel decrement
Jika ekspresi di atas, ditulis dalam bentuk operator aritmatika, maka persamaanya adalah
  varSatu += 1;
  varDua -= 1;

 Penempatan operator ini bisa saja mendahului atau mengikuti variabel, dan terdapat perbedaan maksud dalam peletakan ini. Perbedaan ini hanya berpengaruh ketika variabel yang bersangkutan digunakan untuk memberikan nilai ke variabel lain.
  • Jika operator increment atau decrement diletakkan mengikut variabel (postfix), maka nilai dari variabel itu akan diberikan sebelum ditambahkan atau dikurangi. Perhatikan contoh berikut.
      int x = 0;
      int y = x++;
     disini, y akan bernilai 0 karena nilai x belum dinaikkan sebelum diberikan ke y kemudian setelah itu dinaikkan. Setelah kedua pernyataan di atas tereksekusi, maka y = 0 dan x = 1;
  • Jika operator increment atau decrement diletakkan mendahului variabel (prefix), maka nilai variabel itu akan ditambahkan atau dikurangi sebelum diberikan ke variabel target. Perhatikan contoh berikut.
      int x = 0;
      int y = ++x;
     di sini, y dan x akan sama – sama bernilai 1. Hal ini terjadi karena nilai x dinaikkan sebelum diberikan ke y

 Kebanyakan C/C++ kompiler bekerja secara lebih cepat ketika menggunakan operator increment decrement dibanding dengan menggunakan persamaan operator aritmatikanya. Karena itu, gunakan increment dan decrement untuk menggantikan fungsi operator aritmatika jika memungkinkan.
Setelah mengetahui operator increment dan decrement, maka table prioritas sebelumnya menjadi
Prioritas operator aritmatika ++ --
- (tanda minus)
* / %
+ -
Anda bisa membuka link ini untuk melihat contoh penggunaan semua operator aritmatika.

Friday, 21 October 2016

Operator Aritmatika

  Dalam C ataupun C++, ada banyak jenis operator yang digunakan untuk melakukan perhitungan atau pengolahan data, salah satunya adalah operator aritmatika. Operator Aritmatika yang paling umum digunakan adalah Penjumlahan (addition), Pengurangan (substraction), Pembagian (Division), Perkalian (Multiplication), dan Modulus. Sama halnya di bidang matematika, operator – operator ini mempunyai fungsi yang sama dengan namanya. Operator aritmatika termasuk binary operator, yaitu operator yang membutuhkan dua operan.
Operator Arti Contoh
+ Penjumlahan total = harga + pajak;
- Pengurangan harga = total – pajak;
* Perkalian pajak = harga * persen;
/
Pembagian
hargaJual = hargaAsli / 2;
% Modulus sisa = nilai % 3;
Berikut ini contoh bagaimana setiap operator di atas bekerja.
  • Operator penjumlahan mengembalikan nilai dari hasil penjumlahan ke dua operannya.   
      total = 4 + 8; // total diberi nilai 12

  • Operator pengurangan mengembalikan nilai dari hasil pengurangan ke dua operannya.   
      total = 8 – 4; // total diberi nilai 4
     operator pengurangan juga bisa digunakan sebagai unary operator untuk menandai bahwa bilangan yang mengikutinya adalah nilai minus. Cara menuliskannya sama saja dengan cara menuliskan bilangan minus dalam matematika.

  • Operator perkalian mengembalikan nilai dari hasil perkalian ke dua operannya.   
      total = 8 * 4; // total diberi nilai 32

  • Operator pembagian mengembalikan nilai dari hasil pembagian ke dua operannya.   
      total = 8 / 4; // total diberi nilai 2
     untuk operator pembagian ada beberapa hal yang perlu diperhatikan. Cara kerja operator pembagian tergantung pada operannya. Ketika salah satu operannya adalah floating-point (bilangan dengan koma), maka akan terjadi pembagian sebagaiman pada umumnya. Namun ketika kedua operannya adalah integer, hasil pembagian juga akan menjadi bilangan bulat, hal ini dikenal sebagai integer division. Angka setelah koma otomatis akan dibuang. Perhatikan contoh berikut:   
      double total = 10 / 4; // total akan bernilai 2
    agar mendapatkan hasil yang benar, maka pernyataan di atas seharusnya seperti ini   
      double total = 10.0 / 4; // total akan bernilai 2.5
     Perhatikan bahwa untuk mendapatkan hasil floating-point, salah satu operan atau keduanya harus dikenali sebagai bilangan floating-point.

  • Operator modulus menghitung sisa dari pembagian integer. Operator modulus akan terus membagi operan di sebelah kiri operator sampai bilangan pembagi lebih besar dari sisa pembagian, hasil operator modulus akan selalu bernilai integer dan operator ini tidak bisa digunakan untuk floating-point.   
      myModulus = 19 % 6; // myModulus diberi nilai 1
     Pada contoh di atas, angka 19 dibagi dengan angka 6 sebanyak 3 kali sehingga menghasilkan sisa 1, nilai sisa inilah yang diberikan ke myModulus.
    Pembagian pertama: 19/6=13
      Pembagian kedua: 13/6=7
       Pembagian ketiga: 7/6=1

 Sama halnya dalam matematika, operator aritmatika juga bisa digabungkan dalam satu pernyataan, misalnya   nilaiTotal = nilaiA – nilaiB + nilaiC / nilaiD * nilaiE;  tentu saja jika dalam suatu ekspresi terdapat dua atau lebih operator yang berbeda maka operator yang mempunyai prioritas lebih tinggi akan di kerjakan lebih dulu. Berikut ini urutan tingkat prioritas operator aritmatika.
Tingkat * / %
+ -
Perkalian dan pembagian mempunyai prioritas yang sama dan lebih tinggi dari penjumlahan dan pengurangan. Jika dalam ekspresi terdapat dua operator yang mempunyai prioritas yang sama, maka urutan pengerjaan akan dilakukan dari kiri ke kanan. Misalnya   
  nilaiGanti = nilaiC / nilaiD * nilaiE;
 maka yang pertama dikerjakan adalah nilaiC / nilaiD, kemudian hasil pembagian ini akan dikalikan dengan nilaiE. Perhatikan contoh berikut.  Jika program di atas dijalankan, maka printf() akan menampilkan bilTotal = 5. Jika dijabarkan, maka proses pengerjaan ekspresi di atas akan menjadi
  • Operasi pertama -> 2 * 4 = 8 . . . (i), sekarang ekspresinya menjadi bilTotal = 4 + 2 – 8 / 8.
  • Operasi kedua -> 8 / 8 = 1 . . . (ii), sekarang ekspresinya menjadi bilTotal = 4 + 2 – 1.
  • Operasi ketiga -> 4 + 2 = 6 . . . (iii), sekarang ekspresinya menjadi bilTotal = 6 – 1.
  • Operasi terakhir -> 6 – 1 = 5 . . . (iv), hasil akhir, nilai inilah yang diberikan ke bilTotal.
 Untuk membuat prioritas suatu operator lebih tinggi dari operator lainnya, maka gunakan tanda kurung. Misalnya pada contoh di atas jika pernyataannya diubah menjadi.
  bilTotal = bilSatu + (bilDua – bilTiga) * bilEmpat / bilLima;
 maka sekarang bilTotal akan bernilai 4, karena bilDua – bilTiga (2 – 2) dikerjakan lebih dahulu, dan hasilnya kemudian dikalikan dengan bilEmpat. Setelah itu, ekspresi akan dikerjakan sebagaimana urutannya.

  Dalam pemrograman yang digunakan seringkali bukan hanya bilangan positif, karena itu perlu juga untuk mengetahui operasi yang terjadi dengan bilangan negatif. Bagi anda yang mengerti matematika, utamanya aljabar, maka hal ini tidak akan susah karena pada dasarnya prinsipnya sama saja. Namun bagi anda yang belum mengerti, perlu diketahui bahwa ketika suatu operator bertemu dengan bilangan negatif, maka bisa saja terjadi perubahan operasi atau hasil yang berbeda. Perhatikan aturan berikut:
  • Jika bilangan negatif bertemu dengan operator penjumlahan, maka operasinya menjadi pengurangan, misalnya 4 + (-2) = 4 – 2 = 2.
  • Jika bilangan negatif bertemu dengan operator pengurangan, maka operasinya menjadi penjumlahan, misalnya 4 – (-2) = 4 + 2 = 6.
  • Jika salah satu operan dari operasi pembagian adalah negatif, maka hasilnya adalah negatif, dan jika keduanya negatif maka hasilnya positif. Hal ini juga berlaku pada perkalian.
 Operator aritmatika juga bisa digabungkan secara langsung dengan operator Penugasan, perhatikan pernyataan berikut   
  nilaiSatu += nilaiDua;
pada pernyataan di atas, nilaiSatu ditambah dengan nilaiDua dan kemudian hasilnya diberikan ke nilaiSatu. Persamaan pernyataan di atas adalah   
  nilaiSatu = nilaiSatu + nilaiDua.
 Tentu saja ini tidak hanya berlaku untuk operator penjumlahan saja, tapi cara ini bisa digunakan untuk semua operator aritmatika. Namun pastikan bahwa lvalue dan rvalue telah diinisialisasi agar tidak terjadi kesalahan.

 Sekali lagi, hal yang perlu diperhatikan dalam menggunakan pernyataan yang memakai operator adalah bahwa pastikan nilai yang dihasilkan sesuai dengan tipe data yang digunakan untuk menyimpan nilai tersebut. Misalnya jika dalam suatu pembagian anda menginginkan hasil pecahan namun menggunakan tipe data integer untuk menyimpan nilai tersebut, maka tentu saja akan terjadi kesalahan dan akan berpengaruh pada logika program.

Assignment Operator

  Operator penugasan (assignment operator) memberikan nilai dari operan di sebelah kanan operator (right-hand) ke penyimpanan yang ditentukan oleh operan di sebelah kiri operator (left-hand). Karena itu left-hand atau yang lebih dikenal sebagai l-value harus berupa nilai yang bisa diubah. Setelah operator penugasan dilakukan, l-value akan mendapatkan nilai dari r-value. Dalam C/C++, operator penugasan diwakili oleh tanda sama dengan (‘ = ’). Bentuk umum dari operator penugasan adalah

nama_variabel = ekspresi;

dimana ekspresi bisa saja berupa konstan tunggal atau serumit yang diperlukan. Target atau bagian kiri harus berupa variabel atau pointer, bukan sebuah fungsi atau konstan. Singkatnya, lvalue (operan di sebelah kiri) berarti objek apapun yang bisa diberikan pernyataan penugasan dan rvalue bisa dianggap sebagai ekspresi di sebelah kanan operator atau merupakan nilai yang akan diberikan ke lvalue. Berikut ini contoh penggunaan operator penugasan.

Konversi Tipe dalam Penugasan

  Ketika suatu variabel bertipe A diberikan nilai bertipe bukan A, konversi tipe akan terjadi. Dalam pernyataan penugasan, aturan konversi tipe sangat sederhana: nilai dari rvalue diubah ke tipe dari lvalue. Perhatikan contoh berikut:

  Di line-1, high-order bit dari variabel intVar terpotong, sehingga nilai yang diberikan ke charVar adalah lower 8 bit yang tersisa. Jika intVar bernilai antara 0 sampai 255, charVar dan intVar akan mempunyai nilai yang sama. Jika tidak, nilai charVar akan sama dengan lower-order bit dari intVar. Di line-2, intVar menerima nilai dari floatVar, karena tipe int tidak mengenal pecahan, maka semua bagian pecahan dari floatVar akan terpotong (tidak ada pembulatan). Di line-3, floatVar mengubah nilai yang tersimpan dalam charVar ke nilai yang sama dalam format floating-point. Ini juga terjadi di line-4.

  Ketika tipe konversi terjadi, jika jumlah bit target (lvalue) lebih kecil dari ukuran bit rvalue, maka akan terjadi penghapusan high-order bit pada rvalue. Misalnya jika dalam suatu lingkungan operasi terjadi konversi dari int yang berukuran 16 bit ke tipe char yang berukuran 8 bit, maka high-order 8 bit (8 bit dari kiri) dari int akan dihapus. Jadi, selama nilai dari rvalue tidak lebih besar dari ukuran lvalue, tidak akan terjadi perubahan yang signifikan. Namun ketika mengkonversi tipe data bilangan ril ke bilangan bulat, misalnya float ke int, maka akan terjadi pemotongan pada bagian desimal (tidak terjadi pembulatan).

lvalue rvalue Kemungkinan data yang hilang
char short int High-order 8 bit
char int (16 bit) High-order 8 bit
char int (32 bit) High-order 24 bit
char long int High-order 24 bit
signed char char Jika nilai > 127, lvalue menjadi negatif
short int int (16 bit) Tidak ada (sama – sama 16 bit)
short int int (32 bit) High-order 16 bit
int (16 bit) long int High-order 16 bit
int (32 bit) long int Tidak ada (sama – sama 32 bit)
Int float Bagian desimal, dan kemungkinan lebih
float double Presisi, hasil dibulatkan
double long double Presisi, hasil dibulatkan

Storage Class Specifier

Dalam bahasa C dikenal yang namanya storage class specifier atau bisa dikatakan sebagai penentu kelas penyimpanan. Kita akan merujuk ke storage class specifier menggunakan kata ‘Penentu’. Specifier ini menentukan bagaiman suatu variabel disimpan. Ada empat macam storage class specifier yang didukung oleh C, yaitu:
extern
static
register
auto
Untuk mendeklarasikan variabel yang menggunakan storage specifier, ikut bentuk berikut:
storage_specifier type var_name;
Perhatikan bahwa jenis Penentu ditentukan sebelum menentukan tipe dan nama variabel. Sekarang mari kita bahas satu persatu.
  1. Extern
  2.   Dalam C ataupun C++, ada tiga macam linkage (hubungan) yaitu: external, internal, dan none (tidak ada). Umumnya, fungsi dan global variabel mempunyai hubungan external yang berarti bahwa variabel tersebut tersedia untuk seluruh file yang membentuk program. Objek global yang dideklarasikan sebagai static mempunyai hubungan internal sehingga membuat variabel ini hanya dikenal oleh file dimana dia dideklarasikan. Lokal variabel tidak mempunyai hubungan dan hanya dikenal oleh blok dia dideklarasikan.

      Prinsip penggunaan extern adalah untuk menentukan bahwa suatu objek dideklarasikan dengan hubungan external dibagian lain program. Untuk mengerti hal ini, lebih dahulu anda harus mengerti perbedaan deklarasi dan definisi. Deklarasi menyatakan nama dan tipe suatu objek sedangkan definisi mengakibatkan penyimpanan untuk dialokasikan untuk objek tersebut. Bisa saja ada bermacam – macam deklarasi untuk objek yang sama, tapi hanya satu definisi yang diperbolehkan untuk objek tersebut.

      Secara keseluruhan, deklarasi variabel juga merupakan definisi. Namun, dengan menggunakan penentu extern, variabel bisa dideklarasikan tanpa didefinisikan, yang berarti bahwa ketika dibutuhkan suatu variabel yang didefinisikan di bagian lain di program maka gunakan penentu extern. Perhatikan contoh berikut:
        Dalam program diatas, varSatu dalam main() berbeda dengan variabel global varSatu, begitupun varDua. Jika program di atas dikompile menggunakan VC++, maka akan terjadi compile-time error karena varSatu dan varDua belum di didefinisikan (Pada beberapa kompiler, program di atas mungkin tidak akan menghasilkan compile-time error, melainkan nilai yang ditampilkan adalah garbage value). Agar varSatu dan varDua yang dideklarasikan dalam main() merujuk pada global variabel varSatu dan varDua, gunakan extern:
    extern int varSatu, varDua;
    Kemudian setelah dikompile dan dijalankan, program akan menampilkan:
    varSatu = 1
    varDua = 2

    Bisa dilihat bahwa dengan menggunakan extern, suatu variabel bisa digunakan meskipun belum didefinisikan. Namun tetap saja, jika dalam program dibutuhkan variabel global, maka lebih amannya variabel tersebut dideklarasikan dan didefinisikan lebih di awal program. Juga perlu diingat, bahwa ketika menggunakan extern, variabel yang mengikutinya tidak bisa didefinisikan pada pernyataan yang sama. Misalnya berdasarkan pada contoh di atas, pernyataan:
    extern int varSatu = 10, varDua;
    akan menghasilkan compile-time error. Untuk mengganti nilainya, deklarasi dan pemberian nilai harus dinyatakan secara terpisah.

      Seperti yang telah dijelaskan sebelumnya, dengan menggunakan extern sebuah variabel dideklarasikan tanpa harus didefinisikan. Pada contoh di atas, extern digunakan karena varSatu dan varDua didefinisikan setelah main(). Kegunaan lain extern berhubungan dengan program multi-file. Dalam C/C++, sebuah program bisa saja terdiri dari dua atau lebih file, dikompile terpisah, dan dihubungkan bersama – sama. Dalam kasus seperti ini, dibutuhkan suatu cara agar semua file mengetahu tentang global variabel yang dibutuhkan program. Cara terbaik untuk melakukan hal ini adalah dengan mendeklarasikan semua global variabel dalam satu file dan menggunakan deklarasi extern di file lain yang akan menggunakan global variabel tersebut.

  3. Static
  4.   Variabel static adalah variabel permanen didalam suatu fungsi atau file. Berbeda dengan global variabel, static variabel tidak dikenal diluar fungsi atau filenya. Variabel static menyimpan nilainya selama program berjalan. static mempunyai efek yang berbeda antara lokal variabel dengan global variabel.
    • static lokal variabel
    •   Ketika sebuah lokal variabel diberikan Penentu static, compiler akan membuatkan penyimpanan permanent untuk variabel tersebut sebagaimana dengan global variabel. Bedanya hanya terletak pada scope masing – masing, dimana variabel global dikenal di seluruh bagian program dan variabel lokal hanya dikenal oleh bloknya.

        Dengan menggunakan penentu static pada lokal variabel, nilai variabel tersebut akan terus tersimpan meskipun eksekusi program tidak lagi berada pada blok variabel tersebut. Nilai ini kemudian akan digunakan lagi ketika blok variabel kembali dieksekusi oleh program. Inisialisasi static variabel hanya dilakukan sekali, yaitu pada saat bloknya dieksekusi pertama kali. Perhatikan contoh berikut:   Perhatikan bahwa nilai varStatic selalu tersimpan. Penentu static membuat varStatic hanya diinisialisasi sekali, yaitu pada pemanggilan pertama. Jika seandainya penentu static tidak diberikan pada varStatic, maka nilai yang ditampilkan akan selalu sama dengan 0 karena varStatic diinisialisasikan dengan 0 ketika fungsi dipanggil. Namun perlu diketahui bahwa fungsi di atas akan berbeda jika pendeklarasian varStatic terpisah dengan inisialisasinya, misalnya:
      static int varStatic
      varStatic = 1;
      atau
      static int varStatic = 1;
      varStatic = 1;
        akan selalu menampilkan nilai 1. Pada bentuk yang pertama, varStatic diinisialisaikan dengan garbage value kemudian diberi nilai 1, sehingga angka yang ditampilkan akan selalu sama dengan 1, karena pemberian nilai dieksekusi setiap kali fungsi dipanggil. Pada bentuk yang kedua, meskipun varStatic telah diinisialisaikan dengan 1, pemberian nilai pada baris selanjutnya tetap dijalankan setiap kali fungsi dipanggil.

    • static global variabel
    •   Memberikan penanda static pada global variabel membuat variabel tersebut hanya dikenal oleh file dimana dia dideklarasikan, file lain tidak akan mengetahui apa – apa tentang variabel ini. Perlu diperhatikan bahwa jika suatu global variabel dideklarasikan dalam suatu header, meskipun dengan static, variabel tersebut tetap dikenal oleh file yang meng-include-kan header tersebut.

  5. register
  6.   Awalnya penentu register ini hanya boleh digunakan pada tipe int, char, dan pointer. Akan tetapi, dewasa ini penggunaannya telah dikembangkan sehingga bisa digunakan untuk semua tipe.

      Pada umumnya, variabel disimpan dalam memori sehingga CPU membutuhkan akses ke memori agar variabel dapat digunakan. Dengan menggunakan penentu register, variabel disimpan dalam CPU. Operasi yang menggunakan register variabel akan berlangsung lebih cepat dibanding dengan variabel biasa karena variabel bisa langsung diakses dari CPU.

      Dewasa ini, definisi register mengalami perluasan yang signifikan sehingga bisa digunakan untuk semua tipe data. Objek yang berukuran besar misalnya array tidak bisa disimpan dalam register, begitupun dengan variabel global. Implementasi register juga tergantung pada kompiler C/C++ dan lingkungan operasi. Faktanya, bisa saja sebuah compiler menghiraukan register dan menganggap variabel sebagai variabel normal.

    Penentu register bisa digunakan pada lokal dan formal parameter. Berikut ini contoh penggunaan register:   Dalam contoh di atas, angka, pangkat, dan temp dideklarasikan sebagai register. Kenyataan bahwa dengan register variabel operasi bisa berjalan lebih cepat membuat loop di atas akan lebih cepat di proses dibanding dengan menggunakan kontrol variabel biasa. Umumnya, register digunakan pada bagian yang membutuhkan banyak referensi ke variabel yang sama. Juga penting untuk diketahui bahwa akses ke register variabel bisa saja memberikan kecepatan akses yang berbeda.

      Tidak ada batasan berapa banyak variabel yang bisa diberikan penentu register, jika register telah terisi penuh, maka secara otomatis variabel tersebut akan dialihkan ke memori dan dianggap sebagai variabel biasa. Banyaknya variabel yang bisa disimpan di resgister tergantung pada compiler dan lingkungan operasi. Namun biasanya, paling sedikit dua variabel tipe int dan char bisa disimpan dalam register.

      Dalam C, alamat variabel dalam register bisa dilihat menggunakan operator &, tapi hal ini tidak berlaku dalam C++. Meskipun Penentu register bisa digunakan untuk semua tipe, namun efek yang signifikan umumnya hanya didapatkan pada tipe integer dan karakter.

Struktur Program C/C++

Pic1 - Struktur C++
  1. Praproses
  2. Pernyataan yang ditandai dengan “#” dapat diartikan sebagai sebuah perintah yang mengarah kepada praprosesor. Misalnya pada kasus di atas, perintah #include menyatakan bahwa library iostream akan dipakai pada program tersebut. Dengan kata lain, semua keyword yang ada pada perpustakaan “iostream” bisa dipakai dalam program dimana dia dipanggil. Dan untuk tanda “< >” berarti bahwa perpustakaan iostream berada pada tempat pencarian default kompiler.
  3. Global Variabel
  4. Global variabel merupakan variabel yang dapat digunakan oleh seluruh kode yang ada program. Untuk lebih lanjut silahkan lihat //postingan variabel//.
  5. Nama Fungsi
  6. Nama fungsi (function) merupakan pengenal (identifier) yang digunakan untuk menamai fungsi tersebut. Penggunaan pengenal harus dimulai dengan menggunakan huruf atau garis bawah. Tanda selain garis bawah tidak bisa dipakai untuk menyatakan sebuah pengenal, tapi angka setelah huruf atau garis bawah diperbolehkan.
  7. Blok Kode
  8. Blok kode adalah bagian dimana ekspresi (perintah) diisikan. Blok kode dimulai dengan “{“ dan diakhiri dengan “}” pula.
  9. Lokal Variabel
  10. Lokal variabel adalah variabel yang dinyatakan dalam blok kode dan hanya akan dikenali oleh blok kode dimana dia dinyatakan. Untuk lebih lanjut silahkan lihat pada //Postingan tentang variabel//.
  11. Pernyataan
  12. Pernyataan (statement) adalah sebuah perintah yang menyatakan bagaimana program dijalankan, bagaimana variabel digunakan, dan semua hal yang berhubungan dengan bagaimana program tersebut bekerja. Pernyataan dituliskan didalam kode blok. Pernyataan hanya akan dianggap benar jika pernyataan sesuai dengan keyword yang ada pada C/C++ dengan syntax (penulisan) yang benar. Keyword juga akan dianggap salah jika perpustakaan (library) dimana dia berada tidak dinyatakan sebelumnya.

Thursday, 20 October 2016

Pengenal dan Variabel

Variabel

Sama halnya dalam matematika, variabel dalam pemrograman adalah sebuah alias yang digunakan untuk menyimpan nilai (dalam hal ini data) tertentu. Pada umumnya pendeklarasian sebuah variabel dilakukan dengan menentukan tipe data apa variabel itu kemudian menentukan nama variabel, yaitu

typedata varname;

dimana typedata harus berupa tipe data built-in maupun tipe user-defined dan varname adalah nama yang akan digunakan untuk mengakses data selama program berjalan. Ada beberapa batasan dalam memberikan nama variabel, yaitu:

  1. Karakter yang bisa digunakan untuk menyatakan nama variabel hanya angka, alphabet dan underscore (_).
  2. Karakter pertama tidak boleh berupa angka.
  3. Huruf kapital dan huruf kecil dianggap berbeda.
  4. Nama variabel tidak boleh sama dengan keyword.
  5. Tidak boleh ada dua variabel dengan nama yang sama meskipun tipe datanya berbeda, kecuali berbeda scope.
  6. Tidak ada batasan berapa panjang nama variabel yang bisa digunakan, namun beberapa platform mungkin memberi batasan.

Selain beberapa batasan di atas, ada juga beberapa hal lain yang sebaiknya dihindari dalam menamai sebuah variabel. Yang pertama, hindari menggunakan underscore sebagai karakter awal dalam menamai variabel. Meskipun tidak mengakibatkan compile-time error, variabel dengan penamaan ini tidak bisa diprediksi tingkah lakunya. Alasan penamaan ini tidak mengakibatkan compile-time error karena nama itu sendiri tidaklah ilegal melainkan telah dipesan oleh implementasi (sistem) untuk digunakan.

Yang kedua, sebaiknya gunakan bentuk yang umum dalam menamai variabel. Paling tidak umum untuk diri anda sendiri. Penamaan variabel yang banyak saya temui sejauh ini menggunakan camelCase yatu karakter awal merupakan huruf kecil dan kata selanjutnya huruf besar. Tentu saja hal ini terserah anda.

Perhatikan contoh – contoh pendeklarasian berikut (dengan asumsi bahwa variabel – variabel berikut berada dalam satu scope) :

Dua atau lebih variabel dengan tipe yang sama juga bisa dinyatakan secara bersamaan dengan menggunakan tanda koma sebagai pemisah, misalnya

  int var1, var2, var3;

dari pernyataan di atas, var1, var2, dan var3 adalah variabel dengan tipe integer.

Lalu apakah variabel – variabel di atas sudah bisa digunakan? Belum, sebelum variabel bisa digunakan, variabel tersebut harus lebih dahulu diberi nilai (inisialisasi). Tentu saja ada beberapa cara untuk memberikan nilia kepada sebuah variabel. Yang paling mudahnya adalah dengan menggunakan Assigment Operator (Operator Pengerjaan “ = “), misalnnya:

>  var1 = 5;

pernyataan di atas memberikan nilai 5 ke var1, sehingga pernyataan berikut:

  var2 = var1 + 5;

akan memberikan nilai 10 ke var2. Pemberian nilai ke suatu variabel bisa juga dilakukan pada saat variabel itu dideklarasikan, misalnya:

  int contohVariabel = 5;

Kemudian perhatikan contoh berikut:

  int varSatu = varDua = varTiga = 10;

dari pernyataan di atas, baik varSatu, varDua atau varTiga mempunyai nilai yang sama, yaitu 10. Ingat, nilai dari variabel harus berada pada ruas paling kiri jika pemberian nilai dilakukan pada dua atau lebih variabel secara bersamaan.

Berikut ini beberapa contoh inisialisasi variabel:

Dalam pemberian nilai, tentu saja nilai yang diberikan harus sesuai dengan tipe data tersebut. Untuk lebih jelasnya lihat tentang Tipe Data.

Jenis – Jenis Variabel berdasarkan Jangkauan

Yang dimaksud jangkauan (scope) adalah jenis variabel yang dibedakan berdasarkan tempat dimana dia dideklarasikan yang kemudian akan mempengaruhi pada bagian mana saja variabel tersebut bisa diakses. Perhatikan potongan kode berikut:

Pada dasarnya, ada tiga jenis variabel, yaitu:

1. Global Variabel

Variabel global adalah variabel yang bisa diakses oleh seluruh bagian dalam program.

Variabel yang dideklrasikan di luar fungsi manapun merupakan variabel global yang akan membuatnya bisa diakses dan dimodifikasi oleh fungsi manapun, baik oleh main() ataupun oleh suatuFungsi(). Memori yang digunakan untuk menyimpan variabel global dialokasikan saat program pertama dijalankan dan akan terus tersimpan dalam memori sampai program di keluarkan. Pada bagian kode di atas yang termasuk global variabel adalah intgrSatu, intgrDua, varDouble, varChar, dan varFloat.

2. Lokal Variabel

Variabel lokal adalah variabel yang dideklarasikan di dalam suatu blok pernyataan dan membuatnya hanya bisa diakses oleh pernyataan di dalam blok tersebut (ingat, blok diawali dengan ‘{‘ dan di akhiri dengan ‘}’). Jadi, variabel lokal hanya bisa diakses dan dimodifikasi oleh pernyataan yang satu-blok dengan variabel itu. Penyimpanan untuk variabel lokal berbeda dengan variabel global, penyimpanan untuk variabel lokal akan disediakan pada saat pendeklarasiannya dijumpai dan penyimpanan tersebut akan dibebaskan ketika eksekusi program keluar dari blok di mana dia dideklarasikan. Pada contoh di atas, variabel mainLokal hanya akan bisa digunakan dalam main(), suatuFungsi() tidak akan mengenali variabel ini. Begitu juga halnya dengan suatuLokal, dia hanya akan di kenali di suatuFungsi(). Kemudian perhatikan potongan kode berikut:

Pada potongan kode di atas, a akan dikenali di Blok Luar dan Blok Dalam, akan tetapi b hanya akan dikenali oleh Blok Dalam, sehingga ketika kita mencoba mengakses b diluar dari Blok Dalam, maka akan terjadi compile-time error karena b memang tidak dikenal oleh selain di Blok Dalam dan b hanya akan ada ketika Blok Dalam pertama di eksekusi kemudian akan dihapus lagi ketika eksekusi keluar dari Blok Dalam.

3. Formal Parameter

Lalu kemudian bagaimana cara memberikan nilai di suatu variabel lokal di suatu fungsi ke fungsi lainnya? Caranya dengan meneruskan nilai tersebut sebagai argument ke fungsi tujuan. Untuk menerima nilai dari argumen, maka pada pendeklarasian fungsi harus diberikan formal parameter. Formal Parameter bisa digolongkan sebagai variabel lokal, hanya saja variabel ini mempunyai tujuan tertentu. Perhatikan program berikut untuk mengetahui bagaimana membuat formal parameter:

Pada potongan kode di atas, parSatu dan parDua adalah parameter dari fungsiSum(). Sehingga, pada saat pemanggilan di main(), bilSatu dan bilDua adalah argumen yang diberikan ke fungsiSum(). Inisialisasi formal paramter terjadi pada saat fungsinya dipanggil jadi tidak perlu lagi dilakukan pemberian nilai di dalam fungsi, hal tersebut hanya akan mengubah nilai yang seharusnya diteruskan oleh pemanggil. Hal yang berhubungan dengan fungsi dijelaskan lebih lengkap di LINK INI.

Tipe Data

Hakikatnya, yang dilakukan oleh suatu program adalah pengolahan beragam informasi agar dapat melakukan apa yang diinginkan oleh pembuatnya. Informasi – informasi disimpan dan diolah sebagai sebuah data. Data ini menentukan bagaimana dia harus di olah, sehingga penting untuk mengetahui tipe – tipe data. Dalam bahasa C/C++, secara garis besar hanya ada tiga tipe data: Bilangan bulat atau yang lebih dikenal dengan integer, bilangan asli atau floating, kemudian tipe void. Tipe data inilah yang menentukan data seperti apa yang bisa disimpan dan kemudian dikelola di dalam program. Yang akan kita bahas kali ini merupakan tipe data built-in yang dikenal oleh C.
  1. Tipe Bilangan Bulat
  2. Seperti namanaya, data tipe ini merupakan semua data yang tidak memiliki pecahan, misalnya 5, 1928, 36, ‘a’, dll. Kemudian tipe ini terbagi lagi ke beberapa tipe data lain yang tentu saja memiliki perbedaan – perbedaan tertentu. Selain untuk menyimpan data yang bukan pecahan, biasanya tipe bilangan bulat juga digunakan dalam pernyataan switch, perbandingan kondisi, dll. Pada dasarnya, yang membedakan suatu tipe dengan tipe lainnya adalah range atau bisa dikatakan sebagai berapa besar data yang bisa disimpan menggunakan tipe tersebut. Berikut ini yang termasuk dalam tipe data bilangan bulat:
    • integer
    • Tipe integer digunakan untuk menyimpan data bulat yang merupakan angka. Keyword tipe ini adalah int
    • character
    • Tipe ini lebih banyak digunakan untuk menyimpan data yang berupa karakter (tentu saja karakter ini memiliki nilai integernya masing – masing) atau string. Keywordnya adalah char.
    • boolean (hanya tersedia di C99)
    • Tipe ini hanya bisa dianggap sebagai tipe integer yang paling sederhana karena hanya bisa menyimpan nilai true dan false. Keywordnya adalah _bool. Range masing – masing tipe data bisa saja berbeda dari satu kompiler dengan kompiler lain, tapi dalam semua kasus, tipe char selalu 1 byte. Ingat satu byte sama dengan 8-bit, dan setiap bit hanya menyimpan nilai 1 atau 0.
  3. Tipe Bilangan Asli
  4. Tipe ini tentu saja digunakan untuk menyimpan data yang memiliki pecahan atau bilangan asli. Tipe ini kebanyakan digunakan dalam program yang membutuhkan perhitungan yang akurat, karena itu range tipe data ini cukup besar. Keyword tipe ini ada dua, yaitu float dan double. Yang membedakan keduanya hanya range masing – masing.
  5. void
  6. Tipe ini hanya digunakan dalam membuat fungsi, alasannya karena memang, seperti namanya, tipe void tidak bisa menyimpan data. Bisa dikatakan begitu. Menggunakan tipe ini dalam membuat suatu fungsi menandakan bahwa fungsi tersebut tidak memiliki pengembalian nilai (return value).
Memodifikasi tipe data
Kecuali untuk tipe void, tipe – tipe data di atas bisa dimodifikasi. Kita menggunakan modifier untuk mengubah range dari tipe data dasar untuk menyesuaikan dengan keperluan pemrograman. Ada empat modifier, yaitu:
signed
unsigned
long
short
signed digunakan untuk menandakan bahwa tipe data yang dimodifikasi bisa menyimpan nilai minus (lebih kecil dari 0). Unsigned menyandakan bahwa tipe data yang dimodif hanya bisa menyimpan nilai positif. long digunakan untuk menambah range dari tipe data dan short digunakan untuk mengecilkan rangenya. Berikut ini bentuk umum dalam memodifikasi tipe data:
modifier tipe varname;
Suatu tipe data bisa menggunakan dua modifier, misalnya
unsigned long int;
Tapi deklarasi berikut merupakan sebuah kesalahan
unsigned signed int;
Jadi, suatu tipe data bisa saja menggunakan dua modifier selama maksud dari modifier tersebut tidak sama dan tidak saling berlawanan. signed berlawanan dengan unsigned dan long berlawanan dengan short. Namun ada pengecualian, sejauh yang saya tahu, tipe int bisa menggunakan 3 modifier, yaitu signed atau unsigned dengan modifier long long. Berikut ini tabel yang menunjukkan range masing tipe – tipe data dan juga menunjukkan modifier apa saja yang bisa digunakan pada setiap data
Tipe Ukuran tipikal dalam Bit Range Minimal
char 8 -127 sampai 127
signed char 8 -127 sampai 127
unsigned char 8 0 sampai 255
int 16 atau 32 -32.767 sampai 32.767
signed int 16 atau 32 sama dengan int
unsigned int 16 atau 32 0 sampai 65.535
short int 16 -32.767 sampai 32.767
long int 32 -2.147.483.647 sampai 2.147.483.647
signed short int 16 sama dengan short int
unsigned short int 16 sama dengan unsigned int
signed long int 32 sama dengan long int
unsigned long int 32 0 sampai 4.294.967.295
float 32 6 digit ketelitian
double 64 10 digit ketelitian
long double 80 6 digit ketelitian
Bisa anda lihat bahwa, char secara default merupakan signed, sehingga dianggap tidak perlu untuk menuliskan signed char dalam program. Sama halnya dengan tipe int yang secara default signed. Ketika modifier digunakan tanpa menentukan tipe data yang dimodifikasi, maka secara otomatis akan dianggap sebagai tipe int. Sehingga
DeklarasiSama Dengan
signedsigend int
unsignedunsigned int
shortshort int
longlong int
Meski begitu, sebaiknya dalam pemrograman tetap menyertakan keyword int.