“bukuAjar” — 2011/9/22 — 13:39 — page i — #1 - cs.unsyiah.ac.id ...
“bukuAjar” — 2011/9/22 — 13:39 — page i — #1 - cs.unsyiah.ac.id ...
“bukuAjar” — 2011/9/22 — 13:39 — page i — #1 - cs.unsyiah.ac.id ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> i <strong>—</strong> <strong>#1</strong><br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> ii <strong>—</strong> #2<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> iii <strong>—</strong> #3<br />
Pemrograman<br />
Menggunakan<br />
Bahasa C<br />
Taufik Fuadi Ab<strong>id</strong>in<br />
Irvanizam Zamanhuri<br />
Program Studi Informatika<br />
Fakultas Matematika dan Ilmu Pengetahuan Alam<br />
Universitas Syiah Kuala<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> iv <strong>—</strong> #4<br />
The work in this project was partially supported by Program Studi Informatika<br />
Fakultas Matematika dan Ilmu Pengetahuan Alam<br />
Universitas Syiah Kuala<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> v <strong>—</strong> #5<br />
Kata Pengantar<br />
Syukur Alhamdulillah penulis panjatkan ke hadirat Allah SWT yang<br />
telah melimpahkan rahmat-Nya sehingga penulis dapat menyelesaikan<br />
penulisan Buku Ajar yang berjudul "Pemrograman Menggunakan<br />
Bahasa C". Selawat dan salam penulis sanjungkan kepada<br />
Nabi Besar Muhammad SAW, keluarga dan sahabat beliau.<br />
Buku Ajar ini sangat bagus digunakan untuk mengajarkan Matakuliah<br />
Pemrograman bagi mahasiswa-mahasiswa baik Strata Satu (S1)<br />
Informatika atau Matematika maupun Diploma Tiga (D3) Manajemen<br />
Informatika. Di dalam buku ini disajikan tentang konsep-konsep<br />
dasar bahasa pemrograman C yang meliputi Input/Output serta<br />
Pernyataan, Tipe Data, Pernyataan Bersyarat, Perulangan, Array,<br />
Pointer, Fungsi, File, dan Typedef dan Struct. Semua materi tersebut<br />
disajikan sangat jelas dengan dilengkapi visualisasi dari program serta<br />
contoh-contoh program yang efektif dan efisien sehingga mahasiswa<br />
dengan mudah memahami konsep-konsep bahasa C.<br />
Penulisan Buku Ajar ini merupakan salah satu kegiatan akademik<br />
program studi Informatika, Fakultas Matematika dan Ilmu Pengetahuan<br />
Alam (FMIPA), Universitas Syiah Kuala (Unsyiah) dan d<strong>id</strong>anai<br />
sepenuhnya oleh FMIPA Unsyiah melalui Dana Rutin Tahunan.<br />
Oleh karena itu, penulis ingin mengucapkan terimakasih kepada<br />
Pihak Dekanan FMIPA, Unsyiah dan pihak-pihak terkait lainnya<br />
yang telah mendukung secara langsung atau t<strong>id</strong>ak langsung dalam<br />
penyempurnaan penulisan buku ajar ini.<br />
Akhirnya penulis juga menyadari bahwa penulisan Buku Ajar ini<br />
masih jauh dari kesempurnaan. Oleh karena itu kritik dan saran yang<br />
membangun sangat penulis harapkan. Semoga buku ini bermanfaat<br />
bagi semua pihak yang terkait dan menjadi lebih sempurna pada masa<br />
yang akan datang.<br />
Banda Aceh, Juni <strong>2011</strong><br />
Taufik Fuadi Ab<strong>id</strong>in & Irvanizam Zamanhuri<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> vi <strong>—</strong> #6<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> vii <strong>—</strong> #7<br />
Daftar Isi<br />
Kata Pengantar v<br />
Daftar Isi vii<br />
Daftar Gambar xi<br />
Daftar Tabel xiii<br />
1 Pendahuluan ANSI/C dan Contoh 1<br />
1.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.3 ANSI/C . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.4 Penulisan Program yang Baik . . . . . . . . . . . . . . 2<br />
1.5 Kompilasi Menggunakan gcc . . . . . . . . . . . . . . . 3<br />
2 Input Output dan Pernyataan 5<br />
2.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.3 Penggunaan printf() dan scanf() . . . . . . . . . . . . 5<br />
2.4 Contoh Program . . . . . . . . . . . . . . . . . . . . . 7<br />
2.5 Penggunaan Library ctype . . . . . . . . . . . . . . . . 10<br />
3 Tipe Data 11<br />
3.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 11<br />
3.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
3.3 Tipe Data Primitif . . . . . . . . . . . . . . . . . . . . 11<br />
3.4 Pres<strong>id</strong>ensi dan Urutan Pemrosesan (Associativity) Operator<br />
dalam C . . . . . . . . . . . . . . . . . . . . . . <strong>13</strong><br />
3.5 Operator-Operator . . . . . . . . . . . . . . . . . . . . <strong>13</strong><br />
3.5.1 Operator Aritmatik, Relasional, dan Increment/Decrement<br />
. . . . . . . . . . . . . . . . . <strong>13</strong><br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> viii <strong>—</strong> #8<br />
3.5.2 Operator Assignment (=) . . . . . . . . . . . . 14<br />
3.5.3 Assignment Operator . . . . . . . . . . . . . . . 15<br />
3.6 Konversi Tipe Data . . . . . . . . . . . . . . . . . . . . 16<br />
4 Pernyataan Bersyarat (Conditional Statement) 19<br />
4.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 19<br />
4.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
4.3 Konsep Pernyataan Bersyarat . . . . . . . . . . . . . . 20<br />
4.4 Serangkaian Pernyataan (Compound Statement) . . . . 20<br />
4.5 Lokal Variabel . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4.6 if dan if else Statement . . . . . . . . . . . . . . . . . . <strong>22</strong><br />
4.7 Switch Statement . . . . . . . . . . . . . . . . . . . . . 25<br />
4.8 Break dan Continue Statements . . . . . . . . . . . . . 26<br />
4.9 Continue Statement Lanjutan . . . . . . . . . . . . . . 28<br />
4.10 Conditional Operator . . . . . . . . . . . . . . . . . . . 29<br />
5 Perulangan (Loop) 31<br />
5.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 31<br />
5.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
5.3 do while Statement . . . . . . . . . . . . . . . . . . . . 31<br />
5.3.1 do while Statement (Dasar) . . . . . . . . . . . 31<br />
5.3.2 do while Statement (Lanjutan) . . . . . . . . . 33<br />
5.4 for Statement . . . . . . . . . . . . . . . . . . . . . . . 34<br />
5.4.1 for Statement (Dasar) . . . . . . . . . . . . . . 34<br />
5.4.2 for Statement (Lanjutan) . . . . . . . . . . . . 35<br />
5.5 while statement . . . . . . . . . . . . . . . . . . . . . . 37<br />
6 Lanjutan Perulangan (Loop) dan Contoh 41<br />
6.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 41<br />
6.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
6.3 Contoh Perulangan for (Lanjutan) . . . . . . . . . . . 41<br />
6.3.1 Contoh 1 . . . . . . . . . . . . . . . . . . . . . 41<br />
6.3.2 Contoh 2 . . . . . . . . . . . . . . . . . . . . . 42<br />
6.3.3 Contoh 3 . . . . . . . . . . . . . . . . . . . . . 42<br />
6.3.4 Contoh 4 . . . . . . . . . . . . . . . . . . . . . 42<br />
6.3.5 Contoh 5 . . . . . . . . . . . . . . . . . . . . . 43<br />
6.3.6 Contoh 6 . . . . . . . . . . . . . . . . . . . . . 43<br />
6.3.7 Contoh 7 . . . . . . . . . . . . . . . . . . . . . 44<br />
6.3.8 Contoh 8 . . . . . . . . . . . . . . . . . . . . . 44<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> ix <strong>—</strong> #9<br />
7 Array Satu Dimensi 45<br />
7.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 45<br />
7.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
7.3 Definisi dan Pendeklarasian Array . . . . . . . . . . . 45<br />
7.4 Inisialisasi Nilai . . . . . . . . . . . . . . . . . . . . . . 46<br />
7.5 Indeks (Subscript) Dari Array . . . . . . . . . . . . . . 47<br />
7.6 Alokasi Memory Array . . . . . . . . . . . . . . . . . . 47<br />
8 Array Dua Dimensi 49<br />
8.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 49<br />
8.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
8.3 Pendeklarasian Array Dua Dimensi . . . . . . . . . . . 49<br />
8.4 Inisialisasi Nilai . . . . . . . . . . . . . . . . . . . . . . 50<br />
8.5 Indeks (Subscript) Dari Array Dua Dimensi . . . . . . 51<br />
8.6 Alokasi memori untuk Array Dua Dimensi . . . . . . . 51<br />
8.7 Contoh Program Menggunakan Array Dua Dimensi . . 52<br />
8.7.1 Inisialiasi Nilai Array Dua Dimensi . . . . . . . 52<br />
8.7.2 Pengurutan Data Dalam Array . . . . . . . . . 54<br />
8.7.3 Penjumlahan Matrix Menggunakan Array . . . 54<br />
9 Pointer 55<br />
9.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 55<br />
9.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />
9.3 Pendeklarasian Pointer . . . . . . . . . . . . . . . . . . 55<br />
9.4 Visualisasi Pointer . . . . . . . . . . . . . . . . . . . . 56<br />
9.5 Operator Dereferensing . . . . . . . . . . . . . . . . . . 57<br />
9.6 Pointer Vs Array . . . . . . . . . . . . . . . . . . . . . 60<br />
9.7 String . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
10 Fungsi 63<br />
10.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 63<br />
10.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />
10.3 Pendeklarasian Fungsi . . . . . . . . . . . . . . . . . . 63<br />
10.4 Fungsi Bertipe Vo<strong>id</strong> . . . . . . . . . . . . . . . . . . . 65<br />
10.5 Jenis-Jenis Fungsi . . . . . . . . . . . . . . . . . . . . . 66<br />
10.5.1 Fungsi Called by Value . . . . . . . . . . . . . . 66<br />
10.5.2 Fungsi Called by Reference . . . . . . . . . . . 67<br />
10.6 Fungsi String . . . . . . . . . . . . . . . . . . . . . . . 68<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> x <strong>—</strong> <strong>#1</strong>0<br />
11 File 73<br />
11.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 73<br />
11.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
11.3 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
11.4 Beberapa Contoh Manipulasi File . . . . . . . . . . . . 74<br />
11.5 Beberapa Fungsi untuk Manipulasi File Teks . . . . . 76<br />
12 Typedef & Struct 77<br />
12.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . 77<br />
12.2 Objektif . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
12.3 Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
12.4 Penggunaan Typedef Pada Array . . . . . . . . . . . . 78<br />
12.5 Contoh Penggunaan Typedef . . . . . . . . . . . . . . 79<br />
12.6 Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
12.7 Pointer ke Sebuah Struct . . . . . . . . . . . . . . . . . 80<br />
Daftar Pustaka 83<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> xi <strong>—</strong> <strong>#1</strong>1<br />
Daftar Gambar<br />
1.1 Contoh penulisan program yang baik. . . . . . . . . . 3<br />
3.1 Pres<strong>id</strong>ensi dan Urutan Pemrosesan (Associativity) . . <strong>13</strong><br />
3.2 Operator Aritmatik. . . . . . . . . . . . . . . . . . . . 14<br />
3.3 Operator Relasional. . . . . . . . . . . . . . . . . . . . 14<br />
3.4 Operator Increment/Decrement. . . . . . . . . . . . . . 15<br />
3.5 Contoh Operator Assignment. . . . . . . . . . . . . . . 15<br />
4.1 Contoh penggunaan variabel lokal . . . . . . . . . . . . 21<br />
4.2 Contoh penggunaan if else statement . . . . . . . . . . 23<br />
4.3 Contoh penggunaan if else statement . . . . . . . . . . 23<br />
4.4 Contoh penggunaan switch statement . . . . . . . . . . 25<br />
4.5 Contoh penggunaan break statement . . . . . . . . . . 27<br />
4.6 Contoh continue statement lanjutan . . . . . . . . . . 29<br />
4.7 Contoh conditional operator . . . . . . . . . . . . . . . 29<br />
4.8 Contoh conditional operator . . . . . . . . . . . . . . . 30<br />
5.1 Contoh penggunaan do while statement lanjutan . . . 33<br />
5.2 Dua buah program menggunakan do while statement . 34<br />
5.3 Konversi program C yang menggunakan for statement<br />
ke do while statement . . . . . . . . . . . . . . . . . . . 35<br />
5.4 Program untuk menghitung total penjumlahan 10<br />
bilangan integer positif pertama . . . . . . . . . . . . . 36<br />
5.5 Beberapa program dengan menggunakan for statement 36<br />
5.6 Contoh program dengan menggunakan double for statement<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
5.7 Konversi statement while ke dalam bentuk do while<br />
dan for . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
7.1 Contoh penginisialisasi array . . . . . . . . . . . . . . 46<br />
7.2 Visualisasi alamat array . . . . . . . . . . . . . . . . . 47<br />
7.3 Indeks (Subscript) dari array . . . . . . . . . . . . . . 47<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> xii <strong>—</strong> <strong>#1</strong>2<br />
7.4 Contoh penggunaan array dan visualisasinya . . . . . . 48<br />
8.1 Visualisasi pendeklaraisin array dua dimensi . . . . . . 50<br />
8.2 Contoh penginisialisasi array dua dimensi . . . . . . . 51<br />
8.3 Indeks (Subscript) dari array dua dimensi . . . . . . . 51<br />
8.4 Visualisasi array dua dimensi dalam bentuk satu dimensi 52<br />
8.5 Visualiasai array num[i][j] . . . . . . . . . . . . . . . . 53<br />
9.1 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 56<br />
9.2 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 58<br />
9.3 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 59<br />
9.4 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 59<br />
9.5 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 59<br />
9.6 Visualisasi pointer . . . . . . . . . . . . . . . . . . . . 60<br />
9.7 Visualisasi pointer pada array . . . . . . . . . . . . . . 60<br />
9.8 Kesamaan array dengan pointer . . . . . . . . . . . . . 60<br />
10.1 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 66<br />
10.2 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 68<br />
10.3 Visualisasi fungsi . . . . . . . . . . . . . . . . . . . . . 68<br />
12.1 Visualisasi struct . . . . . . . . . . . . . . . . . . . . . 80<br />
12.2 Visualisasi struct . . . . . . . . . . . . . . . . . . . . . 81<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> xiii <strong>—</strong> #<strong>13</strong><br />
Daftar Tabel<br />
2.1 Format Tipe Data . . . . . . . . . . . . . . . . . . . . 6<br />
4.1 Operator relasional . . . . . . . . . . . . . . . . . . . . 20<br />
11.1 Parameter Mode untuk Akses File . . . . . . . . . . . 74<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> xiv <strong>—</strong> <strong>#1</strong>4<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 1 <strong>—</strong> <strong>#1</strong>5<br />
Bab 1<br />
Pendahuluan ANSI/C dan<br />
Contoh<br />
1.1 Pengantar<br />
Bahasa C adalah bahasa pemrograman yang sangat populer dan<br />
powerful. Bahasa ini mulai dirancang sekitar tahun 70-an oleh Dennis<br />
Ritchie di Bell Laboratories dan menjadi ANSI C (standard C) pada<br />
awal tahun 1980. Bahasa pemrograman C banyak digunakan sebagai<br />
kernel bagi bahasa-bahasa yang baru dan lebih spesifik seperti C++<br />
yang merupakan pengembangan lebih lanjut dari standard C. Contoh<br />
lain adalah Java, walau bukan merupakan kelanjutan dari standard<br />
C, tetapi banyak sintaks dalam Java yang mirip dengan sintaks C.<br />
1.2 Objektif<br />
Objektif dari materi ini adalah (i) memberikan gambaran awal<br />
tentang bahasa C, (ii) memperkenalkan bahasa C dengan contoh,<br />
(iii) mengajarkan teknik-teknik penulisan program yang baik, (iv)<br />
memilih nama untuk variabel, (v) indentation, dan (vi) penjelasan<br />
dalam program (comment).<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 2 <strong>—</strong> <strong>#1</strong>6<br />
2 Bab 1. Pendahuluan ANSI/C dan Contoh<br />
1.3 ANSI/C<br />
• D<strong>id</strong>esain oleh Dennis Ritchie di Bell Laboratory (Sekarang<br />
AT&T)<br />
• Diimplementasi sebagai bahasa pemograman Operating System<br />
(OS) Unix pada mini komputer PDP-11 di tahun 1972<br />
• Berkembang dari bahasa B yang berjalan di mesin BCPL yang<br />
dikembangkan oleh Martin Richard di tahun 1967.<br />
• Tujuannya adalah menyempurnakan B dan merealisasikan <strong>id</strong>e<br />
pemograman berstruktur.<br />
• Tradisional C terwujud di tahun 80-an dan berhasil menjadi<br />
ANSI/ISO standard di tahun 1990.<br />
Adapun karakteristik adalah<br />
• Portable:<br />
– Dapat dengan mudah dipindahkan dari satu perangkat<br />
keras ke perangkat keras yang lain<br />
– Menyediakan standard library (fungsi-fungsi)<br />
• Mendukung modular programming: Program ditulis dalam<br />
beberapa modul atau dipisahkan dalam beberapa file<br />
• Dapat dikategorikan sebagai ’m<strong>id</strong>dle level language’<br />
1.4 Penulisan Program yang Baik<br />
Program yang ditulis dengan baik akan mengikuti ka<strong>id</strong>ah-ka<strong>id</strong>ah<br />
penulisan program yang telah disepakati. Penulisan program yang<br />
baik harus disertai dengan beberapa komen yang dapat memudahkan<br />
orang lain memahami alur dari program. Selain itu, penulisan<br />
program yang baik harus memiliki indent untuk blok program dan<br />
konsistensi dalam penamaan variabel.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 3 <strong>—</strong> <strong>#1</strong>7<br />
1.5. Kompilasi Menggunakan gcc 3<br />
Gambar 1.1: Contoh penulisan program yang baik.<br />
1.5 Kompilasi Menggunakan gcc<br />
Kompile program di atas dengan menulis perintah berikut pada<br />
terminal (Linux):<br />
gcc -Wall -pedantic -g -o konversi konversi.c<br />
Hasil kompilasi di atas akan membuat sebuah file dengan nama<br />
konversi (dibangkitkan dari sebuah buah konversi.c). Selanjutnya, file<br />
konversi tersebut dapat dijalankan secara langsung melalui terminal<br />
dengan perintah:<br />
./konversi<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 4 <strong>—</strong> <strong>#1</strong>8<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 5 <strong>—</strong> <strong>#1</strong>9<br />
Bab 2<br />
Input Output dan<br />
Pernyataan<br />
2.1 Pendahuluan<br />
Pemahaman Bahasa Pemrograman C akan lebih mudah melalui<br />
contoh-contoh. Dengan memperhatikan dan memahami contoh-<br />
contoh program, mahasiswa diharapkan dapat memahami konsep<br />
bahasa pemrograman yang dipelajari secara lebih mudah dan cepat.<br />
Pada bab ini, pemahaman terhadap konsep dasar pemrograman<br />
C dilakukan dengan membahas dan memahami beberapa contoh<br />
program.<br />
2.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan fungsi input dan<br />
output, (ii) pernyataan (Statement), dan iii mengajarkan teknik-<br />
teknik penulisan program yang baik.<br />
2.3 Penggunaan printf() dan scanf()<br />
Fungsi printf() digunakan untuk output, sedangkan scanf() digunakan<br />
untuk input. Huruf "f" dalam printf dan scanf merupakan kepen-<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 6 <strong>—</strong> #20<br />
6 Bab 2. Input Output dan Pernyataan<br />
dekan dari kata "formatted". Kedua fungsi tersebut d<strong>id</strong>eklarasi<br />
dalam header file stdio.h. Header file ini harus disertakan dalam<br />
program menggunakan kata kunci include.<br />
/* standard library dimana EXIT_SUCCESS, EXIT_FAILURE,<br />
dan Lain-lain d<strong>id</strong>efinisikan*/<br />
#include <br />
/* standard I/O dimana printf dan scanf d<strong>id</strong>efinisikan*/<br />
#include <br />
printf dan scanf secara garis besar menerima dua argumen,<br />
yaitu string pengatur (control string) dan argumen lainnya. String<br />
pengatur digunakan untuk menentukan format dari argumen yang<br />
dikirim. Contoh:<br />
Tabel 2.1: Format Tipe Data<br />
Karakter Konversi Format argumen<br />
c Char<strong>ac</strong>ter<br />
d Decimal integer<br />
u Unsigned decimal integer<br />
e Floating point dalam notasi scientific<br />
f Floating point (pecahan)<br />
s String<br />
ld Long integer<br />
lf Double<br />
o, x Octaldecimal dan hexadecimal<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 7 <strong>—</strong> #21<br />
2.4. Contoh Program 7<br />
2.4 Contoh Program<br />
Pada sub bab 2.4 akan menampilkan beberapa contoh program C<br />
menggunakan fungsi printf , scanf, dan beberapa operator matem-<br />
atika. Selain itu juga pada sub bab 2.4 juga menampilkan contoh<br />
program penjumlahan dua variabel dan perintah assingment, peng-<br />
gunaan string pengatur %x untuk mengkonversi integer (basis 10)<br />
menjadi dalam format hexa desimal (basis 16), dan penggunaan string<br />
pengatur %o untuk mengkonversi integer (basis 10) menjadi dalam<br />
format hexa desimal (basis 8).<br />
Program 1 Penggunaan fungsi printf.<br />
#include < stdio.h><br />
vo<strong>id</strong> main(vo<strong>id</strong>)<br />
{<br />
printf("\n");<br />
printf("Hello Students.");<br />
printf("\n");<br />
}<br />
Program 2 Penjumlahan dua variabel dan perintah assingment.<br />
#include <br />
vo<strong>id</strong> main(vo<strong>id</strong>) {<br />
int i,j,k;<br />
i = 4;<br />
j = 5;<br />
k = i + j;<br />
}<br />
printf("Penjumlahan dua variabel i+j=%d\n",k);<br />
Program 6 memperlihatkan penggunaan pernyataan penjumlahan<br />
menggunakan perintah (operator)= dan pernyataan increment (++).<br />
Walaupun keduanya akan menghasilkan keluaran yang sama, namun<br />
pernyataan yang ditulis menggunakan (operator)= dan increment<br />
(++) diyakini, walaupun t<strong>id</strong>ak signifikan, akan lebih cepat.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 8 <strong>—</strong> #<strong>22</strong><br />
8 Bab 2. Input Output dan Pernyataan<br />
Program 3 Penggunaan string pengatur %x untuk mengkonversi<br />
integer (basis 10) menjadi dalam format hexa desimal (basis 16)<br />
#include <br />
vo<strong>id</strong> main(vo<strong>id</strong>)<br />
{<br />
int i = 100;<br />
printf(" %x\n",i);<br />
}<br />
Program 4 Penggunaan string pengatur %o untuk mengkonversi<br />
integer (basis 10) menjadi dalam format hexa desimal (basis 8).<br />
#include <br />
vo<strong>id</strong> main(vo<strong>id</strong>)<br />
{<br />
int i = 74;<br />
printf(" %o\n",i);<br />
}<br />
Program 5 Penggunaan scanf untuk beberapa tipe data.<br />
#include <br />
#include <br />
int main(vo<strong>id</strong>){<br />
char c1, c2;<br />
int ibil;<br />
float fbil;<br />
double dbil;<br />
}<br />
printf("\n%s\n%s\n", "Demo scanf untuk beberapa<br />
tipe data","Input dua karakter, sebuah<br />
integer, float dan double");<br />
scanf("%c,%c,%d,%f,%lf", &c1, &c2, &ibil,<br />
&fbil, &dbil);<br />
printf("\nOutput:\n");<br />
printf("%4c %4c %5d %12.3f %15e\n\n",c1, c2,<br />
ibil, fbil,dbil);<br />
exit(EXIT_SUCCESS);<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 9 <strong>—</strong> #23<br />
2.4. Contoh Program 9<br />
Program 6 Penggunaan pernyataan increment dan (operator)=.<br />
#include <br />
#include <br />
#define MAXLOOP 10<br />
int main(vo<strong>id</strong>)<br />
{<br />
int counter = 1, total = 0;<br />
while(counter
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 10 <strong>—</strong> #24<br />
10 Bab 2. Input Output dan Pernyataan<br />
2.5 Penggunaan Library ctype<br />
Library ctype dapat digunakan untuk memanipulasi karakter. Library<br />
ini sudah build-in pada bahasa pemrograman C.<br />
Program 7 Contoh program menggunakan library ctype.<br />
#include <br />
#include <br />
#include <br />
int main(vo<strong>id</strong>)<br />
{<br />
int char<strong>ac</strong>ter;<br />
while((char<strong>ac</strong>ter = getchar()) != EOF){<br />
if(char<strong>ac</strong>ter == ’\n’)<br />
putchar(’\n’);<br />
else if(islower(char<strong>ac</strong>ter))<br />
putchar(char<strong>ac</strong>ter = toupper(char<strong>ac</strong>ter));<br />
else<br />
putchar(char<strong>ac</strong>ter);<br />
}<br />
}<br />
exit(EXIT_SUCCESS);<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 11 <strong>—</strong> #25<br />
Bab 3<br />
Tipe Data<br />
3.1 Pendahuluan<br />
Setiap bahasa pemograman menyediakan tipe data. C memiliki<br />
beberapa tipe data primitif (intrinsic data type) yang merupakan<br />
bagian dari bahasa C itu sendiri. C juga memiliki tipe data lain<br />
yang biasa dikenal dengan istilah aggregate data type seperti array.<br />
Komplek data tipe dapat dibuat dengan kombinasi antara kedua tipe<br />
data tersebut. Bab ini akan membahas bagaimana deklarasi, ekspresi<br />
serta cara memanipulasi tipe data dalam C.<br />
3.2 Objektif<br />
Objektif dari bab ini adalah (i) memperkenalkan tipe data dan opera-<br />
tor dalam C, (ii) menjelaskan beberapa contoh yang dapat menjebak<br />
programmer berkaitan dengan tipe data sehingga menimbulkan error,<br />
dan (iii) menjelaskan cara mengkonversi satu tipe data ke tipe data<br />
yang lain<br />
3.3 Tipe Data Primitif<br />
Pada dasarnya keyword signed sangat jarang digunakan karena signed<br />
int sama artinya dengan int. Compiler mengerti bila suatu variable<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 12 <strong>—</strong> #26<br />
12 Bab 3. Tipe Data<br />
d<strong>id</strong>eklarasikan bertipe int maka variable tersebut adalah signed int<br />
atau bilangan integer positif maupun negatif. Unsigned int berarti<br />
bilangan yang dimaksud adalah bilangan integer positif saja.<br />
char signed char unsigned char<br />
signed short int signed int signed long int<br />
unsigned short int unsigned int unsigned long int<br />
float double long double<br />
Untuk tipe komputer 16 bits, tipe data short dan int membu-<br />
tuhkan memori sebesar 2 byte dan long 4 byte. Sedangkan untuk<br />
komputer 32 bits, tipe data short membutuhkan memori sebesar 2<br />
byte dan int dan long sebesar 4 byte.<br />
• Signed int<br />
– Komputer 16 bits<br />
−2 15 ≤ int ≤ 2 15 − 1 = −32768 ≤ int ≤ +32767<br />
– Komputer 32 bits<br />
−2 31 ≤ int ≤ 2 31 − 1 = −2147483648 ≤ int ≤<br />
+2147483647<br />
• Unsigned int<br />
– Komputer 16 bits<br />
0 ≤ int ≤ 2 16 − 1 = 0 ≤ int ≤ +65535<br />
– Komputer 32 bits<br />
0 ≤ int ≤ 2 32 − 1 = 0 ≤ int ≤ +4294967295<br />
Fungsi sizeof digunakan untuk mengetahui ukuran memori yang<br />
dibutuhkan oleh suatu variabel bertipe data tertentu. Penyataan<br />
berikut memperlihatkan penggunaan dari fungsi sizeof tersebut.<br />
printf("Ukuran int = %d, Ukuran double = %d\n",<br />
sizeof(int), sizeof(double));<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> <strong>13</strong> <strong>—</strong> #27<br />
3.4. Pres<strong>id</strong>ensi dan Urutan Pemrosesan (Associativity) Operator<br />
dalam C <strong>13</strong><br />
3.4 Pres<strong>id</strong>ensi dan Urutan Pemrosesan (Asso-<br />
ciativity) Operator dalam C<br />
Gambar 3.1 memperlihatkan urutan pemrosesan dan pres<strong>id</strong>ensi dari<br />
sebuah operator dalam pemrograman C. Urutan pemrosesan dan<br />
pres<strong>id</strong>ensi harus diketahui agar keluaran dari pernyataan gabungan<br />
t<strong>id</strong>ak keliru.<br />
Gambar 3.1: Pres<strong>id</strong>ensi dan Urutan Pemrosesan (Associativity)<br />
3.5 Operator-Operator<br />
3.5.1 Operator Aritmatik, Relasional, dan Increment/Decrement<br />
Gambar 3.2 menampilkan operator aritmatika. Gambar 3.3 menampilkan<br />
operator relasional dan gambar 3.4 menampilkan operator incre-<br />
ment/decrement.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 14 <strong>—</strong> #28<br />
14 Bab 3. Tipe Data<br />
Contoh:<br />
x = 5;<br />
y = x++;<br />
x = 5;<br />
y = ++x;<br />
x = 5;<br />
Gambar 3.2: Operator Aritmatik.<br />
Gambar 3.3: Operator Relasional.<br />
y = x + x++; Berapakah nilai y ?<br />
3.5.2 Operator Assignment (=)<br />
Penggunaan operator assignment (=) sering menjebak programmer<br />
karena operator ini bukanlah operator boolean (= =) yang digunakan<br />
untuk membandingkan dua buah nilai.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 15 <strong>—</strong> #29<br />
3.5. Operator-Operator 15<br />
Gambar 3.4: Operator Increment/Decrement.<br />
Gambar 3.5: Contoh Operator Assignment.<br />
3.5.3 Assignment Operator<br />
Penggunaan pernyataan: variabel(operator)=ekspresi memberikan<br />
keluaran yang sama dengan pernyataan variabel=variable (operator)<br />
ekspresi. Contoh:<br />
y += x; y = y + x;<br />
y /= (x + 2); y = y / (x + 2);<br />
y += (x %= 3)-(t *= 5); y= y+ (x=x%3) - (t=t*5);<br />
y += (x == 2)<br />
Berapakah nilai y jika nilai awal y = 10 dan x = 0 ?<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 16 <strong>—</strong> #30<br />
16 Bab 3. Tipe Data<br />
3.6 Konversi Tipe Data<br />
Konversi data dapat dilakukan secara otomatis (automatic con-<br />
version/promotion) dan konversi secara manual (eksplisit/casting).<br />
Pengkonversian secara otomatis terjadi apabila dalam suatu perny-<br />
ataan memiliki dua variabel dengan tipe yang berbeda sehingga salah<br />
satu dari variabel tersebut akan dikonversikan berdasarkan urutan<br />
berikut:<br />
int
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 17 <strong>—</strong> #31<br />
3.6. Konversi Tipe Data 17<br />
x = (float) ((int) y + 1);<br />
(double) (x = 77) T<strong>id</strong>ak sama artinya dengan<br />
int x = 7;<br />
int y = 3;<br />
float f;<br />
(double) x = 77, mengapa?<br />
f = x / y; Nilai f = 2<br />
f = (float) x / float (y); Nilai f = 2.3<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 18 <strong>—</strong> #32<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 19 <strong>—</strong> #33<br />
Bab 4<br />
Pernyataan Bersyarat<br />
(Conditional Statement)<br />
4.1 Pendahuluan<br />
Pernyataan bersyarat (conditional statement) dalam pemrograman<br />
lebih dikenal dengan istilah flow control of statement. C memiliki<br />
beberapa jenis conditional statement, antara lain:<br />
• if dan if...else statement<br />
• switch statement<br />
• break dan continue statement<br />
• conditional operator (?:)<br />
4.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan dan menjelaskan<br />
loop dan conditional statement, dan (ii) menjelaskan perbedaan<br />
antara satu statement dengan statement yang lain<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 20 <strong>—</strong> #34<br />
20 Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
4.3 Konsep Pernyataan Bersyarat<br />
Program-program bahasa C dieksekusikan secara berurutan dari baris<br />
ke baris. Namun, program tersebut bisa dikontrol eksekusinya dengan<br />
menggunakan suatu mekanisme pengontrol. Mekanisme pengontrol<br />
tersebut membandingkan suatu pernyataan dengan pernyataan lain<br />
yang dikenal sebagai kondisi, lalu mengeksekusi perintah-perintah<br />
yang memenuhi kondisi tersebut. Dengan kata lain, jika kon-<br />
disinya bernilai Benar (TRUE) maka compiler C akan menggerjakan<br />
semua perintah-perintah yang berada dalam prosedur mekanisme<br />
pengontrol.<br />
Mekanisme pengontrol dapat diimplementasikan dengan mengu-<br />
nakan operator relasional. Tabel 4.1 menampilkan operator-operator<br />
relasional.<br />
Tabel 4.1: Operator relasional<br />
Operator Simbol<br />
sama dengan ==<br />
t<strong>id</strong>ak sama dengan !=<br />
lebih kecil <<br />
lebih besar ><br />
lebih kecil atau sama dengan ≤<br />
lebih besar atau sama dengan ≥<br />
t<strong>id</strong>ak (not) !<br />
dan (and) &&<br />
atau (or) ||<br />
4.4 Serangkaian Pernyataan (Compound State-<br />
ment)<br />
Compound statement atau serangkaian statement yang saling berkai-<br />
tan biasanya ditulis secara berkelompok dalam tanda kurung kurawal<br />
{ dan }. C menggunakan { dan } untuk mengapit beberapa statement<br />
dalam satu blok. Program 8 merupakan potongan program C dengan<br />
menggunakan Compound statement.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 21 <strong>—</strong> #35<br />
4.5. Lokal Variabel 21<br />
Program 8 Potongan program dengan menggunakan Compound<br />
statement.<br />
{<br />
a = 1;<br />
if (a > 0)<br />
{<br />
int b = a;<br />
b++;<br />
a += b;<br />
}<br />
}<br />
Biasanya statement if, if..else, while, for, do dan switch selalu<br />
diikuti dengan statement yang berkaitan dengannya. Statement yang<br />
mengikuti if, if..else, while, for, do dan switch dapat berupa single<br />
statement maupun compound statement.<br />
4.5 Lokal Variabel<br />
C membenarkan pendeklarasian lokal variabel. Lokal variabel yang<br />
d<strong>id</strong>eklarasikan dalam suatu blok akan bersifat private (t<strong>id</strong>ak dapat<br />
diakses diluar blok). Gambar 4.1 menunjukkan contoh penggunaan<br />
variabel lokal.<br />
Gambar 4.1: Contoh penggunaan variabel lokal<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> <strong>22</strong> <strong>—</strong> #36<br />
<strong>22</strong> Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
4.6 if dan if else Statement<br />
Bentuk umum dari if statement adalah sebagai berikut:<br />
if () {<br />
}<br />
<br />
Jika bernilai true maka perintah akan dieksekusikan. Program 9 merupakan<br />
potongan program C menggunakan if statement<br />
Program 9 Potongan program dengan menggunakan if statement.<br />
int main(){<br />
int x=0;<br />
if(x !=0){<br />
printf("Nilai x sama dengan nol");<br />
}<br />
printf("Nilai x t<strong>id</strong>ak sama dengan nol");<br />
}<br />
Sedangkan Bentuk umum dari if else statement adalah sebagai<br />
berikut:<br />
if ()<br />
else<br />
<br />
<br />
Dimana jika bernilai benar, maka dieksekusikan. Sebaliknya, jika <br />
bernilai salah, maka yang akan dieksekusikan.<br />
Namun pada realita, kadang-kadang sebuah program C mempunyai<br />
dua buah atau lebih ekspresi if else yang berada secara berdekatan.<br />
Hal ini membuat sedikit bingung bagi programmer untuk mengetahui<br />
ekspresi statement else mana yang akan menjadi "pasangan" bagi<br />
if tertentu. Akan tetapi, kompiler C secara automatis mengetahui<br />
setiap pasangan if else dan ini akan ditunjukkan melalui gambar 4.2<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 23 <strong>—</strong> #37<br />
4.6. if dan if else Statement 23<br />
Gambar 4.2: Contoh penggunaan if else statement<br />
dan 4.3. Pada gambar 4.2 terlihat bahwa else pertama (else a–)<br />
sangat dekat dengan statement if(y>0). Oleh karena itu, statement<br />
else itu merupakan else bagi if(y>0). Sedangkan statement else b =<br />
b/2 menjadi statement else bagi statement if (x>0).<br />
Gambar 4.3: Contoh penggunaan if else statement<br />
Sebagai tambahan, jika pada kondisi statement if mempunyai<br />
lebih dari dua statement, maka statement-statement tersebut akan<br />
diapit oleh tanda kurung kurawal { dan }. Berikut bentuk umum<br />
dari if else statement untuk kondisi ini.<br />
if () {<br />
<br />
}<br />
else {<br />
<br />
}<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 24 <strong>—</strong> #38<br />
24 Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
Program 10 merupakan potongan program C menggunakan if else<br />
statement dan menghasilkan sebuah program untuk menentukan nilai<br />
huruf dari kalkulasi nilai tugas, ujian tengah semester(uts) dan ujian<br />
akhir semester(uas). Kompiler C mengecek hasil dari variabel nilai.<br />
Jika nilai lebih kecil dari 90, kompiler C akan mengeksekusi statement<br />
else yang terdapat di dalamnya statement if(nilai ≥ 80). Setelah<br />
itu, jika nilai lebih kecil dari 80 maka kompiler C akan mengeksekusi<br />
statement else yang ke dua dan begitu juga seterusnya.<br />
Program 10 Potongan program dengan menggunakan if else<br />
statement.<br />
int main() {<br />
float uts, nilai, uas, tugas;<br />
printf("Tugas: "); scanf("\%f",\&tugas);<br />
printf("UTS: "); scanf("\%f",\&uts);<br />
printf("UAS: "); scanf("\%f",\&uas);<br />
nilai = 0.2 * tugas + 0.3 * uts + 0.5 * uas;<br />
}<br />
if (nilai >= 90)<br />
printf("Nilai A");<br />
else if (nilai >= 80)<br />
printf("Nilai B");<br />
else if (nilai >= 65)<br />
printf("Nilai C");<br />
else if (nilai >= 50)<br />
printf("Nilai D");<br />
else<br />
printf("Nilai E");<br />
return 0;<br />
Adapun luaran dari program di atas adalah tergantung dari nilai<br />
inputan tugas, uas, dan uts. Setiap inputan nilai-nilai tersebut<br />
dimasukkan ke dalam sebuah alamat memory melalui perintah scanf.<br />
Inputan nilai tersebut ditampung ke dalam sebuah memory yang<br />
berbeda-beda. Asumsikan inputan tugas, uts, dan uas adalah 75,<br />
70, 90, maka luaran dari program 10 adalah:<br />
Nilai B<br />
Latihan: Berdasarkan contoh program 10, coba modifikasi program<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 25 <strong>—</strong> #<strong>39</strong><br />
4.7. Switch Statement 25<br />
tersebut dengan menambahkan tanda kurung kurawal { dan } pada<br />
setiap statement if else.<br />
4.7 Switch Statement<br />
Bentuk umum dari switch statement adalah sebagai berikut :<br />
switch (ekspresi) {<br />
case ekspresi 1 : statement1<br />
case ekspresi 2 : {<br />
statement1<br />
statement2<br />
...<br />
}<br />
...<br />
...<br />
default : statement lainnya<br />
}<br />
Gambar 4.4: Contoh penggunaan switch statement<br />
Cara kerja switch statement adalah sebagai berikut:<br />
• cek (ekspresi) dari switch<br />
• Kerjakan semua statement dari ekspresi case yang bernilai<br />
benar (true)<br />
• Jika t<strong>id</strong>ak ada ekspresi case yang benar maka kerjakan statement<br />
pada bagian default<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 26 <strong>—</strong> #40<br />
26 Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
Program 11 Contoh penggunaan switch statement lain.<br />
int main() {<br />
int grade = 3;<br />
switch (grade) {<br />
case 1: printf("Fall (F)\n"); break;<br />
case 2: printf("Bad (D)\n"); break;<br />
case 3: printf("Good (C)\n");<br />
case 4: printf("Very Good (B)\n"); break;<br />
case 5: printf("Excellent (A)\n"); break;<br />
default:<br />
printf("You have inputted false grade\n");<br />
break; // break disini t<strong>id</strong>ak perlu<br />
}<br />
}<br />
Bagaimana hasil dari eksekusi Program 11? Output atau luaran<br />
dari Program 11 adalah:<br />
Good (C)<br />
Very Good (B)<br />
Hasil tersebut diperoleh karena pada case 3 t<strong>id</strong>ak ada perintah break.<br />
Ingat kembali bahwa kompiler C mengeksekusi program C secara<br />
berurutan dari baris ke baris. Oleh karena itu, setelah mengeksekusi<br />
case 3, kompiler C juga mengeksekusi bagian di case 4 dan keluar dari<br />
bagian switch setelah menjumpai break pada bagian case 4. Perintah<br />
break termasuk salah satu mekanisme pengontrol dan akan dibahas<br />
pada sub bab 4.8.<br />
4.8 Break dan Continue Statements<br />
Bentuk umum dari break statement adalah:<br />
break;<br />
Tujuan break statement adalah:<br />
• memerintahkan compiler untuk keluar dari satu tingkat (biasanya<br />
digunakan pada statement pengulangan dan pilihan<br />
bercabang)<br />
• Menghentikan pengeksekusian program secara t<strong>id</strong>ak normal<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 27 <strong>—</strong> #41<br />
4.8. Break dan Continue Statements 27<br />
Gambar 4.5 menunjukkan contoh dan penjelasan dari break<br />
statement.<br />
Gambar 4.5: Contoh penggunaan break statement<br />
Bentuk umum dari continue statement adalah:<br />
continue;<br />
Tujuan break statement adalah:<br />
• memerintahkan compiler untuk melanjutkan pengeksekusian<br />
program dalam satement pengulangan tanpa pengeksekusian<br />
program yang berada dibawah statement continue<br />
• Melanjutkan pengeksekusian program di dalam perulangan<br />
Program 12 memperlihatkan penggunaan break dan continue<br />
dalam sebuah perulangan do while. Pada program ini kompiler<br />
akan keluar dari perulangan do while ketika inputan nilai n < 0<br />
atau n = 0 dan akan melanjutkan pengeksekusian program serta<br />
sekaligus mencetak string "Skip the value" ketika n > 0. Akan<br />
tetapi bila inputan nilai n = 0 maka kompiler akan keluar dari<br />
perulangan dengan mencetak string "The number is: 0". Namun,<br />
jika inputan nilai n t<strong>id</strong>ak pernah sama dengan 0, maka string "the<br />
number is:" t<strong>id</strong>ak akan pernah dicetak. Hal ini dikarenakan statement<br />
pencetakan string tersebut berada setelah statement continue di<br />
dalam perulangan.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 28 <strong>—</strong> #42<br />
28 Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
Program 12 Sebuah program C penggunaan break dan continue<br />
statement.<br />
int main() {<br />
int n;<br />
do {<br />
printf("\nEnter the number:");<br />
scanf("%d",&n);<br />
if (n < 0) {<br />
break;<br />
}<br />
if(n>10) {<br />
printf("Skip the value\n");<br />
continue;<br />
}<br />
printf("The number is: %d", n);<br />
} while (n != 0);<br />
}<br />
Hasil atau luaran dari program 12 adalah:<br />
Enter the number :1<br />
The number is:1<br />
Enter the number :51<br />
Skip the value<br />
Enter the number:-1<br />
4.9 Continue Statement Lanjutan<br />
Pada sub bab ini akan memperlihatkan perbedaan antara statement<br />
continue dan next. Statement continue melanjutkan eksekusi<br />
statement-statement yang berada di dalam perulangan secara berurutan<br />
dan t<strong>id</strong>ak mengeksekusikan statement-statement yang berada<br />
setelah statement continue. Sedangkan statement next mengarahkan<br />
kompiler C untuk mengeksekusi semua statement yang berada setelah<br />
statement next. Berdasarkan contoh fig:continuelanjutan, ketika<br />
kompiler C mengeksekusikan statement continue, maka kompiler<br />
C secara langsung mengeksekusikan expr2 tanpa mengeksekusikan<br />
expr3. Sedangkan ketika kompiler C mengeksekusikan statement goto<br />
next, kompiler C mengeksekusikan expr3 dan t<strong>id</strong>ak mengeksekusikan<br />
semua statement yang berada diantara goto next dan next.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 29 <strong>—</strong> #43<br />
4.10. Conditional Operator 29<br />
Gambar 4.6: Contoh continue statement lanjutan<br />
4.10 Conditional Operator<br />
Bentuk umum dari conditional operator adalah:<br />
expr1 ? expr2 : expr3<br />
expr1 adalah evaluasi dari kondisi jika kondisi benar (TRUE)<br />
maka nilai dari operan tersebut adalah expr2 dan jika kondisi salah<br />
(FALSE) maka nilai dari operan tersebut adalah expr3.<br />
Gambar 4.7: Contoh conditional operator<br />
Conditional Operator digunakan untuk mempersingkat dalam<br />
penulisan program. Semakin sedikit jumlah baris di dalam sebuah<br />
program, maka semakin cepat kompiler C dalam mengeksekusi<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 30 <strong>—</strong> #44<br />
30 Bab 4. Pernyataan Bersyarat (Conditional Statement)<br />
program tersebut. Di dalam bahasa pemrograman C, jumlah baris<br />
dari sebuah program dihitung dengan melihat jumlah dari karakter<br />
’;’ di dalam program tersebut.<br />
Condition Operator merupakan suatu operator untuk mempersingat<br />
sebuah statement if else. Gambar 4.7 dan fig:expr2 memperlihatkan<br />
bagaimana cara mengubah statement if else ke dalam bentuk<br />
conditional operator.<br />
Gambar 4.8: Contoh conditional operator<br />
Latihan:<br />
Bagaimanakan bentuk if..else dari statement conditional berikut:<br />
1. age > 17 ? printf("You can vote.") :<br />
printf("You cannot vote.");<br />
2. val = ((y>0) ? 10 : ((x==0) ? 100 : 1000));<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 31 <strong>—</strong> #45<br />
Bab 5<br />
Perulangan (Loop)<br />
5.1 Pendahuluan<br />
Proses perulangan (loop) sangat diperlukan untuk membuat suatu<br />
proses yang sama pernyataannya berulang-ulang. Statement perulangan<br />
antara lain:<br />
• do statement<br />
• while statement<br />
• for statement<br />
5.2 Objektif<br />
Objektif dari pertemuan ini adalah (i) memperkenalkan dan menjelaskan<br />
loop, (ii) menjelaskan perbedaan dan kesamaan antara satu<br />
jenis perulangan dengan perulangan yang lain.<br />
5.3 do while Statement<br />
5.3.1 do while Statement (Dasar)<br />
Bentuk umum dari do statement adalah:<br />
do {<br />
<br />
} while (expr);<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 32 <strong>—</strong> #46<br />
32 Bab 5. Perulangan (Loop)<br />
Statement do while mengizinkan perulangan (loop) untuk mengeksekusikan<br />
selama kondisi expr bernilai TRUE. <br />
murupakan bagian yang akan diulang. Sedangkan <br />
adalah kondisi yang dievaluasi, jika kondisi benar maka proses<br />
perulangan dilakukan sedangkan jika kondisi bernilai salah proses<br />
perulangan dihentikan. Karena kompiler C mengeksekusikan secara<br />
teratur dari satu baris ke baris lain dan statement do { } while<br />
menempatkan kondisi exprt secara struktur di bagian terakhir, maka<br />
perulangan akan dieksekusi paling sedikit sekali. Program<br />
<strong>13</strong> dan 14 merupakan contoh program dengan menggunakan do<br />
while statement.<br />
Program <strong>13</strong> Contoh program dengan menggunakan do while.<br />
/* Demonstration of the do..while loop */<br />
#include<br />
#include<br />
int main() {<br />
int value, rDigit;<br />
printf(Enter a number to be reversed.\n);<br />
scanf("%d", &value);<br />
}<br />
do {<br />
rDigit = value % 10;<br />
printf("%d", rDigit);<br />
value = value / 10;<br />
} while (value != 0);<br />
printf(\n);<br />
return 0;<br />
Program 14 Contoh potongan program dengan menggunakan do<br />
while.<br />
do {<br />
sum +=i;<br />
scanf("%d",&i);<br />
} while(i > 0)<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 33 <strong>—</strong> #47<br />
5.3. do while Statement 33<br />
Pada potongan program 14 terdapat beberapa hal yang perlu<br />
diperhatikan:<br />
• Minimal statement dalam do dilakukan satu kali.<br />
• Pengulangan berhenti jika data yang dimasukkan berupa bilangan<br />
nol (0) atau bilangan negatif.<br />
• Input dapat berupa bilangan bulat(int) ataupun bilangan real<br />
(float).<br />
• Proses perulangan untuk mendapatkan jumlah dari sum.<br />
5.3.2 do while Statement (Lanjutan)<br />
Gambar 5.1 menampilkan dua buah program dengan menggunakan<br />
do while statement. Program yang disebelah kiri merupakan program<br />
untuk menginputkan sebuah karakter dengan menggunakan dua buah<br />
perulangan do while. Jika karakter yang dimasukkan adalah ’y’ atau<br />
’t’ dan setelah dikonversi menjadi huruf kapital, maka kompiler C<br />
akan mencetak string "Anda harus coba inputkan lagi". Akan tetapi<br />
jika yang dimasukkan adalah karakter ’t’, maka kompiler C akan<br />
keluar dari double perulangan tersebut.<br />
Gambar 5.1: Contoh penggunaan do while statement lanjutan<br />
Pada gambar 5.2 menampilkan dua buah program dengan menggunakan<br />
do while statement. Kedua program C tersebut sekilas<br />
terlihat mirip. Namun, hasil atau luaran dari kedua program tersebut<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 34 <strong>—</strong> #48<br />
34 Bab 5. Perulangan (Loop)<br />
adalah berbeda. Perbadaannya adalah hanya letak dari penulisan<br />
sintaks k++ dan printf("%d",k). Akibatnya akan menghasilkan<br />
luaran yang berbeda. Program yang sebelah kiri mencetak nilai<br />
k terlebih dahulu kemudian nilai k di-increment-kan. Sedangkan<br />
program yang sebelah kanan meng-increment-kan nilai k terlebih<br />
dahulu kemudian mencetak nilai k.<br />
Gambar 5.2: Dua buah program menggunakan do while statement<br />
5.4 for Statement<br />
5.4.1 for Statement (Dasar)<br />
Bentuk Umum for statement adalah:<br />
for (;;)<br />
{<br />
<br />
}<br />
Dimana merupakan inisialisasi awal dari variable yang<br />
digunakan, dan adalah expresi logika (bentuk perbandingan<br />
nilai, syarat). Pengulangan dilakukan jika kondisi pada expr2 masih<br />
benar (true). Sedangkan adalah bagian update. Biasanya<br />
berbentuk penambahan atau pengurangan nilai variabel counter.<br />
Secara teknis, alur kerja program C yang menggunakan for<br />
statement adalah sama dengan program yang menggunakan do while.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 35 <strong>—</strong> #49<br />
5.4. for Statement 35<br />
Ketika kompiler mengeksekusi perintah for (;;),<br />
sintaks pertama yang dieksekusi adalah . Kemudian kompiler<br />
mengeksekusi yang berada di dalam looping<br />
body. Setelah penambahan atau pengurangan nilai variabel counter<br />
, kompiler mengecek kondisi untuk mengetahui<br />
apakah proses looping selanjutnya dikerjakan atau t<strong>id</strong>ak. Proses ini<br />
sama seperti yang dilakukan pada statement do while. Gambar 5.3<br />
akan menunjukkan proses konversi program C yang menggunakan for<br />
statement ke do while.<br />
Gambar 5.3: Konversi program C yang menggunakan for statement<br />
ke do while statement<br />
5.4.2 for Statement (Lanjutan)<br />
Pada bagian ini akan ditampilkan tiga buah contoh program C dengan<br />
menggunakan perulangan for. Misalnya gambar 5.4 menunjukkan<br />
sebuah program C untuk menghitung total penjumlahan 10 bilangan<br />
integer positif pertama. Untuk mengimplementasikan algoritma<br />
ini, perlu diperhatikan beberapa faktor. Pertama adalah semua<br />
urutan bilangan tersebut harus ditampung ke dalam sebuah variabel<br />
(misalnya i). Kedua, nilai awal dari variabel i adalah 1 dan<br />
batas akhir dari variabel i adalah 10. Dan ketiga variabel i<br />
perlu bertambah satu-satu untuk setiap perulangan supaya semua<br />
urutan bilangan asli bisa dijumlahkan. Penjumlahan kumulatif<br />
dari bilangan tersebut dihitung secara teratur oleh kompiler dengan<br />
mengeksekusikan perintah U += i. Perintah ini ekivalen dengan<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 36 <strong>—</strong> #50<br />
36 Bab 5. Perulangan (Loop)<br />
U = U + i dengan memberikan nilai awal dari variabel i =<br />
0 dan d<strong>id</strong>eklarasikan sebelum statement for. Sedangkan pada<br />
gambar 5.5 menampilkan beberapa gaya penulisan program C dengan<br />
menggunakan perulangan for dan gambar 5.6 adalah salah satu<br />
contoh program dengan menggunakan double looping.<br />
Gambar 5.4: Program untuk menghitung total penjumlahan 10<br />
bilangan integer positif pertama<br />
Gambar 5.5: Beberapa program dengan menggunakan for statement<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 37 <strong>—</strong> #51<br />
5.5. while statement 37<br />
Gambar 5.6: Contoh program dengan menggunakan double for<br />
statement<br />
5.5 while statement<br />
Bentuk Umum dari while statement adalah:<br />
while () {<br />
;<br />
}<br />
;<br />
Terdapat beberapa hal yang perlu diperhatikan:<br />
• adalah kondisi (syarat) dari while<br />
• disebut badan dari while loop<br />
• merupakan statement yang dikerjakan setelah<br />
pengulangan berakhir<br />
• pengulangan dilakukan jika kondisi (syarat) pada masih<br />
benar<br />
Statement while juga sangat mirip dengan statement do while dan<br />
for dalam cara pengeksekusian program. Gambar 5.7 akan menunjukkan<br />
bagaimana cara mengkonversi program C dengan menggunakan<br />
perulangan while menjadi program C dengan menggunakan<br />
perulangan for dan do while.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 38 <strong>—</strong> #52<br />
38 Bab 5. Perulangan (Loop)<br />
Gambar 5.7: Konversi statement while ke dalam bentuk do while dan<br />
for<br />
Pada sub bab ini beberapa contoh program C menggunakan perulangan<br />
while lanjutan akan ditampilkan seperti dua buah program<br />
berikut. Program ini adalah untuk menentukan akar persamaan<br />
kuadrat<br />
f(x) = 2x 2 + 6x + 3 (5.1)<br />
int main(vo<strong>id</strong>) {<br />
double xl= -1.5, xr=l.0, eps=0.00001,<br />
xm, fxl, fxm, epsb, abseps=1, x;<br />
xm = 0. 5 * (xl + xr) ;<br />
while(abseps >= eps) {<br />
abseps= abs (xm - xl);<br />
fx1 = 2*sqr(x1) +6*xl+3;<br />
fxm = 2*sqr(xm) +6*xm+3;<br />
epsb = fxl * fxm ;<br />
if (epsb < 0.0) xr = xm;<br />
else xl = xm ;<br />
xm = 0.5 * (xl + xr) ;<br />
x=xm;<br />
}<br />
printf(" Akar persamaan %lf\n", x);<br />
return 1;<br />
}<br />
Sedangkan program berikut ini adalah untuk menampilkan urutan<br />
10 bilangan integer positif pertama beserta mencari salah satu angka<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> <strong>39</strong> <strong>—</strong> #53<br />
5.5. while statement <strong>39</strong><br />
apakbar angka tersebut berada di dalam urutan 10 bilangan positif<br />
pertama atau t<strong>id</strong>ak.<br />
#include<br />
int main(){<br />
int x = 10, numberFound= 5;<br />
int i = 0, j = 1;<br />
}<br />
// using while loop statement<br />
while(i < x){<br />
i++;<br />
printf("%d\n",i);<br />
}<br />
// when,escape loop body<br />
while(j < x){<br />
if(j == numberFound){<br />
printf("number found\n");<br />
break;<br />
}<br />
printf("%d...keep finding\n",j);<br />
j++;<br />
}<br />
return 1;<br />
Hasil luaran dari program tersebut adalah sebagai berikut:<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
1...keep finding<br />
2...keep finding<br />
3...keep finding<br />
4...keep finding<br />
number found<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 40 <strong>—</strong> #54<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 41 <strong>—</strong> #55<br />
Bab 6<br />
Lanjutan Perulangan (Loop)<br />
dan Contoh<br />
6.1 Pendahuluan<br />
Karena kita ketahui bersama bahwa proses perulangan (loop) sangat<br />
diperlukan untuk membuat suatu proses yang sama pernyataannya<br />
berulang-ulang, materi ini akan memperlihatkan penggunaan statement<br />
perulangan dalam program.<br />
6.2 Objektif<br />
Objektif dari pertemuan ini adalah (i) memperlihatkan dengan<br />
contoh penggunaan statement perulangan, dan (ii) mendiskusikan<br />
keluaran yang akan dihasilkan oleh program .<br />
6.3 Contoh Perulangan for (Lanjutan)<br />
6.3.1 Contoh 1<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
for (i=0,total =0;scantf("%d",&number)==1;)<br />
{<br />
if (number < 0)<br />
{<br />
continue;<br />
}<br />
total +=number;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 42 <strong>—</strong> #56<br />
42 Bab 6. Lanjutan Perulangan (Loop) dan Contoh<br />
}<br />
printf("Jumlah bilangan positif yang dimasukan = %d\n", total);<br />
6.3.2 Contoh 2<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
while ((c=getchar()) !=EOF)<br />
if (c== ’ ’)<br />
++blank_cnt;<br />
else<br />
if (c>= ’0’ && C = ’a’ && c= ’A’ && c= ’\n’)<br />
++nl_cnt;<br />
else<br />
++other_cnt;<br />
6.3.3 Contoh 3<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
i=-5<br />
n=50;<br />
while (i
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 43 <strong>—</strong> #57<br />
6.3. Contoh Perulangan for (Lanjutan) 43<br />
}<br />
else<br />
{<br />
printf("password salah: ");<br />
printf("Masukkan Password : ");<br />
scanf("%s", pw);<br />
k++;<br />
}<br />
6.3.5 Contoh 5<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
include <br />
int main (vo<strong>id</strong>)<br />
{<br />
int u15=0,u16=0,u17=0,u18=0,ul=0,n,u,i<br />
scanf("%d",&n);<br />
scanf("%d",&u);<br />
while (i = eps) {<br />
abseps= abs (xm - xl);<br />
fx1 = 2*sqr(x1) +6*xl+3;<br />
fxm = 2*sqr(xm) +6*xm+3;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 44 <strong>—</strong> #58<br />
44 Bab 6. Lanjutan Perulangan (Loop) dan Contoh<br />
}<br />
epsb = fxl * fxm ;<br />
if(epsb < 0.0) xr = xm;<br />
else xl = xm ;<br />
xm = 0.5 * (xl + xr) ; x=xm; }<br />
printf(" Akar persamaan %lf\n", x);<br />
printf("\nUlangi (Y/T) ? ");<br />
do {<br />
ch = toupper(getch());<br />
} while(!((ch==’Y’) || (ch ==’T’)));<br />
}<br />
while(!(ch == ’T’));<br />
return 1;<br />
6.3.7 Contoh 7<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
#include<br />
int main(){<br />
int i,j;<br />
for(i=0, j=100; (i0); i++, j--) {<br />
printf("\n",i,j);<br />
if(i==j){<br />
printf("Mempunyai Nilai yang sama<br />
pada langkah ke %d\n",i);<br />
break;<br />
}<br />
}<br />
return 1;<br />
}<br />
6.3.8 Contoh 8<br />
Coba diskusikan dan bagaimana hasil dari potongan program berikut.<br />
#include<br />
int main(){<br />
int i,j;<br />
for(i=0; i=i; j--){<br />
printf("*");<br />
}<br />
printf("\n");<br />
}<br />
return 1;<br />
}<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 45 <strong>—</strong> #59<br />
Bab 7<br />
Array Satu Dimensi<br />
7.1 Pendahuluan<br />
Memahami konsep array dimensi satu yang dikombinasikan dengan<br />
penggunaan operator pre-increment dan pre-decrement, postincrement<br />
dan post decrement. Tipe data array juga dikenal dengan<br />
istilah aggregate data type. Array juga biasa disebut sebagai pointer<br />
tetap (fixed pointer) karena setelah d<strong>id</strong>eklarasikan, alamat awal dari<br />
array tersebut atau alamat pada slot 0 t<strong>id</strong>ak dapat diubah-ubah<br />
layaknya pointer biasa.<br />
7.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan cara pendeklarasian<br />
array, (ii) menjelaskan penggunaan array satu dimensi,<br />
dan (iii) memperlihatkan contoh array satu dimensi berserta visualisasinya.<br />
7.3 Definisi dan Pendeklarasian Array<br />
Array adalah kumpulan nilai dengan tipe data yang sama yang<br />
menggunakan nama sama. Array selain merupakan suatu bentuk<br />
struktur data juga merupakan pointer. Perbedaan utama antara<br />
array dengan ponter biasa adalah bahwa alamat yang ditunjuk oleh<br />
array pada saat d<strong>id</strong>eklarasi t<strong>id</strong>ak dapat diubah-ubah seperti halnya<br />
pointer yang lain.<br />
Cara pendeklarasian array sama seperti mendeklarasikan variabel<br />
denga tipe data yang lain, hanya saja diperlukan operator [ ] yang<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 46 <strong>—</strong> #60<br />
46 Bab 7. Array Satu Dimensi<br />
berisikan ukuran dari array yang d<strong>id</strong>eklarasikan. Bentuk umum<br />
pendeklarasian array adalah:<br />
tipeDataArray namaArray[ukuran]<br />
Dimana tipeDataArray adalah suatu tipe data untuk nilai dari sebuah<br />
array, namaArray adalah sebuah variabel array, dan ukuran adalah<br />
ukuran dari array. Berikut adalah beberapa contoh pendeklarasian<br />
array dengan tipe data dan ukuran yang berbeda-beda.<br />
int a[6] = {8, 4, 6, 3, 4, 10};<br />
int ageOfStudents[60];<br />
float ipkOfStudents[60];<br />
Contoh pertama diatas adalah mendeklarasikan sebuah array satu<br />
dimensi dengan variabel a bertipe data integer dan berukuran 6 dengan<br />
langsung memberikan nilai awalnya. Contoh berikutnya adalah<br />
mendeklarasikan sebuah array satu dimensi dengan variabel ageOf-<br />
Students bertipe data integer dan berukuran 60 tanpa memberikan<br />
nilai awalnya. Sedangkan contoh yang ketiga adalah mendeklarasikan<br />
sebuah array satu dimensi dengan variabel ipkOfStudents bertipe<br />
data float dan berukuran 60 tanpa memberikan nilai awalnya.<br />
7.4 Inisialisasi Nilai<br />
Sama halnya seperti penginisialisasian nilai pada variabel, array juga<br />
dapat diberikan nilai pada saat pendeklarasian. Gambar 7.1 adalah<br />
bagaimana pendeklarasian, penginisialisasian, dan pengvisualisasian<br />
array.<br />
Gambar 7.1: Contoh penginisialisasi array<br />
Pendeklarasian sebuah array membutuhkan sejumlah memori<br />
yang besarnya sesuai dengan besar ukuran tipe data dan ukuran array<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 47 <strong>—</strong> #61<br />
7.5. Indeks (Subscript) Dari Array 47<br />
itu sendiri. Jika diasumsikan alamat dari array A atau slot pertama<br />
dari array A di atas adalah 2310 dan ukuran dari tipe data int adalah<br />
4 bytes, maka visualisasi dari pendeklarasian array A ditunjukkan<br />
melalui Gambar 7.2<br />
Gambar 7.2: Visualisasi alamat array<br />
Adapun untuk menghitung total memori yang dibutuhkan dalam<br />
pendeklarasian sebuah array adalah dengan menggunakan formula<br />
berikut:<br />
TotalMemori(dalam satuan bytes)=sizeof(tipeData)*ukuran_array;<br />
7.5 Indeks (Subscript) Dari Array<br />
Indeks atau subscript dari array dalam C selalu dimulai dengan 0<br />
sampai dengan ukuran array - 1. Sebagai contoh float farr[10]; maka<br />
indeks dari array farr adalah seperti pada gambar di bawah ini.<br />
Gambar 7.3: Indeks (Subscript) dari array<br />
7.6 Alokasi Memory Array<br />
Array dapat d<strong>id</strong>eklarasikan secara global (deklarasi di luar fungsi<br />
main) dan secara lokal (d<strong>id</strong>alam sebuah fungsi atau main). Hati-<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 48 <strong>—</strong> #62<br />
48 Bab 7. Array Satu Dimensi<br />
hati jika kita mendeklarasikannya secara lokal, karena variabel lokal<br />
akan dibentuk dalam st<strong>ac</strong>k ketika fungsi tersebut dibentuk, dan akan<br />
dihapus ketika fungsi tersebut dihancurkan (ketika fungsi tersebut<br />
selesai dieksekusi). Mungkin hal ini t<strong>id</strong>ak bermasalah bagi variabel<br />
biasa, namun array umumnya akan menuntut jumlah memory yang<br />
sangat besar (array float mydata[5000]; akan membutuhkan memory<br />
sebesar 20000 bytes), sementara st<strong>ac</strong>k hanya memiliki kapasitas sekitar<br />
2000 - 4000 bytes. Oleh karena itu untuk array yang besar harus<br />
d<strong>id</strong>eklarasikan secara global, atau mempergunakan perintah static<br />
(misalnya static float mydata[5000];) ketika kita mendeklarasikannya<br />
secara local. Gambar 7.4 menampilkan contoh dari array satu<br />
dimensi.<br />
Gambar 7.4: Contoh penggunaan array dan visualisasinya<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 49 <strong>—</strong> #63<br />
Bab 8<br />
Array Dua Dimensi<br />
8.1 Pendahuluan<br />
Memahami konsep array multi dimensi yang dikombinasikan dengan<br />
penggunaan operator pre-increment dan pre-decrement, postincrement<br />
dan post decrement. C sebenarnya t<strong>id</strong>ak mempunyai array<br />
mult<strong>id</strong>imension. Akan tetapi karena sistem umum tipe C, maka kita<br />
bisa memiliki array dari array. Adapun array multi dimensi yang<br />
paling sederhana adalah array dua dimensi.<br />
8.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan cara pendeklarasian<br />
array dua dimensi, (ii) menjelaskan penggunaan array<br />
dua dimensi, dan (iii) menjelaskan penggunaan array dua dimensi<br />
(multi dimensi).<br />
8.3 Pendeklarasian Array Dua Dimensi<br />
Bentuk umum pendeklarasian array dua dimensi adalah:<br />
tipeArray namaArray[jmlBaris][jmlKolom];<br />
Dimana:<br />
• tipeArray adalah suatu tipe data untuk nilai dari sebuah array.<br />
• namaArray adalah sebuah variable array.<br />
• jmlBaris adalah ukuran baris dari array.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 50 <strong>—</strong> #64<br />
50 Bab 8. Array Dua Dimensi<br />
• jmlKolom adalah ukuran kolom dari array.<br />
Adapun contoh-contoh pendeklarain array dua dimensi yang<br />
benar dan salah di dalam program C adalah sebagai berikut:<br />
int a2[5][7]; /* Benar */<br />
float B[5][5]; /* Benar */<br />
char letter[5][3]; /* Benar */<br />
char letter[0][0] = ’a’; /* Benar */<br />
int a2[5, 7]; /* Salah */<br />
int a2[0, 4] = ’6’; /* Salah */<br />
Pada dasarnya, array dua dimensi merupakan array satu dimensi.<br />
Bila sebuah array dd d<strong>id</strong>eklarasikan menjadi array dua dimensi<br />
dengan menggunakan perintah int dd[3][7]; maka kita bisa memvisualisasikan<br />
array dd tersebut seperti yang terlihat pada gambar ??.<br />
Gambar 8.1: Visualisasi pendeklaraisin array dua dimensi<br />
8.4 Inisialisasi Nilai<br />
Sama halnya seperti penginisialisasian array satu dimensi, array<br />
dua dimensi juga dapat diberikan nilai pada saat pendeklarasian.<br />
Gambar 7.1 adalah bagaimana pendeklarasian, penginisialisasian,<br />
dan pengvisualisasian array.<br />
Sama halnya seperti pendeklarasian array satu dimensi, array dua<br />
dimensi juga membutuhkan sejumlah memori dalam pendeklarasiannya.<br />
Meskipun pada sub bab 9.3 telah ditunjukkan visualisasi<br />
pendeklarian array dua dimensi dalam bentuk kubus, sebenarnya<br />
array dua dimensi mengalokasikan memori secara berurutan dalam<br />
bentuk array satu dimensi. Adapun untuk menetukan jumlah memori<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 51 <strong>—</strong> #65<br />
8.5. Indeks (Subscript) Dari Array Dua Dimensi 51<br />
Gambar 8.2: Contoh penginisialisasi array dua dimensi<br />
yang dibutuhkan dalam pendeklarasian array dua dimensi dapat<br />
dihitung dengan menggunakan persamaan berikut:<br />
byte = sizeof(1st index)*sizeof(2nd index)*sizeof(tipe)<br />
8.5 Indeks (Subscript) Dari Array Dua Dimensi<br />
Indeks atau subscript dari array dalam C selalu dimulai dengan 0<br />
sampai dengan ukuran array - 1. Sebagai contoh float data[5][5];<br />
maka indeks dari array data adalah seperti pada gambar 8.3.<br />
Gambar 8.3: Indeks (Subscript) dari array dua dimensi<br />
8.6 Alokasi memori untuk Array Dua Dimensi<br />
Array dimensi dua secara umum sama dengan array satu dimensi.<br />
Bila d<strong>id</strong>eklarasi sebuah array int dd[3][4], maka array dd tersebut<br />
sebenarnya dialokasikan secara berurutan dalam bentuk array satu<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 52 <strong>—</strong> #66<br />
52 Bab 8. Array Dua Dimensi<br />
dimensi seperti yang terlihat pada gambar 8.4. Namun untuk<br />
lebih memudahkan kita memahami tentang array dua dimensi maka<br />
dibuatlah visualisasi array dua dimensi dalam bentuk kubus.<br />
Gambar 8.4: Visualisasi array dua dimensi dalam bentuk satu<br />
dimensi<br />
Perlu dipahami bahwa di dalam penentuan slot array dua dimensi<br />
t<strong>id</strong>ak sama seperti penentuan slot pada array satu dimensi. Seperti<br />
yang dijelaskan pada sub bab 7.5, penentuan slot array satu dimensi<br />
ditentukan dengan mengetahui alamat memori slot pertama dan<br />
ukuran tipe data variabel array tersebut. Jika sudah diketahui<br />
kedua parameter tersebut, dengan sangat mudah diketahui alamat<br />
memori untuk slot berikutnya. Akan tetapi untuk array dua dimensi<br />
tergantung dari nilai indeks baris atau kolomnya.<br />
Adapun penentuan slot Array dua dimensi dapat ditentukan<br />
dengan formula:<br />
dd[i][j] = base_address + sizeof(tipe) * i * 2nd index<br />
+ sizeof(tipe) * j<br />
Sebagai contoh, berdasarkan gambar 8.4, nilai dari array dd pada<br />
slot dd[2][3] adalah:<br />
dd[2][3] = 300 + sizeof(int) * 2 * 4 + sizeof(int) * 3<br />
asumsikan sizeof(int) = 4 byte, maka<br />
dd[2][3] = 300 + 4 * 2 * 4 + 4 * 3<br />
= 344<br />
8.7 Contoh Program Menggunakan Array Dua<br />
Dimensi<br />
8.7.1 Inisialiasi Nilai Array Dua Dimensi<br />
Program berikut mempunyai dua buah perulangan for yang berfungsi<br />
untuk memasukkan nilai-nilai ke dalam array num dan mencetak<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 53 <strong>—</strong> #67<br />
8.7. Contoh Program Menggunakan Array Dua Dimensi 53<br />
nilai-nilai tersebut pada output editor 1 . Nilai-nilai tersebut diperoleh<br />
dari kalkulasi variabel counter i dan j. Setelah setiap hasil increment<br />
dari kedua variabel tersebut disubsitusikan ke dalam formula num[i][j]<br />
= (i * 4) + j + 1;, maka diperoleh nilai-nilai untuk setiap slot dari<br />
array num. Hasil atau luaran dari program ?? dapat divisualisaikan<br />
melaui gambar 8.5.<br />
#include <br />
int main(vo<strong>id</strong>) {<br />
int i, j, num[3][4];<br />
}<br />
for(i=0; i
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 54 <strong>—</strong> #68<br />
54 Bab 8. Array Dua Dimensi<br />
8.7.2 Pengurutan Data Dalam Array<br />
Program berikut merupakan salah satu contoh program untuk mengurutkan<br />
data dengan menggunakan array dua dimensi.<br />
#include <br />
#define N 12<br />
int main(vo<strong>id</strong>) {<br />
int i, j, data[N] = {8,4,5,1,3,8,7,9,12,23,15,6};<br />
for(i=0; ii; j--)<br />
if(data[j] < data[j-1]) {<br />
int temp = data[j];<br />
data[j] = data[j-1];<br />
data[j-1] = temp;<br />
}<br />
/* Cetak data yang telah terurut */<br />
for(i=0; i
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 55 <strong>—</strong> #69<br />
Bab 9<br />
Pointer<br />
9.1 Pendahuluan<br />
Pointer yang merupakan variabel yang dapat memegang alamat dari<br />
suatu objek dalam memori. Pointer digunakan untuk melalukan<br />
akses dan manipulasi alamat memori. Dalam C, array dan pointer<br />
memiliki keterkaitan yang erat. Array adalah pointer yang tetap<br />
(fixed pointer) sedangkan pointer itu sendiri t<strong>id</strong>ak tetap, artinya<br />
alamat memori yang dipegangnya dapat berubah-ubah. Pemanggilan<br />
melalui alamat (call by reference) yang biasa diimplementasi pada<br />
fungsi dapat diwujudkan menggunakan pointer.<br />
9.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan cara pendeklarasian<br />
pointer, (ii) menjelaskan penggunaan pointer, (iii)menjelaskan<br />
konsep dereferensing (menb<strong>ac</strong>a / memberikan nilai yang ditunjuk oleh<br />
sebuah pointer), dan (iv) menjelaskan penggunaan indeks (subscript)<br />
pada pointer.<br />
9.3 Pendeklarasian Pointer<br />
Pointer d<strong>id</strong>eklarasikan untuk memegang dan mengakses alamat dalam<br />
memori. Jika p adalah suatu variable maka &p merupakan lokasi<br />
atau alamat dalam memori dimana sebuah nilai yang dipegang oleh<br />
p disimpan.<br />
Dalam C, simbol asterisk ’*’ digunakan untuk mendeklarasikan<br />
sebuah pointer. Simbol ini ditulis setealh setelah tipe data dan<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 56 <strong>—</strong> #70<br />
56 Bab 9. Pointer<br />
sebelum nama dari sebuah pointer. Sebagai contoh:<br />
int * pi;<br />
Sintaks umum pendeklarasian pointer adalah:<br />
tipe_data * nama_pointer;<br />
Simbol asterik ’*’ memberitahu kompiler bahwa sebuah pointer<br />
yang menyimpan alamat memori bertipe int d<strong>id</strong>eklarasikan. Pendeklarasian<br />
seperti contoh di atas hanya memberitahukan kompiler<br />
bahwa pi adalah pointer bertipe int tanpa memberikan nilai awal<br />
apapun kepada pointer pi. Sebuah pointer tanpa nilai awal akan<br />
secara otomatis memiliki nilai NULL. Pengujian terhadap pointer<br />
dapat dilakukan sebagai berikut:<br />
if (pi == NULL){<br />
:<br />
}<br />
9.4 Visualisasi Pointer<br />
Bila dalam program terdapat pernyataan sebagai berikut:<br />
int i = 2;<br />
int *pi = &i;<br />
maka visualisasi dari kedua pernyataan di atas terlihat seperti<br />
pada gambar 9.1.<br />
Gambar 9.1: Visualisasi pointer<br />
Artinya terdapat sebuah variabel i bertipe integer dengan nilai<br />
2 dan pi adalah sebuah pointer yang memegang atau menunjuk ke<br />
alokasi memori bertipe int yang dimiliki oleh i. Pernyataan:<br />
int *pi = &i;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 57 <strong>—</strong> #71<br />
9.5. Operator Dereferensing 57<br />
bermakna bahwa sebuah pointer pi bertipe int d<strong>id</strong>eklarasikan<br />
dengan nilai awal berupa alamat dari i yang bertipe int. Simbol<br />
& pada pernyataan di atas merupakan operator unari yang bearti<br />
alamat (address). Pada pernyataan di atas, nilai awal dari pi adalah<br />
alamat dari i dalam memori.<br />
9.5 Operator Dereferensing<br />
Operator dereferensing berarti pemb<strong>ac</strong>aan atau pemberian nilai<br />
data pada alamat yang dipegang oleh sebuah pointer. Operator<br />
deferensing juga menggunakan simbol asterik ’*’, akan tetapi sedikit<br />
berbeda dengan simbol asterik pada saat pendeklarasian pointer.<br />
Perhatikan pernyataan berikut:<br />
int i = 2;<br />
int *pi;<br />
pi = &i;<br />
*pi = 12;<br />
printf("%d\n", i);<br />
Hasil keluaran dari program di atas adalah 12, dengan kata<br />
lain variabel i yang pada awalnya bernilai 2 berubah nilainya<br />
akibat dari pernyataan *pi = 12. Hal ini menunjukkan bahwa<br />
operator dereferensing dapat mengubah nilai dari suatu memori<br />
melalui pointer. Pada contoh di atas pi menunjuk ke alamat i, dan<br />
dereferensing *pi = 12 mengakibatkan nilai dari i yang ditunjuk oleh<br />
pi berubah menjadi 12.<br />
Contoh Lain Operator Dereferensing<br />
int i = 2;<br />
int j = 3;<br />
int *pi;<br />
int *pj;<br />
pi = &i;<br />
pj = pi;<br />
*pj = 20;<br />
printf("%d\n", i);<br />
pj = &j;<br />
pi = pj;<br />
*pi = 30;<br />
printf("%d\n", j);<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 58 <strong>—</strong> #72<br />
58 Bab 9. Pointer<br />
20<br />
30<br />
Keluaran dari potongan program tersebut secara berurut adalah:<br />
Terlihat bahwa nilai i yang pada awalnya bernilai 2 berubah<br />
menjadi 20 akibat dari dereferensing pointer *pj = 20; sedangkan<br />
nilai dari j yang pada awalnya bernilai 3 berubah menjadi 30 akibat<br />
dari dereferensing pointer *pi = 30;<br />
Visualisasi langkah demi langkah dari contoh program sebelumnya<br />
adalah sebagai berikut:<br />
int i = 2;<br />
int j = 3;<br />
int *pi;<br />
int *pj;<br />
Potongan program diatas dapat divisualisasikan seperti pada gambar<br />
9.2.<br />
Selanjutnya, pernyataan:<br />
pi = &i;<br />
pj = pi;<br />
Gambar 9.2: Visualisasi pointer<br />
mengakibatkan pointer pi menampung alamat dari variabel i dan<br />
ponter pj berubah nilainya menjadi sama dengan nilai pi. Ilustrasinya<br />
adalah sebagai terlihat pada gambar 9.3.<br />
Pernyataan<br />
*pj = 20;<br />
printf("%d\n", i);<br />
mengakibatkan nilai variabel i yang ditunjuk oleh pointer pj<br />
berubah dari 2 menjadi 20.<br />
Selanjutnya, pernyataan:<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 59 <strong>—</strong> #73<br />
9.5. Operator Dereferensing 59<br />
pj = &j;<br />
pi = pj;<br />
Gambar 9.3: Visualisasi pointer<br />
Gambar 9.4: Visualisasi pointer<br />
mengakibatkan arah dari pointer pj berubah dan tunjuk ke alamat<br />
variabel j yang juga bertipe int. Kemudian, pointer pi menampung<br />
nilai dari alamat c yang sebelumnya ditunjuk oleh pointer pj.<br />
Gambar 9.5: Visualisasi pointer<br />
Dan yang terakhir pernyataan:<br />
*pi = 30;<br />
printf("%d\n", j);<br />
mengakibatkan nilai dari variabel yang ditunjuk oleh pi berubah<br />
menjadi 30 akibat adanya operator dereferensing *pi = 30.<br />
Jadi, kesimpulannya adalah dengan menggunakan pointer dan<br />
operator derefensing nilai dari suatu variabel dalam memori dapat<br />
dengan sangat mudah dimanipulasi. Hal inil membuat pointer<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 60 <strong>—</strong> #74<br />
60 Bab 9. Pointer<br />
Gambar 9.6: Visualisasi pointer<br />
menjadi sangat "powerful" dalam pemrograman sekaligus sebagai<br />
"the most possibility of bugs" atau dengan kata lain penyebab terbesar<br />
kesalahan dalam program. Oleh karena itu, pointer harus digunakan<br />
secara benar dan terkontrol.<br />
9.6 Pointer Vs Array<br />
Bila sebuah array d<strong>id</strong>eklarasikan dengan nama array a sebagai<br />
berikut:<br />
int a[6] = {8, 4, 6, 3, 4, 10};<br />
Gambar 9.7: Visualisasi pointer pada array<br />
Pemb<strong>ac</strong>aan data pada indeks ke 2 dari array a tersebut dapat dilakukan<br />
dengan menulis a[2]. Karena a adalah array dan merupakan<br />
pointer yang tetap (fixed pointer) maka operator dereferensing pun<br />
dapat diaplikasikan pada a.<br />
Gambar 9.8: Kesamaan array dengan pointer<br />
Bukti:<br />
a[2] = *(a+2) = *(a + sizeof(a) * 2)<br />
= *(a + 4 * 2)<br />
= *(2310 + 8) = *(2318)<br />
= 6<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 61 <strong>—</strong> #75<br />
9.7. String 61<br />
9.7 String<br />
C t<strong>id</strong>ak menyediakan tipe data primitif berupa string. String dalam<br />
pemrograman C direpresentasikan dengan menggunakan pointer bertipe<br />
char. Deklarasi:<br />
char * str = "Pemrograman C"<br />
mengakibatkan sebuah pointer str dibuat dengan nilai awal<br />
berupa kumpulan char yang membentuk kalimat Pemrograman C.<br />
Perhatikan dan diskusikan contoh program berikut:<br />
#include <br />
#include <br />
#include <br />
int main(vo<strong>id</strong>)<br />
{<br />
char ch[80], *pch = &ch[0];<br />
}<br />
strcpy(ch, "informatika <strong>unsyiah</strong>");<br />
putchar(*pch++);<br />
putchar((*pch)++);<br />
putchar(*++pch);<br />
putchar(*++pch);<br />
putchar(++*pch);<br />
putchar(++(*pch));<br />
putchar(++(*pch++));<br />
++pch;<br />
putchar(++(*++pch));<br />
putchar(’\n’);<br />
printf("%s\n",ch);<br />
return (EXIT_SUCCESS);<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 62 <strong>—</strong> #76<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 63 <strong>—</strong> #77<br />
Bab 10<br />
Fungsi<br />
10.1 Pendahuluan<br />
Fungsi atau function adalah sub program yang dibuat untuk tujuan<br />
tertentu dan dapat dieksekusi secara berulang dalam sebuah program.<br />
Prototipe fungsi boleh d<strong>id</strong>eklarasikan dalam sebuah atau beberapa<br />
file header, sebuah file yang berekstensi .h, sementara implementasi<br />
dari fungsi yang telah d<strong>id</strong>eklarasi sebelumnya dapat diimplementasi<br />
langsung dalam file header yang sama ataupun diimplementasi<br />
secara terpisah dalam file lain yang berekstensi .c. Salah satu<br />
tujuan dari pembuatan sebuah fungsi adalah mempermudah proses<br />
pengembangan dan perawatan program.<br />
10.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan cara mendefinisikan<br />
atau mendeklarasikan fungsi, (ii) menjelaskan cara mengeksekusi<br />
sebuah fungsi dalam program, (iii) memperkenalkan konsep<br />
called by value dan called by reference, dan (iv) memperkenalkan<br />
beberapa fungsi string.<br />
10.3 Pendeklarasian Fungsi<br />
Dalam C, bentuk umum pendeklarasian sebuah fungsi adalah mengikuti<br />
format berikut ini:<br />
tipe_data nama_fungsi(parameter) {<br />
pernyataan<br />
}<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 64 <strong>—</strong> #78<br />
64 Bab 10. Fungsi<br />
Dari format pendeklarasian fungsi di atas, dapat disimpulkan<br />
bahwa sebuah fungsi dapat memiliki nilai kembalian (return value)<br />
dan dapat pula t<strong>id</strong>ak memiliki nilai kembalian. Sebuah fungsi yang<br />
bertipe vo<strong>id</strong> adalah fungsi yang t<strong>id</strong>ak memiliki nilai kembalian,<br />
sedangkan fungsi yang memiliki nilai kembalian disebut sebagai<br />
fungsi bernilai. Nilai yang dikembalikan oleh sebuah fungsi harus<br />
sesuai dengan tipe−data yang d<strong>id</strong>eklarasikan pada saat sebuah fungsi<br />
d<strong>id</strong>eklarasikan.<br />
Tipe data dari sebuah fungsi dapat berupa vo<strong>id</strong>, int, float, double,<br />
long, struct dan lain-lain. Fungsi yang bertipe vo<strong>id</strong> t<strong>id</strong>ak akan<br />
mengirimkan nilai pada saat fungsi selesai dieksekusi, sementara<br />
fungsi yang bertipe selain vo<strong>id</strong> akan mengirimkan nilai kembalian<br />
pada saat fungsi tersebut selesai dieksekusi. Pengiriman nilai fungsi<br />
dilakukan menggunakan pernyataan return.<br />
Contoh:<br />
float celciusToFahreinheit(float celcius){<br />
return ((celcius * 9/5) + 32);<br />
}<br />
Contoh di atas memperlihatkan sebuah fungsi yang d<strong>id</strong>eklarasi<br />
dengan nama celciusToFahreinheit dan memiliki sebuah parameter<br />
dengan nama celcius dan bertipe float. Fungsi itu sendiri bertipe<br />
float, artinya setelah fungsi selesai dijalankan maka akan ada sebuah<br />
nilai dengan tipe float dikembalikan kepada variabel atau pernyataan<br />
yang memanggil fungsi itu. Untuk contoh di atas, pernyataan yang<br />
dikembalikan oleh fungsi adalah pernyataan setelah kata kunci return,<br />
yaitu ((celcius * 9/5) + 32.<br />
Perhatikan pendeklarasian fungsi penjumlahan berikut ini:<br />
int penjumlahan(int operan1, int operan2){<br />
return (operan1 + operan2);<br />
}<br />
Contoh di atas memperlihatkan pendeklarasian fungsi penjumlahan<br />
yang bertipe int dan memiliki dua buah parameter yaitu operan1<br />
dan operan2 yang kedua-duanya bertipe int. Tujuan dibuatnya fungsi<br />
penjumlahan tersebut adalah untuk menjumlahkan dua buah operan<br />
bertipe int dan mengembalikan nilai hasil penjumlahan itu kepada<br />
penyataan yang memanggilnya. Perhatikan conoth pemanggilan<br />
fungsi penjumlahan dalam sebuah program utama main().<br />
#include <br />
int main(vo<strong>id</strong>) {<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 65 <strong>—</strong> #79<br />
10.4. Fungsi Bertipe Vo<strong>id</strong> 65<br />
}<br />
int a, b, c;<br />
printf("Penjumlahan dua bilangan bulat\n");<br />
printf("a = "); scanf("%d", &a);<br />
printf("b = "); scanf("%d", &b);<br />
c = penjumlahan(a, b);<br />
printf("Hasil penjumlahan a + b = %d\n", c);<br />
return 1;<br />
10.4 Fungsi Bertipe Vo<strong>id</strong><br />
Fungsi bertipe vo<strong>id</strong> adalah fungsi yang t<strong>id</strong>ak memiliki return value<br />
dan t<strong>id</strong>ak memiliki pernyataan return dalam implementasinya. Program<br />
berikut memperlihatkan sebuah fungsi yang bertipe em vo<strong>id</strong>.<br />
vo<strong>id</strong> judulTabel() {<br />
printf("-----------------------\n");<br />
printf(" No. U r a i a n\n");<br />
printf("-----------------------\n");<br />
}<br />
Fungsi di atas juga t<strong>id</strong>ak memiliki parameter. Fungsi yang t<strong>id</strong>ak<br />
memiliki parameter hanya memiliki kurung buka dan kurung tutup<br />
setelah nama fungsinya tanpa ada parameter d<strong>id</strong>eklarasi d<strong>id</strong>alamnya.<br />
Cara pemanggilan fungsi yang t<strong>id</strong>ak memiliki return value sama<br />
dengan cara pemanggilan fungsi dengan return value. Bila saat<br />
dipanggil nilai fungsi yang memiliki return value nilainya biasanya<br />
ditampung oleh variabel yang lain, maka untuk fungsi yang t<strong>id</strong>ak<br />
memiliki return value, fungsi berdiri sendiri dan t<strong>id</strong>ak memberikan<br />
nilainya kepada variabel manapun. Perhatikan contoh program<br />
berikut:<br />
#include <br />
int main(vo<strong>id</strong>){<br />
int i;<br />
}<br />
judulTabel(); /*pemanggilan fungsi*/<br />
return 1;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 66 <strong>—</strong> #80<br />
66 Bab 10. Fungsi<br />
10.5 Jenis-Jenis Fungsi<br />
10.5.1 Fungsi Called by Value<br />
Pengiriman nilai parameter sebuah fungsi secara called by value<br />
dilakukan dengan mengkopi nilai yang dikirim kepada parameter.<br />
Perhatikan fungsi penjumlahan yang telah diperlihatkan sebelumnya.<br />
Fungsi tersebut memiliki dua buah parameter. Pada saat fungsi<br />
tersebut dipanggil dalam program, nilai variabel a dan b di-copy<br />
kepada parameter operan1 dan operan2. Jika nilai operan1 dan<br />
operan2 mengalami perubahan maka nilai variabel a dan b t<strong>id</strong>ak akan<br />
terpengaruh. Perhatikan contoh berikut ini:<br />
#include <br />
int penjumlahan(int, int); /* prototype fungsi */<br />
int main(vo<strong>id</strong>) {<br />
int a = 2, b = 6, c;<br />
c = penjumlahan(a, b);<br />
printf("Hasil penjumlahan a + b = %d\n", c);<br />
printf("a = %d\n", a);<br />
printf("b = %d\n", b);<br />
return 1;<br />
}<br />
int penjumlahan(int operan1, int operan2) {<br />
operan1 = operan1 + 2;<br />
return (operan1 + operan2);<br />
}<br />
Pada saat program tersebut dijalankan, memori dialokasikan<br />
untuk tiga buah variabel a, b dan c. Diketahui bahwa nilai variabel<br />
a adalah 2 dan nilai variabel b adalah 6, sementara nilai variabel c<br />
diawal t<strong>id</strong>ak memiliki nilai.<br />
Gambar 10.1: Visualisasi fungsi<br />
Pemanggilan fungsi pada pernyataan c=penjumlahan(a,b) mengakibatkan<br />
nilai dari variabel a dicopy kepada parameter operan1 dan<br />
nilai dari variabel b dicopy kepada parameter operan2. Perubahan<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 67 <strong>—</strong> #81<br />
10.5. Jenis-Jenis Fungsi 67<br />
nilai operan1 pada pernyataan operan1 = operan1 + 2 t<strong>id</strong>ak akan<br />
mengubah nilai dari variabel a yang sebelumnya bernilai 2. Keluaran<br />
dari program di atas adalah:<br />
Hasil penjumlahan a + b = 10<br />
a = 2<br />
b = 6<br />
10.5.2 Fungsi Called by Reference<br />
Pengiriman nilai parameter sebuah fungsi secara called by reference<br />
dilakukan dengan cara mengirim alamat memori dari suatu variabel<br />
kepada parameter yang bersesuaian dalam bentuk pointer. Pemberian<br />
alamat memori kepada parameter dapat mengubah nilai dari<br />
variabel yang alamatnya dikirim. Perhatikan contoh berikut ini:<br />
#include <br />
int penjumlahan(int *, int *); /* prototype fungsi */<br />
int main(vo<strong>id</strong>) {<br />
int a = 2, b = 6, c;<br />
c = penjumlahan(&a, &b);<br />
printf("Hasil penjumlahan a + b = %d\n", c);<br />
printf("a = %d\n", a);<br />
printf("b = %d\n", b);<br />
return 1;<br />
}<br />
int penjumlahan(int * pa, int * pb) {<br />
*pb = *pb - 3;<br />
return (*pa + *pb);<br />
}<br />
Pada saat program tersebut dijalankan, memori dialokasikan<br />
untuk tiga buah variabel a, b dan c. Diketahui bahwa nilai variabel<br />
a adalah 2 dan nilai variabel b adalah 6, sementara nilai variabel<br />
c diawal t<strong>id</strong>ak memiliki nilai. Visualisasinya bisa dilihat pada<br />
gambar 10.2.<br />
Pemanggilan fungsi pada pernyataan c=penjumlahan(&a,&b)<br />
mengakibatkan alamat dari variabel a diberikan kepada pointer pa<br />
dan alamat dari variabel b diberikan kepada pointer pb. Visualisasinya<br />
bisa dilihat pada gambar 10.3.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 68 <strong>—</strong> #82<br />
68 Bab 10. Fungsi<br />
Gambar 10.2: Visualisasi fungsi<br />
Gambar 10.3: Visualisasi fungsi<br />
Pernyataan *pb = *pb - 3 akan mengakibatkan nilai dari b<br />
yang sebelumnnya bernilai 6 berubah menjadi 3, sehingga hasil<br />
penjumlahan bernilai 5. Keluaran dari program di atas adalah:<br />
Hasil penjumlahan a + b = 5<br />
a = 2<br />
b = 3<br />
10.6 Fungsi String<br />
Beberapa fungsi yang berkaitan dengan manipulasi tipe data string<br />
telah diimplementasikan sebelumnya dalam C. String adalah untaian<br />
karakter atau sekumpulkan karakter. Berikut adalah beberapa fungsi<br />
untuk data string:<br />
• Mengkopi string sumber ke string target s termasuk karakter<br />
′ \0 ′ (terminated string)<br />
char * strcpy(char * s, char * source)<br />
• Menyambung string sumber ke string s<br />
char * strcat(char * s, char * source)<br />
• Membandingkan string s1 dengan string s2<br />
int strcmp(char * s1, char * s2). Fungsi strcmp akan mengirim<br />
nilai negatif bila string s1 s2.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 69 <strong>—</strong> #83<br />
10.6. Fungsi String 69<br />
Contoh:<br />
#include <br />
int main() {<br />
char string1[20];<br />
char string2[20];<br />
}<br />
strcpy(string1, "Ahmad");<br />
strcpy(string2, "Bani");<br />
printf("Return Value: %d\n", strcmp( string1, string2));<br />
strcpy(string1, "Hellooo");<br />
strcpy(string2, "Helloo");<br />
printf("Return Value: %d\n", strcmp( string1, string2));<br />
strcpy(string1, "Hello");<br />
strcpy(string2, "Hello");<br />
printf("Return Value: %d\n", strcmp( string1, string2));<br />
return 0;<br />
Contoh implementasi dari fungsi strcpy adalah sebagai berikut:<br />
char *strcpy(char *dest, *source){<br />
while ((*dest++ = *source++) !="\0");<br />
return dest;<br />
}<br />
Atau<br />
char *strcpy(char *dest, *source){<br />
while (*dest++ = *source++) ;<br />
return dest;<br />
}<br />
Contoh implementasi dari fungsi strcat adalah sebagai berikut:<br />
char *strcat(char *first, char *second){<br />
char *p;<br />
p =first;<br />
while (*p++) ;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 70 <strong>—</strong> #84<br />
70 Bab 10. Fungsi<br />
}<br />
--p;<br />
while (*p++ = *second++) ;<br />
return first;<br />
Perhatikan contoh program yang memanipulasi string berikut<br />
ini. Perhatikan bagaimana pointer pA dan pB dapat memanipulasi<br />
karakter yang disimpan dalam setiap slot array strA dan strB.<br />
Bentuk kelompok yang terdiri atas 2-3 orang dan d<strong>id</strong>iskusikan contoh<br />
program berikut ini.<br />
char strA[80] = "Sebuah string untuk tujuan demo";<br />
char strB[80];<br />
int main(vo<strong>id</strong>) {<br />
char *pA; /* sebuah pointer ke char<strong>ac</strong>ter */<br />
char *pB; /* sebuah pointer ke char<strong>ac</strong>ter */<br />
puts(strA); /* print string A */<br />
pA = strA; /* pointer pA tunjuk ke string A */<br />
puts(pA); /* tampilkan yang ditunjuk pA */<br />
pB = strB; /* pointe pB tunjuk ke string B */<br />
putchar(’\n’); /* buat baris baru */<br />
}<br />
/* selama *pA t<strong>id</strong>ak ’\0’ t<strong>id</strong>ak null */<br />
while(*pA != ’\0’)<br />
{<br />
*pB++ = *pA++;<br />
}<br />
*pB = ’\0’; /* beri null string kepada strB */<br />
puts(strB); /* print string B */<br />
return EXIT_SUCCESS;<br />
Fungsi yang Berkenaan dengan Karakter<br />
• int isalnum(int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah alphanumeric.<br />
• int isalpha(int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah alphabet.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 71 <strong>—</strong> #85<br />
10.6. Fungsi String 71<br />
• int iscntrl(int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah karakter kontrol yang t<strong>id</strong>ak dapat diprint seperti DEL,<br />
ESC, carriage return (CR), line feed (LF), dan lain-lain.<br />
• int isdigit(int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah digit.<br />
• int islower(int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah karakter huruf kecil.<br />
• int isupper (int c)<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
adalah karakter huruf besar.<br />
• int ispunct(int c);<br />
Fungsi ini akan mengembalikan nilai nonzero bila parameter c<br />
merupakan tanda b<strong>ac</strong>a.<br />
Sebelum fungsi-fungsi di atas dapat digunakan, #include <br />
harus ditulis dalam program.<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 72 <strong>—</strong> #86<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 73 <strong>—</strong> #87<br />
Bab 11<br />
File<br />
11.1 Pendahuluan<br />
File merupakan unit standar penyimpanan data yang menggunakan<br />
konsep stream dalam proses pengaksesannya. Stream merupakan<br />
penghubung antara programmer dengan file. Sebuah stream terhubung<br />
dengan file yang disimpan dalam media penyimpanan melalui<br />
operasi OPEN dan terputus dari file melalui operasi CLOSE. Ada dua<br />
jenis stream yang dikenal dala pemrograman C, yaitu stream tipe teks<br />
(text) dan stream tipe binari (binary).<br />
11.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan struktur data<br />
file, (ii) menjelaskan cara membuka, mengakses dan menutup file<br />
menggunakan stream teks, dan (iii) memperlihatkan beberapa contoh<br />
program yang menggunakan struktur data file.<br />
11.3 File<br />
Stream terhubung dengan file yang disimpan dalam media penyimpanan<br />
melalui operasi OPEN dan terputus dengan file melalui operasi<br />
CLOSE. Perintah membuka sebuah file dilakukan dengan fungsi<br />
fopen yang telah diimplementasikan dan prototipenya d<strong>id</strong>efinisikan<br />
dalam library stdio.h, sementara perintah menutup sebuah file dapat<br />
dilakukan menggunakan fungsi fclose( ).<br />
FILE *fopen(char *nama_file, char *mode)<br />
FILE *fclose(FILE *file_pointer)<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 74 <strong>—</strong> #88<br />
74 Bab 11. File<br />
Mekanisme mengakses sebuah file ditentukan dari parameter mode.<br />
Nilai dari parameter mode dapay dilihat melalui tabel 11.1.<br />
Tabel 11.1: Parameter Mode untuk Akses File<br />
Mode Arti<br />
r Membuka sebuah file teks untuk pemb<strong>ac</strong>aan saja (read only)<br />
w Membuat sebuah file teks untuk penulisan<br />
a Menambahkan (append) data ke dalam sebuah file teks<br />
rb Membuka sebuah file binary untuk pemb<strong>ac</strong>aan saja<br />
wb Membuat sebuah file binary untuk penulisan<br />
ab Menambahkan data ke dalam sebuah file binary<br />
r+ Membuka sebuah file teks untuk pemb<strong>ac</strong>aan/penulisan<br />
w+ Membuat sebuah file teks untuk pemb<strong>ac</strong>aan/penulisan<br />
a+ Menambahkan data/membuat file teks untuk pemb<strong>ac</strong>aan/penulisan<br />
r+b/rb+ Membuka sebuah file binary untuk pemb<strong>ac</strong>aan/penulisan<br />
w+b/wb+ Membuat sebuah file binary untuk pemb<strong>ac</strong>aan/penulisan<br />
a+b/ab+ Menambahkan data ke file binary untuk pemb<strong>ac</strong>aan/penulisan<br />
Perhatikan penggalan dari program berikut ini:<br />
FILE *ifp, *ofp;<br />
ifp = fopen("input_file","r");<br />
ofp = fopen("output_file","w");<br />
:<br />
:<br />
• ifp dan ofp adalah pointer ke FILE.<br />
• ifp tunjuk ke file dengan nama input−file dan file ini diakses<br />
dengan mode pemb<strong>ac</strong>aan saja (read-only).<br />
• ofp tunjuk ke file dengan nama output−file dan file ini diaskes<br />
dengan mode penulisan, artinya file output−file akan dibuat<br />
jika t<strong>id</strong>ak ditemukan dalam media penyimpanan dan akan<br />
ditimpa (overwrite) jika file dengan nama yang sama telah ada<br />
dalam media penyimpanan.<br />
11.4 Beberapa Contoh Manipulasi File<br />
Contoh 1. Buka File, B<strong>ac</strong>a Isinya dan Tulis ke Media Output<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 75 <strong>—</strong> #89<br />
11.4. Beberapa Contoh Manipulasi File 75<br />
Satu-Satu Karakter.<br />
#include <br />
#include <br />
#include <br />
int main (vo<strong>id</strong>){<br />
int c;<br />
FILE *fp;<br />
char *filename = "data.txt";<br />
}<br />
if((fp = fopen(filename, "r"))==NULL){<br />
printf("Error dalam mengakses file...\n");<br />
return EXIT_FAILURE;<br />
}<br />
while((c=fgetc(fp)) != EOF){<br />
putchar(toupper(c));<br />
}<br />
fclose(fp);<br />
return EXIT_SUCCESS;<br />
Contoh 2. Buka File, Jumlahkan, dan Tulis Penjumlahan ke<br />
dalam File.<br />
#include <br />
#include <br />
int main (vo<strong>id</strong>){<br />
int a, sum = 0;<br />
FILE *ifp, *ofp;<br />
ifp = fopen("input_file.txt", "r");<br />
ofp = fopen("output_file.txt", "w");<br />
}<br />
while (fscanf(ifp,"%d",&a)==1){<br />
sum += a;<br />
}<br />
fprintf(ofp, "Jumlah = %d\n",sum);<br />
fclose(ifp);<br />
fclose(ofp);<br />
return EXIT_SUCCESS;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 76 <strong>—</strong> #90<br />
76 Bab 11. File<br />
Contoh 3. Buka File, Jumlahkan, dan Tulis Penjumlahan ke<br />
dalam File.<br />
#include <br />
#include <br />
#include <br />
int main(vo<strong>id</strong>){<br />
FILE *fp;<br />
int ch;<br />
fp = fopen("output_file.txt", "w");<br />
fprintf(fp, "%s", "Program Studi Informatika\n");<br />
fprintf(fp, "%s", "UNSYIAH, Banda Aceh 23111\n\n\n");<br />
fclose(fp);<br />
}<br />
if((fp = fopen("output_file.txt", "r"))==NULL) {<br />
printf("Error dalam mengakses file...\n");<br />
return EXIT_FAILURE;<br />
}<br />
while ((ch=fgetc(fp))!=EOF) {<br />
putchar(tolower(ch));<br />
}<br />
fclose(fp);<br />
return EXIT_SUCCESS;<br />
11.5 Beberapa Fungsi untuk Manipulasi File<br />
Teks<br />
• int fgetc(FILE *fp)<br />
Memb<strong>ac</strong>a sebuah byte dari sebuah stream<br />
• int fputc(int ch, FILE *fp)<br />
Menulis sebuah byte ke dalam sebuah stream<br />
• char *fgets(char *str, int num, FILE *fp)<br />
Memb<strong>ac</strong>a untaian karakter (string) dari sebuah stream<br />
• int fputs(char *str, FILE *fp)<br />
Menulis untaian karakter (string) ke dalam sebuah stream<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 77 <strong>—</strong> #91<br />
Bab 12<br />
Typedef & Struct<br />
12.1 Pendahuluan<br />
Kata kunci typedef dapat digunakan untuk membuat alias dari<br />
suatu tipe data. Struct merupakan perintah yang dapat digunakan<br />
untuk membuat struktur dari suatu record. Sebuah record bisa<br />
memiliki domain yang heterogen. Sebagai contoh, sebuah record<br />
yang merepresentasikan tentang seseorang memiliki atribut berupa<br />
nama yang bertipe string, umur yang bertipe integer, dan tinggi yang<br />
bertipe double. Biasanya penggunaan typedef dikombinasikan dalam<br />
pendeklarasian sebuah struct.<br />
12.2 Objektif<br />
Objektif dari materi ini adalah (i) memperkenalkan penggunaan<br />
typedef, (ii) memperkenalkan penggunaan struct, (iii) memperlihatkan<br />
cara mendeklarasi struct menggunakan kata kunci typedef.<br />
12.3 Typedef<br />
Kata kunci typedef dalam pemrograman C/C++ digunakan untuk<br />
membuat alias dari sebuah tipe data yang rumit. Walaupun typedef<br />
bisa digunakan untuk membuat alias dari pendefinisian tipe data<br />
primitif, typedef juga sering digunakan untuk mendefinisikan alias<br />
dari tipe data struct dan union. Perhatikan beberapa contoh<br />
penggunaan kata kunci typedef dalam pendeklarasian sebuah alias:<br />
typedef int Time;<br />
Time hours, minutes, seconds;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 78 <strong>—</strong> #92<br />
78 Bab 12. Typedef & Struct<br />
Pada contoh di atas, variabel Time merupakan alias dari tipe<br />
data primitif int. Setelah pendeklarasian alias int menjadi Time,<br />
pada saat pendeklarasian variabel hours, minutes, dan seconds, tipe<br />
data Time dapat digunakan sebagai tipe data dari ketiga variabel<br />
tersebut. Selanjutnya, pada saat variabel hours, minutes, dan seconds<br />
d<strong>id</strong>eklarasikan, tipe data Time sudah dapat digunakan sebagai tipe<br />
data ketiga variabel tersebut. Sama halnya juga terjadi pada contoh<br />
berikut ini:<br />
typedef char * String;<br />
String nama_mahasiswa, alamat_mahasiswa;<br />
Dalam C, pointer ke char<strong>ac</strong>ter merupakan satu-satunya cara<br />
mendeklarasi tipe data string. Pada contoh di atas, dengan menggunakan<br />
kata kunci typedef, sebuah tipe data baru String yang<br />
merupakan alias dari tipe data char* d<strong>id</strong>eklarasikan. Selanjutnya,<br />
tipe data baru tersebut digunakan sebagai tipe data dari variabel<br />
nama−mahasiswa dan alamat−mahasiswa.<br />
12.4 Penggunaan Typedef Pada Array<br />
Pendeklarasian sebuah array bertipe int dilakukan dengan cara:<br />
int x[100];<br />
Alias dari array bertipe int berukuran 100 tersebut dapat dibuat<br />
menggunakan kata kunci typedef sebagai berikut:<br />
• Langkah 1: Ganti variabel x dengan nama alias, misalnya<br />
Larik.<br />
int Larik[100];<br />
• Langkah 2: Tambahkan kata kunci typedef sehingga menjadi:<br />
typedef int Larik[100];<br />
• Langkah 3: Pendeklarasian variabel dengan tipe Larik berukuran<br />
100 adalah:<br />
Larik a, b, c;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 79 <strong>—</strong> #93<br />
12.5. Contoh Penggunaan Typedef 79<br />
12.5 Contoh Penggunaan Typedef<br />
Contoh 1:<br />
#define N 3<br />
typedef float Scalar;<br />
typedef Scalar Vector[N];<br />
vo<strong>id</strong> addVector(Vector a, Vector b, Vector c) {<br />
int i;<br />
for(i=0; i
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 80 <strong>—</strong> #94<br />
80 Bab 12. Typedef & Struct<br />
Atau dapat juga menggunakan kata kunci typedef pada saat<br />
mendeklarasikan struct tgl tersebut dengan menambahkan alias<br />
Tanggal dibagian akhir proses pendeklarasian struct itu.<br />
typedef struct tgl{<br />
int hari;<br />
int bulan;<br />
int tahun;<br />
}Tanggal;<br />
Tanggal date;<br />
Contoh di atas memperlihatkan bagaimana struct tgl yang memiliki<br />
member hari, bulan, dan tahun yang bertipe int d<strong>id</strong>eklarasikan.<br />
Menggunakan kata kunci typedef, alias dari struct tgl dibuat. Selanjutnya,<br />
variabel date dapat d<strong>id</strong>eklarasi bertipe alias Tanggal tersebut.<br />
Untuk mengakses anggota (member) dari sebuah struct, operator titik<br />
digunakan. Sebagai ilustrasi, perhatikan contoh berikut ini.<br />
date.hari = 2;<br />
date.tahun = 2001;<br />
Pernyataan di atas mengakibatkan anggota dari struct date di<br />
atas memiliki nilai seperti tampak pada gambar 12.1.<br />
Gambar 12.1: Visualisasi struct<br />
12.7 Pointer ke Sebuah Struct<br />
Pendeklarasian sebuah pointer ke struct tgl dapat dilakukan dengan<br />
cara:<br />
Tanggal date;<br />
Tanggal * pdate = &date;<br />
Karena pdate merupakan pointer ke alias Tanggal dan date adalah<br />
sebuah variabel bertipe Tanggal, maka perintah pdate = &date;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 81 <strong>—</strong> #95<br />
12.7. Pointer ke Sebuah Struct 81<br />
Gambar 12.2: Visualisasi struct<br />
mengakibatkan pointer pdate tunjuk ke alamat dari variabel date.<br />
Ilustrasi ini dapat dilihat melalui gambar 12.2<br />
Untuk mengakses member dalam struct date menggunakan pointer<br />
pdate di atas, operator panah (->) harus digunakan sebelum nama<br />
member. Contoh:<br />
pdate -> hari = 2<br />
pdate -> bulan = 11<br />
pdate -> tahun = 1999;<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 82 <strong>—</strong> #96<br />
✐<br />
✐<br />
✐<br />
✐
✐<br />
✐<br />
✐<br />
✐<br />
<strong>“bukuAjar”</strong> <strong>—</strong> <strong>2011</strong>/9/<strong>22</strong> <strong>—</strong> <strong>13</strong>:<strong>39</strong> <strong>—</strong> <strong>page</strong> 83 <strong>—</strong> #97<br />
Daftar Pustaka 83<br />
Daftar Pustaka<br />
Bronson, G. and H. Silver (1993). C for Engineers and Scientists: An<br />
Introduction to Programming with ANSI C. West Publishing Co.<br />
Feuer, A. (1998). The C Puzzle Book. Addison-Wesley Professional.<br />
Horton, I. (2006). Beginning C: From Novice to Professional, 4th<br />
edition. Apress.<br />
Jensen, T. Pointer Tutorial. URL: http://www.netcom.com/<br />
~tjensen/ptr/cpoint.htm.<br />
Kelly, A. and I. P. (1998). A Book on C: Programming in C, 4th<br />
edition. California: The Benjamin/Cummings Publishing Co.<br />
Kernighan, B. and D. M. Ritchie (1988). The C Programming<br />
Language, 2nd edition. Prentice Hall, Inc.<br />
Kochan, S. (2005). Programming in C: A Complete Introduction to<br />
the C Programming Language, 3rd edition. Sams Publishing.<br />
Solter, N. A. and S. Kleper (2005). Professional C++. Wiley<br />
Publishing Inc.<br />
Vine, M. (2007). C Programming for the Absolute Beginner, 2nd<br />
edition. Course Technology PTR.<br />
✐<br />
✐<br />
✐<br />
✐