modul1 alpro s1 ptik

Upload: cococaramel

Post on 09-Jul-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

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

2

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

3

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.

4

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

5

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,

6

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 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

7

Program penjumlahan bilangan

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

/* contoh program C */ # include 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

8

- 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.

9

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 bil115

Sesudah assignment bil115

bil2

-6

bil2

-6

jum

0

jum

9

- + 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 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 * + = , / >> =). Operator kesamaan membentuk ekspresi kesamaan. Operator relasional membentuk ekspresi relasional.

Tabel 3. Operator dan relasi Operator == != > < >= b 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 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 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 = 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 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 = 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 = 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