Bahan Ajar
PEMROGRAMAN TERSTRUKTUR
Prof. Dr. Ir. Ansar Suyuti, MT
JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS HASANUDDIN MAKASSAR 2013
i
KATA PENGANTAR
Puji syukur penulis panjatkan kehadirat Allah SWT yang telah memberikan rahmat dan karunianya serta kesehatan dan kesempatan kepada penulis sehingga penyusunan buku bahan ajar untuk mata kuliah pemrograman terstruktur ini dapat terselesaikan dengan sangat baik. Penyusunan buku bahan ajar ini menjadi salah satu hal penting dalam pelaksanaan proses perkuliahan karena merupakan salah satu komponen
penunjang
pembelajaran.
Pemrograman
terstruktur
merupakan ilmu yang mempelajari tentang teknik pembuatan program secara terstruktur agar penyusunan program untuk suatu masalah yang rumit dapat lebih sederhana, dapat dimodifikasi (dikembangkan) dengan mudah, dan mempermudah pencarian bagian yang error saat pengujian. Bahasa pemrograman yang digunakan dalam buku ini adalah bahasa C. Selama proses penyusunan buku ini, penulis menyadari masih banyaknya kekurangan dalam buku bahan ajar ini. Oleh karena itu, penulis dengan sangat terbuka menerima segala bentuk kritik dan saran yang tentunya dapat membangun dan meningkatkan kemampuan kita bersama. Penulis berharap semoga buku ini dapat membantu dan bermanfaat bagi para pembaca. Makassar, 11 Oktober 2013 Penulis
ii
DAFTAR ISI
Halaman Sampul...................................... .................. ........................................ ....................................... ...................... ... i Kata Pengantar..................................... .................. ....................................... ........................................ .......................... ...... ii Daftar Isi ....................................... .................... ........................................ ........................................ ................................ ............. iii Bab I Pendahuluan ...................................... .................. ........................................ ................................. ............. 1 Bab II Struktur Struktur Dasar Bahasa C ...................................... ................... ................................ ............. 4 Bab III Input dan Output ....................................... .................... ....................................... ....................... ... 13 Bab IV Penyeleksian Penyeleksian Kondisi ..................................... .................. ....................................... .................... 19 Bab V Perulangan ......................................... .................... ......................................... ................................ ............ 24 Bab VI Array ....................................... ................... ........................................ ....................................... ...................... ... 28 Bab VII Fungsi ....................................... ................... ........................................ ....................................... ................... 34 Bab VIII Struct (Record) ................................................................ Bab VIII Pointer ..................................... ................. ........................................ ....................................... ................... 47 Bab IX Operasi Fungsi ........................................ .................... ........................................ .......................... ...... 52
iii
BAB I PENDAHULUAN 1. Deskripsi Mata Kuliah
Pemrograman
terstruktur
adalah
mata
kuliah
yang
mempelajari tentang bagaimana menyelesaikan suatu masalah komputasi melalui program yang lebih terstruktur dan mudah untuk dipahami. Bahasa pemrograman yang digunakan selama mata kuliah ini adalah bahasa pemrograman bahasa C. Bahasa pemrograman
ini
dipilih
karena
penggunaan
bahasa
pemrograman ini secara luas telah digunakan dan mudah untuk dipahami. Mata kuliah ini merupakan salah satu mata kuliah wajib pada program studi Teknik Informatika. 2. Kegunaan Mata Kuliah
Dengan adanya mata kuliah ini mahasiswa memperoleh manfaat berupa kemampuan untuk menyusun program yang lebih sistematis dan sederhana dalam menyelesaikan suatu masalah. Selain itu menambah soft-skill mahasiswa dalam bidang pemrograman. 3. Tujuan Instruksional
Diharapkan setelah mengikuti mata kuliah ini mahasiswa mampu
menyelesaikan
masalah
kompleks dengan lebih sederhana.
pemrograman
yang
lebih
4. Petunjuk bagi Mahasiswa
1) Sebelum mengikuti perkuliahan diharapkan mahasiswa telah membaca materi pembahasan dari bahan ajar dan literatur lainnya yang berkaitan. 2) Mintalah petunjuk dari dosen jika ada hal yang belum terselesaikan, baik dalam diskusi kelompok maupun dalam diskusi kelas 3) Kerjakan setiap tugas yang diberikan pada setiap akhir kegiatan/pertemuan dengan baik. 4) Perbanyaklah latihan mengerjakan soal, baik secara teori maupun langsung dipraktekan dalam komputer dengan menggunakan bahasa pemrograman Bahasa C. 5. Sistem Penilaian
Adapun sistem penilaian untuk mata kuliah ini adalah : 1) Kehadiran
=
10%
2) Tugas
=
20%
3) Mid
=
30%
4) Final
=
40%
6. Garis – Garis Besar Program Pembelajaran
No
Tujuan Instruksional Khusus
1
2 Konsep
3 Konsep Pemrograman Terstruktur Elemen Dasar
1.
Menjelaskan Terstruktur
2.
Menjelaskan struktur dasar berupa elemenelemen dasar dalam bahasa C Menerapkan perintah – perintah dasar dalam program sederhana.
Perintah Dasar
3.
Menerapkan perintah penyeleksian kondisi (Selection) dan perulangan ( iterasion ) Membuat program menggunakan struktur data array.
Perintah Selection dan Iteration Array
Membuat program dengan menggunakan fungsi
Fungsi
4. 5.
Pemrograman
Pokok Bahasan
6.
Membuat program dengan struktur data pointer
Pointer
7.
8. 9
Membuat program dengan menggunakan operasi file
Operasi file
Membuat program untuk kasus tertentu
Studi kasus
Sub Pokok Bahasan
1. 2. 3. 1. 2. 3. 1. 2. 3. 1. 2. 1. 2. 3. 1. 2. 3. 4. 5. 1. 2. 3. 4. 1. 2. 3. 4.
4 Go to less Programming Lingkungan Bahasa C Desain Program Tipe Data Variable & Constant Operator & Expresi Instruksi Input Inatruksi Output Instruksi Sequential Instruksi selection Instruksi iteration Membuat array Aspek-aspek penting pada array Melewatkan array ke dalam fungsi Fungsi pustaka pada bahasa C Parameter fungsi Jenis variabel fungsi Melewatkan nilai pada fungsi Fungsi rekursif Membuat perintah pointer Operator pointer Operasi pointer Pointer pada pointer, array, dan string Pengantar file Membuka dan menutup file Melaksanakan proses file File sequensial Program manipulasi
Estimasi Waktu 5
1 x 100
1 x 100
1 x 100 2 x 100 2 x 100
2 x 100
1 x 100
1 x 100 2 x 100 3
BAB II STRUKTUR DASAR BAHASA C
1. Pendahuluan a. Deskripsi
Bab ini akan menyajikan tentang pengenalan bahasa C, tipe – tipe data yang digunakan dalam bahasa C, pengertian konstanta dan variabel, cara mendeklarasikan konstanta, variabel, dan fungsi, operator – operator dalam bahasa C, komentar dan kata – kata terkadang dalam bahasa C. b. Tujuan pembelajaran
Setelah mengikuti perkuliahan ini, mahasiswa diharapkan mampu mengenal dan menggunakan tipe data, variabel, konstanta, operator – operator dan komentar dalam sebuah program bahasa C. 2. Teori Dasar a. Pengenalan Bahasa C
Bahasa C diciptakan oleh Dennis Ritchie tahun 1972 di Bell Laboratories. Bahasa C adalah suatu bahasa pemrograman. Bahasa C termasuk sebagai bahasa pemrograman tingkat menengah, maksudnya bahasa C bisa dipelajari dengan lebih mudah karena mudah dimengerti tetapi mempunyai kemampuan yang tinggi. Bahasa C bisa digunakan untuk merekayasa program untuk segala kebutuhan, baik untuk aplikasi bisnis, matematis atau bahkan game. Setiap bahasa pemrograman memiliki kelebihan dan
4
kekurangan masing – masing. Adapun kelebihan dan kekurangan bahasa C adalah sebagai berikut [1]: Kelebihan Bahasa C:
Bahasa C tersedia hampir di semua jenis computer.
Kode bahasa C sifatnya adalah portable dan fleksibel untuk semua jenis computer.
Bahasa C hanya menyediakan sedikit kata-kata kunci. hanya terdapat 32 kata kunci.
Proses executable program bahasa C lebih cepat
Dukungan pustaka yang banyak.
C adalah bahasa yang terstruktur
Bahasa C termasuk bahasa tingkat menengah penempatan ini hanya menegaskan bahwa c bukan bahasa pemrograman yang berorientasi pada mesin. yang merupakan ciri bahasa tingkat rendah. Melainkan berorientasi pada obyek tetapi dapat dinterprestasikan oleh mesin dengan cepat. secepat bahasa mesin. inilah salah satu kelebihan c yaitu memiliki kemudahan dalam menyusun programnya semudah bahasa tingkat tinggi namun dalam mengeksekusi program secepat bahasa tingkat rendah.
Kekurangan Bahasa C:
Banyaknya operator serta fleksibilitas penulisan program kadang-kadang membingungkan pemakai.
Bagi pemula pada umumnya akan kesulitan menggunakan pointer.
5
b. Struktur Bahasa C [1]
Adapun struktur dari bahasa C adalah sebagai berikut :
{ ; ; } Contoh :
Preprosesor Directive (#include) Preprosesor
digunakan
untuk
Directive
(#include)
memanggil
file
adalah
header
perintah
(include
file)
yang yang
didalamnya terdapat perintah, fungsi atau prototype yang bisa digunakan dalam program yan dibuat. Jika perintah #include ini tidak ditulis, maka komputer tidak mengerti perintah-perintah yang ditulis. Contoh: #include #include phi 3.14
Header File Header adalah berkas yang berisi prototype fungsi, definisi
konstanta dan definisi variable. Fungsi adalah kumpulan code C yang diberi nama dan ketika nama tersebut dipanggil maka kumpulan kode tersebut dijalankan. 6
Contoh : File header stdio.h digunakan untuk penanganan input / output standar seperti penulisan ke layar, ke file atau pembacaan data dari keyboard atau file. Dan masih ada lagi beberapa file header lainnya seperti conio.h, math.h,dll.
Void Void artinya fungsi yang mengikutinya tidak memiliki nilai
kembalian (return).
Main ( ) Fungsi main ( ) adalah fungsi yang pertama kali dijalankan
ketika program dieksekusi. Tanpa fungsi main suatu program tidak dapat dieksekusi namun dapat dikompilasi.
Statement Statement adalah instruksi atau perintah kepada suatu
program ketika program itu dieksekusi untuk menjalankan suatu aksi. Setiap statement diakhiri dengan titik-koma (;). c. Tipe Data
Dalam bahasa C tipe data merupakan bagian program yang sangat penting karena tipe data mempengaruhi setiap perintah yang akan dilaksanakan oleh komputer. Sebagai contoh 3 dibagi 2 menghasilkan 1.5000 jika bertipe data float dan menghasilkan 1 jika bertipe data integer. Berikut adalah tipe dasar dalam bahasa C. Pemilihan tipe data yang tepat membuat program menjadi efisien dan efektif.
7
Tabel 2.1 Tipe – tipe data dalam pemrograman bahasa C [4]
No 1
Tipe Data char
Ukuran
Range
Format
I byte
-128 s/d 127
%c
2
int
2 byte
3
float
4 byte
4
double
8 byte
5
void
0 byte
-32768 s/d 32767 -3.4E-38s/d 3.4E+38 1.7E-308s/d 1.7E+308 -
%i, %d %f %lf -
Keterangan Karakter/string Integer/ bilangan bulat Float/bilangan pecahan Pecahan presisi ganda Tidak bertipe
Contoh Program : #include “stdio.h” #include “conio.h” void main() { int a, b, c; float d; a = 3; b = 2; c = a/b; d = a/b; printf ( "nilai a / b adalah :%i", c); printf ( "nilai a / b adalah :%f", d); getch (); }
Tampilan program diatas :
8
Catatan [2]:
Pemilihan tipe data harus hati-hati. Pertimbangkan jangkauan yang dimiliki oleh tipe data yang dipilih. Kesalahan dalam memilih tipe data akan menimbulkan suatu hasil yang tidak diperkirakan. Contoh : int a=32000; int b=769; int c; c=a+b; printf(“%i + %i = %i %i\ n”,a,b,c); \ n”,a,b,c);
Jika program tersebut dijalankan, maka akan menghasilkan output seperti berikut : 32000 + 769 = -32767 Hal tersebut terjadi karena jangkuan nilai c sudah melebihi jangkauan nilai untuk sebuah tipe data int. Bila suatu variable telah melebihi jangkauan nilainya maka nilai variable tersebut akan berputar menjadi nilai minimalnya dan jika nilainya kurang dari minimal jangkauan nilainya maka variable tersebut akan terisi oleh bilangan maksimal tipe tersebut. Contoh : Nilai yang diharapkan : 32767 32768 32769 9
Nilai yang tercetak pada bahasa C 32767 -32768 -32767 d. Konstanta
Konstanta adalah suatu nilai yang sifatnya tetap. Konstanta secara garis besar dapat terbagi 2 yaitu konstanta bilangan contoh 1, 2, 3, ….. dan konstanta teks yang dapat berupa karakter contohnya „a‟, „b‟, 4, & dan dapat pula berupa teks (string (string ) contohnya “Makassar”, “Universitas Hasanuddin”. bahasa C juga menyediakan
beberapa karakter khusus yang disebut karakter escape, antara lain :
\a : untuk bunyi bell (alert)
\b : mundur satu spasi (backspace)
\f : ganti halaman (form feed)
\n : ganti baris baru (new line)
\r : ke kolom pertama, baris yang sama (carriage return)
\v : tabulasi vertical
\0 : nilai kosong (null)
\‟ : karakter petik tunggal
\” : karakter petik ganda
\\ : karakter garis miring
e. Variabel
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu
10
variable bisa diubah-ubah sesuai kebutuhan. Berikut ini adalah aturan dalam penamaan variabel.
Nama variabel hanya boleh terdiri dari huruf, angka, dan garis bawah / underscore atau gabungan dari ketiganya, dimana karakter pertamanya adalah huruf.
Tidak mengandung simbol khusus seperti +, -, =, %, ^, @, ?, :, $, #, !, &, *, (, ) dll dan tidak mengandung spasi.
Bersifat case sensitive yaitu huruf kecil dan huruf besar berbeda. Contoh : varibel nama, Nama, dan NAMA dianggap berbeda.
Keyword (kata kunci) yang telah digunakan dalam bahasa C tidak boleh digunakan sebagai nama variabel,seperti include, using, scanf, printf, int, float dll.
Panjangnya bebas namun yang ditampilkan hanya 32 karakter.
Contoh penamaan variabel yang benar : x, nama, UNHAS, D411, nama_mhs, dll. Contoh penamaan variable yang salah : 12nama, %unhas, x#nama, nama saya, float, dll. f. Deklarasi
Deklarasi diperlukan bila kita akan menggunakan pengenal (identifier) dalam program. Identifier dapat berupa variable, konstanta dan fungsi.
Deklarasi Variabel
Bentuk umum pendeklarasian suatu variable adalah : Nama_tipe nama_variabel;
11
Contoh : int a;
(deklarasi a bertipe integer)
char b, huruf, nip[5]; (deklarasi b, huruf, nip[5], bertipe karakter) float c;
(deklarasi c bertipe float)
double d;
(deklarasi d bertipe double
int array[2][3];
(deklarasi array bertipe integer)
char *p;
(deklarasi pointer bertipe karakter)
Deklarasi Konstanta
Dalam bahasa C konstanta dideklarasikan menggunakan preprocessor #define. Contohnya : #define PHI 3.14 #define nim “D412110123” #define nama “Si bulan”
Deklarasi Fungsi
Fungsi merupakan bagian yang terpisah dari program dan dapat diaktifkan atau dipanggil di manapun di dalam program. Fungsi dalam bahasa C ada yang sudah disediakan sebagai fungsi pustaka seperti printf(), scanf(), getch() dan untuk menggunakannya tidak perlu dideklarasikan. Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat oleh programmer. Bentuk umum deklarasi sebuah fungsi adalah : Tipe_fungsi nama_fungsi (parameter_fungsi);
Contohnya : float luas_lingkaran(int jari); void tampil(); int tambah(int x, int y);
12
g. Operator 1) Operator Penugasan
Operator Penugasan (Assignment operator ) dalam bahasa C berupa tanda sama dengan (=) Contoh : a=5; A = x * y; Artinya : variabel a diisi dengan 5 dan variable A diisi dengan hasil perkalian antara x dan y. 2) Operator Aritmatika
Bahasa C menyediakan lima operator aritmatika, yaitu : Tabel 2.2 Operator aritmatika
Operator
Keterangan
*
Perkalian
/
Pembagian
%
Sisa Pembagian (modulus)
Contoh 5*6 10 / 5 5%2
+
Penjumlahan
3+4
-
Pengurangan
5-4
Contoh program : #include "stdio.h" #include "conio.h" void main() { clrscr(); // untuk membersihkan layar printf("Nilai dari 7 + 3 = %i", 7 + 3); printf("\nNilai dari 7 - 3 = %i", 7 - 3); printf("\nNilai dari 7 * 3 = %i", 7 * 3); printf("\nNilai dari 7 / 3 = %i", 7 / 3);
13
printf("\nNilai dari 7 % 3 = %i", 7 % 3); getch(); }
Tampilan program diatas adalah :
3) Operator Unary
Operator Unary aadalah operator yang hanya membutuhkan satu operand saja. Berikut adalah beberapa operator unary dalam bahasa C : Tabel 2.3 Operator unary [4]
Operator ++ -! & ~ * Sizeof
Keterangan Unary minus Peningkatan dengan penambahan nilai 1 Penurunan dengan pengurangan 1 Unary not Menghasilkan alamat memori operand Bitwise NOT Menghasilkan nilai dari pointer Ukuran dari operand dalam byte
Letak Sebelum operator Sebelum dan sesudah Sebelum dan sesudah Sebelum
Contoh A + (-B) * C A++ A-!A
Sebelum
&A
Sebelum
~A
Sebelum
*A
Sebelum
sizeof (A)
14
4) Operator Hubungan (Perbandingan)
Operator
Hubungan
digunakan
untuk
membandingkan
hubungan antara dua buah operand sebuah nilai atau variable. Operator hubungan dalam bahasa C : Tabel 2.4 Operator hubungan [4]
Operator
Keterangan
Contoh
<
Lebih kecil dari
a>b
<=
Lebih kecil sama dengan dari
a >= b
>
Lebih besar
a
>=
Lebih besar sama dengan dari
a >= b
==
Sama dengan
a == b
!=
Tidak sama dengan
a != b
5) Operator Logika
Operator logika adalah operator yang digunakan untuk membandingkan logika hasil dari operator-operator hubungan. Operator logika ada tiga macam, yaitu [3]: && : Logika AND (DAN) || : Logika OR (ATAU) ! : Logika NOT (INGKARAN)
15
6) Operator Bitwise
Operator bitwise digunakan untuk memanipulasi bit-bit dari nilai data yang ada di memori. Operator bitwise dalam bahasa C [3]: << : Pergeseran bit ke kiri >> : Pergeseran bit ke kanan & : Bitwise AND ^ : Bitwise XOR (exclusive OR) | : Bitwise OR ~ : Bitwise NOT 7) Kata Tercadang (Reserved Word)
Bahasa C standar ANSI memiliki 32 kata tercadang (reserved word) dan Turbo C menambahkannya dengan 7 kata tercadang. Semua reserved word tidak boleh digunakan dalam penamaan identifier (variable, nama fungsi dll). Kata Tercadang yang tersedia dalam bahasa C adalah sbb [4]: *asm auto break case *cdecl char const continue
default do double else enum extern *far float
for goto *huge if int *interrupt long *near
*pascal register return short signed sizeof static struct
switch typedef union unsigned void volatile while
16
8) Komentar Program
Komentar program hanya diperlukan untuk memudahkan pembacaan dan pemahaman suatu program (untuk keperluan dokumentasi program). Dengan kata lain, komentar program hanya merupakan keterangan atau penjelasan program. Untuk memberikan komentar atau penjelasan dalam bahasa C digunakan pembatas /* dan */ atau menggunakan tanda // untuk komentar yang hanya terdiri dari satu baris. Komentar program tidak akan ikut diproses dalam program (akan diabaikan). Contoh program : #include #include void main() { clrscr(); // untuk membersihkan layar printf(“Universitas Hasanuddin”); /* Mencetak Universitas Hasanuddin */ getch(); }
Tampilan program diatas :
17
3. Latihan Soal
Kerjakanlah latihan soal berikut! 1. Buatlah sebuah program menghitung nilai rata – rata dari data nilai mahasiswa yang terdiri atas nilai tugas1, tugas2 , mid test, dan final test dimana komposisi nilai adalah tugas 20%, mid 40%, dan final 40% . 2. Sebuah toko memberikan discount untuk setiap pembelian minimum Rp 50.000,-. Hitunglah jumlah yang harus dibayar oleh setiap pelanggan untuk setiap pembelian.
18
Daftar Pustaka
[1] Bahasa Pemrograman C. diakses pada tanggal 13 Oktober 2013.
http://www2.ukdw.ac.id/kuliah/info/TI2023/Modul08A.pdf [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik
Informatika. UNICOM. [3] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi. Yogyakarta [4] Solichin Achmad. “Pemrograman Bahasa C dengan Turbo C”. www.ilmukomputer.com
19
BAB III INPUT DAN OUTPUT
1. Pendahuluan a. Deskripsi
Bab ini menyajikan tentang beberapa perintah input dan output yang digunakan dalam bahasa C dan cara pendeklarasian dan penggunaannya masing – masing. b. Tujuan Pembelajaran
Setelah mempelajari bab ini diharapkan mahasiswa mampu menggunakan setiap perintah input dan output dalam membuat program pada pemrograman bahasa C. 2. Teori Dasar a. Perintah Input
Perintah standar input yang merupakan fungsi pustaka bahasa C diantaranya adalah : 1) Scanf() [4]
Fungsi pustaka scanf() digunakan untuk menginput data berupa data numerik, karakter dan string secara terformat. Hal-hal yang perlu diperhatikan dalam pemakaian fungsi scanf() :
Fungsi scanf() memakai penentu format
Fungsi scanf() memberi pergantian baris secara otomatis
Fungsi scanf() tidak memerlukan penentu lebar field
Variabelnya harus menggunakan operator alamat &
20
Bentuk umum dari fungsi ini adalah : scanf (“penentu format”, &nama_variabel); Tabel 3.1 Kode penentu format [1]
Tipe Data Integer Bentuk desimal/ berpangkat/ floating point Karakter String Unsigned octal integer Unsigned hexadecimal integer Unsigned integer
Penentu Format %d atau %i %e atau %f %c %s %o %x %u
Contoh program : #include #include void main () { int a; float b; char nama[10]; printf("Masukkan nilai a = "); scanf("%d", &a); printf("Masukkan nilai b = "); scanf("%e", &b); printf("Masukkan nama Anda = "); scanf("%s", &nama); }
Tampilan program diatas :
21
2) Gets()
Fungsi Gets () digunakan untuk memasukkan data string. Bentuk umum fungsi ini adalah [4]: gets (nama_variabel_array) Contoh program : #include #include void main () { char nama[20]; char jurusan[20]; printf("Masukkan nama Anda : "); gets (nama); printf ("\nMasukkan jurusan Anda : "); gets (jurusan); } Tampilan program diatas adalah :
3) Getch()
Fungsi getch() (get character and echo) digunakan untuk sebuah karakter dengan sifat karakter yang dimasukkan tidak perlu diakhiri dengan menekan tombol ENTER, dan karakter yang dimasukkan tidak akan ditampilkan dilayar. File header yang harus disertakan adalah conio.h [4].
22
Contoh program [3]: #include #include void main () { char a; printf("Masukkan sebuah karakter : "); a = getch (); printf ("\nKarakter yang Anda masukkan adalah :%c ", a); getch (); } Tampilan program diatas :
4) Getchar()
Fungsi getchar() digunakan untuk membaca data yang bertipe karakter. Penggunaannya harus diakhiri dengan penekanan tombol ENTER dan karakter yang dimasukkan akan terlihat pada layar [4]. Contoh program : #include void main () {char c; printf ("Masukkan sebuah karakter: "); c = getchar (); printf ("%c", c); }
23
Tampilan program diatas adalah :
5) Getche()
Fungsi getche() digunakan untuk membaca sebuah karakter dengan sifat karakter yang dimasukkan tidak perlu diakhiri dengan menekan tombol ENTER, dan karakter yang dimasukkan ditampilkan dilayar. File header yang harus disertakan adalah conio.h[4]. Contoh program : #include #include void main () { char a; printf("Masukkan sebuah karakter : "); a = getche (); printf ("\nKarakter yang Anda masukkan adalah :%c ", a); getch (); }
Tampilan program diatas adalah :
b. Perintah Output
Untuk menampilkan data pada layar maka fungsi yang dapat digunakan adalah [4] :
Fungsi printf() digunakan untuk menampilkan semua jenis data (numeric dan karakter)
24
Bentuk penulisan : printf (“string-kontrol”, argument-1, argument-2,..);
Fungsi puts() digunakan untuk menampilkan data string dan secara otomatis akan diakhiri dengan perpindahan baris.
Fungsi putchar() digunakan untuk menampilkan sebuah karakter.
Contoh program : #include #include void main () { int a = 10; float b = 5; char c[10] = "UNHAS"; printf ("Nilai a adalah :%i \n", a); printf ("Nilai a adalah ;%i dan nilai b adalah : %f\n\n", a, b); puts ("Saya kuliah di"); puts (c); puts ("\nSaya kuliah di"); putchar ('U'); putchar ('N'); putchar ('H'); putchar ('A');putchar ('S'); getch (); }
Tampilan program diatas adalah :
25
Mengatur lebar field [1]: Bila ingin mencetak atau menampilkan data yang bertipe data float atau pecahan, tampilan yang tampak biasanya kurang bagus. Untuk mengatur lebar field dan jumlah desimal yang akan dicetak, dapat digunakan bentuk penulisan : %a.bf
Lebar field
Jumlah desimal
Contoh program [1]: #include #include void main () { float a = 1.23, b = 321.5; printf ("Bilangan a tanpa pengaturan lebar fild = %f\n",a ); printf ("Bilangan b tanpa pengaturan lebar fild = %f\n\n",b ); printf ("Bilangan a dengan pengaturan lebar fild = %3.2f\n",a ); printf ("Bilangan b dengan pengaturan lebar fild = %3.2f\n",b ); getch (); }
Contoh Kasus[2]
Di suatu perusahaan, data penggajian dihitung dengan ketentuan sebagai berikut : Gaji Pokok : Rp. 5000000
26
Gaji Lembur/jam : Rp. 5000 Total Gaji Lembur : Lama Lembur * Gaji Lembur/jam Gaji Kotor : Gaji Pokok + Total Gaji Lembur Pajak : 10% Gaji Bersih : Gaji Kotor - Pajak Data yang diinputkan adalah : Nama Pegawai, Lama Lembur. #include #include main() { int jamlembur; long int gajipokok=500000,gajikotor,totalgajilembur; float pajak,gajibersih; char nama[50]; clrscr(); printf("Nama Pegawai : ");gets(nama); printf("Lama Lembur : ");scanf("%i",&jamlembur); totalgajilembur=(long int)5000*jamlembur; gajikotor=gajipokok+totalgajilembur; pajak=0.1*gajikotor; gajibersih=gajikotor-pajak; clrscr(); printf("Hasil Perhitungan\n"); printf("Nama Pegawai : %s\n",nama); printf("Gaji Pokok : Rp. %10li\n",gajipokok); printf("Lama Lembur : %i jam\n",jamlembur); printf("Total Gaji Lembur : Rp. %10li\n",totalgajilembur); printf("Gaji Kotor : Rp. %10li\n",gajikotor); printf("Pajak (10%%) : Rp. %10.0f\n",pajak); printf("Gaji Bersih : Rp. %10.0f\n",gajibersih); getch(); }
Tampilan program diatas adalah :
27
3. Latihan
Kerjakanlah soal latihan berikut! 1) Buatlah sebuah Menginput data pegawai pada sebuah instansi dimana data yang dibutuhkan adalah Nama, NIP, Tempat dan tanggal lahir, dan Alamat. 2) Buatlah sebuah program untuk membuat sebuah password. 3) Buatlah sebuah program untuk Menginput sebuah nilai yang menyatakan waktu dalam detik, kemudian cetaklah waktu tersebut dalam bentuk : Jam, Menit, dan Detik
28
Daftar Pustaka [1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi. Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
[4] Solichin Achmad. “Pemrograman Bahasa C dengan Turbo C”. www.ilmukomputer.com
29
BAB IV PENYELEKSIAN KONDISI
1. Pendahuluan a. Deskripsi
Bab ini menyajikan tentang fungsi – fungsi yang digunakan dalam
menyelesaikan
program
penyeleksian
kondisi
pada
pemrograman bahasa C serta perbedaan penggunaan masing – masing. b. Tujuan pembelajaran
Setelah mengikuti perkuliahan ini mahasiswa diharapkan mampu membuat program dengan menggunakan fungsi selection. 2. Teori Dasar
Penyeleksian kondisi digunakan untuk menentukan alur suatu proses. Penyeleksian kondisi biasanya digunakan dalam program yang kompleks. Penyeleksian kondisi melibatkan beberapa operator dalam bahasa C, yaitu : operator hubungan (perbandingan), logika, dan bitwise. Fungsi seleksi terdiri dari 3 tipe pernyataan yaitu : a. Struktur Kondisi “ if … “
Bentuk umum If [1]: if (kondisi) { statement1; …
statementn; }
30
Jika kondisi yang diseleksi terpenuhi maka statement tersebut akan dikerjakan sedangkan jika kondisi tersebut tidak terpenuhi maka akan menjalankan program berikutnya setelah seleksi kondisi tersebut. Contoh program 1: #include #include void main () { float tot_pembelian, discount, tot_pembayaran; printf ("Masukkan Total Pembelian Rp :"); scanf ("%f",&tot_pembelian); if (tot_pembelian >= 100000) discount = 0.2*tot_pembelian; printf ("\nAnda memperoleh discount 10 %"); printf ("\nBesarnya Potongan : Rp %10.0f",discount); tot_pembayaran = tot_pembelian - discount; printf ("\nJumlah yang Anda bayar adalah : tot_pembayaran); printf ("\n\nTERIMA KASIH ATAS KUNJUNGAN ANDA"); getch (); }
Rp
%10.0f",
Tampilan program diatas adalah :
31
Jika dalam sebuah IF perintah yang hendak dijalankan lebih dari
1
perintah,
maka
perintah – perintah
tersebut
harus
dikelompokkan dalam sebuah blok { }. Format penulisannya adalah [5]: if { statement 1; statement 2; } Statement 3; Statement 4;
Dengan format IF diatas, jika kondisi benar, maka perintah yang dijalankan adalah perintah yang terletak dalam kurung kurawal (statement 1 dan statement 2), sedangkan statement3 dan statement 4 akan dijalankan tanpa bergantung dari kondisi yang ada. Contoh program 2 [5]: # include #include main () { float suhu; printf ("Masukkan suhu dalam derajat Celcius :"); scanf ("%f", &suhu); if (suhu < 24) {printf ("\nSebaiknya tidak mandi!\n"); printf ("\nJangan menyalakan AC."); }
32
if (suhu >= 24) {printf ("\nSebaiknya mandi!"); printf ("\nNyalakan AC!"); } getch (); }
Tampilan program diatas :
b. Struktur Kondisi “ if … else …“
Bentuk umum If – Else : if (kondisi) { Statement; } else } Statement; } Jika kondisi yang diseleksi terpenuhi maka statement pertama yang akan dikerjakan sedangkan jika kondisi tersebut tidak terpenuhi statement kedua yang akan dikerjakan. Diakhir setiap statement menggunakan tanda (;) walaupun sebelum else. Contoh program : #include #include void main () {
33
float tot_pembelian, discount, tot_pembayaran; printf ("Masukkan Total Pembelian Rp :"); scanf ("%f",&tot_pembelian); if (tot_pembelian >= 100000) { printf ("\nAnda memperoleh discount 10 %"); discount = 0.2*tot_pembelian; } else { printf ("\nAnda memperoleh discount 5 %"); discount = 0.05*tot_pembelian; } printf ("\nBesarnya Potongan : Rp %10.0f",discount); tot_pembayaran = tot_pembelian - discount; printf ("\nJumlah yang Anda bayar adalah : Rp %10.0f", tot_pembayaran); printf ("\n\nTERIMA KASIH ATAS KUNJUNGAN ANDA"); getch (); }
Tampilan program diatas adalah :
34
Contoh program 2 [4]: Berikut adalah program untuk menginput tiga buah bilangan bulat (misal A, B, dan C) kemudian mencetak ketiga nilai tersebut urut dari nilai kecil ke nilai besar [3] # include # include void main () { int A, B, C; printf ("Input nilai A ="); scanf ("%i", &A); printf ("Input nilai B ="); scanf ("%i", &B); printf ("Input nilai C ="); scanf ("%i", &C); if (A < B) { if (B < C) printf ("%i ,%i ,%i ",A, B, C); else {if (A < C) printf ("%i ,%i ,%i ",A, C, B); else printf ("%i ,%i ,%i ",C, A, B); } } else {if (A < C) printf ("%i ,%i ,%i ",B, A, C); else { if (B < C) printf ("%i ,%i ,%i ", B, C, A); else printf ("%i ,%i ,%i ",C, B, A); } } getch (); }
Tampilan program diatas adalah :
35
c. Struktur Kondisi “Switch … “
Struktur kondisi switch digunakan untuk penyeleksian kondisi dengan kemungkinan yang terjadi cukup banyak[1]. Bentuk Umum Switch : switch (ekspresi) { case 1: Statement 1; break; case 2 : Statement 2; break; …
case n : Statement n; break; default : Statement m; } Contoh program : #include #include void main () { char jurusan; printf ("1. Teknik Sipil \n2. Teknik Mesin \n3. Teknik Perkapalan \n4. Teknik Elektro"); printf ("\n5. Teknik Arsitektur \n6. Teknik Geologi"); printf ("\n\nMasukkan kode jurusan Anda :"); jurusan = getchar (); switch (jurusan)
36
{ case '1' : puts ("TEKNIK SIPIL"); break; case '2' : puts ("TEKNIK MESIN"); break; case '3' : puts ("TEKNIK PERKAPALAN"); break; case '4' : puts ("TEKNIK ELEKTRO"); break; case '5' : puts ("TEKNIK ARSITEKTUR"); break; case '6' : puts ("TEKNIK GEOLOGI"); break ; default : puts ("Kode Anda Salah"); break; } getch (); } Tampilan program diatas adalah :
Contoh Program 2 [2]: Contoh switch… case berjenjang # include # include void main () { char KodePulau; int KodeKota; printf ("Kode Pulau : \nJ = Jawa \nS = Sumatera \nK = Kalimantan"); printf ("\nMasukkan Kode Pulau : \t"); scanf ("%c", &KodePulau); switch (KodePulau) { case 'J':
37
printf ("PULAU JAWA \n"); printf ("Kode Kota di Jawa :"); printf ("\n1. Jakarta \n2. Surabaya \n3. Bandung \n4. Semarang \n5. Yogyakarta\n"); printf ("Masukkan Kode Kota :\t"); scanf ("%i", &KodeKota); switch (KodeKota) { case 1 : printf ("\nJakarta"); break; case 2 : printf ("\nSurabaya"); break; case 3 : printf ("\nBandung"); break; case 4 : printf ("\nSemarang"); break; case 5 : printf ("\nYogyakarta"); break; default : printf ("Kode Kota di Pulau Jawa Salah"); } break; case 'S': printf ("PULAU SUMATERA \n"); printf ("Kode Kota di Sumatera"); printf ("\n1. Medan \n2. Palembang \n3. Padang\n"); printf ("Masukkan Kode Kota : \t"); scanf ("%i", &KodeKota); switch (KodeKota) { case 1 : printf ("\nMedan"); break; case 2 : printf ("\nPalembang"); break; case 3 : printf ("\nPadang"); break; default : printf ("Kode Kota di Pulau Sumatera Salah"); } break;
38
case 'K': printf ("PULAU KALIMANTAN \n"); printf ("Kode Kota di Kalimantan"); printf ("\n1. Banjarmasin \n2. Pontianak\n"); printf ("Masukkan Kode Kota : \t"); scanf ("%i", &KodeKota); switch (KodeKota) { case 1 : printf ("\nBanjarmasin"); break; case 2 : printf ("\nPontianak"); break; default : printf ("Kode Kota di Pulau Kalimantan Salah"); } break; default : printf ("Kode Pulau Salah"); } getch (); }
Tampilan program diatas adalah :
39
d. Multi Kondisi dan Opertor Logika [3]
Kadang – kadang satu kondisi saja tidak cukup untuk menentukan suatu syarat, sehingga diperlukan dua atau lebih kondisi. Untuk menggabungkan kondisi – kondisi tersebut digunakan operator yang disebut operator logika. Adapun operator logika dapat digunakan : AND (&&), OR (||), dan NOT (!). Contoh Program 1 : # include # include void main () { int a, b, c; printf ("Input nilai A : "); scanf ("%i", &a); printf ("Input nilai B : "); scanf ("%i", &b); printf ("Input nilai C : "); scanf ("%i", &c); if (a > b && a > c ) printf ("Nilai maksimum adalah %i", a); if (b > a && b > c ) printf ("Nilai maksimum adalah %i", b); if (c > a && c > b ) printf ("Nilai maksimum adalah %i", c); getch (); }
Tampilan program diatas adalah :
40
Contoh program 2 [2]: #include #include main() { int kodejurusan,kodekelas,banyaktiket; long int hargatiket,total; float diskon,bayar; printf("Pilih Jurusan :\n"); printf("---------------\n"); printf("1. Jakarta\n2. Yogya\n3. Surabaya\n"); printf("---------------\n"); printf("Jurusan yang dipilih : ");scanf("%i",&kodejurusan); printf("Pilih Kelas :\n"); printf("---------------\n"); printf("1. Eksekutif\n2. Bisnis\n3. Ekonomi\n"); printf("---------------\n"); printf("Kelas yang dipilih : ");scanf("%i",&kodekelas); printf("Banyak Tiket : ");scanf("%i",&banyaktiket); if((kodejurusan==1)&&(kodekelas==1)) hargatiket=70000; else if((kodejurusan==1)&&(kodekelas==2)) hargatiket=40000; else if((kodejurusan==1)&&(kodekelas==3)) hargatiket=10000; else if(kodejurusan==2) { if(kodekelas==1) hargatiket=80000; else if(kodekelas==2) hargatiket=50000; else if(kodekelas==3) hargatiket=20000; } else if(kodejurusan==3) { switch (kodekelas)
41
{ case 1:hargatiket=90000;break; case 2:hargatiket=60000;break; case 3:hargatiket=30000; } } printf("Harga Tiket : Rp. %li\n",hargatiket); total=banyaktiket*hargatiket; printf("Total Tiket : Rp. %li\n",total); if( ((kodejurusan==3)&&(kodekelas==1)) || ((kodejurusan==2)&&(kodekelas==2)) ) diskon=0.1*total; else diskon=0; printf("Diskon 10%% : Rp. %f\n",diskon); bayar=total-diskon; printf("Bayar : Rp. %f\n",bayar); getch(); return 0; }
Tampilan program diatas adalah :
42
3. Latihan
1) Buatlah nilai huruf dengan kriteria sebagai berikut : Nilai Huruf
Range Nilai
A
Nilai akhir > 85
B
70>= nilai akhir <= 85
C
60>= nilai akhir < 70
D
50 >= nilai akhir < 60
E
Nilai akhir < 50
2) Buatlah program mengklasifikasikan jenis buku berikut : Kode 1 : komputer Kode 2 : akuntansi Kode 3 : hukum Kode 4 : manajemen Kode 5 : kedokteran 3) Buatlah sebuah program untuk menentukan jenis sebuah segitiga dengan memberi 3 input bilangan yang menyatakan panjang sisi dari sebuah segitiga. Jika ketiga sisi dari bilangan tersebut sama maka segitiga tersebut adalah segitiga sama sisi, jika kedua bilangan sama maka segitiga tersebut adalah segitiga sama kaki, dan jika ketiga bilangan yang diinput berbeda maka segitiga tersebut adalah segitiga sembarang. a. Gunakan operator logika AND (&&) atau OR (||). b. Gunakan operator logika AND (&&) dan OR (||).
43
Daftar Pustaka [1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi. Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
[4] Solichin Achmad. “Pemrograman Bahasa C dengan Tu rbo C”. www.ilmukomputer.com
[5] Swastika Windra. April 2012. "Dasar Algoritma dan Pemrograman menggunakan C & Java". Prestasi Pustaka Publisher. Jakarta
44
BAB V PERULANGAN 1. Pendahuluan a. Deskripsi
Dalam bab ini dijelaskan tentang fungsi – fungsi yang digunakan untuk membuat perintah perulangan dan perbedaan penggunaan masing - masing fungsi. b. Tujuan Pembelajaran
Setelah mengikuti perkuliahan ini, mahasiswa diharapkan mampu menyelesaikan masalah perulangan dengan menggunakan program bahasa C. 2. Teori Dasar Perulangan data atau yang biasa disebut dengan “looping”
adalah proses yang dilakukan secara berulang-ulang sampai batas yang
ditentukan.
Perulangan
akan
berhenti
jika
nilai
yang
dimasukan sudah tidak memenuhi syarat yang diberikan. Jenis – jenis perulangan: a. For
For digunakan untuk mengulang suatu proses yang telah diketahui jumlah perulangannya. Syntax untuk menuliskan perintah for adalah sebagai berikut [4]: for (inisialisasi; syarat_perulangan; pengubah_nilai_pencacah) Keterangan :
Inisialisasi : bagian untuk memberikan nilai awal untuk variabel – variabel tertentu
45
Syarat
pengulangan
:
memegang
kontrol
terhadap
pengulangan, karena bagian ini yang akan menentukan suatu perulangan diteruskan atau dihentikan.
Pengubah nilai pencacah : mengatur kenaikan atau penurunan nilai pencacah.
Contoh program 1: #include #include void main () { int a; for (a = 1; a <=10; a++) { printf ("%d. UNIVERSITAS HASANUDDIN MAKASSAR\n",a); } getch(); }
Tampilan program diatas :
Contoh program 2 : Berikut adalah contoh program untuk menghitung nilai factorial dari n (n!) menggunakan for.
46
#include #include main () { int i, j; int hasil = 1; printf ("PROGRAM UNTUK MENGHITUNG FAKTORIAL N!"); printf ("\n\nInput N = "); scanf ("%i", &j); for (i = j; i >=1; i--) {hasil = hasil*i; } printf ("\n\nHasil faktorial : %d", hasil); getch (); }
Tampilan Program diatas :
Contoh program 3 [2]: Berikut akan diberikan contoh penggunaan perintah for dalam for : #include #include main () { int i, j; for (i = 1; i < 6; i++) {for (j = 1; j <=i ; j++)
47
{printf ("%d",i); } printf ("\n"); } getch (); }
Tampilan program diatas:
b. While
While digunakan untuk mengulang suatu proses yang belum diketahui jumlahnya. Pengecekan kondisi akan dilakukan terlebih dahulu. Jika kondisi masih bernilai true, maka looping akan terus berlanjut. Bentuk penulisan while adalah sebagai berikut[1]: while (syarat_pengulangan) { statement_yang_akan_diulang; }
Contoh program 1: #include "stdio.h" #include "conio.h" void main() { clrscr(); int bil = 1;
48
while (bil <= 10) { printf ("%i", bil); bil++; } getch(); }
Tampilan program diatas adalah :
Contoh program 2 [2]: #include #include main() { int i; float f; i=1; while (i<=1000) { printf("%i\n",i); i++; } f=10; while (f>=0) { printf("%6.2f\n",f); f=f-0.5; } getch(); return 0;}
Tampilan program diatas adalah :
49
c. Do while
Do while digunakan untuk mengulang suatu proses yang belum diketahui jumlahnya. Instruksi akan dijalankan lebih dahulu, kemudian dilakukan pengecekan kondisi apabila masih bernilai true maka looping akan terus berlanjut. Bentu penulisannya sebagai berikut [1]: do { statement-yang-akan-diulang; } while (syarat-pengulangan);
Contoh program : # include # include void main () { int bil = 2; do
50
{ printf ("%i", bil); bil +=2; } while (bil<=10); getch (); } Tampilan program diatas adalah :
Contoh program 2 [2]: Contoh program berikut akan menunjukkan bagaimana proses penjualan n buah barang dengan melakukan entry harga barang dan jumlah pembelian. # include #include main () { int hitung = 0; // memberi nilai awal counter int n, jumlah; long harga, subtotal, total = 0; do { printf ("\nBarang ke - %d\n", hitung+1); printf ("Harga Barang : "); scanf ("%d", &harga); if (harga!=0) { printf ("Jumlah : "); scanf ("%d", &jumlah); subtotal = harga * jumlah; total = total + subtotal; hitung ++; } }while (harga!=0); 51
printf("\nTotal Pembelian : %d", total); getch (); }
Tampilan program diatas adalah :
Contoh aplikasi [3]: Titik A dan titik B hanya dihubungkan oleh satu buah jalan sepanjang 1000 m. Ali berangkat dari titik A menuju titik B tepat jam 08 : 15 : 27 dengan kecepatan tetap 2 m/det. Badu berangkat dari titik B pada jam yang sama menuju titik A dengan kecepatan tetap 3 m/det. Susun program untuk mencetak pukul berapa ( Jam: Menit: detik) Ali dan Badu berpapasan di jalan. # include #include void main () { int vAli, vBadu, sAli, sBadu, s, t; long int t1, t2, det, J, M, D; vAli = 2; vBadu = 3; sAli = 0; sBadu;
52
s = 1000 ; t = 0; while ((sAli + sBadu) < s) { sAli = sAli + vAli; sAli = sBadu+ vBadu; t = t + 1; } t1 = 8*3600L + 15*60 +27; t2 = t1 + t; det = t2; J = det/ 3600; det = det % 3600; M = det / 60; det = det % 60; D = det; printf ("%li : %li : %li", J, M, D); getch (); }
Tampilan program diatas adalah :
53
3. Latihan
1) Buatlah program menghitung 10 deret bilangan genap dengan hasilnya! 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 = 110 a. Dan ganjil dengan hasilnya! b. 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 = 100 2) Buatlah program untuk menghitung perkalian deret bilangan ganjil membentuk segitiga siku dengan hasilnya! 1
=1
1x3
=3
1x3x5
= 15
1x3x5x7
= 105
1x3x5x7x9
= 945
3) Seseorang menyimpan uang Rp 1.000.000,- di bank dengan bunga ber-bunga 2 % perbulan. Jadi setelah satu bulan uangnya menjadi Rp 1.020.000,-. Satu bulan berikutnya uangnya ini mendapat bunga lagi 2%, sehingga setetlah 2 bulan, uangnya menjadi Rp 1.020.000 + Rp 20.400,- = Rp 1.040.400,- dan demikian seterusnya. Buatlah program untuk menghitung dan mencetak jumlah uangnya stetlah 10 bulan.
54
Daftar Pustaka [1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi. Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
[4] Solichin Achmad. “Pemrograman Bahasa C dengan Turbo C”. www.ilmukomputer.com
55
BAB VI ARRAY 1. Pendahuluan a. Deskripsi
Bab ini menyajikan tentang pengertian, cara deklarasi, dan penggunaan array baik array berdimensi satu, array berdimensi dua, dan
array
multi-dimensi.
Serta
disajikan
contoh – contoh
penggunaannya masing – masing. b. Tujuan Pembelajaran
Setelah mengikuti perkuliahan ini, mahasiswa diharapkan dapat memahami penggunaan array serta mampu mengaplikasikan dalam menyelesaikan program yang membutuhkan penyelesaian dengan array. 2. Teori Dasar
Array atau larik adalah tipe terstruktur yan terdiri dari sejumlah komponen yang mempunyai tipe yang sama. Jumlah komponen dalam sebuah array adalah tetap. Banyaknya komponen dalam
array
ditunjukkan
oleh
indeks
yang
berfungsi
untuk
membedakan variabel yang satu dengan variabel lainnya. Dalam bahasa C dikenal 3 macam array yaitu : a. Array Berdimensi Satu
Untuk mengakses setiap elemen dalam array dapat dilakukan dengan mengakses indeksnya. Indeks setiap array default dimulai dari nol. Adapun bentuk deklarasi array adalah [4]: Tipe_data Nama_variabel[Ukuran] 56
Tipe data untuk menyatakan tipe data yang digunakan dan ukuran digunakan untuk menyatakan jumlah maksimum elemen array. Sebuah array dapat digambarkan sebagai kotak anjang yang berisi kotak – kotak kecil di dalam kotak panjang tersebut. Contoh : int nilai[5]; indeks [0]
[1]
[2]
[3]
50
85
90
70
[4] 95
Contoh program : # include # include void main() { int index, barang[10]; clrscr(); // input jumlah barang// printf ("Masukkan jumlah Barang :\n"); for (index =0 ; index < 10; index ++) { printf ("Barang %i : ", index+1); scanf ("%i", &barang[index]); } printf ("Jumlah barang yang telah diinput:"); for (index = 0; index < 10; index++) { printf ("%i", barang[index]); } getch (); }
Tampilan program diatas adalah :
57
Untuk mengakses array berdimensi 1, dapat digunakan bentuk pengaksesan sebagai berikut [1]: Nama_array[indeks] Contoh : nilai [3]; nilai [1]; nilai [0]; dst Sedangkan untuk inisialisasi suatu array dapat dilakukan dengan bentuk : Tipe_data nama_array[indeks] = {nilai array}; Contoh : float nilai[5] = {75.8 78,67 87,5 90.0 65.7}; Contoh program inisiakisasi dan mengakses array : #include #include main() { int i, nilai [5]; nilai [0] = 10; nilai [1] = 8; nilai [2] = 5; nilai [3] = 7; nilai [4] = 8;
58
printf ("Nilai = "); for (i = 0; i<5 ; i++) printf ("%i ", nilai[i]); getch(); } Tampilan program diatas adalah :
Contoh program [1]: # include # include void main() { int index,nilai[5] = {89, 75, 90, 65, 95}; for (index = 0; index <5 ; index ++) { printf("\nNilai elemen ke %i adalah :%i", index+1, nilai[index]); } printf ("\n\nNilai elemen ke 3 : %i", nilai[2] ); getch(); }
Tampilan program diatas adalah :
59
b. Array Berdimensi Dua
Array dimensi dua tersusun dalam bentuk baris dan kolom, dimana indeks pertama menunjukkan baris dan indeks kedua menunjukkan kolom. Array dimensi dua dapat digunakan pada pendataan penjualan, pendataan nilai, dan sebagainya. Bentuk umum pendeklarasian array [1]: Tipe_data Nama_variabel [indeks-1][indeks-2] Bentuk umum pengaksesan array berdimensi dua adalah : Nama_array [index-1][index-2] Contoh : Data [3][2] Data [0][1] Bentuk pendefenisian array berdimensi dua adalah : Tipe_data nama_array [juml_elemen] = {nilai array}; Contoh : Int data [2][4] = {{ 1, 2, 3, 4}, 4, 3, 2, 1}; Contoh deklarasi array pada bahasa C [5]: #include #include main() { int i,j, matriks [3][3]; matriks [0][0] = 10; matriks [0][1] = 6; matriks [0][2] = 5; matriks [1][0] = 7; matriks [1][1] = 9; matriks [1][2] = 5; matriks [2][0] = 7; matriks [2][1] = 3;
60
matriks [2][2] = 2; printf ("Matriks = "); for (i = 0; i<3 ; i++) {for (j = 0; j < 3; j++) {printf ("%i ", matriks[i][j]); } printf ("\n \t"); } getch(); }
Tampilan program diatas adalah :
Contoh Program 2[4]: #include "stdio.h" #include "conio.h" void main() { int baris, kolom, matriks[3][4]; clrscr(); // Input elemen array secara Row Major Order printf("Input elemen Array : \n"); for(baris=0; baris<3; baris++) { for(kolom=0; kolom<4; kolom++) { printf("matriks[%i][%i] : ", baris+1, kolom+1); scanf("%i", &matriks[baris][kolom]); } printf("\n"); } // Tampilkan elemen Array secara Row Major Order printf("Isi array : \n"); for(baris=0; baris<3; baris++) { for(kolom=0; kolom<4; kolom++) { printf("%i", matriks[baris][kolom]); } printf("\n"); 61
} getch(); }
Tampilan program diatas adalah :
Contoh program 2 [2]: Penjumlahan dua buah matriks #include #include #define maks 3 main() { int mat1[maks][maks], mat2[maks][maks], mathasil[maks][maks]; int b,k; printf("Pengisian Matrik 1 : \n"); for (b=0;b
62
} printf("Pengisian Matrik 2 : \n"); for (b=0;b
63
printf("%6d",mathasil[b][k]); } printf("\n"); } getch(); return 0; }
Tampilan program diatas adalah :
c. Array Multi-dimensi
Array multi-dimensi merupakan array yang mempunyai ukuran lebih dari dua. Bentuk pendeklarasian array sama saja dengan array dimensi satu maupun array dimensi dua. Bentuk umumnya yaitu [4]: tipe_array nama_array[ukuran1][ukuran2]…[ukuranN];
Contoh :
64
float X[2][4][3]; Contoh program [4]: #include “stdio.h” #include “conio.h” void main() { int i, j, k; static int data_huruf[2][8][8] = { { { 1, 1, 1, 1, 1, 1, 1, 0 }, { 1, 1, 0, 0, 0, 0, 1, 0 }, { 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 1, 1, 1, 0 }, { 1, 0, 0, 0, 1, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 1, 0, 0, 0, 1, 1, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0 }, { 1, 1, 1, 0, 0, 1, 1, 0 }, { 1, 1, 1, 0, 0, 1, 1, 0 }, { 1, 1, 1, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } } }; /* Tampilkan Huruf */ for(i=0; i<2; i++) { for(j=0; j<8; j++) { for(k=0;k<8; k++) if (data_huruf[i][j][k]) putchar(„\ xDB‟); else putchar(“ “); /* spasi */ puts(“”); } puts(“”);
65
} getch(); }
Contoh aplikasi :
Pencarian data (searching) menggunakan array[5] :
#include #include int main() { int a[20] = {0}; int i; int n; //mengacu pada jumlah array int target; //berisi data yang akan dicari int ketemu; // status dari proses pencarian; 1 = ketemu, 0 = tidak ketemu printf("Masukkan data - data yang ingin dibuat MAX 20 data :\t"); scanf ("%i", &n); if (n >= 20) return 0; printf ("Masukkan data - data pada array yang akan dibuat :\n"); for (i = 0; i < n; i++) { printf ("data ke-%d\t :", i+1); scanf ("%d", &a[i]); } for (i = 0; i < n; i++) // perulangan digunakan untuk menampilkan seluruh elemen array { printf("%d",a[i]); } printf ("\nMasukkan angka yang akan dicari : "); scanf ("%d", &target); for (i = 0; i < n-1; i++) // proses pencarian dilakukan mulai dari elemen ke-0 (pertama) {
66
if (a[i] == target) { printf (" Data %d ditemukan pada urutan ke %d", target, i+1); ketemu = 1; // variabel ketemu diberi nilai 1 untuk menunjukkan bahwa proses pencarian berhasil return 0 ; } printf ("Data tidak ditemukan"); ditemukan"); } getch () ; }
Tampilan program program diatas adalah [5]: [5]:
Pengurutan data dengan menggunakan array (menggunakan metode selection short .
#include #include main() { int N = 5; //jumlah elemen array arr int arr [5] = {63, 21, 3, 177, 8}; int i, j, k, temp, biggest; printf ("Data elemen array arr sebelum di urutkan \n"); for (i = 0; i <= 4 ; i++); { printf ("%d ", arr[i]);
67
} printf ("\n"); // Proses pengurutan pengurutan data bobble Sort for (i = 0; i <= N-2; i++) { biggest = 0; for (j =0 ; j <= N-i-1; j++) { if (arr [j] < arr [biggest]) { biggest = j; } } temp = arr [N-1-i]; arr [N-1-i] = arr [biggest]; arr [biggest] = temp; printf ("Loop - %d", i + 1); // Menampilkan hasil pengurutan setiap loopnya for (k = 0; k <=4; k++) { printf ("%d ", arr[k]); } printf ("\n"); } printf (" Data elemen array arr setelah diurutkan\n"); for (i = 0; i <=4; i++) { printf ("%d ", arr[i]); } printf ("\n"); getch (); return 0; }
Tampilan program program diatas adalah :
68
3. Latihan
1. Buatlah
sebuah program program untuk untuk menghitung menghitung jumlah jumlah dan hasil hasil
kali matriks A dan B sebagai berikut : A=
[ ] [ ] B=
2. Jumlah suara masing- masing calon pada sebuah pemilihan walikota adalah sbb : Calon
A
B
C
D
1
304
125
112
111
2
203
236
231
145
3
112
312
332
211
4
98
142
167
245
5
346
154
287
123
menggunakan
array,
Kecamatan
Dengan
buatlah
program
untuk
menyelesaikan pekerjaan ini : a. Membaca dan mencetak hasil pemilihan diatas dalam bentuk tabel
69
b. Menghitung dan mencetak jumlah suara masing – masing calaon hasil pemilihan tersebut. c. Tampilkan pemenang hasil pemilihan tersebut. 3. Urutkanlah bilangan berikut dengan menggunakan metode bubble sort .
[12, 35, 27, 5, 10, 56, 98, 75) 1. Terdapat sebuah array dua dimensi yang dibuat dengan int [3][5] dan telah diisi. Buatlah sebuah program untuk : a. Mencetak nilai yang terbesar b. Mencetak nilai yang terbesar dan mencetak ada berapa buah nilai yang terbesar. c. Mencetak nilai yang terbesar dan mencetak ada berapa buah nilai yang terbesar, serta mencetak ada di lokasi mana saja nilai terbesar tersebut. d. Memeriksa apakah diantara isi array tersebut ada yang nilainya = 50. Bila ada, maka cetak perkataan ada “ADA” dan bila tidak ada maka cetak “TIDAK ADA”.
70
Daftar Pustaka
[1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi.
Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
[4] Solichin Achmad. “Pemrograman Bahas a C dengan Turbo C”. www.ilmukomputer.com
[5] Swastika Windra. April 2012. "Dasar Algoritma dan Pemrograman menggunakan C & Java". Prestasi Pustaka Publisher. Jakarta
71
BAB VII FUNGSI 1. Pendahuluan a. Deskripsi
Bab ini membahas tentang fungsi pustaka yaitu fungsi yang telah tersedia dalam turbo C dan fungsi yang dapat dibuat sendiri oleh programmer. Pada fungsi yang dapat dibuat sendiri oleh programmer akan dijelaskan tentang cara mendeklarasikan fungsi, jenis parameter dan variabel yang digunakan dalam bahasa C serta cara pemanggilan fungsi. Di akhir pembahasan, akan dijelaskan tentang fungsi rekursif. Dalam setiap pembahasan akan diberikan contoh program yang akan membantu mahasiswa lebih memahami tentang penggunaan fungsi. b. Tujuan Pembahasan
Setelah mengikuti perkuliahan ini, mahasiswa diharapkan mampu memahami kegunaan penggunaan fungsi dalam bahasa pemrograman dan mampu menerapkan penggunaan fungsi dalam pemrograman bahasa C. 2. Teori Dasar
Fungsi adalah bagian dari program yang digunakan untuk suatu tugas tertentu dan letaknya terpisah dari program utama. Fungsi merupakan bagian utama dalam bahasa C karena program bahasa C sendiri tersusun atas kumpulan fungsi – fungsi dam dalam setiap program minimal terdapat satu buah fungsi yaitu fungsi main (). Adapun kegunaan penggunaan fungsi dalam bahasa C adalah :
Program menjadi lebih terstruktur sehingga mudah untuk dipahami dan 72
Untuk mengurangi pengulangan penulisan program yang sama.
Dalam bahasa C fungsi dibagi menjadi dua yaitu fungsi pustaka atau fungsi yang telah tersedia dalam turbo C dan yang didefinisikan atau dibuat oleh programmer. a. Fungsi Pustaka dalam Bahasa C [4] 1) Fungsi
Operasi
String
(tersimpan
dalam
header
file
“string.h”)
strcpy() berfungsi untuk menyalin suatu string asal ke variable
string tujuan. Bentuk umum : strcpy(var_tujuan, string_asal);
strlen() Berfungsi untuk memperoleh jumlah karakter dari
suatu string. Bentuk umum : strlen(string);
strcat() Digunakan untuk menambahkan string sumber ke
bagian akhir dari string tujuan. Bentuk umum : strcat(tujuan, sumber);
strupr() Digunakan untuk mengubah setiap huruf dari suatu
string menjadi huruf capital. Bentuk umum : strupr(string);
strlwr() Digunakan untuk mengubah setiap huruf dari suatu
string
menjadi
huruf
kecil
semua.
Bentuk
umum
:
strlwr(string);
strcmp() Digunakan untuk membandingkan dua buah string.
Hasil dari fungsi ini bertipe integer dengan nilai : (a) Negative, jika string pertama kurang dari string kedua. (b) Nol, jika string pertama sama dengan string kedua (c) Positif, jika string pertama lebih besar dari string kedua. Bentuk umum : strcmp(string1, string2);
73
Contoh program : #include "stdio.h" #include "conio.h" #include "string.h" void main() { char nama[20]; char nama1 [30]= "UNIVERSITAS HASANUDDIN"; char nama2 [30]= "Teknik Informatika" ; int x; strcpy(nama,nama1); printf("Nama : %s", nama1); printf("\nJumlah karakter : %i",strlen(nama)); strcat (nama2,nama1); printf ("\n"); puts (nama2); strupr(nama2); printf ("\n"); puts (nama2); printf ("\n"); strlwr (nama2); puts (nama2); strcmp (nama1,nama2) ; printf("Hasil : %i", x); getch(); }
Tampilan program diatas adalah :
74
2) Fungsi
Operasi
Karakter
(tersimpan
dalam
header
“ctype.h”) [4]
islower()
jika
Fungsi akan menghasilkan nilai benar (bukan nol)
karakter merupakan huruf kecil.
Bentuk umum :
islower(char);
isupper() Fungsi akan menghasilkan nilai benar (bukan nol)
jika karakter merupakan huruf kapital. Bentuk umum : isupper(char);
isdigit() Fungsi akan menghasilkan nilai benar (bukan nol) jika
karakter merupakan sebuah digit. Bentuk umum : isdigit(char);
tolower() Fungsi akan mengubah huruf capital menjadi huruf
kecil. Bentuk umum : tolower(char);
toupper() Fungsi akan mengubah huruf kecil menjadi huruf
kapital. Bentuk umum : toupper(char); Contoh program : #include "stdio.h" #include "conio.h" #include "ctype.h" void main() { char karakter; clrscr(); printf ("Masukkan sebuah karakter : \t"); karakter = getche(); if (islower (karakter)) { printf ("\nadalah huruf kecil"); printf ("\nHuruf kapitalnya adalah :%c",toupper(karakter));} else if (isupper (karakter)) { puts ("\nadalah huruf kapital"); printf ("\nHuruf kecilnya adalah :%c",tolower(karakter));} else if (isdigit (karakter)) { puts("\nadalah bilangan digit"); } getch ();} 75
Tampilan program diatas adalah :
3) Fungsi
Operasi
Matematik
(tersimpan
dalam
header
“math.h” dan “stdlib.h”) [4]
sqrt()
Digunakan
untuk
menghitung
akar
dari
sebuah
bilangan. Bentuk umum : sqrt(bilangan);
pow()
Digunakan untuk menghitung pemangkatan suatu
bilangan. Bentuk umum : pow(bilangan, pangkat); Contoh program : #include "stdio.h" #include "conio.h" #include "math.h" void main() { int x, y; float z; clrscr(); printf ("Menghitung x pangkat y"); printf ("\nMasukkan Nilai x :"); scanf("%i",&x); printf ("\nMasukkan Nilai y :"); scanf ("%i", &y); printf ("\nx^y = %i ^ %i = %3.2f", x,y, pow(x,y)); printf ("\n\nMenghitung akar x"); printf ("\nMasukkan Nilai x :"); scanf("%i",&x); printf ("\nAkar x adalah %2.2f",sqrt (x)); getch(); }
76
Tampilan program diatas adalah :
sin(), cos(), tan() Masing-masing digunakan untuk menghitung
nilai sinus, cosinus dan tangens dari suatu sudut. Bentuk umum : sin(sudut); cos(sudut); tan(sudut); Contoh program : #include "stdio.h" #include "conio.h" #include "math.h" void main() { clrscr(); int sudut; printf ("Menghitung sin, cos, dan tan\n"); printf ("Masukkan sudut :"); scanf ("%i",&sudut); printf ("\nsin %i = %5.2f\n", sudut, sin (sudut)); printf ("cos %i = %5.2f\n", sudut, cos (sudut)); printf ("tan %i = %5.2f", sudut, tan (sudut)); getch(); }
77
Tampilan program diatas adalah :
atof() Digunakan untuk mengkonversi nilai string menjadi
bilangan bertipe double. Bentuk umum : atof(char x);
atoi() Digunakan untuk mengkonversi nilai string menjadi
bilangan bertipe integer. Bentuk umum : atoi(char x); Contoh program : #include "stdio.h" #include "conio.h" #include "math.h" #include "stdlib.h" void main() { clrscr(); char x [10]= "123"; char y [10]= "3.14"; printf ("Nilai x = %i",atoi(x));// Mengubah string menjadi integer printf ("Nilai y = %f", atof(y));// mengubah string menjadi float getch(); }
Tampilan program diatas adalah :
78
div() Digunakan untuk menghitung hasil pembagian dan sisa
pembagian. Bentuk umum : div_t div(int x, int y) Strukturnya : typedef struct { int qout; // hasil pembagian int rem // sisa pembagian } div_t; Contoh program [1]: #include "stdio.h" #include "conio.h" #include "stdlib.h" { int x, y; div_t hasil; clrscr(); printf("Menghitung sisa dan hasil pembagian x dengan y\n"); printf("x = "); scanf("%i", &x); printf("y = "); scanf("%i", &y); hasil = div(x,y); printf("\n\n %3i div %3i = %3i sisa %3i", x, y, hasil.quot, hasil.rem); getch(); }
Tampilan program diatas adalah :
79
max() Digunakan untuk menentukan nilai maksimal dari dua
buah bilangan. Bentuk umum : max(bilangan1, bilangan2);
min() Digunakan untuk menentukan bilangan terkecil dari dua
buah bilangan. Bentuk umum : min(bilangan1, bilangan2); Contoh program : #include "conio.h" #include "stdlib.h" void main() { int a, b, c, d; printf ("Masukkan Nilai\n"); printf ("a = "); scanf ("%i", &a); printf ("b = "); scanf ("%i", &b); printf ("c = "); scanf ("%i", &c); printf ("d = "); scanf ("%i", &d); printf ("Nilai maksimumnya adalah %i", max(max(max(a,b),c),d)); printf ("\nNilai minimumnya adalah %i", min(min(min(a,b),c),d)); getch (); }
Tampilan program diatas adalah :
80
b. Membuat Fungsi Sendiri 1) Deklarasi Fungsi
Bentuk deklarasi sebuah fungsi adalah sebagai berikut [1] : Tipe_fungsi nama_fungsi (parameter_fungsi) { Statement; Statement; …
} Dalam penggunaan fungsi terdapat beberapa hal yang perlu untuk diperhatikan, diantaranya : Nama fungsi dapat ditentukan dengan bebas dengan ketentuan
tidak menggunakan spasi dan nama – nama fungsi yang disediakan oleh turbo C.
Kalau tipe fungsi tidak disebutkan, maka akan dianggap sebagai fungis dengan nilai keluaran bertipe integer.
Untuk fungsi yang memiliki keluaran bertipe bukan integer, maka diperlukan pendefinisian penentu tipe fungsi.
Untuk fungsi yang tidak mempunyai nilai keluaran maka dimasukkan ke dalam tipe void
Pernyataan yang diberikan untuk memberikan nilai akhir fungsi berupa pernyataan return.
Suatu fungsi dapat menghasilkan nilai balik bagi fungsi pemanggilnya.
Contoh program : #include "stdio.h" #include "conio.h" kampus () // fungsi kampus { puts ("UNIVERSITAS HASANUDDIN"); } void main () // program utama
81
{clrscr(); printf ("Nama Universitas :\n"); kampus (); // memanggil fungsi kampus getch(); }
Tampilan program diatas adalah :
2) Parameter Fungsi
Dalam bahasa C terdapat 2 macam parameter fungsi yaitu [1] ;
Parameter formal yaitu variabel yang terdapat pada daftar parameter yang berada di dalam definisi fungsi.
Parameter aktual adalah variabel yang digunakan pada pemanggilan satu fungsi.
Terdapat dua cara untuk melewatkan parameter ke dalam fungsi, yaitu :
Pemanggilan dengan nilai (Call by value) [2] Call by value akan menyalin nilai dari parameter aktual ke
parameter formal. Nilai yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya. Fungsi yang menerima kiriman nilai akan menyimpannya di alamat terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi. Perubahan nilai di fungsi (parameter formal) tidak akan merubah nilai asli di bagian program yang memanggilnya. Pengiriman parameter secara nilai adalah pengiriman searah, yaitu dari bagian
82
program yang memanggil fungsi ke fungsi yang dipanggil. Pengiriman suatu nilai dapat dilakukan untuk suatuungkapan
tidak hanya
untuk sebuah variabel, elemen array atau konstanta saja. Contoh program : #include "stdio.h" #include "conio.h" nilai (int x, int y); void main () { clrscr (); int a = 10, b = 5; printf ("Nilai sebelum pemanggilan fungsi"); printf ("\nNilai a = %i dan nilai b = %i", a,b); nilai (a,b); // pemanggilan fungsi printf ("\n\nNilai setelah pemanggilan fungsi"); printf ("\n\nNilai a = %i dan nilai b = %i", a,b); getch(); } nilai (int x, int y) { x+=5; y+=5; printf ("\n\nNilai setelah pemanggilan fungsi"); printf("\na = %i dan nilai b = %i",x, y); }
Tampilan program diatas adalah :
83
Pemanggilan Secara Referensi (Call by Reference ) Pemanggilan
secara
Referensi
merupakan
upaya
untuk
melewatkan alamat dari suatu variabel ke dalam fungsi. Yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai datanya. Fungsi yang menerima kiriman alamat ini akan menggunakan alamat yang sama untuk mendapatkan nilai datanya. Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Pengiriman parameter secara referensi adalah pengiriman dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya. Pengiriman secara acuan tidak dapat dilakukan untuk suatu ungkapan. Contoh program : #include "stdio.h" #include "conio.h" nilai (int *x, int *y); void main () { clrscr (); int a = 10, b = 5; printf ("Nilai sebelum pemanggilan fungsi"); printf ("\nNilai a = %i dan nilai b = %i", a,b nilai (&a,&b); // pemanggilan fungsi printf ("\n\nNilai setelah pemanggilan fungsi"); printf ("\n\nNilai a = %i dan nilai b = %i", a,b); getch(); } nilai (int *x, int *y) { *x+=5; *y+=5; printf ("\n\nNilai setelah pemanggilan fungsi"); printf("\na = %i dan nilai b = %i",*x, *y); }
84
Tampilan program diatas adalah :
3) Jenis Variabel pada Fungsi
a) Variabel lokal Variabel lokal adalah variabel yang dideklarasikan di dalam fungsi dan hanya dikenal oleh fungsi yang bersangkutan. Variabel lokal biasa juga disebut sebagai variabel otomatis. Contoh program b) Variabel global /eksternal Variabel eksternal adalah variabel yang dideklarasikan di luar fungsi yang bersifat global yang berarti dapat digunakan bersama – sama tanpa harus dideklarasikan berulang – ulang. Pendeklarasian variabel eksternal diletakkan di luar fungsi main (). Contoh program : #include "stdio.h" #include "conio.h" void tampil (void); int i = 25; /* variabel global */ void main() { clrscr(); printf("Nilai variabel i dalam fungsi main() adalah %i\n\n", i); tampil(); i = i * 4; /* nilai i yang dikali 4 adalah 25 (global) bukan 10 */
85
printf("\nNilai variabel i dalam fungsi main() sekarang adalah %i\n\n", i); getch(); } void tampil(void) { int i = 10; /* variabel lokal */ printf("Nilai variabel i dalam fungsi tampil() adalah %i\n\n", i); }
Tampilan program program diatas adalah :
c) Variabel statis Variabel statis dapat berupa variabel lokal ataupun variabel eksternal. Variabel statis ini bersifat :
Jika variabel bersifat lokal maka hanya dikenal oleh fungsi tempat variabel tersebut dideklarasikan.
Jika variabel statis bersifat eksternal maka variabel dapat dipergunakan oleh semua fungsi yang terletak pada file yang sama di tempat variabel statis dideklarasikan.
Jika tidak ada inisialisasi maka secara otomatis otomatis akan diberikan nilai awal nol.
d) Variabel Register [3] Variabel Register adalah variabel yang nilainya disimpan dalam resister dan bukan dalam memori RAM. Sifat-sifat variabel register :
86
Hanya dapat diterapkan pada variabel lokal yang bertipe int dan char.
Digunakan untuk mengendalikan proses perulangan (looping).
Proses perulangan akan lebih cepat karena variabel register memiliki kecepatan yang lebih tinggi dibandingkan variabel biasa.
Dideklarasikan dengan menambahkan kata “register “register”. ”.
Contoh program : #include “stdio.h” #include “stdio.h” #include “conio.h” void main() { register int int x; /* variabel register */ int jumlah; clrscr(); for(i=1; i<=100; i++) jumlah = jumlah + I; printf(“1+2+3+…+100 printf(“1+2+3+…+100 = %i\ %i\ n”, n”, jumlah); getch(); }
Tampilan program program diatas adalah :
4) Fungsi Rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Dengan adanya rekursi, dimungkinkan untuk memanggil fungsi dari dalam fungsi itu sendiri. Proses rekursi biasanya digunakan pada beberapa kasus dikarenakan penerapannya akan lebih mudah dibanding ketika hanya menggunakan bentuk perulangan biasa[5]. Namun, penggunaan rekursi juga memiliki beberapa masalah seperti
87
efisiensi memori dan kecepatan kerja ketika sebuah proses rekursi dijalankan akan menjadi lebih lambat. Permasalahan yang lebih sering terjadi adalah proses rekursi yang tidak kunjung berhenti, hingga mengakibatkan komputer hang. Contoh program: #include “conio.h” #include “stdio.h” long int faktorial(int N); /* prototype fungsi faktorial */ void main() { int N; printf(“Berapa printf(“Berapa factorial ? “); scanf(“%i”, &N); printf(“Faktorial printf(“Faktorial dari %i = %ld\ %ld\ n”, n”, N, faktorial(N)); getch(); } Long int faktorial(int N) /* definisi fungsi factorial */ { if(N==0) return(1); else return(N * faktorial(N - 1)); // fungsi faktorial() memanggil fungsi factorial() }
Tampilan program program diatas adalah :
88
3. Latihan
2. Buatlah sebuah program untuk menghitung luar persegi panjang, luas segitiga dan luas lingkaran. Buatlah pemilihan perhitungan dengan menggunakan fungsi. 3. Buatlah program untuk menghitung harga sewa peminjaman buku pada sebuah perpustakaan umum. Terdapat tiga jenis buku yaitu jenis A, B, dan C. Tarif jenis buku per 3 hari adalah : Jenis Buku
Harga sewa per 3 hari
A
Rp 1500
B
Rp 2000
C
Rp 2500
a. Jika melebihi waktu peminjaman (3 hari) maka setiap buku di denda sebesar Rp 500,-. b. Buatlah program untuk menghitung pembayarannya. c. Buatlah fungsi untuk menghitung harga sewa. d. Buatlah fungsi untuk menghitung total pembayaran.
89
Daftar Pustaka
[1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi.
Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
[4] Solichin Achmad. “Pemrograman Bahasa C dengan Turbo C”. www.ilmukomputer.com
[5] Swastika Windra. April 2012. "Dasar Algoritma dan Pemrograman menggunakan C & Java". Prestasi Pustaka Publisher. Jakarta
90
BAB VIII STRUCT (RECORD)
1. Pendahuluan a. Deskripsi
Bab ini menjelaskan tentang fungsi penggunaan struct (record) dan penggunaan struct dalam array. Agar lebih mudah untuk dipahami, akan diberikan contoh – contoh dari penggunaan struct ini. b. Tujuan pembelajaran
Setelah mengikuti perkuliahan ini, mahasiswa diharapkan mengerti tentang struct (record) dan dapat mengaplikasikan dalam pembuatan program. 2. Teori dasar a. Deklarasi Struct (Record)
Turbo C tidak selalu menyediakan tipe data yang sesuai dengan tipe data yang diinginkan. Contoh kasus yaitu ketika kita ingin membuat suatu program mengolah data mahasiswa dimana data mahasiswa terdiri dari NIM, Nama, NilaiUTS, NilaiUAS, NilaiQuiz,
NilaiAkhir
dan
Index
Prestasinya.
Turbo
C
tidak
menyediakan tipe data untuk data tersebut. Oleh karena itu maka kita harus membuat suatu tipe data baru yang cocok dengan keperluan kita. Caranya adalah dengan menggunakan perintah struct[1]. Deklarasi tipe data baru (struct) untuk data mahasiswa dapat dilihat sebagai berikut : struct TMhs
91
{ char NIM[11]; char Nama[21]; int NilaiUTS,NilaiUAS,NilaiQuiz; float NilaiAkhir; char index; }; Deklarasi diatas berarti kita telah membuat suatu tipe data yang bernama TMhs dimana setiap data bertipe TMhs mempunyai field NIM, Nama, NilaiUTS, NilaiUAS, NilaiQuiz, NilaiAkhir dan index. Untuk mendeklarasikan sebuah variable yang bertipe TMhs caranya adalah seperti berikut : TMhs Mhs1,Mhs2;
Deklarasi tersebut berarti bahwa kita membuat suatu variable bernama Mhs1 dan Mhs2 dimana tiap variable tersebut mempunyai field sesuai dengan TMhs. Contoh program [2]:
#include #include #include struct TMhs { char NIM[11]; char Nama[21]; int NilaiUTS,NilaiUAS,NilaiQuiz; float NilaiAkhir; char index; }; main() {
92
TMhs mhs1,mhs2; printf(“Pengisian Data”); printf(“NIM : “);gets(mhs1.NIM); printf(“NAMA : “);gets(mhs1.Nama); printf(“Nilai QUIZ : “);scanf(“%d”,&mhs1.NilaiQuiz); printf(“Nilai UTS : “);scanf(“%d”,&mhs1.NilaiUTS); printf(“Nilai UTAS : “);scanf(“%d”,&mhs1.NilaiUAS); mhs1.NilaiAkhir=0.2*mhs1.NilaiQuiz+0.3*mhs1.NilaiUTS+0.5*mhs1.Ni laiUAS; if(mhs1.NilaiAkhir>=80) mhs1.index=‟A‟;else if(mhs1.NilaiAkhir>=60) mhs1.index=‟B‟;else if(mhs1.NilaiAkhir>=40) mhs1.index=‟C‟;else if(mhs1.NilaiAkhir>=20) mhs1.index=‟D‟;else if(mhs1.NilaiAkhir>=00) mhs1.index=‟E‟; mhs2=mhs1; // mengisikan semua data di mhs1 ke mhs2 printf(“Data yang telah dimasukan :”); printf(“NIM : %s\ n“,mhs2.NIM); printf(“NAMA : %s\ n“,mhs2.Nama); printf(“Nilai QUIZ : %i\ n“,mhs2.NilaiQuiz); printf(“Nilai UTS : %d\ n”,mhs2.NilaiUTS); printf(“Nilai UTAS : %d\ n” ,mhs2.NilaiUAS); printf(“Nilai Akhir: %.2f \n ”,mhs2.NilaiAkhir); printf(“Index : %c\ n”,mhs2.index); getch(); }
Tampilan program diatas adalah :
93
b. Struct pada Array
Setiap tipe data dapat dibuat dalam bentuk array. Begitu juga dengan tipe data yang dibuat dengan perintah struct. Contoh program [3]: #include #include #include #define maks 3 struct TMhs { char NIM[9]; char Nama[21]; int NilaiUTS,NilaiUAS,NilaiQuis; float NilaiAkhir; char index; }; main() { TMhs mhs[maks]; // array struct int i; for(i=0;i=80) mhs[i].index='A';else if(mhs[i].NilaiAkhir>=60) mhs[i].index='B';else if(mhs[i].NilaiAkhir>=40) mhs[i].index='C';else if(mhs[i].NilaiAkhir>=20) mhs[i].index='D';else if(mhs[i].NilaiAkhir>=0) mhs[i].index='E'; }; clrscr(); printf("Data yang telah dimasukan adalah : \n"); printf("---------------------------------------------------------------------\n"); printf("| NIM | NAMA | QUIS | UTS | UAS | N A | INDEX |\n");
94
printf("---------------------------------------------------------------------\n"); for(i=0;i
Tampilan program diatas adalah :
95
3. Latihan
1) Buatlah sebuah program untuk Menginput data pegawai dan besar gaji serta tunjangan dengan menggunakan record! 2) Buatlah program pada nomor 1 dengan menggunakan struct pada array!
96
Daftar Pustaka
[1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi. Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta
97
BAB IX POINTER 1. Pendahuluan a. Deskripsi
Bab ini menyajikan tentang penggunaan pointer. Lebih lanjut akan dijelaskan tentang operator pointer, operasi dalam pointer, pointer pada pointer, pointer pada array dan pointer pada string. Dan pada
akhir
bab
diberikan
soal
latihan
untuk
meningkatkan
pemahaman tentang penggunaan pointer. b. Tujuan pembelajaran
Setelah mengikuti perkuliahan ini mahasiswa diharapkan mampu
memahami
dan
mengaplikasikan
pointer
dalam
menyelesaikan sebuah masalah pada bahasa pemrograman. 2. Teori Dasar
Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer digunakan
untuk menunjuk ke suatu alamat memori
sehingga alamat dari suatu variabel atau suatu fungsi dapat diketahui dengan mudah. Dengan adanya pointer maka kita dapat memanipulasi data yang berada pada alamat tertentu dalam memory. Terdapat dua jenis operator yang dapat digunakan dalam pointer yaitu : a. Operator pointer
1. Operator dereference (&) Operator dereference & merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis 98
oleh kompiler dan operating system pada saat run-time. Dengan menggunakan operator & ini, variabel akan menghasilkan alamat lokasi memori sehingga operator ini biasa disebut dengan address of . Sebagai contoh, Ani ditempatkan pada memori dengan alamat 0x00112ff55 dan dideklarasikan sbb[1]: Ani = a; Anna = Ani; // Anna sama dengan Ani (a) Rani = &Ani; // Rani sama dengan alamat Ani (0x00112ff55) Contoh program : #include #include void main () { int x = 50, y, *z; y = x; z = &x; printf ("Nilai x adalah %i",x); // Nilai x = 50 printf ("\nNilai y adalah %i", y); // Nilai y = x printf ("\nNilai z adalah %i", z); // Nilai z = berisi alamat x getch (); }
Tampilan program diatas adalah :
2. Operator reference (*) Dengan menggunakan operator reference (*) user dapat mengakses secara langsung nilai yang terdapat didalam variabel yang berpointer. Hal ini dapat dilakukan dengan menambahkan identifier
99
asterisk (*), agar dapat menerjemahkan nilai sebenarnya dari suatu variabel. Operator ini biasa disebut value pointed by. Dengan menggunakan operator reference (*) ini akan dihasilkan nilai yang berada pada suatu alamat memori[1]. Sebagai contoh : Ani = a Anna = &Ani// Anna sama dengan Alamat Ilham (0x00112ff55) Rani = *Ani // Rani sama dengan nilai Ani (a) Contoh program : #include #include void main () { int x = 50, y, *z; z = &x; y = *z; printf ("Nilai x adalah %i",x); printf ("\nNilai y adalah %i", y); printf ("\nNilai z adalah %i", z); getch ();}
Tampilan program diatas adalah :
100
b. Operasi Pointer
1) Operasi penugasan[4] Nilai suatu variabel pointer dapat disalin ke variabel pointer lainnya. Contoh program : #include "stdio.h" #include "conio.h" void main() { float *x1, *x2, y; clrscr(); y = 13.45; x1 = &y; /* Alamat dari y disalin ke variabel x1 */ x2 = x1; /* Isi variabel x1 disalin ke variabel x2 */ printf("Nilai variabel y = %.2f ada di alamat %p\n", y, x1); printf("Nilai variabel y = %.2f ada di alamat %p\n", y, x2); getch(); }
Tampilan program diatas adalah :
2) Operasi aritmatika [4] Operasi aritmatika yang bisa dilakukan oleh pointer adalah hanya operasi penjumlahan dan pengurangan dan hanya data integer yang dapat digunakan. Operasi penjumlahan dan pengurangan akan menunjukkan alamat data berikutnya. #include “stdio.h” #include “conio.h” void main() { int nilai[3], *penunjuk;
101
clrscr(); nilai[0] = 125; nilai[1] = 345; nilai[2] = 750; penunjuk = &nilai[0]; printf(“Nilai %i ada di alamat memori %p\ n”, *penunjuk, penunjuk); printf(“Nilai %i ada di alamat memori %p\ n”, *(penunjuk+1), penunjuk+1); printf(“Nilai %i ada di alamat memori %p\ n”, *(penunjuk+2), penunjuk+2); getch(); }
Tampilan program diatas adalah :
3) Operasi logika [4] Operasi logika juga dapat digunakan dalam sebuah pointer. Contoh program: #include “stdio.h” #include “conio.h” void main() { int a = 100, b = 200, *pa, *pb; clrscr(); pa = &a; pb = &b; if(pa < pb) printf(“pa menunjuk ke memori lebih rendah dari pb \ n”); if(pa == pb) printf(“pa menunjuk ke memori yang sama dengan pb\ n”); if(pa > pb) printf(“pa menunjuk ke memori lebih tinggi dari pb\ n”); getch(); }
102
Tampilan program diatas adalah :
c. Pointer pada Pointer
Pointer tidak hanya bisa menunjuk ke alamat suatu variabel tapi juga dapat digunakan untuk menunjuk ke alamat suatu pointer lainnya. Cara mendeklarasikannya adalah dengan menambahkan pointer reference (*) pada variabel yang akan ditunjuk [3]. char ani; char *Anna; // pointer ke variabel char **Rani // pointer pada pointer ani „a‟
Anna = &ani Rani = &Anna Contoh program : #include "stdio.h" #include "conio.h" void main() { int x, *y, **z; x = 40; printf ("Nilai x = %i", x); y = &x; z = &y; printf ("\nNilai y = %p",y); printf ("\nNilai z = %p", z); getch(); }
103
Tampilan program diatas adalah :
d. Pointer pada Array
Berikut ini adalah contoh penggunaan pointer pada array : Contoh program : #include “stdio.h” #include “conio.h” void main() { static int tgl_lahir[] = { 13,9,1982 }; int *ptgl; ptgl = tgl_lahir; /* ptgl berisi alamat array */ printf(“Diakses dengan pointer”); printf(“Tanggal = %i\ n”, *ptgl); printf(“Bulan = %i\ n”, *(ptgl + 1)); printf(“Tahun = %i\ n”, *(ptgl + 2)); printf(“\nDiakses dengan array biasa\ n”); printf(“Tanggal = %i\ n”, tgl_lahir[0]); printf(“Bulan = %i\ n”, tgl_lahir[1]); printf(“Tahun = %i\ n”, tgl_lahir[2]); getch(); }
Tampilan program diatas adalah :
104
e. Pointer pada String
Berikut adalah contoh penggunaan pointer pada string[1]. Contoh program : #include "stdio.h" #include "conio.h" char *nama1 = "SPIDERMAN"; char *nama2 = "GATOTKACA"; void main() { char namax; clrscr(); puts("SEMULA :"); printf("Saya suka >> %s\n", nama1); printf("Tapi saya juga suka >> %s\n", nama2); /* Penukaran string yang ditunjuk oleh pointer nama1 dan nama2 */ printf("SEKARANG :"); printf("Saya suka >> %s\n", nama1); printf("Dan saya juga masih suka >> %s\n", nama2); getch(); }
Tampilan program diatas adalah :
Contoh Aplikasi Pointer [2] : Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan).
105
Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan
dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime (ketika program berjalan). #include #include main() { int *data; int i,banyakdata; printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata); data=(int *)malloc(sizeof(int)*banyakdata); for(i=0;i
106
Tampilan program diatas adalah :
3. Latihan
1) Buatlah contoh penggunaan pointer pada pointer dan pointer pada array! 2) Buatlah sebuah program dimana setiap nilai dari suatu variabel diakses melalui alamatnya!
107
Daftar Pustaka [1] Frieyadie. 2005. “Panduan Pemrograman C ++ ”. Penerbit Andi.
Yogyakarta [2] Kurniawan Khannedy Eko. 2007. “Pemrograman C ”. Teknik
Informatika. UNICOM. [3] Sjukani Moh. 2009. “Algoritma (Algoritma & Struktur Data 1) dengan C, C++, dan Java, Teknik – Teknik Dasar Pemrograman Komputer ”. Edisis 5. Mitra Wacana Media. Jakarta [4] Solichin Achmad. “Pemrograman Bahasa C dengan Turbo C”. www.ilmukomputer.com
[5] Swastika Windra. April 2012. "Dasar Algoritma dan Pemrograman menggunakan C & Java". Prestasi Pustaka Publisher. Jakarta
108
BAB X OPERASI FILE
1. Pendahuluan a. Deskripsi
Bab ini menjelaskan tentang penggunaan operasi file. Secara spesifik akan dijelaskan tentang cara membuka file, menutup file, melaksanakan proses file dan file sequensial. b. Tujuan pembelajaran
Diakhir perkuliahan mahasiswa diharapkan mengerti fungsi penggunaan
operasi
file
dan
mampu
mengaplikasikan
dalam
pembuatan program. 2. Teori Dasar
File adalah sebuah organisasi dari sejumlah record. Masingmasing record bisa terdiri dari satu atau beberapa field. Setiap field terdiri dari satu atau beberapa byte. a. Membuka File
Untuk
membuka
atau
mengaktifkan
file,
fungsi
yang
digunakan adalah fungsi fopen().
File dapat berupa file biner atau file teks.
File biner adalah file yang pola penyimpanan di dalam disk dalam bentuk biner, yaitu seperti bentuk pada memori (RAM) computer.
109
File teks adalah file yang pola penyimpanan datanya dalam bentuk karakter.
Penambahan yang perlu dilakukan untuk menentukan mode teks atau biner adalah “t” untuk file teks dan “b” untuk file
biner.
Prototype fungsi fopen() ada di header fungsi “stdio.h”
Bentuk pendelarasian : file *fopen(char *namafile, char *mode);
Keterangan :
Nama
file
adalah
nama
dari
file
yang
akan
dibuka/diaktifkan.
mode adalah jenis operasi file yang akan dilakukan terhadap file.
Jenis-jenis operasi file :
r : menyarankan file hanya dapat dibaca (file harus sudah ada)
w : menyatakan file baru akan dibuat/diciptakan (file yang sudah ada akan dihapus)
a : untuk membuka file yang sudah ada dan akan dilakukan proses penambahan data (jika file belum ada, otomatis akan dibuat)
r+ : untuk membuka file yang sudah ada dan akan dilakukan proses pembacaan dan penulisan.
w+ : untuk membuka file dengan tujuan untuk pembacaan atau penulisan. Jika file sudah ada, isinya akan dihapus.
110
a+ : untuk membuka file, dengan operasi yang akan
dilakukan berupa perekaman maupun pembacaan. Jika file sudah ada, isinya
akan dihapus. Contoh : pf = fopen(“COBA.TXT”, “w”);
Contoh program : b. Menutup File
Untuk menutup file, fungsi yang digunakan adalah fclose().
Prototype fungsi fclose() ada di header file “stdio.h”
Bentuk umum : int fclose(FILE *pf); atau int fcloseall(void);
c. Melaksanakan Proses File
Menulis Karakter
Untuk menulis sebuah karakter, bentuk yang digunakan adalah : putc(int ch, file *fp)
fp adalah pointer file yang dihasilkan oleh fopen()
ch adalah karakter yang akan ditulis.
Contoh program : #include “stdio.h” #include “conio.h” #define CTRL_Z 26 void main() { file *pf; /* pointer ke file */ char kar;
111
if((pf = fopen(“COBA.TXT”, “w”)) == NULL) /* ciptakan file */ { cputs(“File tak dapat diciptakan !\r\ n”); exit(1); /* selesai */ } while((kar=getche()) != CTRL_Z) putc(kar, pf); /* tulis ke file */ fclose(pf); /* tutup file */ }
Membaca Karakter Untuk membaca karakter dari file, fungsi yang digunakan
adalah getc(file *fp);
fp adalah pointer file yang dihasilkan oleh fopen()
Fungsi feof(), digunakan untuk mendeteksi akhir file.
Pada saat membaca data foef(file *fp)
Contoh program : #include “stdio.h” #include “conio.h” void main() { file *pf; /* pointer ke file */ char kar; clrscr(); if((pf = fopen(“COBA.TXT”, “r”)) == NULL) /* buka file */ { cputs(“File tak dapat dibuka !\r\ n”); exit(1); /* selesai */ } while((kar=getc(pf)) != EOF) putch(kar); /* tampilkan ke layar */ fclose(pf); /* tutup file */ }
Membaca dan Menulis String Fungsi untuk membaca dan menulis string adalah : fgets() dan
fputs()
112
Bentuk Umum : fgets(char *str, int p, file *fp) fputs(char *str, file *fp)
Membaca dan Menulis Blok Data
Fungsi untuk membaca dan menulis blok data adalah : fread() dan fwrite()
Bentuk umum : fread(void *buffer, int b_byte, int c, file *fp); fwrite(void *buffer, int b_byte, int c, file *fp); Keterangan :
buffer adalah pointer ke sebuah area di memori yang menampung data yang akan dibaca dari file.
b_byte adalah banyaknya byte yang akan dibaca atau ditulis ke file
c adalah banyaknya item dibaca/ditulis.
Contoh program : #include “stdio.h” #include “conio.h” void main() { file *f_struktur; char jawaban; struct data_pustaka { char judul[26]; char pengarang[20]; int jumlah; } buku; /* variabel buku bertipe struktur */ /* buka file */ if((f_struktur = fopen(“DAFBUKU.DAT”, “wb”)) == NULL)/* buka file */ { cputs(“File tak dapat diciptakan !\r\ n”);
113
exit(1); /* selesai */ } do { clrscr(); cputs(“Judul Buku : “); gets(buku.judul); cputs(“Nama Pengarang : ”); gets(buku.pengarang); cputs(“Jumlah buku : “); scanf(“%i”, $buku.jumlah); fflush(stdin); /* Hapus isi penampung keyboard */ /*Rekam sebuah data bertipe struktur */ fwrite(&buku, sizeof(buku), 1, f_struktur); cputs(“\r\nMau merekam data lagi (Y/T) ?”); jawaban = getche(); } while(jawaban == „Y‟ || jawaban == „y‟); fclose(f_struktur); /* tutup file */); }
Membaca dan Menulis File yang Terformat Jika diinginkan, data bilangan dapat disimpan ke dalam file
dalam keadaan terformat. Fungsi yang digunakan adalah : fprintf(ptr_file, “string control”, daftar argument); fscanf(pts_file, “string control”, daftar argument);
Contoh program : #include “conio.h”
void main() { FILE *pformat; char jawaban; struct { int x; int y;
114
} koordinat; /* Buka dan ciptakan file. Periksa kalau gagal dibuka */ if((pformat = fopen(“KOORDINAT.TXT”, “w”)) == NULL) /* buka file
*/ { cputs(“File tak dapat dibuka ! \r\n”);
exit(1); /* selesai */ } do {
clrscr(); cputs(“Masukkan data koordinat (bilangan integer)\r\n”); cputs(“Format : posisi x posisi y \r\n”); cputs(“Contoh : 20 30 [ENTER] \r\n”); scanf(“%i %i, &koordinat.x, &koordinat.y);
fflush(stdin); /* Rekam ke file */ fprintf(pformat, %5i %5i\n”, koordinat.x, koordinat.y); cputs(“\r\nMenyimpan data lagi (Y/T) ??”);
jawaban = getche(); } while(jawaban == „y‟ || jawaban == „Y‟);
fclose(pformat); getch(); } d. File Sequensial
File sekuensial berisi rekord-rekord data yang tidak mengenal posisi baris atau nomor rekord pada saat aksesnya, dan setiap record dapat mempunyai lebar yang berbeda-beda. Akses terhadapnya
115
selalu dimulai dari awal file dan berjalan satu persatu menuju akhir dari file. Dengan demikian, penambahan file hanya dapat dilakukan terhadap akhir file, dan akses terhadap baris tertentu harus dimulai dari awal file. Fungsi baku yang terkait dengan file sekuensial ini antara lain adalah fprintf , fscanf , dan rewind. Program berikut menyajikan penanganan file sekuensial tentang data nasabah yang berisi tiga field, yaitu nomor identitas ( account ), nama (name ), dan posisi tabungannya (balance ) untuk (1) menyajikan yang tabungannya bernilai nol, (2) berstatus kredit, dan (3) berstatus debet. File data tersimpan dengan nama klien.dat. Contoh program : #include void main() { int request, account; float balance; char name[25]; FILE *cfPtr; if ( (cfPtr = fopen("klien.dat", "r+") ) == NULL ) printf("File could not be opened\n"); else { printf ( "Enter request\n" "1 - List accounts with zero balances\n" "2 - List accounts with credit balances\n" "3 - List accounts with debit balances\n" "4 - End of run\n? " ) ; scanf( "%d", &request ); while (request != 4) { fscanf (cfPtr, "%d%s%f", &account, name, &balance); switch (request) { case 1: printf ("\nAccounts with zero balances:\n"); while ( !feof(cfPtr) ) { if (balance == 0)
116
printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); } break; case 2: printf ("\nAccounts with credit balances:\n"); while ( !feof(cfPtr) ) { if (balance < 0) printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); } break; case 3: printf ("\nAccounts with debit balances:\n"); while ( !feof(cfPtr) ) { if (balance > 0) printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); } break; } rewind(cfPtr); printf( "\n? "); scanf ("%d", &request); } printf ("End of run.\n"); fclose(cfPtr); } }
Tampilan program diatas adalah :
3. Latihan
Buatlah sebuah program dengan mengaplikasikan penggunaan file!
117