Dasar Pemrograman
27
III. Dasar Pemrograman III.1 Pengenal • Pengenal (identifier) merupakan nama yang biasa digunakan untuk suatu peubah (variable), konstanta, fungsi, atau obyek lain yang didefinisikan oleh pemrogram. • Aturan yang berlaku bagi suatu pengenal adalah: o Pengenal harus diawali dengan huruf (A .. Z, a .. z) atau karakter garis bawah ( _ ). o Selanjutnya dapat berupa huruf, angka (0 .. 9), karakter garis bawah, atau tanda dolar ($). o Panjang pengenal boleh terdiri lebih dari 32 karakter, akan tetapi hanya 32 karakter pertama yang dianggap berarti. o Contoh: Jumlah • jumlah • nilai2 • total_per_bulan • harga_jual$ - Karakter garis-bawah biasa digunakan untuk memudahkan pembacaan terhadap suatu pengenal, terutama yang terdiri lebih dari satu kata, karena nama suatu pengenal tidak boleh dipisahkan spasi.. - Untuk menghindari kesalahan, pengenal tidak boleh menggunakan nama yang tergolong sebagai kata kunci (seperti main), dan sebaiknya tidak menggunakan pengenal yang digunakan untuk nama fungsi, konstanta, variabel atau obyek lain yang digunakan oleh pustaka Turbo C, - Tabel 3.1 berisi daftar kata-kunci yang terdapat pada Bahasa Turbo C++.
Dasar Pemrograman
28
Tabel 3.1 Daftar Kata-kunci pada Turbo C++. short interrupt _ds asm signed _loadds else auto sizeof long enum break _ss near _es case static _export new catch struct operator extern cdecl switch pascal far char template private float class this protected for const typedef public friend continue union register goto _cs _regparam unsigned huge default virtual return if delete void _saveregs inline do volatile _seg int double while III.2 Tipe Data Dasar - Pengertian data menyitratkan suatu nilai yang dapat dinyatakan dalam bentuk konstanta atau variabel. - Konstanta menyatakan nilai yang tetap, sedangkan variabel menyatakan nilai yang dapat diubah-ubah selama eksekusi berlangsung. - Data berdasarkan jenisnya dapat dibagi menjadi lima kelompok, yang dinamakan sebagai tipe data dasar, yaitu: Bilangan bulat (integer) Bilangan pecahan (float/real) presisi-tunggal Bilangan pecahan (float/real) presisi-ganda Karakter, dan Tak bertipe. Tipe Jml bit 8 Char 16 Int 32 Float 64 Double 0 void
Tabel 3.2 Daftar tipe data dasar. Rentang data Keterangan Karakter -128 .. 127 Bilangan bulat -32768 .. 32767 3.4e-38 .. 3.4e+38 Bilangan pecahan presisi-tunggal 1.7e-308 .. 1.7e+3.8 Bilangan pecahan presisi-ganda Tak bertipe -
Dasar Pemrograman
29
III.3 Peubah (Variable) Peubah atau variabel dalam program digunakan untuk menyimpan suatu nilai, dan nilai yang ada padanya dapat diubah-ubah selama eksekusi program berlangsung. III.3.1 Pendeklarasian Peubah - Peubah yang akan digunakan dalam program harus dideklarasikan terlebih dahulu. - Pengertian deklarasi disini berarti memesan memoi dan menentukan jenis data yang dapat disimpan di dalamnya. - Bentuk umum pendeklarasian suatu peubah adalah: tipe daftar-peubah; - Pada pendeklarasian peubah, daftar-peubah dapat berupa sebuah peubah atau beberapa peubah yang dipisahkan dengan tanda koma. - Contoh: int jumlah; float harga_per_satuan, total_harga; tanda koma sebagai pemisah - Pernyataan deklarasi yang pertama menyatakan bahwa jumlah adalah peubah bertipe int (integer = digunakan untuk menyimpan bilangan bulat), sedangkan pernyataan kedua menyatakan bahwa harga_per_satuan dan total_harga bertipe float (untuk menyimpan bilangan pecahan). - Pendeklarasian peubah dalam C bersifat fleksibel, misalnya deklarasi peubah baris ke dua di atas dapat dideklarasikan: float harga_per_satuan; float total_harga; III.3.2 Pemberian Nilai ke Peubah Untuk memberikan nilai ke suatu peubah yang telah dideklarasikan, bentuk pernyataan yang digunakan adalah sebagai berikut: peubah = nilai;
Dasar Pemrograman
30
Contoh berikut memberikan nilai 50 ke peubah jumlah dan 15,7 ke peubah harga_per_satuan. jumlah = 50; harga_per_satuan = 15.7; total_harga = jumlah * harga_per_satuan; Contoh program 3-1 berikut menggambarkan penggunaan peubah. /* -------------------------------------- */ /* File program : Peubah.c */ /* Contoh pendeklarasian peubah */ /* -------------------------------------- */ #include <stdio.h> main( ) { int jumlah; float harga_per_satuan, harga_total; jumlah = 50; harga_per_satuan = 15.7; harga_total = jumlah * harga_per_satuan; printf(“harga total = \%n”, harga_total); } contoh hasil eksekusi: C> Peubah Harga total = 785.000000 Program 3-1 - Dalam penugasan suatu peubah, kadang-kadang diinginkan untuk menaikkan nilainya dengan satu (terutama dalam iterasi), yang dapat dinyatakan sebagai berikut: x = x + 1;
Dasar Pemrograman
31
III.3.3 Inisialisasi Peubah - Dalam penulisan program dimungkinkan untuk melakukan inisialisasi atau memberi nilai awal pada suatu peubah segera setelah dideklarasikan. - Pernyataan berikut contoh pendeklarasian dan pemberian nilai awal suatu peubah. int jumlah; jumlah = 29; - Pernyataan di atas dapat disingkat melalui pendeklarasian yang disertai dengan penugasan nilai, sebagai berikut: int jumlah = 29; III.3.4 Peubah bertipe Float dan Double - Perbedaan antara tipe float dan double dapat dilihat pada Tabel 3.2 di atas. - Tipe double mempunyai kawasan nilai yang lebih besar dibanding dengan tipe float. - Perbedaan lain adalah pada tingkat ketelitiannya, tipe float hanya mempunyai tingkat ketelitian kira-kira sampai dengan 7 digit, sedangkan tipe double mempunyai ketelitian sekitar 16 digit. - Perbedaan ketelitian dapat dilihat dengan mengeksekusi program 3-2 berikut.
/* --------------------------------------------- */ /* File program : Presisi .c */ /* Contoh untuk menunjukkan ketelitian */ /* antara peubah float dan double */ /* --------------------------------------------- */ #include <stdio.h> main( ) { int float x; double y;
Dasar Pemrograman
32
x = 56.0123456789123456789; y = 56.0123456789123456789; printf(“x = %20.16f\n”, x); printf(“y = %20.16lf\n”, y); } contoh hasil eksekusi: C> Presisi x = 56.0123443603515625 y = 56.0123456789123466 Program 3-2 - Meskipun nilai yang diberikan pada peubah x (bertipe float ) dan peubah y (bertipe double) sama, ternyata nilai pada kedua peubah tersebut berbeda: x = 56.0123443603515625 hanya 7 digit yang benar y = 56.0123456789123466 16 digit yang benar - Dari contoh di atas terlihat bahwa peubah y memiliki ketelitian yang lebih tinggi dibanding peubah x. - Dalam C selain tipe double masih disediakan tipe long double yang memiliki ketelitian yang lebih tinggi dibanding double seperti yang diperlihatkan pada Tabel 3.3.
Dasar Pemrograman
33
Tabel 3.3 Tipe Data, Ukuran, dan Rentangnya. Size Range Sample applications (bits)
Type unsigned char
8
0 to 255
char
8
-128 to 127
enum unsigned int short int
16 16 16
-32,768 to 32,767 0 to 65,535 -32,768 to 32,767
int
16
-32,768 to 32,767
unsigned long long float double long double near pointer
32 32 32 64 80 16
0 to 4,294,967,295 -2,147,483,648 to 2,147,483,647 3.4 ^ 10-38 to 3.4 ^ 1038 1.7 ^ 10-308 to 1.7 ^ 10308 3.4 ^ 10-4932 to 1.1 ^ 104932 Not applicable
far pointer
32
Not applicable
int
s
(2's complement)
magnitude 0
16 long int
s
s
0 Biased exponent
s
Biased exponent
63
long double
s 79
significant 22
31 double
(2's complement)
magnitude
31 float
Small numbers and full PC character set Very small numbers and ASCII characters Ordered sets of values Larger numbers and loops Counting, small numbers, loop control Counting, small numbers, loop control Astronomical distances Large numbers, populations Scientific (7-digit precision) Scientific (15-digit precision) Financial (18-digit precision) Manipulating memory addresses Manipulating addresses outside current segment
0
significant 51
Biased exponent
1
0
significant
64 63
s = sign bit (0 = positive, 1 = negative) 1 = integer bit of significand: Stored in long double implicit (always 1) in float, double Exponent bias (normalized values): float : 127 (7FH) double: 1023(3FFH) long double: 16,383 (3FFFH)
Gambar 3.1 Penyajian internal dari tipe data.
0
Dasar Pemrograman
34
III.4 Pemodifikasi Tipe - Terdapat beberapa pemodifikasi tipe (type modifier) yang dapat dikenakan di awal tipe data dasar (kecuali void). Pemodifikasi tipe tersebut adalah : signed unsigned long short - Misalnya, pemodifikasi tipe unsigned jika diterapkan pada tipe int, akan menjadi unsigned int. - Tabel 3.4 memperlihatkan kemungkinan penerapan pemodifikasi tipe pada tipe data dasar. Tabel 3.4 Kemungkinan pemakaian pemodifikasi tipe. Tipe Jumlah Rentang Nilai Bit unsigned char 0 .. 255 8 signed char -128 .. 127 8 unsigned int -32768 .. 32767 16 signed int -32768 .. 32767 16 short int 0 .. 65535 16 unsigned short -32768 .. 32767 16 int -2147483648 .. 2147483647 32 signed short int long int -2147483648 .. 2147483647 32 signed long int 0 .. 4294967295 32 unsigned long int 3.4E-4932 .. 1.1E+4932 80 long double
- Dari tabel diatas, dapat dilihat bahwa tipe char sama dengan unsigned char, sedangkan signed int, short int, signed short int, dan int sebenarnya adalah sama. - Perbedaan signed dan unsigned terletak pada perlakuan bit tertinggi. - Jika dinyatakan dengan signed, maka bit tertinggi digunakan sebagai bit tanda untuk menyatakan apakah bilangannya positif atau negatif. - Hal yang perlu diingat pada proses pemodifikasian ini adalah tipe data hasil minimum harus mempunyai panjang bit yang sama. - Dalam penulisan program beberapa tipe data boleh tidak ditulis secara lengkap, misalnya: Tipe short int cukup ditulis menjadi short. Tipe long int boleh ditulis menjadi long. Tipe signed int bisa ditulis menjadi signed. Tipe unsigned int boleh ditulis dengan unsigned.
Dasar Pemrograman
35
/* ---------------------------------------------- */ /* File program : TANDA.C */ /* Contoh untuk menunjukkan */ /* perbedaan antara signed dan unsigned */ /* ----------------------------------------------- */ #include <stdio.h> main( ) { signed i = -127; unsigned j;
/* i integer bertanda */ /* j integer tak bertanda */
j = i; printf(“i = %d, j = %u\n”, i, j); } contoh hasil eksekusi: C> TANDA i = -127, j = 65409 Program 3-3 III.5 Konstanta - Konstanta menyatakan nilai numeris atau karakter yang tetap. - Turbo C++ mendukung empat kelas konstanta, yaitu floating point, integer, enumeration, dan character. - Penulisan konstanta mempunyai aturan tersendiri sesuai dengan tipe masing-masing. - Konstanta integer ditulis dengan tanpa mengandung pemisah ribuan dan tidak mengandung bagian pecahan. Contoh –20 dan 2345. - Konstanta karakter ditulis dengan diawali dan diakhiri tanda petik tunggl. Contoh ‘C’ dan ‘&’. - Konstanta pecahan (float dan double) dapat mengandung nilai pecahan (dengan tanda berupa titik) dan dapat ditulis dalam bentuk pecahan desimal biasa maupun bentuk eksponensial (menggunakan tanda e). conth 35.6 dan 3.2e+5 (maksudnya 3,2 x 105). - Konstanta pecahan selalu dinyatakan dalam double, kecuali jika diakhiri dengan F atau f (yang berarti menyatakan konstanta float). - Untuk konstanta long int, penulisannya diakhiri dengan tanda L atau l. Contoh 346600L atau 325100l.
Dasar Pemrograman
36
- Konstanta tak bertanda ditulis dengan diakhiri tanda U atau u. Jika nilainya melebihi 65535, secara otomatis akan diperlakukan sebagai unsigned long int. Contoh 431000u. III.5.1 Konstanta Oktal dan Heksadesimal - Dalam sistem oktal, digit yang digunakan berkisar antara 0 sampai dengan 7, dan penulisannya diawali dengan 0 (angka 0) - Pada sistem heksadesimal digit yang dapat dipakai berupa salah satu dari 16 simbol berikut: 0 1 2 3 4 5 6 7 8 9 A B C D E F. - Penulisan konstanta heksadesimal diawali dengan 0x (nol dan x). /* -----------------------------------------------------*/ /* Program : Konstanta.c */ /* Penulisan konstanta oktal dan heksadesimal */ /* ------------------------------------------------------*/ #include <stdio.h> main() { int a, b; a = 010; /* 10 oktal */ b = 0x10; /* 10 heksadesimal */ printf("a= %d, b = %d\n",a ,b); } Hasil eksekusi: C>Konstanta a = 8, b = 16 Program 3-4. III.5.2 Konstanta Karakter Rangkaian Escape - Konstanta karakter selalu ditulis dengan diawali dang diakhiri dengan tanda petik tunggal. - Beberapa konstata karakter dapat ditulis dengan diawali tanda \ (penempatan tanda \ setelah tanda petik tunggal). - Karakter yng berawalan tanda \ disebut rangkaian escape (escape sequence). - Daftar karakter yang disebut sebagai rangkaian escape diperlihatkan pada tabel 3.5.
Dasar Pemrograman
Rangkaian \0 \a \b \f \n \r \t \v \\ \’ \” \?
37
Tabel 3.5 Karakter Rangkaian Escape. Nilai Karakter Maksud 0x00 NULL Karakter ber-ASCII = 0 0x07 BEL Bunyi speaker 0x08 BS Backspace (mundur ke kiri) 0x0C FF Formfeed (ganti halaman) 0x0A LF Linefeed (ganti baris) 0x0D CR Carriege return (ke awal baris) 0x09 HT Tab horisontal 0x0B VT Tab vertikal 0x5C \ Karakter miring kiri 0x27 ‘ Karakter petik-tunggal 0x22 “ Karakter petik-ganda 0x3F ? Karakter tanda tanya
- Untuk menyatakan sembarang karakter ASCII, notasi yang dapat digunakan adalah: \DDD dengan DDD = 1 sampai 3 digit oktal \xHH dengan HH = 1 sampai 2 digit heksadesimal - Contoh program berikut memberikan gambaran pemakaian konstanta karakter untuk menampilkan karakter grafik yaitu tanda integral, yang tersusun atas dua buah karakter ASCII F4h dan F5h. /* ----------------------------*/ /* Program : Integral.c */ /* Menampilkan tanda integral */ /* ----------------------------*/ #include <stdio.h> main() { unsigned char kar1 = '\xf4'; unsigned char kar2 = '\xf5'; printf("%c\n%c",kar1 ,kar2); } Program 3-5 III.5.2 Konstanta String - Konstanta string merupakan deretan karakter yang diawali dan diakhiri dengan tanda petik-ganda ( “ ). - Konstanta string yang berisi satu karakter berbeda dengan konstanta karakter, sebab konstanta karakter diawali dan diakhiri dengan tanda
Dasar Pemrograman
38
petik-tunggal, sedangkan string diawali dan diakhiri dengan tanda petik-ganda. Jadi “c” tidak sama dengan ‘c’. - Konstanta string dapat mengandung karakter yang menggunakan tanda \ (karakter rangkaian escape). III.6 Operator - Operator merupakan simbol atau kata yang dapat digunakan dalam program untuk melakukan suatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai, memberikan nilai ke suatu peubah, membandingkan dua buah nilai, dan lain sebagainya. - Sebagian operator C tergolong sebagai operator binary, yaitu operator yang dikenakan terhadap dua buah nilai (operand). - Contoh : a+b - Simbol + merupakan operator untuk melakukan operasi penjumlahan dari kedua operand-nya (yaitu a dan b). - Karena operasi penjumlahan melibatkan dua operand, maka operator ini tergolong sebagai operator binary. III.6.1 Operator Aritmatika Operator aritmatika yang tergolong sebagai adalah: Perkalian * Pembagian / Sisa pembagian % Penjumlahan + Pengurangan -
operator binary
- Operator yang tergolong sebagai operator unary, adalah: + ++ --
Tanda plus Tanda minus Prefix: preincrement; Postfix: postincrement Prefix: predecrement; Postfix: postdecrement
Dasar Pemrograman
39
/* ---------------------------------------*/ /* Program : Aritmatik.c */ /* Penggunaan operator aritmatika */ /* ----------------------------------------*/ #include <stdio.h> main() { float luas, pi, jari, keliling; pi = 3.1428; jari= 12.0; luas = pi*jari*jari; printf("jari-jari = %f, luas = %f \n",jari ,luas); } program 3-6 III.6.2 Prioritas Operator Aritmatika Operator aritmatika pada C mempunyai urutan prioritas atau hirarki tertentu, seperti yang diperlihatkan pada Tabel 3.6. Tabel 3.6 Hirarki operator aritmatika. Tertinggi ++ -(unary minus) * / % Terendah + - Operator yang mempunyai prioritas tinggi akan diutamakan dalah hal pengerjaan dibandingkan dengan operator yng memiliki prioritas lebih rendah. - Jika operator mempunyai prioritas sama, maka operator yang terletak di sebelah kiri yang akan dikerjakan lebih dulu. Latihan Berapakah nilai x setelah pernyataan-pernyataan berikut ini dijalankan: a. x = (2+3) – 10 * 2; b. x = (2 + 3) – (10 * 2); c. x = 10 % 2 + 1;
Dasar Pemrograman
40
III.6.3 Operator Manipulasi Bit Untuk keperluan memanipulasi data dalam bentuk bit, bahasa C menyediakan beberapa operator seperti yang diperlihatkan pada Tabel 3.7 di bawah ini. Tabel 3.7 Operator Manipulasi Bit. Operator Operasi Geser bit ke kiri << Geser bit ke kanan >> Dan (AND) & Atau (OR) ! XOR ^ NOT (komplemen) ~ - Seluruh operator manipulasi bit hanya dapat dikenakan pada operand yang bertipe integer atau karakter. - Tabel 3.8 berikut memberikan informasi tentang prioritas operator bit. Tabel 3.8 Prioritas operator manipulasi bit. Tertinggi
Terendah
>> << & ^ !
/* ---------------------------------*/ /* Program : Geser.c */ /* Operator manipulasi bit */ /* ---------------------------------*/ #include <stdio.h> main() { unsigned x = 93; printf("Nilai x semula = %d\n",x); x = x<<1; /* geser ke kiri 1 bit */ printf("Nilai x setelah geser kiri = %d\n",x); x = x>>2; /* geser ke kanan 2 bit */ printf("Nilai x setelah geser kanan = %d\n",x); }
Dasar Pemrograman
41
Hasil eksekusi: C> Geser Nilai x semula = 93 Nilai x setelah geser kiri = 186 Nilai x setelah geser kanan = 46 Program 3-7 III.7 Ungkapan (Ekspresi) Ungkapan atau ekspresi dalam C dapat berupa: - pengenal - konstanta - peubah pseudo (seperti _AX, _AL yang menyatakan peubah register) - atau diantara kombinasi elemen di atas dengan operator. Contoh ungkapan : 3+2 -1 - Pada ungkapan di atas, 3, 2, dan 1 merupakan operan dan simbol + dan – adalah operator. - Nilai ungkapan sendiri adalah hasil penjumlahan 3 dan 2, dikurangi 1. III.8 Konversi Tipe dalam Ungkapan - Dalam suatu ungkapan, jika tipe dari konstanta dan peubah berbeda, dengan sendirinya akan dikonversi terlebih dahulu menjadi tipe yang sama. - Aturan yang berlaku dalam pengkonversian tipe aritmatika adalah: 1. Semua tipe char dan short int akan dikonversikan ke int. semua float akan dikonversikan ke double. 2. Untuk setiap pasangan operand: - Jika salah satu operand bertipe long doubel, maka operand pasangannya akan dikonversikan ke long doubel. - Jika salah satu operand bertipe doubel, maka operand pasangannya akan dikonversikan ke doubel. - Jika salah satu operand bertipe long, maka operand pasangannya akan dikonversikan ke long. - Jika salah satu operand bertipe unsigned, maka operand pasangannya akan dikonversikan ke unsigned. - Aturan di atas berlaku untuk operator aritmatika maupun manipulasi bit dan tidak berlaku untuk operator penugasan ( = ).
Dasar Pemrograman
42
- Pada operator penugasan, nilai ungkapan yang terletak di kanan = secara otomatis akan dikonversikan sesuai dengan tipe peubah yang terletak di kiri =. III.9 Penggunaan Type Cast - Type cast merupakan cara untuk mengkonversikan suatu tipe menjadi tipe yang lain - Misal jika x dideklarasikan bertipe int. Bila diinginkan agar ungkapan x/2 menghasilkan nilai pecahan, maka ungkapan x/2 perlu ditulis menjadi: (float) x/2 - Perbedaan penggunaan type cast dan yang tidak menggunakan type cast dapat dilihat dari contoh program berikut. /* ------------------------------------*/ /* Program : typecast.c */ /* melihat efek type cast dalam */ /* konversi tipe */ /* ------------------------------------*/ #include <stdio.h> main() { int x = 21; float y; y = x/2; printf("y = x/2 =%f\n",y); y = (float) x/2; printf("y = (float) x/2 = %f\n",y); } Hasil eksekusi: C>typecast Y = x/2 = 10.000000 Y = (float) x/2 = 10.500000 Program 3-8
Dasar Pemrograman
43
Pada operasi penugasan ke peubah, tipe ungkapan yang terletak di kanan operator penugasan ( = ) secara otomatis akan dikonversikan sesuai dengan tipe peubah yang terletak di kiri operator penugasan, seperti yang diperlihatkan pada contoh program 3-9 berikut ini. /* --------------------------------*/ /* Program : konversi.c */ /* Contoh konversi pada penugasan*/ /* ke peubah */ /* --------------------------------*/ #include <stdio.h> main() { char c; int i; float x; x = 176.5; i = x; c = i;
/* penugasan 1 */ /* penugasan 2 */ /* penugasan 3 */
printf("Nilai x =%f\n",x); printf("Nilai i =%d\n",i); printf("Nilai c =%c\n",c); } Hasil eksekusi: C>konversi Nilai x = 176.500000 Nilai I = 176 Nilai c = 0 Program 3-9