You are on page 1of 52

Modul Perkuliahan TIK127 Algoritma dan Pemrograman TIK129 Praktek Algoritma dan Pemrograman Program Studi S1 Pendidikan Teknik

Informatika & Komputer

Jilid 1

Oleh: Djuniadi

JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNNES

DAFTAR ISI

MODUL 1 .. 3 MODUL 2 .. 7 MODUL 3 .. 13 MODUL 4 .. 19 MODUL 5 .. 24 MODUL 6 .. 34 MODUL 7 .. 37 MODUL 8 .. 45 MODUL 9 .. 50

MODUL 1 PENGANTAR

Apa itu Pemrograman Komputer? Pemrograman Komputer = ilmu tentang abstraksi. Abstraksi merupakan proses untuk menciptakan model yang tepat untuk suatu masalah dan merancang teknik teknik yang dapat dimekanisasikan guna menyelesaikan masalah tersebut.

Tujuan : Ilmu Komputer harus mampu melakukan abstraksi atas masalah-masalah dunia nyata supaya dapat dipresentasikan dan diolah dalam komputer. Ilmu Komputer berakar pada Matematika dan Ilmu Teknik.

Problem sorving Phase

Start Implementation phase

Problem definition

Algorithm design

Coding algorithm as a program Testing

Dekstop testing

Working program

Gambar 1. Sistematika Program

Pengenalan Komputer Komputer : suatu mesin yang melakukan tugas-tugas yang sangat sederhana berdasarkan instruksi - instruksi tertentu. Komputer begitu berguna karena tugas - tugas sederhana tersebut dilakukan dengan kecepatan dan ketelitian yang sangat tinggi. Program : sekumpulan instruksi untuk dilaksanakan oleh suatu komputer Kumpulan program - program untuk suatu komputer disebut software (perangkat lunak). Software-lah yang membuat suatu komputer dapat melakukan tugas yang canggih. Bagian - bagian fisik dari sebuah komputer atau system computer : hardware (perangkat keras). Komputer terdiri dari 4 komponen utama: 1) CPU (central processing unit) 2) Output device : CRT screen/monitor, printer, 3) Input device : keyboard, mouse, scanner, 4) Memory : primer (primary) dan sekunder (secondary) CPU : - Otak dari komputer. - Yang melaksanakan instruksi-instruksi dalam suatu program - Dapat melaksanakan perhitungan (aritmetik): tambah, kurang, kali, bagi, compare.

Memory 0 1 Inputdevice 2 3 4 5 6 7 8 9 10 11 12 CPU

Outputdevice

Gambar 2. Komponen utama komputer Instruksi-instruksi dalam suatu BTT (bahasa tingkat tinggi) jauh lebih rumit dari pada instruksi-instruksi sederhana yang dapat diikuti langsung oleh CPU suatu komputer. Jenis bahasa yang dapat diikuti langsung oleh komputer disebut BTR (bahasa tingkat rendah / low level languages). Contoh instruksi tingkat rendah (assembly language): ADD A, B, C Hal ini dapat dijelaskan sebagai berikut, tambahkan bilangan di lokasi memori A ke bilangan di lokasi memori B dan taruh hasilnya di lokasi memori C. Instruksi- instruksi dalam bahasa assembly masih harus diterjemahkan ke dalam bahasa mesin (machine language). Instruksi- instruksi dalam bahasa mesin terdiri dari 0 dan 1. Misal : ADD A, B, C =0110 0001 0010 0011

Untuk memecahkan suatu masalah dengan komputer, bagian yang paling sulit sesungguhnya adalah mendapatkan langkah-langkah penyelesaiannya. Langkah-langkah yang jelas dan lengkap dan yang dapat memberikan solusi itu disebut algoritma (algorithm). Bahasa Tingkat Tinggi ( High level languages). Mirip bahasa manusia Relative mudah untuk menulis program Relative mudah untuk dibaca oleh manusia program mudah dirawat. Memberikan keuntungan : readability, maintainability, portability

Contoh BTT : C, C++, BASIC, Pascal, LISP, COBOL, FORTRAN, Ada, PROLOG, ML, Setiap bahasa tingkat tinggi harus diterjemahkan ke dalam bahasa mesin sebelum komputer dapat mengikutinya. Program yang menterjemahkan suatu BTT ke bahasa mesin disebut kompilator (compiler ) Sistem operasi (operating system) : Program yang mengontrol dan mengelola program-program lain untuk kemudahan bagi manusia. Manusia berkomunikasi dengan mesin komputer lewat suatu operating system. Contoh : MS DOS, UNIX, Windows 95,

MODUL 2 DASAR PEMROGRAMAN C

Mengenal bahasa C C dirancang oleh Dennis Ritchie di Belll Laboratories pada tahun 1972 C dibakukan pada tahun 1989 oleh ANSI (American National Standards Institute). Juga disetujui oleh ISO System C : o Bahan C (memiliki sekumpulan perintah-perintah yang terbatas) o Standard Libraries (prosedur / program-program yang sudah ada yang dapat dipakai) o Environment (sistem operasinya) UNIX Based PC Dos based Windows based dll Sebelum C adalah B Bahasa C : Borland C Turbo C Microsoft C ANSI C

Contoh program sederhana : #include <stdio.h> main () { printf(Selamat datang\n); printf(dalam dunia pemrograman C); } Program C yang belum decompile dapat di compile dengan unit based, dos based dll Pelaksanaan perintah line perline secara sequensial

Program penjumlahan bilangan

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

/* contoh program C */ # include <stdio.h> main ( ) { int bil1, bil2, jum; printf ( ketik bilangan pertama : ); scanf ( %d , & bil1); printf ( ketik bilangan kedua : ); scanf ( %d , & bil2); jum = bil1 + bil2; printf (Jumlah kedua bilangan tersebut = %d \n , jum); return 0;

12. }

Keterangan: 1. [ /*.*/ ] menyatakan comment (komentar) - Diabaikan oleh kompilator - Memberi keterangan tentang program - Membantu manusia untuk membaca dan mengerti program - Membantu manusia untuk merawat program - Harus jelas dan singkat 2. Suatu directive untuk C-preprocessor - Baris-baris yang diawali # diolah oleh preprocessor sebelum di compile - Baris-baris itu menyuruh preprocessor untuk meng- include isi dari file stdio.h dalam program - stdio.h adalah standard input output header file, yang mengandung informasi dan deklarasi - deklarasi yang digunakan oleh kompilator untuk penanganan fungsi-fungsi i/o seperti printf, scanf, dsb. 3. Tanda kurung ( ) pada main ( ) adalah suatu fungsi dengan nama main - Setiap program C yang lengkap harus minimal mengandung satu fungsi dengan nama main

- Setiap program C terdiri dari satu atau lebih fungsi - Setiap program C dilaksanakan (dieksekusi) mulai dari fungsi main - Kurung kurawal { } mengapit nol atau lebih statement, yang membentuk body dari fungsi - Block program merupakan bagian program yang di apit oleh { } 4. Merupakan suatu declaration (deklarasi) - Bil1, bil2 dan jum adalah nama-nama variabel. - Variabel adalah lokasi dalam memori dimana suatu nilai dapat disimpan dan dapat dibaca untuk digunakan oleh program. Memori bil1

bil2

jum

- Declaration (deklarasi) itu menyatakan bahwa variabel - variabel bila1, bil2, dan jum masing-masing bertipe int; dan menyebabkan memori dialokasikan untuk tiap variabel tersebut. - Jika suatu variabel diberi nilai baru, nilai lamanya hilang (ditimpa). - Sebelum bisa dipakai, setiap variabel harus dideklarasikan dengan sebuah nama dan sebuah tipe. Tipe menyatakan jenis nilai yang bisa disimpan dalam variabel itu dan operasi apa yang bisa dilakukan pada variabel tersebut. Variabel bertipe int dapat berisi nilai-nilai berupa bilangan bulat, missal -7, 0, 152 dsb. - Nama variabel adalah suatu identifier (tanda pengenal). Identifier dalam bahasa C adalah suatu karakter-karakter yang terdiri dari huruf, angka dan underscove ( _ ), yang tidak dimulai dengan angka. Panjang identifier sebaiknya tidak lebih dari 31 karakter, karena hanya 31 karakter pertama yang membedakan.

Contoh identifier : Bilangan2 -ABCA3b Lion King Orang baik - Nilai maksimum yang dapat ditampung oleh variabel bertipe int biasanya : 32767 (= INT MAX) Nilai minimum tipe int biasanya : -32768 (= INT MIN) - INT MAX dan INT MIN didefinisikan dalam file (limits.h) 32767 = 215 1 5. Baris ini merupakan suatu statement yang menginstruksikan computer untuk melakukan suatu aksi (action), yaitu mencetak string yang diapit oleh ke layar monitor. - Setiap statement harus diakhiri dengan tanda ; \n tidak dicetak Backslash ( / ): dikarenakan escape, mengubah arti karakter yang mengikutinya. \n berarti newline (cursor pindah ke awal baris berikutnya). \n merupakan satu kesatuan yang disebut escape sequence - Escape sequence lainnya : \a (bell alert), \\ ( \ ), \ ( ), \t ( tab), \r (return). 6. Statement ini dipakai untuk memperoleh masukan dari pemakai berupa sebuah bilangan bulat. - scanf mengambil input dari standard-input, yang biasanya adalah keyboard. - Argument pertama untuk scanf : %d menyatakan tipe data yang harus dimasukkan pemakai. % d escape character decimal integer

- Argumen kedua untuk scanf : &bil2 menyatakan alamat memori dimana nilai yang didapatkan dari pemakai akan disimpan. & : operator address (alamat) & bil1 memberikan address dari variabel bil1.

10

9. Suatu assignment statement Pihak kiri = pihak kanan; Maknanya: nilai dari pihak kanan disimpan ke variabel di pihak kiri. jum = bil1 + bil2; Berarti: nilai yang diperoleh dari menjumlahkan nilai bil1 dan nilai bil2 disimpan dalam variabel jum. Nilai lama dari variabel jum menjadi hilang. Tetapi nilai dari variabel bil1 dan bil2 masing-masing tetap.

Sebelum assignment bil1


15

Sesudah assignment bil1


15

bil2

-6

bil2

-6

jum

jum

- + dan = adalah operator-operator biner, karena perlu dua operator. Operator biner + = Operator-operatornya bil1, bil2 jum, bil1 + bil2

- Operator menandakan suatu operasi. 10. Statement ini menggunakan printf untuk mencetak pesan jumlahnya = diikuti dengan nilai dari jumlah. Jumlah kedua bilangan tersebut = %d\n : format control string. %d : conversion specifier, menyatakan bahwa suatu integar akan dicetak ditempatnya. 11. Statement return 0; menyalurkan nilai (nol) kepada system operasi. Berdasarkan kesepakatan, nilai menandakan bahwa program telah berjalan dengan sukses.

11

12. } menandakan akhir dari fungsi main. Program selesai kalau } sudah tercapai. Hasil program : Ketik bilangan pertama : 15 Ketik bilangan kedua : -6 Jumlah kedua bilangan tersebut : 9

Program diatas (tanpa mengubah keluarannya) dapat ditulis menjadi sebagai berikut,: /*Versi lain dari contoh program *Variabel jumlah dapat ditiadakan */ # include <stdio.h> main () { int bil1; int bil2;

printf ( ketik bilangan pertama: ); scanf ( %d , & bil1); printf ( ketik bilangan kedua: \n ); scanf ( %d , & bilangan2); printf ( jumlah kedua bilangan tersebut = %d\n , bil1 + bil2 ); return 0; }

12

MODUL 3 KATA KUNCI DALAM C

Kata-kata (keywords) berikut ini mempunyai arti khusus dalam ANSI C dan tidak boleh dipakai sebagai nama variabel.

auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Tabel 1. Aritmatika Operasi penjumlahan pengurangan perkalian pembagian modulus Untuk x dan y yang bertipe integer, Ekspresi x/y memberikan hasil sebuah integer. Contoh : 15/3 7/4 3/6 memberikan 5 memberikan 1 memberikan 0 Operator + * / % Contoh Ekspresi x + y x y x * y x / y x % y

13

Operator modulus hanya berlaku untuk bilangan bulat. Ekspresi x%y memberika sisa dari pembagian x oleh y. Contoh : 4%2 2%4 memberikan 0 (baca : 4 mod 2) memberikan 2

21 % 5 memberikan 1 Perhatikan bahwa beberapa simbol mempunyai arti yang bergantung pada konteks. Bandingkan arti-arti symbol % dalam statement : printf (Hasil a %% b = %d , a % b ); Setiap operator mempunyai precedence (presedensi) dan associativity (asosiativitas), yang menentukan bagaimana suatu ekspresi dievaluasi. Urutan pengevaluasian suatu ekspresi adalah sbb : Ekspresi atau bagian ekspresi yang berada dalam tanda kurung ( ) dievaluasi lebih dulu. Ekspresi dalam tanda kurung yang paling dalam dievaluasi paling dulu. Operator dengan presedensi lebih tinggi terkait lebih kuat dengan operand operandnya, dibandingkan dengan operator dengan presedensi lebih rendah. Jadi operator dengan presedensi lebih tinggi dievaluasi lebih dulu. Contoh : 1 + 2 * 3 (1 + 2) * 3 memberikan 7 memberikan 9

Untuk operator-operator dengan presedensi yang sama, urutan evaluasi ditentukan oleh asosiativitas : left-to-right (dari kiri ke kanan) atau right-to-left (dari kanan ke kiri).

14

Contoh : int a=1, b=2, c=3; Ekspresi setara (a * b) / c ( (-a ) * b) - c 1 + ( (a*b) %c) Nilai 0 -5 3

Ekspresi a * b / c -a * b - c 1 + a*b %c

Tabel 2. Asosiativitas OPERATORS ( ) [ ] ASSOCIATIVITY left to right right to left left to right left to right left to right > >= left to right left to right left to right left to right left to right left to right left to right right to left right to left left to right

! ~ ++ -- + - * & (type) sizeof * + << < == & ^ : && = dan :: = atau ? : = + = - = * = / = % = & = ^ = | = << = >> = , / >> <= != %

if-statement

Komputer dapat disuruh membuat keputusan berdasarkan kondisi tertentu, melalui if-statement. Ada 2 bentuk if-statement : if (kondisi) if (kondisi) statement statement 1 else statement 2

15

Semantik (makna) dari If (kondisi) Adalah : Kondisi Semantik dari if (kondisi) statement1 else statement2 Adalah : Kondisi dievaluasi ; jika nilainya true, maka statement1 dilaksanakan ; jika tidak , maka statement2 dilaksanakan. dievaluasi; jika nilainya true (benar), maka statement statement

dilaksanakan.

Dalam bahasa C, kondisi berupa suatu ekspresi yang dapat bernilai nol atau tidak nol. Nilai nol dianggap sama dengan false, nilai tidak-nol dianggap sama dengan true.

Operator Operator-operator yang biasa dipakai untuk membentuk kondisi adalah operator operator kesamaan (= =, ! =) dan operator-operator relasional (<, > , < =, >=). Operator kesamaan membentuk ekspresi kesamaan. Operator relasional membentuk ekspresi relasional.

Tabel 3. Operator dan relasi Operator == != > < >= <= Ekspresi a == b a != b a > b a < b a >= b a <= b Makna a sama dengan b a tidak sama dengan b a lebih besar dari b a lebih kecil dari b a lebih besar dari atau sama dengan b a lebih kecil dari atau sama dengan b

16

Contoh : int a=10, b=15; Ekspresi a == b a != b a > b a < b a > = 10 69 < = b b Nilai numerik Nilai lojik 0 1 0 1 1 0 15 false true false true true false true

/* Contoh pemakaian if -statement , operator kesamaan Dan operator relasional */ #include <stdio.h> main ( ) { int bill , bil 2; printf (Hai, ketikkan dua bilangan bulat , \n) ; printf (nanti saya beri tahu hubungan \n) ; printf (antara keduanya : ) ; scanf (%d %d , &bil1 , &bil2) ; if (bil1 = = bil2) printf (%d sama dengan %d\n, bil1, bil2) ; if (bil1 ! = bil2) printf (%d tidak sama dengan %d\n, bil1, bil2) ; if (bil1 < bil2) printf (%d lebih kecil dari %d\n, bil1, bil2) ; if (bil1 > bil2) printf (%d lebih besar dari %d\n, bil1, bil2) ; if (bil1 %2 = = 0 ) printf (%d adalah bilangan genap %d\n, bil1, bil2) ; else printf (%d adalah bilangan gasal %d\n, bil1, bil2) ; printf (\nSampai jumpa lagi ! \n) ; return 0; /* Program berakhir dengan baik */ }

17

Contoh hasil : Hai, ketikkan dua bilangan bulat, nanti saya beri tahu hubungan antara keduanya : 19 256 19 tidak sama dengan 256 19 lebih kecil dari 256 19 adalah bilangan gasal Sampai jumpa lagi !

Salah satu keampuhan komputer adalah dapat melaksanakan sejumlah aksi atau operasi secara berulang-ulang hingga suatu kondisi terpenuhi. Untuk melakukan pengulangan (iterasi) , kita dapat menggunakan suatu iteration statement (statement iterasi). Salah satu statement iterasi berbentuk : While (ekspresi) statement Semantiknya : Ekspresi dievaluasi ; jika nilainya tidak-nol (true), maka statement dilaksanakan dan setelah itu ekspresi dievaluasi lagi, dan seterusnya. Siklus ini berlangsung terus sampai ekspresi bernilai nol (false) , yaitu apabila ekspresi bernilai nol, keseluruhan while-statement itu langsung selesai.

/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -* * Contoh penggunaan while-statement tunggal* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include <stdio.h> main ( ) { int pangkatDua = 1 ; while (pangkatDua < = 100 ) pangkatDua = pangkatDua * 2 ; printf (Nilai pangkatDua = %d\n, pangkatDua ) ; return 0; } Output :
Nilai pangkatDua = 128

18

MODUL 4 STATEMENT

Statement terdiri dari 1. Statement tunggal 2. Statement majemuk (compound-statement atau block)

Nol atau lebih statement dalam kurung kurawal disebut statement majemuk. Sesudah kurung buka { dan sebelum statement boleh ada deklarasi. Statement majemuk dapat ditempatkan dimana saja. Suatu statement majemuk tidak diakhiri tanda titik-koma, tetapi diakhiri kurung tutup }.

/* Contoh penggunaan statement majemuk. * Program ini menghitung nilai rata-rata dengan * Interasi yang dikontrol oleh suatu counter. */ #include < stdio.h > #define JUMLAH_NILAI 10 main () { float rata-rata; int counter, nilai, total; printf ( *** penghitungan Nilai rata-rata Kelas *** \n ) ; total = 0 ; counter = 1 ; / * tahap pengolahan */ while ( counter <= JUMLAH_NILAI ) { printf ( Masukkan nilai : ) ; scanf ( %d, &nilai ) ; total = total + nilai ; counter = counter + 1 ; } / * tahap penyelesaian * / rata_rata = (float ) total / JUMLAH_NILAI ; printf (Nilai rata-rata kelas adalah % .2f \n , rata_rata ) ; return 0 ; }

19

Hasilnya : *** Penghitungan Nilai Rata-rata Kelas *** Masukkan nilai : 76 Masukkan nilai : 71 Masukkan nilai : 98 Masukkan nilai : 87 Masukkan nilai : 83 Masukkan nilai : 90 Masukkan nilai : 57 Masukkan nilai : 79 Masukkan nilai : 94 Masukkan nilai : 82 Nilai rata - rata kelas adalah 81.70 Tipe float mencakup bilangan - bilangan yang mengandung pecahan, seperti : 81.70; 0.6; 2.55, dsb. Apa yang terjadi kalau kurung kurawal { Statement : printf ( Masukkan nilai : ) ; Akan diulang terus tanpa berhenti, karena kondisi counter <= JUMLAH_NILAI tidak pernah menjadi false. D.k.l. terjadi pengulangan tak hingga (infiniteloop). } setelah while ( ) dihilangkan?

Supaya pembagian total / JUMLAH_NILAI itu tidak dilakukan secara integer, maka kita buat nilai salinan sementara bertipe float dari nilai total. Caranya : gunakan operator cast (float) Penggunaan operator cast seperti ini disebut Explicit conversion (konversi eksplisit ). Operator cast dapat dibuat dari setiap tipe data; bentuknya : (nama tipe ) Operator cast adalah suatu operator unary .

20

Conversion specifier %. 2f Menyatakan bahwa suatu bilangan pecahan (floating point number) akan ditayangkan dengan ketelitian 2 angka desimal di kanan titik decimal. Contoh : Printf (%.2f , 3.447 ) ; /* cetak 3.45 */ Printf (%.1f , 3.447 ) ; /* cetak 3.4 */ %f identik dengan %. 6f

Assignment operator Operator - operator Assignment dan Ekspresi = adalah suatu operator biner; oleh karena itu Variabel = pihak_kanan. Hal ini merupakan suatu ekspresi. Nilai dari pihak_kanan disimpan ke variabel. Nilai dari pihak_kanan ini juga menjadi nilai dari ekspresi assignment itu secara keseluruhan . Contoh : int a = 1, b = 2; Ekspresi a=a+3 b=b-7 Nilai Ekspresi 4 -5

Statement merupakan satuan terkecil yang dapat dieksekusi. Statement diakhiri dengan tanda titik - koma. Statement yang paling sederhana adalah null-statement (statement kosong): ; Suatu ekspresi yang diikuti oleh tanda titik-koma merupakan suatu statement. Contoh: a = 3; b = b + 2; Statement berikut ini tidak berguna, karena tidak ada efeknya. a + 1; Statement a = b = c = 1; Ekivalen dengan a = ( b = ( c = 1 ) );

21

Karena asosiativitas operator = adalah rightto-left jadi, c diberi nilai 1 dan ekspresi c = 1 mempunyai nilai 1. Kemudian b diberi nilai 1 itu dan ekspresi b = (c = 1) mempunyai nilai 1 . akhirnya a diberi nilai 1 itu dan ekspresi a = (b = (c = 1) ) mempunyai nilai 1.

Statement total = total + nilai; Dapat disingkat menjadi total += nilai; + = adalah juga suatu assignment operator.

Semua assignment operator dalam C adalah: = += -= *= /= %= >>= <<= &= ^= |=

Semua operator ini mempunyai presendensi dan asosiativitas right to - left. Makna ( semantic ) dari Variabel op = ekspresi Ekivalen dengan makna dari Variabel = variable op (ekspresi) Kecuali bahwa variable dalam bentuk yang ringkas itu dievaluasi hanya satu kali. Jadi waktu eksekusi yang bentuk yang ringkas bias lebih pendek. j *= k + 3 ekivalen dengan bukan j = j * (k+3) j = j *k+3

Increment operator Operator increment (tambah 1) ++ dan Operator decrement (kurang 1) - merupakan operator unary , dapat diterapkan pada variabel. Keduanya dapat berada pada posisi prefix ataupun postfix, dengan semantic yang berbeda. Ekspresi ++i i++ --i i-Efek Nilai bertambah 1 Nilai bertambah 1 Nilai bertambah 1 Nilai bertambah 1 Nilai Ekspresi Nilai i baru Nilai i baru Nilai i baru Nilai i baru

22

Contoh: int a, b, c = 0; a = ++c; b = c++; Printf ( %d %d\n , a,b,++c ) ; /* cetak : 1 1 3 */

23

MODUL 5 PENGULANGAN

Struktur pengulangan Pengulangan (repetition/looping) dapat dikontrol dengan : counter, atau sentinel (nilai pembatas) Jika jumlah iterasi diketahui sebelumnya, gunakan counter. Counter merupakan suatu variabel untuk menghitung jumlah iterasi. Sentinel dipakai untuk mengontrol looping apabila : 1) Jumlah iterasi tidak diketahui sebelumnya 2) Loop itu mengandung statement untuk mengambil data dalam tiap iterasi Sentinel (nilai pembatas) menyatakan akhir data. Sentinel harus muncul setelah semua data regular telah muncul. Sentinel harus berbeda dengan data regular. Statement while dapat dikontrol dengan counter maupun sentinel.

for dan while Pengulangan yang dikontrol dengan counter lebih mudah dilakukan dengan menggunakan statement for yang berbentuk : for (ekspresi1 ; ekspresi2; ekspresi3) statement Statement ini ekivalen dengan ekspresi1 ; while (ekspresi2) { statement ekspresi3; } ekspresi1 menginisialisasi counter (variabel pengontrol loop); ekspresi2 merupakan kondisi yang menentukan kelanjutan looping ; ekspresi3 mengubah nilai counter.

24

/* Contoh penggunaan for-loop */ #include <stdio.h> main ( ) { int i ; / * Mengubah counter i dari 1 s / d 10, * dengan kenaikan 1 */ for ( i = 1 ; i < = 10 ; i++ ) printf (%d , i) ; printf (\n) ; / * Mengubah counter idari 10 s / d 1, * dengan kenaikan -1 (penurunan 1 ) */ for ( i = 10 ; i > = 1 ; i-- ) printf (%d , i) ; printf (\n) ; / * Mengubah counter i dari 2 s / d 20, * dengan kenaikan 3 */ for ( i = 2 ; i < = 20 ; i+ = 3 ) printf (%d , i) ; printf (\n) ; return 0 ; } Output :
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 2 5 8 11 14 17 20

25

/* * Program ini melakukan penjumlahan : * 1 */ #include <stdio.h> main ( ) { long int jumlah = 0 ; int bilangan, N; printf (Mau menjumlahkan 1 s / d berapa ? ) ; scanf (%d , &N); for (bilangan=1 ; bilangan <= N; ++bilangan) jumlah + = bilangan ; printf (1 + 2 + . . . + %d = %1d\n, N, jumlah); return 0 ; } Output :
Mau menjumlahkan 1 s / d berapa ? 99 1 + 2 + . . . + 99 = 4950

+ 2 + 3 + ... + N

variabel bertipe long int (dapat disingkat long) dapat menampung bilangan bulat, biasanya dari -2147483648 (LONG_MIN) sampai dengan + 2147483647 (LONG_MAX) Konstanta LONG_MAX dan LONG_MIN didefinisikan dalam header-file <limits.h>

Conversion-specifier %1d dipakai untuk menampilkan nilai bertipe long int. ekspresi1, ekspresi2 dan ekspresi3 dalam suatu statement for adalah opsional (dapat dihilangkan). Jika ekspresi2 tidak ada, maka kondisi itu dianggap selalu true. Jadi for (;;) { ... }

26

merupakan suatu infinite-loop. (Dapat dipecah dengan menggunakan return atau break.) do - while Ada satu lagi statement untuk melakukan looping, yaitu statement do/while, yang bentuknya : do { statement } while (kondisi) ; Berbeda dengan statement while, statement do-while melakukan evaluasi terhadap kondisi sesudah pelaksanaan statement. Jadi dalam suatu loop dowhile, statement dilaksanakan minimal satu kali.

/* Contoh penggunaan statement do/while */ #include <stdio.h> main ( ) { int counter = 1 ; do { printf (%d , counter++) ; } while (counter < = 10) ; return 0 ; } Output :
1 2 3 4 5 6 7 8 9

Statement break dan continue Untuk mengubah alur kontrol Pelaksanaan statement break dalam struktur while, for, do-while atau switch menyebabkan keluar segera dari struktur tsb.

27

/* Contoh penggunaan break dalam struktur for * / #include <stdio.h> main ( ) { int x ; for (x = 1; x < = 10; x++) { if (x = = 5) break; printf (%d , x) ; } printf (\nKeluar dari loop ketika x = = %d \ n, x) ; return 0 ; } Output :
1 2 3 4 Keluar dari loop ketika x = = 5

Pelaksanaan statement continue dalam struktur while, for, atau d0/while menyebabkan lompat ke iterasi berikutnya. Dalam struktur while dan do-while, evaluasi kondisi segera dilakukan setelah pelaksanaan continue. Dalam struktur for, setelah pelaksanaan continue yang dilakukan berikutnya adalah evaluasiekspresi3 dan kemudian evaluasi ekspresi2. /* Contoh penggunaan continue dalam for-loop * / #include <stdio.h> main ( ) { int x ; for (x = 1; x < = 10; x++) { if (x = = 5) continue; printf (%d , x) ; } printf (\nNilai 5 dilompati dengan continue.\n) ; return 0 ; } Output :
1 2 3 4 5 6 7 8 9 10 Nilai 5 dilompati dengan continue.

28

Statement switch Untuk memilih dari beberapa alternative, dengan cara menguji apakah suatu ekspresi mempunyai nilai yang cocok dengan satu dari beberapa konstanta bernilai bulat. switch (ekspresi) { case ekspresi-konstanta : statements . . . case ekspresi-konstanta : statements default : statement }

Tiap alternatif diberi label suatu konstanta atau ekspresi konstanta bernilai bulat. Jika ekspresi cocok dengan salah satu label ekspresi-konstanta, eksekusi dimulai dari statement yang mengikuti label itu sampai dengan statement break atau statement terakhir sebelum tanda }. Tiap ekspresi-konstanta harus unik. Alternatif yang dilabel default akan dilaksanakan jika tidak ada alternatif lain yang cocok. Alternatif default boleh dihilangkan. Jika tidak ada alternatif default dan tidak ada case yang cocok, maka tidak ada aksi sama sekali.

29

/* * Program ini menghitung banyaknya nilai-huruf */ #include <stdio.h> main ( ) { int nilai; int hitungA = 0, hitungB = 0, hitungC = 0, hitungD = 0, hitungE = 0; printf (Masukkan nilai dalam huruf\n) ; printf ( (EOF untuk berhenti) : \n) ; while ( (nilai = getchar ( ) ) ! = EOF) { switch (nilai) { case A : case a : hitungA++ ; break; case B : case b : hitungB++ ; break; case C : case c : hitungC++ ; break; case D : case d : hitungD++ ; break; case E : case e : hitungE++ ; break; case \n : case : /* Abaikan \n dan */ break; default : /* menangkap karakter lainnya */ printf (Input salah. Tolong ulangi. \n) ; break ; } } printf (\nBanyaknya nilai \n) ; printf ( A : %d\n, hitungA) ; printf ( B : %d\n, hitungB) ; printf ( C : %d\n, hitungC) ; printf ( D : %d\n, hitungD) ; return 0 ; } getchar ( ) , yang didefinisikan dalam stdio.h , memberikan nilai karakter yang dibacanya dari keyboard. Karakter biasanya disimpan dalam variabel bertipe char. Tetapi karena char adalah subtipe dari int, maka karakter juga dapat disimpan dalam variable bertipe int.

30

Variabel bertipe char memerlukan memori 1 byte. Tipe char terdiri dari integer-integer kecil. Jadi suatu karakter dapat diperlakukan sebagai suatu int atau suatu char. Konstanta karakter adalah suatu integer yang ditulis dalam bentuk satu karakter dalam tanda kutip tunggal, misalnya : a.

Contoh : printf (Karakter (%c) mempunyai nilai %d.\n , a , a ) ; Di layar akan dicetak karakter (a) mempunyai nilai 97 .

OUT PUT :

Conversion-specifier %c dipakai untuk mencetak karakter dan %d untuk mencetak nilai desimalnya. Masukkan nilai dalam huruf (EOF untuk berhenti) : B A a B b B B F Input salah. Tolong ulangi. C E Banyaknya nilai A : 2 B : 4 C : 1 D : 0 E : 1

31

Bilangan 97 itu adalah representasi numerik desimal dari karakter a dalam komputer. Kebanyakan komputer menggunakan character-set ASNII (American Standard Code for Information Interchange), dimana 97 mengkodekan huruf kecil a. Karakter dapat dibaca dengan fungsi scanf dengan memakai conversionspecifier %c. EOF adalah konstanta simbolik (biasanya bernilai -1) yang menyatakan end of - file. Didefinisikan dalam berkas stdio.h Variabel nilai dalam program itu diberi tipe int agar aman, karena harus menampung nilai dari EOF. Untuk sistem UNIX , EOF dibuat dengan mengetikkan <return> <ctrl-d> (artinya menekan tombol return , kemudian sekaligus menekan tombol ctrl dan tombol d) Untuk DOS, gunakan <ctrl-z>. Left \ Right digits 0 0 1 2 3 4 5 6 7 8 9 10 11 12 nul nl dc4 rs ( 2 < F P Z d n x ASCII American Standart Code for Information Interchange 1 soh vt nak us ) 3 = G Q [ e o y 2 stx np syn sp * 4 > H R \ f p z 3 etx er etb ! + 5 ? I S ] g q { 4 eot so can , 6 @ J T ^ h r | 5 enq si em # 7 A K U _ i s } 6 ack dle sub $ . 8 B L V j t ~ 7 bel del esc % / 9 C M W a k u dal 8 bs dc2 fs & 0 : d n x b l v 9 ht dc3 gs 1 ; E O Y c m w

32

Control characters : NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT FF CR SO
SI SP

Null Start of heading Start of text End of text End of transmission Enquiry Acknowledge Bell Backspace Horizontal tab Newline Vertical tab Form feed Carriage reurn Shift out
Shift in Space

DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS
US DEL

Data link escape Device control 1 Device control 2 Device control 3 Device control 4 Negative acknowledge Synchronous idle End of transmission block Cancel End of medium Substitute Escape File separator Goup separator Record separator
Unit separator Delete

33

MODUL 6 OPERATOR LOGIKA

Operator Operator Logika Kondisi - kondisi sederhana seperti a > 3 dan a ! = 10 dapat digabung menjadi kondisi yang lebih rumit. Kondisi kondisi yang sederhana dapat dikombinasikan menjadi kondisi yang lebih rumit dengan menggunakan operator operator logika: ! && || (NOT logika) (AND logika) (OR logika)

Tabel. Logika NOT (!) Ekspresi 0 (false) Tidak nol (true) ! ekspresi 1 (true) 0 (false)

Tabel. Logika AND (&&) Ekspresi 1 0 (false) 0 (false) Tidak - nol (true) Tidak - nol (true) Ekspresi 2 0 (false) Tidak - nol (true) 0 (false) Tidak - nol (true) Ekspresi 1 && ekspresi 2 0 (false) 0 (false) 0 (false) 1 (true)

Tabel. Logika OR (||) Ekspresi 1 0 (false) 0 (false) Tidak - nol (true) Tidak - nol (true) Ekspresi 2 0 (false) Tidak - nol (true) 0 (false) Tidak - nol (true) Ekspresi 1 | | ekspresi 2 0 (false) 0 (false) 0 (false) 1 (true)

34

Contoh: char C = B; int i = 7, j = 8;

Tabel. Ekspresi dan nilainya Ekspresi !C ! (i j) !ij !! i A < C && C<= Z i > j || C < K i / j || i && j - 8 Nilai 0 0 -8 1 1 1 0

Perhatikan presendensi dari masing masing operator.

Evaluasi short circuit Dalam pengevaluasian ekspresi-ekspresi yang menjadi operand dari && dan ||, proses evaluasi berhenti ketika hasil true atau false sudah diketahui. Evaluasi short-circuit ini merupakan sifat yang penting dari operator && dan ||. Andaikan eksp1 dan eksp2 adalah ekspresi dan eksp1 mempunyai nilai nol . dalam ekspresi logika: Eksp1 && eksp2 Evaluasi terhadap eksp2 tidak terjadi , karena nilai dari ekspresi logika itu secara keseluruhan sudah dapat ditentukan sama dengan nol. Demikian pula , jika eksp1 bernilai tidak-nol , maka evaluasi terhadap eksp2 dalam ekspresi Eksp1 || eksp2 Tidak terjadi , karena nilai dari ekspresi logika itu secara keseluruhan sudah dapat ditentukan sama dengan 1.

35

Structure Programming (Pemrograman Berstruktur) Membuat program yang mudah dimengerti dan dirawat oleh manusia. Mengutamakan kesederhanaan. Menggunakan tiga struktur/bentuk control : Sequence (urutan statement dalam program) Selection (pemilihan satu dari beberapa alternative) repetition (pengulangan / looping) Dalam bahasa C, Sequence diimplementasikan dengan menuliskan satu statement setelah statement lainnya; Selection diimplementasikan dengan menggunakan struktur if , if / else , atau switch; Repetition diimplementasikan dengan menggunakan struktur while , for , atau do/while.

Fungsi Solusi masalah dunia nyata biasanya memerlukan program yang jauh lebih besar dari pada program yang telah kita bahas sejauh ini. Program yang besar sebaiknya terdiri dari satuan-satuan yang lebih kecil atau amodul-modul , supaya lebih mudah dikelola. Modul-modul program C berbentuk fungsi. Program C biasanya merupakan kombinasi dari fungsi-fungsi baru yang ditulis oleh programmer dan fungsi-fungsi yang telah tersedia dalam CStandard library. Printf dan scanf adalah contoh fungsi-fungsi dari C-Standard-library yang telah sering kita gunakan.

36

MODUL 7 FUNGSI

Program yang telah kita bahas sejauh ini terdiri dari hanya satu fungsi , yaitu fungsi main yang memanggil fungsi-fungsi dari standard library . Programmer dapat membuat fungsi sesuai dengan kebutuhannya. Bentuk umum penulisan devinisi suatu fungsi : Tipe-hasil nama-fungsi ( deklarasi parameter ) { Deklarasi - deklarasi Statement statement }

/ * Program ini mengandung fungsi bernama pangkat * yang dibuat sendiri oleh programmer */ # include < stdio.h > int pangkat ( int , int ) ; /* prototype fungsi */m main ( ){ int x; for ( x = 1 ; x <= 10 ; x ++ ) printf ( %d , pangkat (2 , x ) ); printf ( \n ); return 0 ; } /* - - - - - - - - - - - - -- - - - - -- - - -- - - - - -- - * devinisi fungsi pangkat: * pokok dipangkatkan n; n > = 0 * - - - - - - - -- - - - - -- - - - - -- - - - - - -- - - - int pangkat (int pokok , int n){ int hasil , I; hasil = 1; for (I = 1 ; I < = n ; ++I) hasil = hasil * pokok; return hasil ; } OUTPUT: 2 4 8 16 32 64 128 256

* * * */

512 1024

37

Function Prototype ( prototype fungsi ) memberitahu kompilator mengenai: - Tipe dari hasil yang dikembalikan fungsi kepada pemanggilnya - Jumlah parameter, tipe parameter, dan urutan parameter yang harus diberikan kepada fungsi oleh pemanggilnya.

Prototype fungsi dipakai oleh kompilator untuk melakukan validasi terhadap function call ( pemanggilan fungsi ) . dengan demikian , kompilator dapat membantu programmer dalam menangkap kesalahan-kesalahan dalam program.

Prototype fungsi seharusnya diletakkan sebelum fungsi itu digunakan (dipanggil). Nama fungsi harus berupa suatu identifier yang sahih . nama fungsi sebaiknya mencerminkan tugas yang dilakukan oleh fungsi itu. Return type ( tipe hasil ) dari suatu fungsi menyatakan tipe hasil yang dikembalikan fungsi kepada pemanggilnya. Tipe hasil void menyatakan bahwa fungsi tidak mengembalikan apa-apa. Tipe hasil yang tidak ditulis dianggap oleh kompilator sebagai int.

Deklarasi parameter void menyatakan bahwa fungsi itu tidak membutuhkan parameter. Semua variable yang dideklarasikan dalam fungsi adalah variable lokal, artinya hanya diketahui (bias diakses) dalam fungsi tersebut. Semua parameter fungsi juga bersifat local. Jadi dua fungsi boleh mempunyai parameter / variable local dengan nama yang sama tanpa terjadi konflik.

Function body merupakan suatu block ( aitu deklarasi dan statement dalam sepasang tanda kurung kurawal . Ada 3 cara untuk mengembalikan kontrol dari fungsi kepada pemanggilanya: 1. Jika fungsi tidak mengembalikan suatu hasil, fungsi berakhir apabila tanda kurung kurawal akhir } sudah tercapai atau dengan pelaksanaan statement. 2. return; (jika fungsi mengembalikan suatu hasil, pelaksanaan statement) 3. return ekspresi; (Mengakhiri fungsi dan mengembalikan nilai dari ekspresi kepada pemanggil).

38

Motivasi motivasi utama dalam membuat program sebagai system dari beberapa fungsi: 1. Pendekatan divide and conquer mempermudah pengembangan program. 2. Fungsi merupakan alat untuk melakukan abstraksi . 3. Software reusability (penggunaan fungsi fungsi yang telah ada untuk membuat program baru) 4. Sekelompok statement yang melakukan tugas tertentu dapat dieksekusi pada beberapa tempat dalam program tanpa mengulangi penulisan kelompok statement tsb.

Parameter - parameter fungsi yang tertera pada definisi fungsi disebut juga argumen-argumen formal. Pada waktu fungsi dipanggil, argumen-argumen yang diberikan kepada fungsi disebut argumen-argumen aktual. Argument-argumen untuk fungsi merupakan alat untuk menyalurkan data kepada fungsi. Dalam C, semua argument fungsi disalurkan secara pindah-nilai (by value). Artinya, fungsi yang dipanggil itu diberikan salinan dari nilai argument aktualnya. Jadi variabel dari pemanggil yang menjadi argument actual dari suatu fungsi tidak dapat diubah oleh fungsi itu. Dalam contoh program tadi, variabel x yang menjadi argument actual dari fungsi pangkat tidak dapat diubah oleh fungsi pangkat itu. Salinan dari nilai x diberikan kepada argument formal n (dapat dipikirkan seperti assignment n = x). Meskipun n diubah dalam fungsi pangkat, perubahan ini tidak mempengaruhi x. Pemanggilan fungsi (function call) dengan mekanisme demikian disebut : call by value. Definisi untuk pangkat itu dapat juga ditulis menjadi :

39

/* *Versi ringkas dari fungsi pangkat * Pokok dipangkatkan n; n >= 0 */ int pangkat (int pokok, int n) { int hasil = 1; for ( ; n > 0 ; - - n ) hasil = hasil * pokok; return hasil; }

Dimana n dipakai sebagai variabel sementara untuk mengontrol loop. Nilai n diturunkan sampai dengan 0. Perubahan terhadap nilai n tidak mempengaruhi x dari fungsi main. Pemanggilan fungsi dengan mekanisme lain, yaitu call by reference akan dibahas nanti pada saat pembahasan pointer. Dalam call by reference, variabel dari pemanggil (caller) dapat diubah oleh fungsi.

/* Program ini memperlihatkan call by value */ #include (stdio.h) int hitung_jumlah (int n); main ( ) { int n = 3, jumlah ; printf (%d\n, n); /* cetak 3 */ jumlah = hitung_jumlah (n); printf (%d\n, n); /* cetak 3 */ printf (%d\n, jumlah); /* cetak 6 */ return 0; } /* Menjumlahkan integar 1s/d n; n >= 1 */ int hitung_jumlah (int n) { int hasil = 0; for (; n > 0; - -n) hasil += n; return hasil; }

40

Fungsi-fungsi matematik yang umum diperlukan tersedia dalam standard-library dengan header (math.h). Table berikut ini memperlihatkan beberapa fungsi matematik yang sering dipakai, masing-masing mengembalikan nilai bertipe double. x dan y bertipe double.

Tabel. Fungsi dalam math.h Fungsi Sqrt (x) Exp (x) Log (x) Keterangan Akar kuadrat dari x E pangkat x Logaritma (pokok e) Log 10 (x) Fabs (x) Ceil (x) Floor (x) Pow (x) Sin (x) Cos (x) Tan (x) Logaritma dari x (pokok 10) Nilai mutlak dari x Nilai bulat terkecil yang >= x Nilai bulat terbesar yang <= x X pangkat y X dalam radian X dalam radian X dalam radian Log 10 (100.0) Fabs (-2.5) Ceil (9.3) Floor (-9.7) Pow (2.7) Sin (0.0) Cos (0.0) Tan (0.0) 2.0 2.5 10.0 -10.0 128.0 0.0 1.0 0.0 natural dari Contoh Ekspresi Sqrt (9.0) Exp (1.0) x Log (exp (1.0) Nilai 3.0 2.718282 1.0

ANSI C menyediakan tiga tipe untuk bilangan floating-point: float, double, dan long double. Jumlah byte yang dibutuhkan untuk meyimpan suatu objek (misalnya variabel, tipe, dsb.) dalam memori dapat ditentukan dengan menggunakan operator unary sizeof Sizeof (char) bernilai 1; ini berarti satu variabel bertipe char memerlukan memori sebanyak 1 byte. Jumlah byte untuk tipe-tipe dasar, meskipun bergantung pada mesin computer/kompilator ybs .. dalam ANSI C mememnuhi hubungan sbb: Sizeof (char) = 1 Sizeof (short) < sizeof (int) < sizeof (log)

41

Sizeof (signed) = sizeof (unsigned) = sizeof (int) Sizeof (float) < sizeof (double) < sizeof (long double) Pada mesin PC, biasanya: Sizeof (int) Sizeof (long) Sizeof (float) Sizeof (double) bernilai 2 bernilai 4 bernilai 4 bernilai 8

/* *program ini memberikan ukuran dari tipe-tipe *dasar */ #include (stdio.h) Main ( ) { printf ( jumlah byte untuk tipe-tipe dasar.\n); printf ( char:%3d\n, sizeof (char) ) printf ( short:%3d\n , sizeof (short) ) printf ( int:%3d\n , sizeof (int) ) printf ( long:%3d\n , sizeof (long) ) printf ( unsigned:%3d\n , sizeof (unsigned) ) printf ( float:%3d\n , sizeof (float) ) printf ( double:%3d\n , sizeof (double) ) printf ( long double:%3d\n , sizeof (long double) ) return 0; } Output dari PC Jumlah byte untuk tipe-tipe dasar. Char : 1 Short: 2 Int : 2 Long: 4 Unsigned: 2 Float: 4 Double: 8 Long double: 10 Bagaimana outputnya di komputer kamu?

42

/*contoh penggunaan fungsi matematik dari standard *library dengan header (math.h) */ #include<stdio.h> #include<math.h> main ( ) { double x; printf ( \n%s\n , kalkulasi akar kuadrat dari x, - - - - - - ); printf ( input x: ); scanf ( %1f, &x); if (x >= 0.0) printf(\n%22s%21.15e\n%22s%21.15e\n, x = , x, akar kuadrat dari x = , sqrt (x); else printf (\nMaaf, input harus nonnegative.\n); return 0; } Outputnya: Kalkulasi akar kuadrat dari x ----Input x: 2 X = 2.000000000e+00 Akar kuadrat dari x = 1.414213562373095e+00 Kompilasi di UNIX: C89 Im namafile.c -0 namafile

43

Untuk printf: %s adalah penentu konversi untuk string. %22s - - > tempat yang disediakan (field width) 22 karakter, rapat ke kanan. %s - - > tempat yang disediakan secukupnya. %21.15e - - > cetak sebagai bilangan floating-point dalam notasi eksponen seperti dalam contoh; field-width 21 karakter dengan 15 karakter di belakang titik decimal. Untuk scanf: %1f adalah penentu konversi untuk tipe double. Ketelitian (precision) untuk tipe float biasanya adalah 6 digit, sedangkan untuk tipe double biasanya adlah 15 digit.

44

MODUL 8 ARRAY

LARIK (ARRAY) Array merupakan suatu struktur data yang terdiri dari beberapa data bertipe sama. Suatu array menempati sekelompok lokasi memori yang berturutan. Tiap lokasi memori ini berlaku sebagai suatu variabel dengan tipe yang sama. Unsur dari suatu array dapat diakses secara langsung dengan menggunakan nama array dan indeks (subskrip) ybs. Nama array mengikuti aturan seperti nama variabel. Contoh: Int A [5] ; /* mendeklarasikan array bernama A, yang terdiri dari 5 unsur, masing-masing bertipe int. */ Array A

A [0]

A[1]

A[2]

A[3]

A[4]

Unsur pertama mempunyai subskrip 0. Kurung siku [ ] yang mengapit subskrip array merupakan suatu operator. Perhatikan presedensi dan asosiativitasnya dalam table operator pada modul 3.

/*contoh array */ #include (stdio.h) main ( ) { int a [ 10 ], i; /*inisialisasi array dengan nilai 1 */ for (I = 0; I <= 9; i++) a[i] = 1; printf (%s%12s\n,unsure ke, nilai ) for (i = 0; i <= 9; i++) /* cetak array */ printf (%8d%12d\n, i, a[ i ]; return 0; }

45

Output : Unsure ke 0 1 2 3 4 5 6 7 8 9 Nilai 1 1 1 1 1 1 1 1 1 1

/*menghitung jumlah unsur-unsur array */ #include <stdio.h> #define UKURAN 12 main ( ) { int a [UKURAN] = {1,3,5,4,7,2,99,16,-5,0,-11,8}; int i , jumlah = 0; for (i = 0; i<= UKURAN-1; i++) jumlah + = a [ i ] printf ( Jumlahnya = %d\n, jumlah); return 0; }

Output;

Jumlahnya = 129

46

Inisialisasi Array Array dapat diinisialisasi secara ekplisit pada waktu deklarasi. Nilai-nilai awal diapit oleh kurung kurawal { }. Apabila banyaknya nilai awal kurang dari

ukuran array, maka unsur-unsur array yang tersisa diberi nilai awal nol. Contoh : int a[50] = {0} ; /* semua unsur dari array a diberi nilai 0 */ int a[10] = {-1,3} ; /* semua unsur dari array b diberi nilai 0 kecuali b [0] diberi nilai awal -1 dan b[ 1] diberi nilai awal 3 */ Jika suatu array dideklarasikan tanpa ukuran dan diinisialisasi secara eksplisit dengan sebarisan nilai, maka kompilator akan menentukan ukuran array tsb. Sama dengan banyaknya nilai awal. Contoh : Int a [ ] = { 2,3,-7,5} ; Ekivalen dengan Int a [4 ] = { 2,3,-7,5} ;

Array of char char s [ ] = abc ; ekivalen dengan char s [ ] = {a , b , c , \0} ; ekivalen dengan char s [4 ] = {a , b , c , \0} ;

String seperti abc adalah suatu array yang terdiri dari karakterkarakter, dengan diakhiri oleh karakter null \0. Jadi string abc sebenarnya terdiri dari 4 karakter Berapakah nilai dari sizeof (abc) ? 4

x tidak sama dengan x. bedanya ? scanf dapat dipakai untuk menginput suatu string dari keyboard dengan penentu konversi %s. String itu disimpan dalam suatu array char.

47

Suatu array char yang merepresentasikan suatu string dapat dioutput dengan printf melalui penentu konversi %s.

/* tentang string dan array char */ #include <stdio.h> main ( ) { char str1 [20] , str2 [ ] = Teknik Informatika ; int i ; printf (Ketikkan sebuah string : ) ; scanf (%s, str1) ; /* Tidak perlu pakai & */ printf (String1 : %s\nString2 : %s\n , str1 , str2) ; printf (String1 dengan spasi antar karakter : \n) ; for ( i = 0 ; str1 [1] ! = \0 ; i++) printf (%c , str1 [1] ) ; printf (\n) return 0 ; } Output : Ketikkan sebuah string : apa saja String1 : apa String2 : Teknik Informatika String1 dengan spasi antar karakter : apa

Array sebagai Argumen Fungsi Prototipe fungsi : int maksimum (int a[ ] , int ukuran) menyatakan bahwa fungsi maksimum memerlukan dua argument. Argument pertama suatu array bertipe int ; argument kedua suatu unt yang merupakan ukuran dari array tsb. Fungsi maksimum akan mengembalikan suatu int. Sebagai argument actual , nama array saja yang dipakai.

48

/* Contoh penggunaan array sebagai argumen */ #include <stdio.h> int maksimum (int ar [ ] , int uk) ; main ( ) { int ukuran, a[ ] = {9,0,-7,3,14,9,5,-3} ; ukuran = sizeof (a) / sizeof (int) ; printf (Nilai maksimum dalam array berukuran %d itu \nadalah : %d\n, ukuran, maksimum (a,ukuran) ) ; return 0 ; } /* Mengembalikan nilai maksimum dalam array */ int maksimum (int ar [ ] , int ukuran) { int i, maks ; maks = ar[0] ; for (i = 1; i < = ukuran-1; i++) if (ar[i] > maks ) maks = ar[i] ; return maks ; }

Output : Nilai maksimum dalam array berukuran 8 itu adalah 14

49

MODUL 9 SCOPE

Scope Scope (lingkup) dari suatu identifier (nama) adalah bagian dari program di mana identifier itu dapat dipakai / diakses. Ada identifier yang dapat dipakai di seluruh program. Ada identifier yang dapat dipakai hanya dalam bagian tertentu dari program

Aturan dasar untuk menentukan scope : Identifier dapat diakses hanya dalam block tempat identifier itu dideklarasikan, identifier itu tidak diketahui di luar blocknya.

Suatu block dapat berada dalam block lainnya. Setiap block mempunyai ruang penamaan sendiri. Nama dalam block yang lebih luar tetap berlaku di block yang lebih dalam jika nama tidak didefinisikan lagi di block yang lebih dalam itu.

Identifier yang dideklarasikan di luar fungsi mempunyai scope seluruh file. Identifier semacam ini diketahui dalam semua fungsi mulai dari tempat identifier itu dideklarasikan sampai dengan akhir file. Variable global, definisi fungsi, dan prototype fungsi yang ditaruh di luar fungsi semuanya mempunyai file-scope.

50

Block Nested /* Contoh scoping */ #include <stdio.h> main ( ) { int a=1, b=2, c=3 ; printf (%2d%2d%2d\n ,a,b,c|) ; { int b=4 float c=5.0; printf (%2d%2d%4.1f\n ,a,b,c|) ; a = b { int c ; c=b: printf (%2d%2d%2d\n ,a,b,c|) ; } printf (%2d%2d%4.1f\n ,a,b,c|) ; } printf (%2d%2d%2d\n ,a,b,c|) ; return 0 ; }

/* 1 2 3 */

/* 1 4 5 . 0 */

/* 4 4 4 */ /* 4 4 5 . 0 */ /* 4 2 3 */

Block Paralel { int a,b ; ... { /* block-dalam 1 */ float b ; ... /* int a diketahui , int b tidak */ } ... { /* block-dalam 2 */ float a ; ... /* int b diketahui , int a tidak */ /* Tidak ada dari block-dalam 1 diketaui */ } ... }

51

DAFTAR PUSTAKA 1. H.M. Deitel & P.J. Deitel. C: How to program. 2nd edition. Prentice Hall 2. Brian W Kernighan and Dennis M Ritche. The C Programming Language, Prentice Hall, Second edition 3. Paul M Embree and Bruce Kimble, C Language Algorithms for Digital Signal Processing, Printice Hall 4. Catatan Kuliah Konsep Pemrograman

52

You might also like