Nov 14

Pernyataan While Pada C++

Pernyataan while dipakai untuk mengulang eksekusi dari suatu blok penyataan yang jumlah ulangannya tergantung dari kondisi yang diberikan, sejauh kondisiya true maka ulangan eksekusi dari blok tersebut terus dilakukan. Format dari pernyataan while adalah :

while (kondisi)

{

pernyataan;

.

.

.

}

Kondisi adalah syarat yang dipakai untuk mengakhiri ulangan eksekusi dari blok dalam pernyataan while tersebut. Kondisi ini umumnya menggunakan operator-operator relasional, bila kondtsf-nya lebih dari satu maka antara koridisi yang satu dan lainnya dihubungkan dengan operator-operator logic. Kedua program di bawah ini mencetak nilai dari bilangan bulat i bila kondisi  i < 9 adalah true. Perhatikan effek pemakaian prefix dan posfix operator pada variabel i.

//C1_3.CPP

/* Prefix increment while-loop

Output : 12345678       */

 

#include <iostream.h>

 

main()

{

int i = 0;

while (++i < 9)

cout << i;

return 0;

}

 

 

//C2_3.CPP

/* Postfix increment while-loop

Output : 123456789      */

 

#include <iostream.h>

 

main()

{

int i = 0;

while (i++ < 9)

cout << i;

return 0;

}

Perhatikan bahwa kondisi di dalam pernyataan while dianggap true bila hasil evaluasinya tidak sama dengan nol seperti ditunjukkan oleh program di bawah ini.

//C3_3.CPP

/* Finite while-loop

Output: 876543210      */

 

#include <iostream.h>

 

main()

{

int i = 9;

 

while (i–)

cout << i;

return 0;

}

Nov 12

Operator Logik Untuk Manipulasi Bit Pada C++

Operator logik yang dipakai dalam C++ adalah :

Simbol

Operasi

&

AND

|

OR

^

Exclusive OR

<<

Shift left

<<

Shift right

~

One’s complement

Operator-operator logic ini melakukan manipulasi bit pada data integer atau character. Karena yang dimanipulasi adalah bit maka lebih enak kalau contoh contoh berikut ini dikonversi dari sistem bilangan desimal, yaitu sistem bilangan berbasis 10, ke sistem bilangan biner, yaitu sistem bilangan yang berbasis 2. Konversi dari sistem bilangan desimal ke sistem bilangan biner lebih mudah kalau dilewatkan sistem bilangan heksadesimal (berbasis 16) dulu. Program berikut ini memakai sebagian dari operator-operator di atas.

// C7_2.CPP

#include <iostream.h>

 

main()

{

int x1 = 67&63;

int x2 = 67 | 63;

int x3 = ~128 & 255;

int x4 = 9^5;

 

// Bitwise AND

cout << x1 << “\n”;

 

//Bitwise OR

cout << x2 << “\n”;

 

// Bitwise Complement

cout << x3 << “\n”;

 

// Bitwise XOR

cout << x4;

return 0;

}

Operator &

Suatu pernyataan :  67 & 63 dapat dikonversi dan diproses sebagai berikut:

Operator |

Suatu pernyataan :  67 | 63 dapat dikonversi dan diproses sebagai berikut:

Operator ~

Yang dirnaksud dengan one’s complementing adalah melakukan pembalikan dari bit,misal: 12810 =  00000000100000002 jika semua bit dibalik menjadi:

~12810 = -12910 = 11111111011111112. Kita dapat membatasi outputnya menjadi 8 bit saja dengan melakukan AND masking dengan & 00000000111111112 yaitu & 225.

Suatu pernyataan :  -128 & 255 dapat dikonversi dan diproses sebagai berikut:

Operator ^

Suatu pernyataan :  9 ^ 5 dapat dikonversi dan diproses sebagai berikut:

Operator << dan >>

Operator << melakukan pergeseran posisi bit kekiri dari operan sebelah kiri sebanyak yang ditunjukkan oleh operan kanan. Pada setiap proses pergeseran sebelah kanan diisi nol, misalnya: 12 << 310 menjadi 10002 = 810. Operator >> berlaku sebaliknya.

Unary & Operator

Unary & operator dipakai untuk menyatakan suatu reference. Dalam C++ suatu reference dapat dipandang sebagai alias dari suatu variabel. Pada waktu suatu reference dideklarasi, biasanya diasosiasikan dengan suatu variabel sehingga reference ini secara permanen berasosiasi dengan variabel tersebut, keadaan ini tidak dapat diubah misalnya merubah reference tersebut untuk menjadi alias dari suatu variabel yang lain. Contoh program berikut ini mendeklarasi suatu bilangan bulat bemama inl_sebenarnya dan membentahu komputer bahwa intj sebenaniya mempunyai nama lain yaitu int_aliwnya. Juga ditunjukkan bahwa operas; pada salah satunya akan berakibat sama pada yang satunya lagi.

//C8_2.CPP

#include (iostream.h>

 

main()

{

int int_sebenarnya = 123;

int &int_aliasnya = int_sebenarnya;

 

cout << ‘\n’ << int_sebenarnya;       //123

cout << ‘\n’ << int_aliasnya;          // 123

 

int_aliasnya++;

cout << ‘\n’ << int_sebenarnya;       // } 124

cout << ‘\n’ << int_aliasnya;          // 124

 

int_sebenarnya++;

cout << ‘\n’ << int_sebenarnya;      //125

cout << ‘\n’ << int_aliasnya;          // 125

 

// Cetak alamat-alamatnya

cout << ‘\n’ << &int_sebenarnya << “  ”

<< &int_aliasnya;

}

Perlu diperhatikan bahwa :

  • suatu  reference  bukan  duplikat  dari  variabel  yang  diasosiasikan  dengan  reference tersebut. Program di atas menunjukkan keduanya mempunyai alamat yang sama.
  • pemakaian unary & operator tergantung pada konteknya. Pada deklarasi dari variabel inl_al.iawya, unary & operator adalah bagian dari tipe variabel int_aliasnya, yaitu variabel ml_aliasnya mempunyai tipe int & atau reference ke suatu int. Pada pernyataan cout, unary & operator dipakai untuk mendapatkan alamat yang diasosiasikan dengannya.
Nov 12

Operator ++ dan — Pada C++

Operator penaikan (++) dan operator penurunan (–) rnemungkinkan cara singka untuk menaikkan atau menurunkan nilai dari suatu variabel. Pemakaian operator ++ dan — sangat menguntungkan karena selain kompak juga mempercepat eksekusi dari program.

Operator ++ dan — dapat ditempatkan sebelum atau sesudah suatu variabel, Operator ++ dan — ini disebut prefix operator bila ditempatkan sebelum variabel dan disebut postfix bila ditempatkan sesudah variabel. Tabel di bawah ini menunjukkan penambahan dan pengurangan 1 terhadap satu variabel.

Operator

Contoh

Deskripsi

Pernyataan yang ekivalen

++ J++; posfix j = j + 1;                       j += 1;
++ ++j; Prefix j = j + 1;                       j += 1;
j–; postfix j = j – 1;                        j  -= 1;
–j; prefix j = j – 1;                        j -= 1;

Perhatikan bila operator ditempatkan sebelum suatu variabel maka variabel tersebut dinaikan atau diturunkan nilainya sebelum dipakai, jadi nilai variabel tersebut akan ditambah atau dikurangi sebelum dipakai, misalnya:

x=1;

y = ++x;

hasilnya adalah x = 2 dan y = 2, sedangkan:

x = 1;

y = x++;

hasilnya adalah x = 2 dan y = 1. Pemahaman order of precedence sangat penting dalam

memahami ekpresi yang mengandung operator ++ dan –, misalnya:

int I = 1;

int j = 2;

int k = 3;

Setelah dievaluasi maka x = 1 dan k = 2, contoh yang lain:

int  i = 0;

int  j = -1;

int   k = 0;

int  i = 1;

Nov 12

Operator Logik Pada C++

Operator logik yang dipakai dalam C++ adalah :

Prioritas

Simbol

Operator

1

!

Not

2

&&

And

3

II

Or

Operator logik dalam C++ memungkinkan kita melakukan beberapa tes secara. Simultan dalam pernyataan while atau if-elsc. Tabel di atas menunjukkan, selain operator-operator logik dalam C++,juga prioritas rankingnya. Operator not (!) mempunyai prioritas di bawah tanda kurung dan di atas operator aritmatik. Dua operator logik yang lain, yaitu and (&&) dan or (||), mempunyai prioritas di bawah operator relasional dan di atas operator assignment. Misal kita ingin melakukan dua atau lebih tes secara simultan maka masing-masing kondisi dapat digabung dengan operator logik. and sebagai berikut:

if(test_l  && test_2 && test3 .,.)

Kalau kita ingin salah satu atau kombinasi dari suatu grup untuk membuat suatu tes menghasilkan true maka masing-masing kondisi dapat digabung dengan operator logik or sebagi berikut:

if(test  1  || test 2  || test3 …)

Konsep di atas dapat dijelaskan lewat contoh program ini:

// C5_2.CPP

#include <iostream.h>

 

main ()

{

 

int a=2, b=4;

if (a ==2  && b==4)

cout << “(a==2 && b=4) adalah true” << “\n”;

else

cout << “(a==2 && b=4) adalah false” << “\n”;

if (a ==3 && b==4)

cout << “(a==3 && b=4) adalah true” << “\n”;

else

cout << “(a==3 && b=4) adalah false” << “\n”;

if (a ==3 || b==4)

cout << “(a==3 || b=4) adalah true” << “\n”;

else

cout << “a==3 || b=4) adalah false” << “\n”;

if (a ==3 || b ==5)

cout << “(a==3 || b=5) adalah true” << “\n”;

else

cout << “(a==3 || b=5) adalah false” << “\n”;

}

Operator not yang mendahului suatu kondisi tes akan membalik hasil tes tersebut, misalnyajika a adalah true maka !a adalah false atau jika a adalah false maka !a adalah true.

C++ adalah bahasa yang effisien. Jika beberapa tes-relasional digabung dengan operator-operator logik, C++ tidak selalu mengevaluasi ekpresi gabungan ini secara penuh, Langkah ini diambil supaya program dapat berjalan lebih cepat tapi juga ada bahayanya misalnya:

if ((5 > 4) || (penjualan < 15) && (15 != 15)) …

C++ hanya melihat kondisi yang pertama saja yaitu (5 > 4). Karena (5 > 4) adalah true dan karena true || selalu menghasilkan true maka C++ akan mengabaikan kondisi-kondisi yang lain. Kadang-kadang kita. terpaksa memecah suatu pemyataan if yang kompiek menjadi beberapa pemyataan if yang lebih sederhana untuk memastikan masing-masing kondisi yang ada pada pemyataan if yang kompiek tersebut dievaluasi.

Nov 12

Operator Relasional Pada C++

Operator relasional yang dipakai dalam C++ adalah :

<     Lebih kecil dari

<=   Lebih kecil atau sama dengan

>     Lebih besar dari

>=   Lebih besar atau sama dengan

==   Sama dengan

!=    Tidak sama dengan

Operator-operator relasional di atas adalah opeator biner yang fungsinya melakukan tes pada hubungan diantara kedua operannya, Hasil tes ini adalah true atau false, misalnya :

(5 > 2)

hasilnya adalah true, sedangkan:

(2>5)

hasilnya adalah false.

Operator relasional dipakai dengan pernyataan-pernyataan while dan if-else untuk melakukan tes pada suatu kondisi. Pada suatu while-loop, suatu blok yang terdiri dari banyak pernyataan akan dieksekusi berulang-ulang asalkan hasil tesnya true, misalnya:

n=10;

while (n > 0)

{

cout << n;

n = n – 1;

}

C++ akan mengganti hasil tes yang true dengan 1 dan yang false dengan 0, jadi untuk  while-loop di atas, keputusan untuk mengulang loop atau keluar dari loop tergantung dari hasil tes yang dapat 1 atau 0, C++ akan memperlakukan bilangan yang tidak sama dengan nol sebagai true sehingga penggalan program tadi dapat ditulis:

n= 10;

while (n)

{

cout << n;

n = n – 1;

}

Sedangkan untuk pernyataan if-clse, hasil tes yang memutuskan blok mana yang dieksekusi, misalnya :

x=1;
y=2;

if ( x == y )

cout << “x sama dengan y “;

else

cout << “x tidak sama dengan y”;

Operator yang dipakai dalam pernyataan if-else adalah operator sama dengan (==), bukan operator assignment (=), misal penggalan program di atas ditulis:

x=1;
y=2;

if ( x = y )

cout << “x sama dengan y “;

else

cout << “x tidak sama dengan y”;

berarti nilai dari variabel y, karena kesalahan pemakaian operator, ditempatkan di variabel x, sehingga tes pada pemyatan  if akan menghasilkan 2, yang diartikan true oleh C++ sehingga pada layar akan tercetak “x sama dengan y”, Hasil ini sudah tentu tidak benar, kalau pemakaian operatornya benar yaitu (x == y) maka nilai variabel x akan dibandingkan dengan nilai variabel y, hasilnya adalah false atau 0 sehingga pada layar akan tercetak “x tidak sama dengan y”.

Order of precedence dari operator-operator relasional ini lebih rendah dari operator-operator aritmatik tetapi lebih tinggi dari operator assignment sehingga ekpresi :

z == y – 1    adalah sama dengan  z == (y – 1)

sehingga variabel z akan dibandingkan dengan variabel (y-1). Contoh ekpresi lain:

z == x * x == y adalah sama dengan     z = (x *x == y)

disini  (x * x === y) menghasilkan true atau false dan hasilnya disimpan dalam variabel   z  jadi variabel  z mempunyai nilai true atau false. Contoh yang lain lagi:

x == y != z   adalah sama dengan ((x == y) \= z)

tidak sama dengan (x == (y != z)

karena assosiativitas dari operator-operator relasional adalah dari kiri ke kanan. Contoh pemakaian ekpresi yang terakhir ini adalah sebagai berikut:

// C4_2.CPP

#include <iostream.h>

 

main ()

{

int x = 2, y = 2, z = 0;

if(x==y !=z)

cout << “true \n”;

else

cout << “false \n”;

}

Nov 12

Operator Aritmatik Pada C++

Operator aritmatik yang dipakai dalam C++ adalah :

+          tambah

-          kurang

*           kali

/           bagi

%         modulus

Operator-operator di atas dikenal sebagai binary operators artinya operator-operator ini memerlukan dua operan. Operator +, -, * dan / telah jelas artinya, yang perlu dijelaskan adalah operator modulus (%), operator ini dipakai untuk mencari sisa dan pembagian antar bilangan bulat, misalnya 20 % 8 menghasilkan 4 karena sisa pembagian dari 20 dibagi 8 adalah 4. Operator + dan – dapat dipakai sebagai unary operator, artinya operator-operator  ini hanya memerlukan satu operan saja. Suatu variabel dapat dinyatakan positip atau negatip dengan unary operator + atau -, misalnya:

a = -25;

b = +25;

c = -a+b;    .

Suatu ekpresi dapat mengandung lebih dari satu jenis operator, C++ mengartikannya berdasar order of precedence dari operator-operator tersebut. Order of precedence dari operator menunjukkan hirarki matematis dari suatu operator misalnya:

2 + 3 * 2;

C++ akan menghitung 3*2 dulu karena operator kali (*) hirarkinya lebih tinggi dari operator + sehingga ekpresi di atas hasilnya adalah 8, bukan 10. Untuk operator aritmatik order of precedence-nya yang tinggi adalah kali (*), bagi (/) dan modulus (%) sedang yang rendah adalah tambah (+) dan kurang (-),Jadi C++ selalu melakukan kali, bagi dan modulus lalu diikuti tambah dan kurang. Operator-operator dalam C++ terdistribusi dalam 15 hirarki precedence yang dapat dilihat pada tabel di bawah ini.

Tabel Precedence dari Operator dalam C++

Precedence Level

Symbol

Description

Associativity

1

++

Prefex increment Left to right

Prefex decrement

()

Function call and subexpression

[]

Array subscript

->

Structure pointer

.

Structure member
2

!

Logical negation Right to left

~

1’s complement

-

Unary negation

+

Unary plus

(type)

Type cast

*

Pointer  deference

&

Address of

Sizeof

Size of
3

*

Multiplication Left to right

/

Division

%

Modulus
4

+

Addtion Left to right

-

Subtraction
5

<<

Bitwise left shift Left to right

>>

Bitwise right right shift
6

<

Less than Left to right

<=

Less than or equal to

>

Greater than

>=

Greater than or equal to
7

==

Equal test Left to right

!=

Not equal to
8

&

Bitwise AND Left to right
9

^

Bitwise exclusive OR Left to right
10

|

Bitwise inclusive OR Left to right
11

&&

Logical AND Left to right
12

||

Logical inclusive OR Left to right
13

?:

Conditional test Left to right
14

=

Assigment Left to right

+=

Compound add

-=

Compound substract

*=

Compound multiply

/=

Compound divide

%=

Compound modulus

<<=

Compound bitwise left shift

>>=

Compound bitwise right shift

&=

Compound bitwise AND

^=

Compound bitwise exclusive OR

|=

Compound bitwise inclusive OR
15

,

Sequence point Left to right

++

Postfix increment

Postfix decrement

Berdasar table of precedence di atas assignment berlipat banyak dapat dimengerti dengan mudah, misalnya :

       A = b = c = d = e = 100;

dalam hal ini assosiativitasnya adalah dari kanan ke kin, jadi 100 dipasangkan di variabel e, lalu dari variabel  e  ke variabel  d  demikian seterusnya sampai akhirnya  n, sehingga setelah selesai dieksekusi variabel-variabel a, b, c, d, e mempunyai nilai 100. Bahkan kita dapat menulis ekpresi sebagai berikut :

       x = 5 + (y = 9 – z);

Order of precedence dari operator dapat di bypass dengan tanda kurung,karena tingkatan precedence dari tanda kurung adalah di atas operator kali, bagi dan modulus sehingga ekpresi tadijika ditulis (2+3)*2 akan menghasilkan 10. Contoh lain adalah :

Contoh program berikut ini menjelaskan pemakaian tanda kurung untuk mencari rata-rata:

//C1_2.CPP

#include <iostream.h>

#include <iomanip.h>

 

main()

{

float nilai_1, nilai_2, nilai_3, rata2;

nilai_1 = 85.0;

nilai_2 = 80.0;

nilai_3 = 75.0;

// rata2 = nilai_1 + nilai_2 + nilai_3 / 3.0;

/* Perhatikan tanda kurung diperlukan untuk mengubah

order of precedence supaya rata-ratanya benar */

rata2 = (nilai_1 + nilai_2 + nilai_3) / 3.0;

cout << “Rata-rata nilai adalah : ” << setprecision(2) << rata2;

return 0;

}

Operator-operator aritmatik ini dapat digabungkan untuk membentuk operator gabungan (compound operator). Dari tabel of precedence tampak bahwa tingkatan precedence dari operator gabungan ini rendah sehingga pada suatu ekpresi yang mengandung banyak operator, operator gabungan ini pada umumnya dievaluasi pada saat-saat akhir.  Contoh pemakaian operator gabungan:

Operator

Contoh

Ekivalen

+= bonus += 500; bonus = bonus + 500;
-= budget -= 50; budget = budget •- 50;
*= gaji *= 1.2; gaji=gaji * 1.2;
/= faktor/= 50; faktor= faktor/.50;
%=  jml_hari %=7; jml_hari =jml_hari % 7;

Contoh program berikut ini akan memperjelas pengertian mengenai operator gabungan dan tingkatan precedence nya.

// C2_2.CPP

#include <iostream.h>

main()

{

int i  = 4;

int j  = 8;

int k = 12;

int jwb;

jwb = I + j;

cout << jwb << “\n”;      //12

jwb += k;

cout << jwb << “\n”;      //24

jwb /= 3;

cout << jwb << “\n”;      //8

jwb -= 5;

cout << jwb << “\n”;      //3

jwb *= 2;

cout << jwb << “\n”;      //6

jwb %= 4;

cout << jwb << “\n”;      //2

//  Order of precedence berpengaruh

jwb *= 5+3;

cout << jwb << “\n”;      //16

jwb += 4-2;

cout << jwb << “\n”;      //18

return 0;

}

Pada suatu ekpresi dalam C++ tipe data tidak harus sama. Kalau suatu bilangan bulat ditambah dengan suatu bilangan pecahan maka C++ akan mengkonversi tipe yang lebih kecil ke tipe yang lebih besar. Konversi ini, yang hanya bersifat sementara pada saat ekpresi dievalusi saja, pada umumnya akan memberikan hasil yang lebih teliti. Jika konversi dilakukan sebaliknya maka terjadi pemotongan pada tipe data yang lebih besar sehingga mengurangi ketelitian. Konversi yang bersifat otomatis ini dapat di bypass dengan type casting, yaitu kita memaksa compiler untuk mengkonversi menjadi tipe data yang kita inginkan. Tipe data yang di type cast ini berubah menjadi tipe baru hanya pada saat ekpresi dievaluasi, jadi sifatnya sementara. Format dari suatu type cast adalah:

(tipe data) ekspresi

dalam hal ini tipe data adalah tipe data yang ada di C++, dan  ekspresi dapat berupa variabel, konstanta atau kombinasinya. Program berikut ini memakai suatu type cast untuk menghitung bunga pinjaman.

// C3_2.CPP

#include <iostream.h>

#include <iomanip.h>

main ()

{

int      jml_hari =45;

float   jml_pinjaman = 2000000.00;

float    bunga_tahunan =0.155;

float   bunga_harian, bunga_pinjaman;

 

// Type cast jumlah hari dalam 1 tahun menjadi tipe float

bunga_harian = bunga_tahunan / (float)365;

//Karena jml_hari adalah integer, konversikan menjadi float

bunga_pinjaman =jml_pinjaman * bunga_harian * (float)jml_hari;

 

jml_pinjaman += bunga_pinjaman;

 

cout << “Total liutang anda adalah ”

<< setioflags(ios::fixed) << setprecision(2)

<<jml_pinjaman;

return 0;

}

Nov 12

Tipe Data Pada C++

Variabel dipakai untuk menyimpan data dengan tipe yang berbeda-beda. Tipe-tipe yang umum adalah char, int dan float.

Tambahan kata long didepan beberapa variabel membuat variabel-variabel tersebut mampu menampung data yang lebih besar, tambahan kata short mempunyai effek sebaliknya. Tambahan dengan kata unsigned didepan variabel membuat variabel tersebut hanya mampu menyimpan bilangan-bilangan positip saja sedangkan tambahan signed di depan tipe data membuat variebel tersebut mampu menyimpan bilangan negatif dan positif. Tipe-tipe data dalam C++ dapat dilihat pada tabel di bawah ini.

Nama deklarasi

Range

Tipe

Char -128-128 Character
unsigned char 0-255 Unsigned char
signed char -128-127 Signed character

(sama dengan char)

Int -32768 – 32767 Integer
unsigned int 0-65535 Unsigned integer
signed int -32768 – 32767 Signed integer(sama

Short int)

short int -32768 – 32767 Short int
unsigned short int 0 – 65535 Unsigned Short Int
Signed short int -32768 – 32767 Signed Short int (Sama dengan Short Int)
Long -2147483648 – 2147483648 Long
long int -2147483648 – 2147483648 Long Integer (Sama dengan Long)
Signed long int -2147483648 – 2147483648 Signed Long Int (Sama dengan Long Int)
Unsigned long int 0 – 4294967295 Unsigned Long Int
Float -3.4E+38 – 3.4E+38 Floating point
Double -1.7E+308 – 1.7E+308 Double Folating-point
Long double -1.7E+308 – 1.7E+308 Long double-floating point

Pernyataan assignment (=) dapat dipakai untuk menyimpan data pada suatu variabel, sintaknya adalah:

variabel = ekpresi;

variabel adalah variabel dengan tipe data tertentu yang telah dideklarasikan sebelumnya sedang ekpresi dapat berupa sembarang variabel, konstanta atau kombinasi keduanya yang menghasilkan tipe data yang sama dengan tipe data dari variabel, misalnya:

panjang = 20;

lebar = panjang/2 + 5;