Variabel Automatik dan Variabel Statik

Variabel Automatik

Istilah automatik dan statik menjelaskan apa yang terjadi pada suatu variabel lokal dalam suatu fungsi sesaat setelah fungsi ini selesai dipanggil dan eksekusi program kembali ke prosedur yang memanggil. Default dari variabel lokal dalam suatu fungsi adalah automatik artinya variabel lokal tersebut dihapus pada saat fungsi selesai dipanggil. Untuk mendefinisikan suatu variabel automatik, tambahkan awalan auto pada deflnisi variabel tersebut. Karena default dari variabel lokal adalah automatik maka awalan auto ini optional, jadi boleh dihilangkan misalnya:

void fungsi_x()

{

int  x;

auto float y;

.

.

.

}

Variabel lokal x dan y dalam fungsi fungsi_x() adalah variabel lokal automatik, karena opsional tambahan awalan auto ini jarang dipakai. Continue reading

Variabel Global dan Variabel Lokal Pada C++

Variabel Global

Variabel global dapat dilihat dan dirubah oleh semua fungsi dalam program.

Variabel global sangat berbahaya karena secara tidak sengaja dapat termodifikasi oleh instruksi-instruksi dalam programnya sehingga pemakaian variabel global ini harus seminimal mungkin. Penggalan program berikut memberi contoh mengenai deklarasi dua variabel global x dan y:

#include <iostream.h>

int x,y;        // Global karena didefinisi sebelum suatu fungsi

main()

{

.

.

.

}

Jadi variabel global didefinisikan sebelum nama fungsi. Pada contoh di atas lokasi include <iostream.h> dapat sebelum atau sesudah deklarasi variabel x dan y. Variabel global x dan y akan tampak mulai dari tempat variabel-variabel global tersebut didefinisikan. Continue reading

Scope Variabel Pada C++

Konsep dari scope variabel menentukan fungsi-fungsi yang mana saja yang mengenali variabel-variabel tertentu. Jika suatu fungsi mengenali suatu variabel maka variabel tersebut tampak oleh fungsi tersebut. Scope variabel melindungi variabel-variabel yang ada didalam suatu fungsi terhadap fungsi-fungsi lainya. Jika suatu fungsi tidak perlu mengakses suatu variabel maka fungsi tersebut harus dibuat supaya tidak dapat melihat atau merubah variabel tersebut.

Fungsi Pada C++

Dalam suatu program sering kali lebih mudah kalau dipecah menjadi beberapa fungsi yang masing-masing fungsi melakukan satu tugas tertentu saja. Fungsi yang telah dibuat dapat dipakai berulang-ulang bahkan oleh programmer lain yang tidak mengerti cara kerjanya tapi tahu cara pakainya saja, jadi detil detil yang rumit, yang merupakan bagian operas! dari program, dapat disembunyikan. Dengan dipecah menjadi beberapa fungsi maka pembuatan program menjadi lebih mudah karena kesalahan-kesalahan yang terjadi terlokalisir dalam masing-masing fungsi. Juga organisasi program menjadi lebih baik karena tugas dari fungsi utama main() menjadi sangat sederhana yaitu melakukan pemanggilan dari fungsi-fungsi ini mengikuti urutan yang dikehendaki. Masing-masing fungsi melakukan tugasnya, setelah selesai lalu kembali ke main(). Pemecahan program menjadi fungsi-fungsi ini dikenal sebagai modular programming atau pemrograman tersetruktur.

Fungsi-fungsi dalam C++ pada umumnya mempunyai sifat-sifat sebagai berikut:

  • Masing-masing fungsi mempunyai nama, .penamaan fungsi sama seperti penamaan variabel. Nama fLingsi ini diikuti sepasang tanda kurung yang oleh C-H- dipakai untuk membedakan fungsi dengan variabel. Dalam tanda kurung ini dapat berisi argumen-argumen fungsi tersebut. Jika fungsi ini tidak memerlukan argumen maka dalam tanda kurung ini tidak berisi apa-apa, untuk fungsi dalam C++ tanda kurung yang kosong ini umumnya diisi kata kunci void. Jika fungsi memerlukan argumen maka argumen-argumennya dapat berupa variabel-variabel dari berbagai tipe, antara argumen yang satu dengan argumen yang lain dipisahkan dengan koma.
  • Badan dari masing-masing fungsi, mulai segera setelah tanda kurung tutup dari nama fungsi, harus dimulai dengan tanda kurung { dan diakhiri dengan tanda kurung }. Ini berarti bahwa badan fungsi minimal terdiri dari satu blok. Badan dari fungsi ini berisi deklarasi variabel-variabel dan penyataan-pemyataan.

 

Contoh dari suatu fungsi untuk mengkwadratkan bilangan-bilangan bulat adalah sebagai berikut:

void   hitung_kuadrat(int n)

{

int kuadrat = 0;

 

while (kuadrat <= 50)

{

kuadrat = n * n;

cout << “Kuadrat dari ” << n << ” adalah ”

<< kuadrat<< “\n”;

n++;

}

return;

}

Dalam C++, argumen-argumen dari fungsi dapat mempunyai harga default. Jika pada saat fungsi yang mempunyai default argumen ini dipanggil namun argumennya dihilangkan maka kompiler otomatis akan memakai nilai default dari argumen yang dihilangkan tersebut. Jika pada saat dipanggil argumennya diisi maka isi ini yang dipakai. Default argumen ini membuat program menjadi lebih fleksibel, argumen-argumen yang nilai defaultnya tidak perlu diubah tidak perlu diisi namun ada aturan yang perlu diperhatikan.

Bila kita menghilangkan argumen yang pertama maka argumen-argumen selanjutnya juga harus dihilangkan. Kita dapat menghilangkan argumen yang kedua dan mengisi argumen yang pertama. Aturan ini tidak terikat padajumlah argumen. Secara umum aturannya  adalah kalau kita menghilangkan suatu argumen maka kita harus menghilangkan semua argumen dikanannya. Contoh program berikut ini memperjelas konsep di atas.

// C1_5.CPP

#include <iostream.h>

 

// Output program ini adalah :

// pertama = 1, kedua = 2.3, ketiga = 4

// pertama = 5, kedua = 2.3, ketiga = 4

// pertama =6, kedua = 7.8, ketiga =4

// pertama = 9, kedua = 10.11, ketiga =12

 

//Prototipedari fungsi

void tampilkan(int-l, float=2.3, long=4);

 

main ()

{

tampilkan();                   // semua default

tampilkan(5);                // isi argumen pertama

tampilkan(6, 7.8);            // isi pertama dan kedua

tampilkan(9, 10.11, 12L);    // isi ketiganya

return 0;

}

 

void tampilkan(int pertama, float kedua, long ketiga)

{

cout << “\npertama = ” << pertama;

cout << “, kedua ==” << kedua;

cout << “, ketiga = “  <<  ketiga;

return;

}

Perhatikan bahwa untuk memanggil fungsi cukup dengan menulis namanya, termasuk tanda kurung dan argumen-argumennya dan diakhiri dengan titik koma (;.

 

Pernyataan Switch Pada C++

Pernyataan switch sangat effisien untuk multiway decision/selection yang berdasar pada evaluasi suatu ekpresi yang melibatkan bilangan-bilangan bulat/karakter. Pernyataan switch akan melakukan pencocokan apakah hasil evaluasi ekpresi tersebut cocok dengan salah satu dari sejumlah konstanta. Format dari pernyataan switch adalah :

switch (ekpresi}

{

case konstanta_l:

pernyataan;

.

.

.

break;

 

case konstanta_2:

pernyataan;

.

.

.

break;

.

.

.

default:

pernyataan;

.

.

.

}

Konstanta diasosiasikan dengan masing masing case. Jika hasil evaluasi ekpresi ada kecocokan dengan salah satu konstanta maka penyataan-pemyataan yang mengikuti case yang cocok tersebut akan dieksekusi. Pemyataan terakhir pada masing masing case biasanya adalah break yang berfungsi untuk menghentikan pemyataan switch. Bila tidak pakai break maka pemyataan-pernyataan pada case yang lain, yang terletak di bawah case yang cocok, akan dieksekusi. Keadaan yang terakhir ini pada umumnya tidak diinginkan.

Contoh program berikut ini menjelaskan pemakaian pemyataan switch.

//C8_3.CPP

#include <iostream.h>

 

main() {

int c, i=0;

cout <<  “l.  Tambah l\n”;

cout << “2.   Kurang l\n”;

cout <<  “3.  Tampilkan\n”;

cout <<  “0.  Exit\n\n\n”;

 

do{

cin >> c;

switch (c) {

case 1:

i++;

break;

case 2:

i–;

break;

case 3:

cout << i << “\n”;

break;

case 0:

break;

default:

cout <<  “Error”;

}

} while (c != 0);

return 0;

}

#include Preprocessor Directive

#include preprocessor directive menyisipkan suatu text file yang ada di disk kedalam program. Format dari #include preprocessor directive adalah ;

#include <nama_file>      atau

#include “nama_file”

Text file yang disisipkan dapat apa saja namun umumya yang disisipkan adalah header file. Header file ini akan memberi informasi kepada kompiler C++ bagaimana mengiriterpretasikan fungsi-fungsi library yang akan dipakai. Misalnya kompiler C++ memerlukan informasi mengenai fungsi cout,fungsi cin maka perlu disisipkan header file iostream.h sebagai berikut:

#include <iostream.h>        atau

#include “iostream.h”

Tampak bahwa untuk menyisipkan text file ada dua pilihan:

  • Nama file diantara tanda kurung < dan tanda kurung >, pilihan ini memberitahu preprocessor untuk mencari header file di lokasi default yang telah ditetapkan sebelumnya, pilihan ini biasa dipakai untuk menyisipkan standard header yang terletak pada include file direktori yang telah di set untuk kompiler yang dipakai. Standard header file ini berasal dari kompiler. Programmer pada umumnya tidak melakukan perubahan pada standar header file.
  • Nama file diantara sepasang tanda kutip ganda (” “), pilihan ini memberitahu preprocessor untuk mencari dulu header file di direktori yang saat ini aktip kalau tidak ketemu dilanjutkan pencariannya ke lokasi-lokasi yang telah ditetapkan oleh programmer sebelumnya, pilihan ini biasa dipakai untuk menyisipkan non-standard header file. Non-standard header file sering mengalami modifikasi oleh programmer yang membuatnya dan preprocessor selalu menyisipkan yang terbam.

#if, #else dan  #endif Preprocessor Directive

Antara kompiler yang satu dengan kompiler yang lainya dapat menggunakan nama yang berbeda untuk suatu header file yang definisinya hampir sama. Misal header file alloc.h pada Borland C++ adalah hampir ekivalen dengan header file malloc.h pada Microsoft C++. Jadi kita perlu sarana untuk menentukan header file yang mana yang harus disisipkan pada saat program dikompile, misalnya program yang dibuat harus mendukung Borland C++ dan Microsoft C++ maka pemakaian preprocessor directivenya adalah sebagai berikut:

#ifdef _BORLAND

#include <alloc.h>

#else

#include <malloc.h>

#endif

Kalau header file ini dikompile dengan Borland C++ maka nama simbolik _BORLAND_ otomatis didefinisikan oleh kompiler sehingga standard header file alloc.h yang disisipkan.

Dalam C++ programmer umumnya membatasi apa saja yang dapat masuk kedalam header file yang dibuat. Header file umumnya hanya memuat defmisi-definisi misalnya tipe, nama variabel ektemal. definisi struktur, konstanta, makro dan prototipe fungsi.

Programmer biasanya menghindari satu header file raksasa yang memuat semua definisi karena memperlambat proses kompilasi. Umumnya programmer lebih menyukai beberapa header file.yang lebih kecil, jadi ada beberapa header file. Kalau satu header file disisipkan lebih dari satu kali secara tidak sengaja (header file dapat bersusun, artinya dalarn suatu header file ada header file yang lain) maka akan ada definisi ulang yang akan menimbulkan kesalahan pada saat program di kompile. Untuk menghindari keadaan ini dapat dipakai preprocessor directive #ifndef, #define dan #endif untuk membuat header file sebagai berikut:

#ifhdef _NAMAFILE_H

#define _NAMAFILE_H

#define VER_NUM         “1.00″

#define REL_DATE         “27/09/95″

#if _WINDOWS_

#define OS_VER            “WINDOWS”

#else

#define OS_VER             “DOS

#endif

#endif

Pada saat header file ini dikompile, kompiler pertama-tama melakukan check apakah _NAMAFILE_H telah didefinisikan. Bila belum didefinisikan maka header file ini belum pemah disisipkan sehingga _NAMAFILE_H didefinisikan dulu lalu header file ini disisipkan. Bila _NAMAFILE_H sudah didefinisikan maka isi dari header file ini tidak disisipkan.

Pernyataan If Else Pada C++

Pernyataan if-else dipakai untuk memilih altematip eksekusi dari dua blok pemyataan. Format dari pernyataan if-else adalah:

if {kondisi)

{

pernyataan;

.

.

.

}

else

{

pernyataan;

.

.

.

}

Bila hasil evaluasi kondisi adalah true maka blok pernyataan sesudah if akan dieksekusi, bila false maka blok pernyataan sesudah else akan dieksekusi. Bila jumlah pernyataan sesudah if atau sesudah else hanya satu maka kurung { dan kurung } tidak harus dituliskan. Bagian else dari suatu pernyataan if-else adalah opsional, bila else tidak dipakai dan hasil evaluasi kondisi adalah false maka tidak ada blok pernyataan yang dieksekusi.

Contoh:

if (a < b)

cout         << “a  < b”;

artinya tampilkan a < b bila nilai a lebih kecil dari nilai b.Jikanilai a lebih besar dari nilai  b  maka tidak ada blok pernyataan yang dieksekusi.

Pernyataan if-else dapat bersusun, bentuk ini dikenal sebagai multiway decision.

Format dari multiway decision adalah:

if(kondisi_1)

{

pernyataan;

.

.

.

}

 

else if(kondisi_2)

{

pernyataan;

.

.

.

}

.

.

.

else if (kondisi_n)

{

pernyataan;

.

.

.

}

Penggalan program berikut ini menjelaskan format multiway decision di atas:

if(a < b)

cout << “a < b”;

else if (a == b)

cout << “a == b”;

else if (a > b)

cout << “a > b”;

else

cout << “error”;

Pernyataan For Pada C++

Pernyataan for dapat dipakai sebagai alternatip dari pernyataan while. Pernyataan for ini meskipun formatnya lebih komplek dari pernyataan while namun lebih variatif applikasinya.

Format dari pernyataan for adalah :

for (ekpresi_l; ekpresi_2; ekpresi_3)

{

pernyataan;

.

.

.

}

  • ekpresi_l dipakai untuk inisialisasi dari variabel yang dipakai untuk mengkontrol ulangan eksekusi dari blok pernyataan yang ada didalam pernyataan for.
  • ekpresi_2 dipakai untuk menyatakan suatu kondisi, eksekusi dari blok pernyataan yang ada didalam pernyataan-for akan diulang bila evaluasinya menghasilkan true
  • ekpresi_3 dipakai untuk menambah/mengurangi nilai variabel yang dipakai untuk mengkontrol eksekusi dari blok pernyataan yang ada didalam pernyataan for.

Ekpresi_1, ekpresi_2 dan ekpresi_3 adalah opsional sehingga penyataan for yang paling sederhana adalah:

for ( ; ; ;  )

{

pernyataan;

.

.

.

}

Pada pernyataan for di atas tidak ada inisialisasi, tidak ada kondisi dan tidak ada penambahan / pengurangan dari variabel yang dipakai untuk mengkontrol ulangan eksekusi sehingga eksekusi dari blok pernyataan didalamnya akan diulang terus. Berikut ini adalah contoh program yang memakai pernyataan for yang sederhana.

//C5_3.CPP

#include <iostream.h>

 

main ()

{

int ctr;

for (ctr=l; ctr <= 10; ctr++)

{

cout << ctr << “\n”;

}

return 0;

}

Pernyataan while yang ekivalen dengan pemyatan for di atas adalah:

ctr = 1

while (ctr <= 10)

{

cout << ctr << “\n”;

ctr++;

}

Perhatikan bahwa ekpresij, ekpresi_2 dan ekpresi_3 dipisahkan dengan titik koma bukan dengan operator koma. Disini letak keunggulan dari pernyataan for ini karena kita dapat memakai pemisah operator koma untuk menulis lebih dari satu ekpresi pada lokasi ekpresij. ekpresij. atau ekpresij. Misalnya format, berikut ini adalah sah:

for (ekpresi_l; ekpresi_2a, ekpresi_2b, ekpresi_2c; ekpresi_3)

{

pernyataan;

.

.

.

}

Contoh program berikut ini memakai konsep di atas untuk memperoleh hasil hitungan dari bilangan bulat 2 yang dipangkatkan mulai dari nol sampai pangkat tertentu.

//C6_3.cpp

#include <iostream.h>

 

main ()

{

int n, p , val;

cout << “Input pangkat dari 2 yang terbesar : “;

cin >> n;

cout << “\nPangkat” << “\t” <<  “Nilai”-

for (p=0, val=l; p <= n; p++)

cout << “\n” << p << “\t” << val;

val *= 2;

}

return 0;

}

Pernyataan for dapat bersusun artinya dalam suatu pernyataan for boleh ada pernyataan for yang lain. Pernyataan for yang lebih dalam akan dieksekusi lebih dulu dari pernyataan for yang luar. Contoh program berikut ini mempunyai dua pernyataan for, pernyataan for yang luar memakai variabel kontrol y sedangkan pernyataan for yang dalam memakai vanabel kontrol x. Hasil eksekusi program ini menunjukkan bahwa pernyataan for yang dalam akan dieksekusi selengkapnya pada setiap penambahan variabel y.

//C7_3.CPP

#include <iostream.h>

 

main()

{

int x, y;

 

for(y=l;y<=4;y++)

{

for(x=1;x <=3;x++)

cout << “y” << y << “x” << x << “\t”;

cout << “\n”;

}

return 0;

}

Output dari program ini adalah :

ylxl   ylx2  ylx3

y2xl  y2x2  y2x3

y3xl  y3x2  y3x3

y4xl  y4x2  y4x3