Selasa, 14 Mei 2013

TIPE TIPE DATA GABUNGAN

Tipe-Tipe Gabungan 

Pada bab ini, anda akan belajar tentang:
  • Bagaimana menciptakan dan menggunakan array
  • Bagaimana membuat dan menggunakan string versi C
  • Bagaimana menciptakan dan menggunakan string-string pada kelas string
  • Bagaimana menggunakan get.line() dan get() untuk membaca string
  • Bagaimana mencampur string dan kode numeris pada masukan
  • Bagaimana menciptakan dan menggunakan struktur
  • Bagaimana membuat dan menggunakan union
  • Bagaimana membuat dan menggunakan pointer
  • Bagaimana mengatur memori dinamis menggunakan new dan delete
  • Bagaimana menciptakan array dinamis
  • Bagaimana menciptakan dan menggunakan struktur dinamis
  • Penyimpanan dinamis, statis, dan otomatis

      Sebut saja saat ini anda telah membuat sebuah game Jago-Silat dimana di dalamnya terdapat pertandingan antar para pahlawan silat senusantara. Namun seiring dengan kenaikan penjualan, anda perlu mengetahui jejak rekam penjualan selama lima tahun terakhir. Saat itu juga anda mungkin akan tersadar, bahwa anda membutuhkan lebih dari sekedar tipe-tipe data dasar C++ yang telah dipelajari. C++ menawarkan tipe-tipe gabungan yang dikonstruksi berdasarkan tipe-tipe dasar integer dan floating-point. Jenis tipe gabungan yang paling terkini adalah kelas, yang merupakan tembok kekuatan pemrograman berorientasi objek. Tapi C++ juga menyediakan tipe-tipe gabungan yang diimpor dari C, misalnya array. Array dapat memuat sejumlah nilai yang bertipe sama. Jenis array tertentu bahkan dapat memuat string, yang merupakan runtun karakter. Lainnya adalah struktur, yang dapat memuat sejumlah nilai dengan tipe yang berbeda. Kemudian ada pointer, yang memerintahkan komputer dimana untuk menyimpan data. Anda akan mempelajari tipe-tipe gabungan tersebut (kecuali kelas), menengok kegunaan new dan delete dalam mengatur memori dinamis, dan akan dikenalkan mengenai kelas string C++ pada bab ini.

Pengenalan array
Suatu array adalah suatu data yang dapat memuat nilai-nilai yang sama tipe. Sebagai contoh, suatu array dapat memuat 60 nilai bertipe int yang merepresentasikan data penjualan game selama lima tahun, 12 nilai bertipe short yang merepresentasikan jumlah hari dalam sebulan, dan 365 nilai bertipe float yang mewakili biaya makan setiap hari selama setahun. Setiap nilai disimpan dalam suatu elemen yang berbeda, dan komputer menyimpan setiap elemen suatu array secara berurutan di dalam memori. Untuk menciptakan suatu array, anda membutuhkan statemen pendeklarasian. Suatu deklarasi array harus mengindikasikan tiga hal:
  • Tipe nilai yang disimpan untuk setiap elemen
  • Nama array
  • Jumlah elemen dalam array

Anda melakukan ini di dalam C++ hanya dengan sedikit modifikasi atas deklarasi variabel dan menambahkan kurung siku [ ] yang memuat jumlah elemen. Sebagai contoh, deklarasi

short bulan[12]; // menciptakan array berisi 12 nilai bertipe short

menciptakan suatu array bernama bulan yang memiliki 12 elemen, dimana setiap elemen bertipe short. Setiap elemen, pada intinya, adalah suatu variabel yang dapat anda perlakukan layaknya sebuah variabel. Ini adalah bentuk umum untuk mendeklarasikan suatu array.

nama_tipe nama_array[ukuran_array];

Ekspressi ukuran_array, yang merepresentasikan jumlah elemen, harus berupa konstanta integer, seperti 25 atau nilai bertipe const, atau suatu ekspressi konstanta, seperti 8 * sizeof (int). Yang paling penting diketahui adalah nilai ukuran_array sudah harus diketahui pada saat kompilasi dilakukan. Namun pada bagian lain bab ini, anda akan mempelajari operator new untuk mengakali batasan ini.

Kegunaan lain dari array adalah anda dapat mengakses setiap elemen secara individual. Caranya adalah dengan penomoran indeks. Penomoran indeks C++ dimulai dari nol (hal ini tidak bisa ditawar-tawar atau dinegosiasikan). Sebagai contoh bulan[0] artinya elemen pertama dari array bulan, dan bulan[11] adalah elemen ke-12 atau elemen terakhir dari array bulan. Perhatikan bahwa nomor indeks elemen terakhir adalah ukuran array dikurangi dengan satu (lihat Gambar 3.1). Jadi, dengan deklarasi array, anda sama saja dengan mendeklarasikan banyak variabel sekaligus, dan kemudian anda bisa mengakses setiap variabel menggunakan indeks.


Gambar 3.1 Menciptakan suatu array

Analisis biaya ayam taliwang (asli Lombok, Nusa Tenggara Barat) pada kode3.1.cpp mendemonstrasikan beberapa sifat array, termasuk mendeklarasikan suatu array, menugaskan nilai-nilai kepada elemen-elemen array, dan menginisialisasi suatu array.

// kode3.1.cpp 
#include <iostream>
int main() { using namespace std; int taliwang[3]; // menciptakan array dengan tiga elemen 
taliwang[0] = 7; // menugaskan nilai kepada elemen pertama taliwang[1] = 8; 
taliwang[2] = 6;
int biaya_taliwang[3] = {175, 200, 125}; // menciptakan sekaligus inisialisasi array
cout << "Total taliwang = ";
cout << (taliwang[0] + taliwang[1] + taliwang[2]) << endl;
cout << "Paket yang berisi " << taliwang[1] << " ayang taliwang seharga ";
cout << biaya_taliwang[1] << " rupiah.\n";
int total = (taliwang[0] * biaya_taliwang[0] + taliwang[1] * biaya_taliwang[1]);
total = total + taliwang[2] * biaya_taliwang[2];
cout << "Total biaya = " << total << " rupiah.\n";
cout << "\nUkuran array taliwang = " << sizeof taliwang;
cout << " byte.\n";
cout << "Ukuran satu elemen array = " << sizeof taliwang[0];
cout << " byte.\n";
return 0;
}



Screenshot keluaran program kode3.1.cpp


Read More >>

Senin, 06 Mei 2013

Penanganan Data

Pada bab ini, anda akan belajar tentang:
  • Aturan-aturan penamaan variabel C++
  • Tipe-tipe integer built-in: unsigned long, long, unsigned int, int, unsigned short, short, char, unsigned char, signed char, dan bool
  • File climits yang merepresentasikan batasan untuk berbagai jenis integer 
  • Konstanta-konstanta numeris untuk berbagai jenis integer
  • Penggunaan kualifier const untuk menciptakan konstanta-konstanta simbolik
  • Jenis-jenis tipe floating-point: float, double, dan long doubleFile cfloat yang merepresentasikan batasan untuk berbagai jenis floating-pointKonstanta-konstanta numeris untuk berbagai jenis floating-point Konversi tipe otomatis
  • Konversi tipe secara paksa (type casts)


Inti dari pemrograman berorientasi objek (OOP) adalah mendesain dan mengembangkan tipe data anda sendiri. Mendesain tipe data sendiri merepresentasikan usaha untuk mencocokkan tipe data terhadap data itu sendiri. Jika anda telah familiar dengan hal ini, maka selanjutnya anda akan semakin mudah untuk menangani masalah data. Namun sebelum anda membuat jenis data sendiri, anda mesti belajar untuk memahami terlebih dahulu tipe data built-in C++.


Tipe data built-in dikelompokkan menjadi dua: tipe dasar (fundamental types) dan tipe gabungan (compound types). Pada bab ini anda akan diajak untuk mengeksplorasi tipe dasar, yang merepresentasikan bilangan bulat (integer) dan bilangan pecahan (floating-point). Pada Bab 3 akan dijelaskan tipe gabungan meliputi array, string, pointer, dan struktur.
Variabel-variabel sederhana
Selain untuk komputasi, program didesain untuk menyimpan informasi. Informasi tersebut bisa saja berupa catatan kuliah, berita, laporan, ataupun informasi intelijen. Untuk menyimpan setiap helai informasi di dalam komputer, program harus memiliki tiga sifat mendasar:
  • Dimana informasi disimpan 
  • Berapa nilai yang disimpan di sana 
  • Apa jenis informasi yang disimpan


Strategi yang dipakai di sini sejauh ini adalah dengan cara mendeklarasikan suatu variabel. Tipe data yang dipakai merepresentasikan jenis informasi, dan nama variabel yang diberikan mewakili nilai secara simbolik. Sebagai contoh, seorang mantan ketua jurusan teknik elektro Wiryajati menggunakan statemen-statemen di bawah ini: 

int tingkat_otak
tingkat_otak = 8;

Kedua statemen di atas menceritakan bahwa mereka menyimpan suatu integer dan nama variabel tingkat_otak yang memiliki nilai integer, dalam hal ini 8. Pada intinya, program mengalokasikan seporsi memori yang cukup untuk memuat suatu integer, mencatat lokasi, melakukan pelabelan tingkat_otak pada lokasi tersebut, dan menugaskan nilai 8 pada lokasi itu. Kedua statemen di atas tidak bercerita kepada anda tentang dimana, di dalam memori, nilai tersebut disimpan. Namun dengan bantuan operator &, anda dapat mencari lokasi spesifik alamat tingkat_otak di dalam memori.

Anda akan dikenalkan tentang operator & pada bab berikutnya, dimana anda akan menginvesitagasi strategi kedua untuk mengidentifikasi data, yaitu menggunakan pointer.

Nama-nama untuk variabel
C++ merekomendasikan anda untuk menciptakan nama-nama variabel yang mengandung makna tertentu. Jika suatu variabel merepresentasikan ongkos perjalanan, sebaiknya anda menamai variabel tersebut dengan ongkos_jalan atau ongkos_perjalanan, bukan hanya x atau opj saja. Di dalam C++, anda harus mengikuti beberapa aturan penamaan variabel:
  • Karakter-karakter yang boleh digunakan adalah karakter alphabet, angka numeris, dan karakter garis bawah (underscore). 
  • Karakter pertama dari suatu nama tidak boleh menggunakan angka numeris. 
  • Karakter-karakter huruf besar berbeda dengan versi yang menggunakan huruf kecil. 
  • Anda tidak diperkenankan menggunakan “C++” sebagai suatu nama. 
  • Nama-nama yang diawali dengan dua garis bawah atau yang diawali dengan satu garis bawah dan diikuti dengan huruf besar dicadangkan untuk kepentingan implementasi lanjut. 
  • Nama-nama yang diawali dengan satu karakter garis bawah digunakan untuk pengenal (identifier) global
  • C++ tidak menetapkan batasan panjang penamaan.


Berikut adalah beberapa contoh penamaan yang benar dan salah dalam C++:
int bugis;  // valid
int Bugis;  // valid dan berbeda dengan variabel bugis
int BUGIS;  // valid dan jelas sangat berbeda dengan kedua variabel di atas
Int bima;   // tidak valid, karena seharusnya int, bukan Int
int bali77; // valid
int _bali77;// valid, namun dicadangkan untuk implementasi lanjut
int 77Batak;// tidak valid, karena diawali dengan angka numeris
int double; // tidak valid, karena menggunakan salah satu kata kunci C++
int begin;  // valid, meski begin adalah salah satu kata kunci PASCAL
int __tapanuli; // valid, diawali dengan dua garis bawah, dicadangkan untuk implementasi lanjut
int lombok_pulau_yang_mempesona; // valid, tidak ada batasan panjang variabel
int otak-atik; // tidak valid, karena menggunakan tanda hubung

Jika anda ingin menamai suatu variabel dengan dua kata atau lebih, maka biasanya hal itu bisa anda lakukan dengan menghubungkan antar kata dengan garis bawah, seperti jurusan_elektro. Atau bisa juga anda melakukannya dengan memberikan huruf besar untuk awal setiap kata, seperti JurusanInformatika.


Tipe-tipe Integer
        Integer adalah bilangan bulat yang tidak memiliki bagian pecahan seperti 34, 45, -688, dan 0. Integer berjumlah tak berhingga, sehingga tak ada satu pun komputer yang memiliki kemampuan memori yang bisa menyimpan semuanya. Kompromi praktis harus dilakukan. C++ memberikan beberapa pilihan praktis untuk memenuhi kebutuhan komputasi anda. Pencocokan tipe terhadap data merupakan awal kelahiran pemrograman berorientasi objek (OOP). Berbagai tipe integer yang dimiliki C++ mempunyai jumlah memori yang berbeda untuk menyimpan suatu integer. Suatu blok memori yang lebih besar mampu merepresentasikan rentang nilai integer yang lebih lebar. Sebagian tipe (signed) bisa merepresentasikan kedua nilai positif dan negatif, sedangkan sebagian lainnya (unsigned) tidak bisa digunakan untuk mewakili nilai negatif. 

      Istilah resmi untuk menyatakan jumlah memori yang dialokasikan untuk tipe integer tertentu adalah lebar atau width. Semakin lebar memori yang digunakan, semakin besar pula suatu nilai integer yang bisa direpresentasikan. Dari urutan lebar memori terendah, tipe integer C++ adalah char, short, int, dan long. Keempatnya memiliki versi signed dan unsigned. Jadi anda memiliki delapan pilihan tipe integer

      Berikutnya akan dideskripsikan semua tipe integer secara lebih detil. Namun yang perlu perhatian khusus adalah tipe char, karena char biasanya digunakan untuk merepresentasikan karakter-karakter daripada angka-angka.


Tipe integer short, int, dan long
     Memori komputer terdiri-dari unit-unit yang disebut bit. Dengan jumlah bit-bit yang berbeda, tipe data C++ short, int, dan long dapat merepresentasikan tiga lebar integer yang berbeda.

    Sangatlah memudahkan jika setiap tipe integer memiliki lebar integer yang sama pada semua sistem, misalnya jika short selebar 16 bit dan int selebar 32 bit. Namun kenyataan hidup tidak semudah itu. C++ hanya menawarkan jaminan minimum ukuran atau lebar tipe integer, yang diderivasi dari pustaka C. Inilah jaminan-jaminan tersebut:
  • Integer short memiliki lebar minimum 16 bit
  • Integer int minimum selebar short
  • Integer long memiliki lebar minimum 32 bit dan minimum selebar int
     Banyak sistem saat ini menetapkan short selebar 16 bit dan long 32 bit. Namun mereka belum menetapkan lebar pasti pada integer int. Hal ini berarti lebar int bisa saja 16, 24, atau 32 bit dan masih bisa memenuhi ketiga persyaratan jaminan di atas. Pada umumnya lebar int sebesar 16 bit (sama dengan short) untuk komputer IBM PC versi lama dan selebar 32 bit (sama dengan long) untuk sistem operasi Windows 98, Windows XP, Windows NT, Macintosh OS X, dan VAX. Berikut ini diberikan contoh mendeklarasikan variabel dengan ketiga tipe integer ini:


short komputer; // menciptakan suatu variabel bertipe integer short
int laptop;     // menciptakan suatu variabel bertipe integer int
long informasi; // menciptakan suatu variabel bertipe integer informasi


      Pada dasarnya tipe short sama dengan short int dan long sama dengan long int. Namun banyak orang tidak menggunakan versi yang lebih panjang ini. Ketiga tipe integer pada potongan kode tersebut adalah tipe signed yang berarti bahwa rentang yang dimiliki dibagi (mendekati sama) menjadi bagian positif dan bagian negatif. Misalnya int 16 bit memiliki rentang nilai -32.768 sampai +32.767.

    Jika anda ingin mengetahui ukuran tipe integer yang ada pada komputer anda, anda bisa menggunakan tool C++ untuk melakukannya. Berikut adalah kode untuk mengetahui ukuran tipe integer pada sistem anda.

//Kode2.1.cpp
#include <iostream>
#include <limits>

int main()
{
using namespace std;
// INT_MAX, SHRT_MAX, LONG_MAX, INT_MIN, SHRT_MIN, LONG_MIN,
// dan CHAR_BIT terdefinisi dalam file header limits.h
int n_int = INT_MAX; // inisialisasi variabel n_int bernilai nilai int maksimum
short n_short = SHRT_MAX; // inisialisasi variabel n_short bernilai nilai short maksimum
long n_long = LONG_MAX; // inisialisasi variabel n_long bernilai nilai long maksimum

cout << "lebar int adalah " << sizeof (int) << " byte." << endl;
cout << "lebar short adalah " << sizeof n_short << " byte." << endl;
cout << "lebar long adalah " << sizeof n_long << " byte." << endl << endl;

cout << "Nilai-Nilai Maksimum:" << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl << endl;
cout << "Nilai Minimum int = " << INT_MIN << endl;
cout << "Nilai Minimum short = " << SHRT_MIN << endl;
cout << "Nilai Minimum long = " << LONG_MIN << endl;
cout << "Bit tiap byte = " << CHAR_BIT << endl;

return 0;
}


Screenshot keluaran program kode2.1.cpp


Catatan program
     Operator sizeof dan file header limits.h Operator sizeof melaporkan bahwa lebar int adalah 4 byte (bergantung pada sistem yang dipakai) dan menggunakan ukuran 8 bit per byte. Anda bisa memakai sizeof untuk tipe data atau pada nama suatu variabel. Jika anda menggunakan sizeof untuk tipe data, int misalnya, maka anda harus menggunakan kurung (). Namun jika anda menggunakannya untuk suatu variabel, seperti n_short, maka kurung () menjadi opsional:

cout << "lebar int adalah " << sizeof (int) << " byte." << endl;
cout << "lebar short adalah " << sizeof n_short << " byte." << endl;
cout << "lebar long adalah " << sizeof n_long << " byte." << endl << endl;


      File header limits.h mendefinisikan konstanta-konstante simbolik (akan dijelaskan lebih lanjut pada bab ini) yang merepresentasikan batas rentang tipe data. INT_MAX merepresentasikan nilai maksimum yang bisa dimiliki int; menghasilkan 2147483647 untuk sistem yang dipakai (Windows XP). Pada Tabel 2.1 ditabulasikan konstanta-konstanta simbolik yang didefinisikan dalam file header limits.h.

Tabel 2.1 Konstanta-konstanta simbolik dalam file header limits.h


Inisialisasi
Inisialisasi mengkombinasikan penugasan dengan deklarasi. Sebagai contoh, statemen:

int n_int = INT_MAX;

      Mendeklarasikan variabel n_int dan memberikannya sebuah nilai integer int maksimum. Anda dapat menginisialisasi suatu variabel menjadi variabel lain yang telah didefinisikan terlebih dahulu. Anda bahkan bisa menginisialisasi suatu variabel menjadi suatu ekspressi asalkan semua nilai dalam ekspressi telah diketahui lebih dahulu sebelum eksekusi program sampai pada deklarasi tersebut:

int oppung = 5; // inisialisasi oppung menjadi 5
int tulang = oppung; // inisialisasi tulang menjadi oppung = 5
int keluarga = oppung + tulang + 3; // inisialisasi keluarga menjadi 13


       Jika anda mengubah susunan ekspressi di atas misalnya dengan menempatkan inisialisasi oppung menjadi berada di urutan terakhir, maka hal ini akan membuat kedua inisialisasi yang lain menjadi salah karena nilai oppung tidak diketahui pada saat program mencoba untuk menginisialisasi tulang dan keluarga. Sintaks yang telah dijelaskan merupakan warisan dari C. Ada sintaks C++ yang tidak dimiliki oleh C sebagai berikut:

int senggigi = 7; // inisialisasi tradisional C
int kuta(14); // inisialisasi alternative C++, menginisialisasi kuta menjadi 14


Tipe unsigned
      Tiga tipe integer yang baru saja dijelaskan merupakan varietas signed yang bisa memegang nilai positif dan nilai negatif. Inilah keuntungan yang diperoleh dengan menambah nilai terbesar suatu variabel. Sebagai contoh, jika short bisa merepresentasikan nilai -32.768 sampai +32.767, maka versi unsigned short bisa merepresentasikan nilai 0 sampai 65.535. Tentu saja anda perlu dan harus menggunakan versi unsigned untuk kuantitas-kuantitas yang tidak pernah bernilai negatif seperti populasi, gaji, diskon, dll. Untuk menciptakan versi unsigned dari tipe integer short, int, dan long, anda hanya perlu menambahkan kata kunci unsigned untuk memodifikasi deklarasi.

unsigned short garuda;    // tipe unsigned short
unsigned int bendera;     // tipe unsigned int
unsigned hujan;           // tipe unsigned int juga
unsigned long pancasila;  // tipe unsigned long


       Kode2.2.cpp mengillustrasikan penggunaan tipe integer unsigned. Perhatikan pula penggunaan statemen preprosessor #define.

//kode2.2.cpp
#include <iostream>
#define ZERO 0 // membikin simbol ZERO bernilai 0
#include <limits> // mendefinisikan INT_MAX sebagai nilai maksimum int

int main()
{
using namespace std;

short rismon = SHRT_MAX; // inisialisasi suatu variabel menjadi nilai maksimum short
unsigned short satria = rismon; // valid karena variabel rismon telah didefinisikan

cout << "Rismon memiliki " << rismon << " rupiah dan Satria memiliki " << satria;
cout << " rupiah dideposito." << endl
<< "Tambahkan Rp.1 pada tiap rekening." << endl << endl << "Sekarang ";

rismon = rismon + 1;
satria = satria + 1;

cout << "Rismon punya " << rismon << " rupiah dan Satria punya " << satria;
cout << " rupiah dideposito.\nKasihan Rismon!" << endl << endl;
rismon = ZERO;
satria = ZERO;

cout << "Rismon memiliki " << rismon << " rupiah dan Satria memiliki " << satria;
cout << " rupiah dideposito." << endl;

cout << "Ambil Rp. 1 dari masing-masing rekening." << endl << endl << "Sekarang ";
rismon = rismon - 1;
satria = satria - 1;

cout << "Rismon punya " << rismon << " rupiah dan Satria punya " << satria;
cout << " rupiah dideposito.\nSatria beruntung!" << endl;

return 0;
}

      Program di atas menetapkan suatu variabel short (rismon) dan suatu variabel unsigned short (satria) dan keduanya diinisialisasi menjadi nilai short maksimum, yaitu 32.767 (Windows XP). Kemudian ditambahkan 1 ke tiap nilai tersebut. Hal ini tidak menjadi masalah bagi satria, karena nilai satria yang baru masih berada jauh di bawah batas maksimum nilai untuk unsigned short, yang adalah 65.535. Tapi hal ini menjadi masalah besar bagi variabel rismon!, karena nilainya hanya memiliki rentang +32.767 sampai -32768 saja. 

      Sama halnya dengan pengurangan 1 dari 0 bagi rismon bukan menjadi masalah, namun bagi satria pengurangan 1 dari 0 akan menghasilkan nilai 65.535, karena nilai satria berada dalam rentang 0 dan 65.535. Perbandingan watak tipe signed int dengan unsigned int dapat diperhatikan pada Gambar 2.1.


Memilih suatu tipe integer
     Dengan kekayaan tipe-tipe integer C++, yang mana yang harus anda pilih? Pada umumnya, programmer menggunakan tipe int daripada lainnya. Dari pengalaman empiris sering dibuktikan bahwa penggunaan int memiliki keuntungan-keuntungan tersendiri. Namun pemilihan suatu tipe integer tetap bergantung pada kebutuhan anda. Jika suatu variabel mewakili nilai-nilai yang tidak mungkin negatif, seperti karakter-karakter pada dokumen, maka anda bisa menggunakan versi unsigned; dengan cara seperti itu, variabel tersebut dapat merepresentasikan nilai yang lebih besar. Jika anda mengetahui bahwa variabel yang dideklarasikan akan mewakili nilai-nilai yang terlalu besar untuk integer 16 bit, maka anda sebaiknya menggunakan tipe long. Hal inipun memungkinkan meski lebar tipe int pada sistem anda 32 bit. Dengan cara itu, jika anda ingin memindahkan program anda ke sistem dengan tipe int 16 bit, program anda tidak mempermalukan anda karena gagal untuk dieksekusi. Hal ini dilukiskan pada Gambar 2.2.


Gambar 2.1 Watak overflow signed int dan unsigned int

Gambar 2.2 Portabilitas: Penggunaan long lebih aman untuk bilangan integer besar

Menggunakan short dapat menghemat memori, jika short lebih kecil daripada int. Hal ini biasanya berpengaruh pada pungganaan array integer yang berdimensi sangat banyak (array adalah suatu struktur data yang menyimpan data bertipe sama dan disimpan secara berurutan di dalam memori). Bahkan meskipun lebar short sama dengan int (pada sistem anda), jika tujuan anda adalah untuk menghemat memori, maka sebaiknya anda menggunakan short daripada int. 

Bayangkan jika anda memindahkan program anda dari sistem DOS dengan lebar int 16 bit ke sistem Windows XP dengan lebat int 32 bit, maka memori untuk variabel int menjadi berlipat ganda, sedangkan untuk short tetap. Tujuan anda untuk menghemat memori tercapai meski anda berpindah sistem. Jika anda membutuhkan hanya variabel 1 byte, sebaiknya anda menggunakan tipe char. Tipe ini akan dibahas sebentar lagi.

Konstanta-konstanta integer
Suatu konstanta integer adalah sesuatu yang anda tulis secara eksplisit, seperti 234, 0x23, atau 067. Seperti halnya C, C++ menyediakan tiga jenis basis bilangan untuk programmer: basis 10 (desimal, favorit semua orang), basis 8 (oktal, favorit UNIX), dan basis 16 (heksadesimal, favorit para hacker perangkat keras). C++ menggunakan dijit pertama atau kedua untuk mengidentifikasi basis bilangan pada konstanta yang anda tulis. Jika dijit pertama memiliki rentang 1 sampai 9, maka basis bilangan yang digunakan adalah basis 10 (desimal); jadi 97 adalah basis 10. Jika dijit pertama adalah 0, dan dijit kedua berada dalam rentang 1-7, maka basis yang dipakai adalah 8 (oktal); jadi 042 adalah oktal (34 desimal). Jika dua karakter pertama adalah 0x, maka basis yang dipakai adalah 16 (heksadesimal); jadi 0x42 adalah heksadesimal (66 desimal). Untuk nilai-nilai heksadesimal, karakter a sampai f dan A sampai F merepresentasikan nilai 10 sampai 15. Jadi 0xF adalah 15 (desimal) dan 0xA5 adalah 165 (sepuluh buah 16 ditambah 5). Berikut diberikan kode2.3.cpp untuk menjelaskan tiga jenis basis bilangan yang telah diterangkan.

//kode2.3.cpp
#include <iostream>

int main()
{
using namespace std;
int jogja = 42;     // konstanta integer desimal
int klaten = 0x42;  // konstanta integer heksadesimal
int salatiga = 042; // konstanta integer oktal
cout << "Nilai-nilai keteraturan berkendaraan:\n\n";
cout << "jogja = " << jogja << " (42 dalam desimal)" << "\n";
cout << "klaten = " << klaten << " (42 dalam heksadesimal)" << "\n";
cout << "salatiga = " << salatiga << " (42 dalam oktal)"<< "\n";

return 0;
}

Screenshot keluaran program kode2.3.cpp >


Perlu dicatat bahwa kode di bawah ini:

cout << hex; cout << oct;

tidak menampilkan apapun di layar. Hanya saja, kode di atas mengubah basis integer yang akan ditampilkan. Jadi manipulator hex dan oct adalah pesan untuk cout agar menampilkan basis integer yang diminta.


Bagaimana C++ menentukan tipe integer suatu konstanta?
Suatu deklarasi dalam program memberitahu C++ tentang tipe data atas suatu variabel tertentu. Tapi bagaimana dengan konstanta?. Kode berikut akan menggugah anda dengan gagasan yang dikandungnya.

cout << “Tahun : ” << 1977 << “\n”;

Apakah program menyimpan Tahun sebagai int, short, long, atau jenis integer lain?. Jawabannya adalah C++ menyimpannya dalam tipe int, kecuali jika ada alasan lain. Jika anda menggunakan suatu akhiran di belakang konstanta numeris yang anda masukkan, maka komputer akan menyimpannya selain dari tipe int.
Perhatikan beberapa akhiran berikut. Suatu akhiran l atau L di belakang suatu integer mengindikasikan bahwa konstanta tersebut akan disimpan dalam tipe long. Akhiran u atau U menyatakan konstanta tersebut bertipe unsigned int, dan akhiran ul atau UL menyatakan konstanta unsigned long. (Karena huruf kecil l mirip dengan angka 1, maka sebaiknya anda menggunakan akhiran huruf besar L). Sebagai contoh, pada suatu sistem yang menggunakan tipe int 16 bit dan tipe long 32 bit, konstanta 23400 akan disimpan dalam int 16 bit dan 23400L akan disimpan dalam long 32 bit. Demikian pula halnya dengan konstanta 23400LU atau 23400UL akan disimpan dalam tipe unsigned long.
Sekarang mari kita lihat berdasarkan besarnya suatu konstanta yang diberikan. C++ memberikan aturan untuk integer desimal sedikit berbeda dari integer heksadesimal dan oktal. (Ingat bahwa di sini desimal artinya basis bilangan 10, sama seperti heksadesimal basis 16 dan oktal basis 8). Suatu integer desimal tanpa akhiran direpresentasikan oleh tipe terkecil yang bisa menampung konstanta yang dimasukkan: dengan urutan int, long, atau unsigned long. Pada suatu sistem komputer dimana int 16 bit dan long 32 bit, 20000 direpresentasikan oleh tipe int, 400000 diwakili dengan long, dan 3000000000 diwakili dengan unsigned long.
Suatu integer heksadesimal atau oktal tanpa akhiran direpresentasikan oleh tipe terkecil yang bisa menampung konstanta yang dimasukkan: dengan urutan int, unsigned int, long, atau unsigned long. Pada sistem komputer yang sama, 40000 atau 0x9C40 akan direpresentasikan dalam unsigned int. Hal ini karena heksadesimal sering dipakai untuk menyatakan alamat memori, dimana secara intrinsik tidak bertanda (unsigned). Jadi tipe unsigned int daripada long lebih cocok untuk menyatakan alamat memori 16 bit.

Tipe char: Karakter dan integer kecil
Sekarang sudah waktunya kita mendiskusikan tentang tipe data terakhir: tipe char. Seperti yang mungkin anda telah tebak dari namanya, tipe char dimanfaatkan untuk menyimpan karakter, seperti huruf dan angka numeris. Sekarang setelah sejauh ini, telah diterangkan bahwa, menyimpan angka numeris adalah masalah sepele bagi komputer Namun untuk menyimpan karakter-karakter menjadi masalah lain baginya. Bahasa pemrograman memperlakukan karakter sebagai kode angka. Jadi, tipe char merupakan salah satu jenis tipe integer.
Telah dijamin bahwa tipe ini sanggup merepresentasikan seluruh simbol-simbol yang ada pada sistem komputer: huruf, angka, tanda-baca, dan sebagainya. Pada kebanyakan komputer, kesuluruhan simbol-simbol tersebut berjumlah kurang dari 256 karakter, jadi satu byte bisa merangkum keseluruhan mereka. Meskipun char sering digunakan untuk karakter, bukan berarti anda tidak bisa memakainya untuk integer (secara umum berukuran lebih kecil dari short).
Himpunan simbol yang paling banyak digunakan di Amerika Serikat adalah himpunan karakter ASCII (tertabulasi pada Tabel 2.2). Kode ASCII tersebut merepresentasikan simbol-simbol yang paling sering ditemui dalam dunia nyata. Sebagai contoh, 65 adalah kode untuk karakter A, dan 77 adalah kode untuk huruf M. Untuk alasan kenyamanan, buku ini menggunakan himpunan karakter ASCII di dalam contoh-contohnya.
Namun pada level implementasi, C++ menggunakan berbagai jenis kode tergantung hostnya, seperti EBCDIC (dilafalkan dengan “eb-se-dik”) merupakan himpunan kode yang digunakan pada komputer IBM. Karena kebutuhan masyarakat dunia yang semakin sarat dengan informasi, kode ASCI maupun EBCDIC tidaklah cukup untuk merepresentasikan semua simbol. C++ sendiri menyediakan tipe wide-character yang mampu mewakili himpunan karakter International Unicode yang himpunan kodenya lebih luas daripada yang dimiliki kode ASCII.





















Read More >>

Minggu, 05 Mei 2013

DASAR PEMROGRAMAN C++

Dasar Pemrograman C++
 
Pada bab ini, anda akan belajar tentang:
  • Bagaimana menciptakan program C++
  • Format umum suatu program C++
  • Direktif #include
  • Bagaimana memanfaatkan objek cout untuk menampilkan keluaran
  • Bagaimana menempatkan komentar dalam suatu program C++    
  • Bagaimana dan kapan menggunakan endl
  • Bagaimana mendeklarasikan dan menggunakan variabel
  • Bagaimana memanfaatkan objek cin untuk menerima masukan
  • Bagaimana mendefinisikan dan menggunakan suatu fungsi sederhana
     Ketika anda membangun rumah sederhana, anda membutuhkan fondasi dan tulangan baja yang kokoh. Jika rumah tersebut tidak memiliki struktur yang kokoh, maka dipastikan anda akan memiliki masalah dengan keretakan, goncangan, kelembaban, dan lain-lain. Demikian pula dengan ketika anda mempelajari suatu bahasa pemrogramaman, anda diwajibkan untuk memulainya dengan struktur yang sederhana terlebih dahulu kemudian bergerak maju untuk mempelajari hal yang lebih detil. Bab ini dimaksudkan untuk memberikan struktur essensial suatu program C++ kepada anda.


Permulaan C++
   Kita mulai dengan program sederhana untuk menampilkan suatu pesan. Kode 1.1.cpp menggunakan cout (diucapkan dengan “see-out”) untuk menampilkan karakter keluaran. Kode sumber tersebut memuat beberapa komentar kepada pembaca; dimulai dengan dua garis miring //, dimana kompiler akan mengabaikannya. C++ bersifat case sensitive sehingga karakter-karakter huruf besar akan dibedakan dengan huruf kecil. Sebagai contoh, jika anda mengganti cout dengan Cout atau COUT, maka kompiler akan menolak perintah ini dengan menampilkan pesan kompilasi bahwa anda menggunakan identifier atau pengenal yang tak dikenal. Ekstensi .cpp merupakan indikator bahwa program ditulis dengan program C++.

// kode1.1.cpp--menampilkan pesan
#include <iostream>                 // direktif PREPROSESSOR
int main()                          // header fungsi
{                                   // permulaan badan fungsi
using namespace std;

cout << "Ini pengalaman C++ ku yang pertama.";   // pesan yang akan ditampilkan
cout << endl;                       // memulai baris baru
cout << "Aku akan semangat belajar!" << endl;    // pesan lain yang dikeluarkan
return 0;                           // memberhentikan fungsi main()
}


Catatan Kompatibilitas
Jika anda menggunakan kompiler yang lebih tua, anda mungkin perlu menggunakan #include<iostream.h> sebagai pengganti #include<iostream>. Fungsi cin.get() digunakan untuk menampilkan keluaran program dalam suatu jendela yang tetap aktif terbuka sampai anda menekan tombol ENTER.

Screenshot tampilan program kode1.1.cpp

Elemen-elemen program

Berikut adalah elemen-elemen yang termuat dalam kode sumber kode1.1.cpp:
  • Komentar yang diawali dengan prefix //
  • Direktif preprosessor #include
  • Direktif using namespace
  • Header fungsi int main()
  • Badan fungsi yang diawali dengan { dan diakhiri dengan }
  • Perintah cout untuk menampilkan pesan
  • Perintah return untuk memberhentikan fungsi main()

Fungsi main()
Kode1.1.cpp mengandung struktur fundamental berikut ini:
int main()
{
  Statemen-statemen;
  return 0;
}

        Baris-baris kode di atas menyatakan fungsi main(), dan menjelaskan watak dan isi dari fungsi tersebut. Keseluruhan baris-baris kode tersebut membentuk definisi fungsi. Definisi ini memuat dua bagian: bagian pertama, int main(), adalah header fungsi, bagian kedua, yang diawali { dan ditutup dengan }, adalah badan fungsi. Pada Gambar 1.1 ditunjukkan illustrasi fungsi main() tersebut.


      Statemen adalah ekspressi C++ yang diakhiri dengan titik koma (;). Statemen akhir pada fungsi main() adalah statemen return untuk mengakhiri fungsi main().


Header fungsi sebagai antarmuka
      Saat ini hal penting yang telah dikemukakan sebelumnya yang perlu diingat adalah sintaks C++ mensyaratkan bahwa fungsi main() membutuhkan header fungsi: int main(). Pada umumnya, ketika suatu fungsi C++ diaktivasi, atau dipanggil oleh fungsi lain, header fungsi bertugas sebagai antarmuka antara fungsi tersebut dengan fungsi yang memanggilnya. Bagian sebelum nama fungsi disebut juga dengan tipe nilai balik fungsi; yang menjelaskan aliran informasi dari fungsi tersebut ke fungsi yang memanggilnya.
     Bagian yang terdapat di dalam kurung setelah nama fungsi disebut pula dengan daftar argument atau daftar parameter. Lebih jelasnya, dapat diperhatikan perbedaan beberapa header fungsi berikut ini:

int main()

   menyatakan bahwa fungsi main() menghasilkan nilai balik integer (bilangan bulat) dan memberikannya kepada fungsi yang memanggilnya. Dapat diperhatikan pula bahwa fungsi main() juga tidak mengambil informasi apapun dari fungsi yang memanggilnya.

int main(void)

    Varian header fungsi ini menggunakan tipe void. Hal ini berarti fungsi ini tidak mengambil argument apapun. Dalam C++ (bukan C), membiarkan argument kosong sama saja dengan mengisinya dengan tipe void.

void main()

      Beberapa programmer lebih suka menggunakan varian header fungsi ini tanpa memakai nilai balik. Hal ini berarti fungsi main() tidak menghasilkan suatu nilai apapun. Namun rekomendasi penulis adalah meskipun varian header fungsi seperti ini dapat berjalan normal pada beberapa hardware atau sistem, namun varian ini bukanlah standard C++ karena pada beberapa sistem yang lain akan mengalami kegagalan.


Kenapa semua program C++ harus diawali dengan fungsi main()?

      Yang paling ekstrim yang harus diingat adalah semua program c++ harus diawali dengan fungsi main(), bukan Main(), MAIN(), atapun maen(). Ingat bahwa C++ adalah bersifat case sensitive. Jika anda mengkompilasi suatu program C++, maka eksuksi selalu dimulai dari fungsi main(). Jika dalam program anda tidak memiliki fungsi main(), maka program anda belum sempurna dan oleh kompiler anda akan diminta untuk mendefinisikan fungsi main() yang dimaksud.

    Namun terdapat pengecualian seperti pada kasus pemrograman Windows dimana anda dapat menulis suatu modul DLL (dynamic link library). Karena modul DLL merupakan program yang tidak berdiri sendiri atau standalone, maka dia tidak membutuhkan fungsi main().


Komentar-komentar C++
       Ruang setelah tanda garis miring dua buah (//) merupakan ruang untuk menempatkan komentar C++. Komentar adalah catatan untuk pembaca program yang ingin mengidentifikasi seksi suatu program atau menjelaskan beberapa aspek dalam kode. Kompiler C++ mengabaikan komentar-komentar ini dan berarti bahwa dia tidak mampu memahami makna dari komentar-komentar yang diberikan.

      Anda sebaiknya memanfaatkan komentar bukan hanya untuk pembaca lain yang ingin memahami program anda, namun untuk mengingatkan anda kembali setelah anda tidak membaca program anda untuk beberapa waktu.


Preprosessor C++ dan file iostream
Berikut ini adalah salah satu varian preprosessor C++:

#include <ioatream>


Direktif  #include menyebabkan preprosessor C++ untuk menambahkan isi file iostream ke dalam program anda. Program anda membutuhkan sebaris kode ini agar fasilitas cin dan cout dapat digunakan.

Nama file header
Nama iostream adalah salah satu nama file header. Tradisi bahasa C mensyaratkan bahwa setiap nama file header harus diakhiri dengan ekstensi h. Namun pada perkembangannya, C++ tidak lagi menganjurkan penggunaan ekstensi tersebut. C++ menggunakan banyak sekali nama file header. Dua file header lain yang popular adalah math dan conio.



Gambar 1.2 Illustrasi penampilan string menggunakan cout


Menampilkan keluaran C++ dengan cout
Kode1.1.cpp menggunakan statemen berikut ini:

cout << "Ini pengalaman C++ ku yang pertama.";
    Bagian yang dibatasi oleh dua tanda kutip merupakan string yang akan ditampilkan. Notasi << mengindikasikan bahwa statemen tersebut mengirim string kepada cout. Illustrasi cout diberikan pada Gambar 1.2.



Token dan spasi kosong
     Elemen terkecil yang tak terpisahkan dalam suatu baris kode disebut juga dengan token. Pada umumnya anda harus memisahkan antara token yang satu dengan lainnya dengan spasi kosong. Beberapa karakter tunggal seperti titik koma, koma, dan kurung merupakan token yang tidak perlu dipisahkan dengan spasi kosong. Berikut ini adalah beberapa contoh dimana spasi kosong dapat digunakan dan kapan harus diabaikan.


return0;                  // SALAH, seharusnya return 0;
return(0);                // BENAR, spasi kosong dapat diabaikan
return (0);               // BENAR, spasi kosong dapat digunakan
intmain()                 // SALAH, spasi kosong diabaikan
int main();               // BENAR, spasi kosong diabaikan dalam ()
int main ( );             // BENAR, spasi kosong dalam ()



Gambar 1.3 Illustrasi token dan spasi kosong


Statemen C++
     Program C++ merupakan kumpulan fungsi-fungsi, sedangkan fungsi merupakan sekumpulan statemen-statemen. C++ memiliki beberapa jenis statemen. Kode1.2.cpp menyediakan dua jenis statemen. Pertama, statemen deklarasi untuk menciptakan variabel, kedua, statemen assignment atau penugasan untuk menyediakan nilai kepada variabel yang telah diciptakan.


// kode1.2.cpp -- program menghitung pisang_goreng
// menggunakan dan menampilkan variabel

#include <iotstream>
using namespace std;
int main()
{
int pisang_goreng;           // deklarasi variabel integer
pisang_goreng = 25;          // memberikan suatu nilai kepada variabel
cout << "Saya memiliki ";
cout << pisang_goreng;       // menampilkan nilai variabel
cout << " pisang goreng.";
cout << endl;
pisang_goreng = pisang_goreng - 1; // modifikasi variabel
cout << "Nyam, nyam. Sekarang saya memiliki " << pisang_goreng << " pisang_goreng." << endl;
return 0;
}

Screenshot keluaran kode1.2.cpp



Statemen deklarasi dan variabel
       Semua proses dalam komputer tertata dengan sempurna. Untuk menyimpan setiap helai informasi dalam komputer, anda tak perlu repot-repot mengidentifikasi lokasi penyimpanan dan jumlah ruang penyimpanan memori yang dibutuhkan. Dalam C++, untuk mengidentifikasi jenis penyimpanan dan menyediakan label untuk lokasi penyimpanan cukup dilakukan dengan statemen deklarasi. Seperti pada kode1.2.cpp yang memiliki statemen deklarasi berikut ini:


int pisang_goreng;

    Statemen ini mendeklarasikan bahwa program menggunakan penyimpanan yang cukup untuk menampung suatu variabel bertipe integer. Tipe data int dapat bernilai positif maupun negatif dan memiliki rentang nilai sesuai dengan implementasi program. Rentang nilai tipe int berada di antara -32.767 sampai 32.767. C++ memiliki berbagai tipe data dasar seperti int, short, char, long, double, dan float. Jenis-jenis tipe data ini akan dibahas pada bagian berikutnya.

    Disamping memberikan tipe data, statemen deklarasi juga memberikan nama variabel. Dalam kode1.2.cpp nama variabel tersebut adalah pisang_goreng. Kompiler menggunakan nama pisang_goreng untuk mengidentifikasi nilai yang disimpan pada lokasi memori dimana variabel pisang_goreng berada. pisang_goreng disebut sebagai suatu variabel karena anda dapat mengubah-ubah nilainya. Jika anda mengabaikan statemen deklarasi variabel pisang_goreng pada kode1.2.cpp, maka kompiler C++ akan merespon dengan melaporkan suatu kesalahan atau error kompilasi. Illustrasi statemen deklarasi variabel dapat dilihat pada Gambar 1.4.


Statemen assignment atau penugasan
     Statemen penugasan diperuntukkan untuk menugaskan suatu nilai ke suatu lokasi penyimpanan. Sebagai contoh statemen,

pisang_goreng = 25;
Gambar 1.4 Illustrasi statemen deklarasi variabel


     menugaskan nilai integer 25 ke lokasi penyimpanan yang diwakili oleh variabel pisang_goreng. Simbol sama dengan (=) disebut sebagai operator penugasan. Salah satu fitur istimewa yang dimiliki oleh C++ (dan C) adalah anda dapat menggunakan operator penugasan secara serial seperti kode berikut ini:
int pisang_goreng;
int singkong;
int nasi_kucing;
int ikan_mas;
pisang_goreng = singkong = nasi_kucing = ikan_mas = 75;


     Aliran nilai penugasan berlaku dari kanan ke kiri. Pertama, nilai 75 ditugaskan ke variabel ikan_mas, kemudian nilai ikan_mas, yang saat ini bernilai 75, diberikan ke variabel nasi_kucing, dan seterusnya. Statemen penugasan kedua yang terdapat pada kode1.2.cpp adalah
pisang_goreng = pisang_goreng - 1;
      Ekspressi pada bagian sebelah kanan operator penugasan adalah contoh aritmatika. Komputer akan melakukan pengurangan nilai variabel pisang_goreng, 25-1, menjadi 24 yang disimpan kembali ke variabel pisang_goreng.

Contoh lain statemen-statemen C++ 
//kode1.3.cpp
#include <iostream>
int main()
{
using namespace std;

int pisang_goreng;
cout << "Ada berapa pisang goreng anda punya?" << endl;
cin >> pisang_goreng;                             // masukan C++
cout << "Ini ada dua lagi. "; pisang_goreng = pisang_goreng + 2;
// baris berikutnya menggabungkan keluaran
cout << "Sekarang anda punya " << pisang_goreng << " pisang goreng." << endl;

return 0;
}


     Program di atas memiliki dua fitur: penggunaan cin untuk membaca masukan dari papan ketik (keyboard) dan penggabungan empat statemen keluaran menjadi satu. Selanjutnya akan dijelaskan lebih detil.

Screenshot keluaran program kode1.3.cpp


Penggunaan cin
      Kode1.3.cpp mendemonstrasikan nilai yang diketikkan pada papan ketik (13) ditugaskan kepada variabel pisang_goreng. Statemen berikut ini melakukan penugasan tersebut. 

cin >> pisang_goreng; 

        Melihat statemen ini, dapat disimpulkan bahwa aliran informasi mengalir dari cin ke variabel pisang_goreng. File header iostream mendefinisikan cin sebagai objek yang merepresentasikan aliran informasi ini. Jika cout menggunakan operator << yang dipakai untuk menyisipkan karakter-karakter dalam aliran informasi untuk ditampilkan, cin menggunakan operator >> untuk mengekstrak karakter-karakter dari aliran informasi tersebut. Dalam kasus ini, program mendeklarasikan variabel pisang_goreng bertipe integer, jadi cin mengekstrak karakter-karakter yang diketikkan dan mengubahnya menjadi bilangan bulat yang disimpan pada lokasi penyimpanan.

Penggabungan dengan cout
       Fitur kedua yang dimiliki kode1.3.cpp adalah penggabungan statemen keluaran dengan cout. File header iostream mendefinisikan operator << sehingga anda dapat mengkombinasikan keluaran sebagai berikut.

cout << "Sekarang anda punya " << pisang_goreng << " pisang goreng." << endl; 

     Hal ini memungkinkan anda untuk menggabungkan keluaran string dengan keluaran integer dalam satu statemen. Jika diurai, statemen di atas dapat dibagi menjadi 

cout << "Sekarang anda punya ";
cout << pisang_goreng ;
cout << " pisang goreng.";
cout << endl;

       Jika masih ingin memanipulasi statemen penggabungan ini, berikut ini masih bisa dilakukan yang akan menghasilkan keluaran yang sama.

cout << "Sekarang anda punya "
<< pisang_goreng
<< " pisang goreng."
<< endl;


Fungsi
       Karena fungsi-fungsi merupakan modul-modul yang membentuk program C++ dan sangat penting dalam pemrograman berorientasi objek, maka anda harus familiar dengan mereka. Fungsi-fungsi C++ dibagi menjadi dua jenis: pertama, mereka yang menghasilkan nilai balik, dan yang lainnya adalah mereka yang tidak memerlukan nilai balik. Anda dapat melihat contoh tiap jenis fungsi pada pustaka standard C++ dan anda juga bisa menciptakan kedua jenis fungsi tersebut secara mandiri.

x = sqrt(6.25); // menghasilkan nilai 2.5 yang ditugaskan kepada variabel x

           Ekspressi sqrt(6.25) memanggil fungsi sqrt(). Ekspressi sqrt(6.25) disebut sebagai pemanggilan fungsi, sqrt() disebut sebagai fungsi yang dipanggil, dan fungsi yang didalamnya memuat pemanggilan fungsi disebut fungsi pemanggil. Hal ini dilukiskan pada Gambar 1.5. 

Gambar 1.5 Proses pemanggilan suatu fungsi

          Nilai yang ada di dalam kurung (dalam hal ini 6,25) adalah informasi yang dikirim atau dilewatkan ke fungsi. Suatu nilai yang dilewatkan ke suatu fungsi disebut juga dengan parameter atau argument (lihat Gambar 1.6).

       Fungsi sqrt() menemukan jawaban sebesar 2,5 dan mengirim kembali nilai yang didapat kepada fungsi pemanggil. Suatu nilai yang dikirim kembali ke fungsi pemanggil disebut sebagai return value atau nilai balik. Hemat kata bisa dikatakan bahwa argument adalah informasi yang dikirim ke suatu fungsi dan nilai balik adalah nilai yang dikirim kembali ke fungsi pemanggil. Untuk lebih jelasnya, dapat diperhatikan pada Gambar 1.6.

     Prototipe fungsi dimaksudkan untuk mendeklarasikan fungsi, sama seperti pendeklarasian variabel. Hal ini menceritakan jenis fungsi yang ada. Sebagai contoh, pustaka C++ mendefinisikan fungsi sqrt() untuk mengambil argument sebuah bilangan pecahan dan menghasilkan nilai balik dengan tipe data pecahan (double). Prototipe fungsi sqrt() dituliskan sebagai berikut. 

Gambar 1.6 Sintaks panggil fungsi

double sqrt(double);      // prototipe fungsi

Kata double sebelum nama fungsi sqrt menyatakan bahwa fungsi sqrt() akan menghasilkan nilai balik bertipe double atau bilangan pecahan. Kata double yang ada di dalam kurung sqrt() menyatakan bahwa fungsi tersebut memerlukan argument bertipe double pula. Jadi prototipe ini mendeskripsikan sqrt() sesuai dengan kode berikut ini.

double x;             // deklarasi x sebagai variabel bertipe double
x = sqrt(6.25);

Berikut adalah salah satu implementasi fungsi sqrt() untuk menghitung akar kuadrat atas suatu nilai.

//kode1.4.cpp
#include <iostream>
#include <math>

int main()
{
using namespace std;

double luas;
cout << "Masukkan luas suatu tempat, dalam meter persegi: ";
cin >> luas;

double sisi;
sisi = sqrt(luas);
cout << "Ini ekivalen dengan bujursangkar dengan panjang sisi " << sisi << " meter." << endl;
cout << "Tidak sulit kan!" << endl;
return 0;
}


Variasi-variasi fungsi
      Sebagian fungsi memerlukan lebih dari satu argument. Argument-argument ini dipisahkan dengan koma. Sebagai contoh, fungsi matematika pow() memerlukan dua argument dan memberikan nilai balik sebesar argument pertama yang dipangkatkan dengan argument kedua. Fungsi tersebut memiliki prototipe sebagai berikut: 

double pow(double, double); // prototipe suatu fungsi dengan dua argument 

Screenshot keluaran program kode1.4.cpp

Jika anda ingin menghitung 4^6, maka anda bisa menggunakan fungsi ini sebagai berikut:

jawaban = pow(4.0, 6.0); // panggil fungsi dengan dua argument

Sementara itu, ada pula fungsi yang tidak memerlukan satu argument pun. Salah satu fungsi dari pustaka C adalah rand() yang tidak memerlukan argument dan yang menghasilkan keluaran bilangan acak bertipe integer. Prototipe fungsi tersebut adalah sebagai berikut:

int rand(void); // prototipe suatu fungsi tanpa argument

Katakunci void menyatakan bahwa fungsi rand() tidak memerlukan argument. Jika anda mengabaikan void dan membiarkannya kosong, maka kompiler C++ menginterpretasikannya sebagai fungsi tanpa argument. Anda bisa menggunakan fungsi ini seperti di bawah ini.

tebakan = rand(void); // panggil fungsi tanpa argument

Ada juga fungsi yang tidak menghasilkan nilai balik. Misalnya fungsi yang bertugas hanya untuk menampilkan suatu nilai pada layar monitor. Jenis fungsi seperti ini memiliki prototipe dengan kata kunci void.

void = tampil(double); // prototipe fungsi tanpa menghasilkan nilai balik

Fungsi-fungsi yang didefinisikan sendiri oleh user
Pustaka C memiliki lebih dari 140 fungsi. Jika sesuai dengan kebutuhan anda, anda bisa memakainya. Namun dalam banyak kasus, anda harus membuat fungsi sendiri untuk menyelesaikan masalah komputasi anda. Berikut ini salah contoh fungsi buatan sendiri (tidak ada dalam pustaka C/C++).

//kode1.5.cpp
#include<iostream>
void irwan(int);                      // prototipe fungsi irwan()
int main()
{
using namespace std;
irwan(3);                             // panggil fungsi irwan()
cout << "Pilih satu integer: ";
int ulang;
cin >> ulang;
irwan(ulang);                         // panggil irwan() kembali
cout << "Selesai!" << endl;
return 0;
}
void irwan(int n)                     // definisi fungsi irwan()
{ cout << "Irwan mengatakan sit-up " << n << " kali." << endl;
}                                     // fungsi void tidak memerlukan nilai balik

Fungsi main() memanggil fungsi irwan() dua kali, yang pertama dengan argument 3 dan yang kedua dengan argument variabel ulang. Program tersebut juga memasukkan variabel ulang dari pengguna.

Screenshot keluaran program kode1.5.cpp

Format fungsi
Definisi fungsi irwan() pada kode1.5.cpp mengikuti format yang sama dengan fungsi main(). Pertama, terdapat header fungsi. Kemudian, yang diapit oleh {}, terdapat tubuh fungsi. Anda dapat mengeneralisasi format suatu fungsi sebagai berikut:

tipe nama_fungsi(daftar_argument)

   statemen-statemen; 
}

Adapun definisi-definisi fungsi berurutan dalam satu file diillustrasikan pada Gambar 1.7.

Header fungsi
Fungsi irwan() pada kode 1.5.cpp memiliki header:

void irwan(int);

Kata void berarti fungsi irwan() tidak menghasilkan nilai balik. Jadi pemanggilan fungsi irwan() tidak menghasilkan suatu nilai yang bisa ditugaskan ke suatu variabel di dalam fungsi main(). Pemanggilan fungsi yang pertama adalah: 

irwan(3); // valid untuk fungsi bertipe void 

Karena fungsi irwan() tidak menghasilkan nilai balik, maka anda tidak bisa melakukan hal berikut ini:

dompu = irwan(3); // tidak valid untuk fungsi bertipe void


Gambar 1.7 Definisi-definisi fungsi-fungsi berurutan di dalam suatu file

Kesimpulan
Program C++ memiliki satu atau lebih modul yang disebut dengan fungsi. Program memulai eksekusi diawali dengan fungsi bernama main() (semua huruf kecil), jadi pastikan anda memiliki nama fungsi ini di dalam program anda. Suatu fungsi terdiri-dari header dan tubuh. Header fungsi menceritakan tentang tipe data dari nilai balik yang dihasilkan. Tubuh suatu fungsi terdiri-dari statemen-statemen C++ yang diapit oleh kurung kurawal {}. Ada beberapa jenis statemen di dalam C++ yaitu:
  • Statemen deklarasi: statemen deklarasi yang menjelaskan nama dan tipe variabel yang digunakan dalam suatu fungsi.
  • Statemen penugasan: statemen penugasan menggunakan operator sama dengan (=) untuk menugaskan suatu nilai ke suatu variabel.
  • Panggil fungsi: Pemanggilan fungsi yang mengaktivasi suatu fungsi. Ketika fungsi yang dipanggil berhenti, maka program kembali ke statemen berikutnya di dalam fungsi pemanggil.
  • Prototipe fungsi: Suatu prototipe fungsi mendeklarasikan tipe suatu fungsi, berikut dengan jumlah dan tipe argument yang dimiliki fungsi tersebut.
  • Statemen balik: Suatu statemen balik mengirim kembali nilai yang dihasilkan oleh fungsi yang dipanggil kepada fungsi yang memanggil.






Read More >>