Modul Konsep Pemrograman

68
Konsep Pemrograman 1 MODUL 1 PENGANTAR 1.1 Apa itu ilmu komputer ? Ilmu komputer (computer science) sebenarnya merupakan ilmu tentang abstraksi (science of abstraction). Abstraksi adalah sebuah proses, yaitu menciptakan model yang tepat untuk suatu masalah dan merancang teknik-teknik yang dapat dimekanisasikan untuk menyelesaikan masalah tersebut. Dengan demikian, seorang llmuwan komputer harus mampu membuat abstraksi- abstraksi dari masalah- masalah dunia nyata supaya dapat direpresentasikan dan diolah dalam komputer. Lalu, apa bedanya ilmu komputer dengan teknik komputer, teknik informatika, manajemen informatika, dll ? 1. 2 Pengenalan Komputer Komputer adalah suatu mesin yang melakukan tugas-tugas yang sangat sederhana berdasarkan instruksi-instruksi tertentu. Komputer menjadi begitu berguna (useful ) karena tugas-tugas sederhana tersebut dilakukan dengan kecepatan dan ketelitian yang sangat tinggi. Sekumpulan instruksi untuk dilaksanakan oleh suatu komputer : program. Kumpulan program-program untuk suatu komputer : software (perangkat lunak). Software-lah yang membuat suatu komputer dapat melakukan tugas yang canggih. Bagian-bagian fisik dari sebuah komputer atau sistem komputer : hardware (perangkat keras). Kebanyakan komputer terdiri dari atas 4 komponen pokok : 1. CPU (Central Processing Unit) 2. Output device (CRT screen monitor, printer) 3. Input device (keyboard, mouse, scanner…) 4. Memory (primary dan secondary). CPU merupakan otak dari komputer ang melaksanakan instruksi-instruksi dalam suatu program. CPU dapat melaksanakan operasi aritmatika : tambah, kurang, kali, bagi, compare dan operasi logika : or, and, not.

Transcript of Modul Konsep Pemrograman

Page 1: Modul Konsep Pemrograman

Konsep Pemrograman 1

MODUL 1PENGANTAR

1.1 Apa itu ilmu komputer ?

Ilmu komputer (computer science) sebenarnya merupakan ilmu tentang abstraksi(science of abstraction).

Abstraksi adalah sebuah proses, yaitu menciptakan model yang tepat untuk suatumasalah dan merancang teknik-teknik yang dapat dimekanisasikan untuk menyelesaikanmasalah tersebut.

Dengan demikian, seorang llmuwan komputer harus mampu membuat abstraksi-abstraksi dari masalah- masalah dunia nyata supaya dapat direpresentasikan dan diolahdalam komputer.

Lalu, apa bedanya ilmu komputer dengan teknik komputer, teknik informatika,manajemen informatika, dll ?

1. 2 Pengenalan Komputer

Komputer adalah suatu mesin yang melakukan tugas-tugas yang sangat sederhanaberdasarkan instruksi-instruksi tertentu. Komputer menjadi begitu berguna (useful )karena tugas-tugas sederhana tersebut dilakukan dengan kecepatan dan ketelitian yangsangat tinggi.

Sekumpulan instruksi untuk dilaksanakan oleh suatu komputer : program. Kumpulanprogram-program untuk suatu komputer : software (perangkat lunak). Software-lahyang membuat suatu komputer dapat melakukan tugas yang canggih.

Bagian-bagian fisik dari sebuah komputer atau sistem komputer : hardware (perangkatkeras). Kebanyakan komputer terdiri dari atas 4 komponen pokok :

1. CPU (Central Processing Unit)2. Output device (CRT screen monitor, printer)3. Input device (keyboard, mouse, scanner…)4. Memory (primary dan secondary).

CPU merupakan otak dari komputer ang melaksanakan instruksi-instruksi dalam suatuprogram. CPU dapat melaksanakan operasi aritmatika : tambah, kurang, kali, bagi,compare dan operasi logika : or, and, not.

Page 2: Modul Konsep Pemrograman

Konsep Pemrograman 2

KOMPONEN KOMPUTER

Instruksi - instruksi dalam BTT (Bahasa Tingkat Tinggi) adalah jauh lebih rumit dariinstruksi-instruksi sederhana yang dapat diikuti langsung oleh CPU suatu komputer.

Jenis bahasa yang dapat diikuti langsung oleh komputer disebut BTR (Bahasa TingkatRendah / Low Level Languages). Contoh instruksi tingkat rendah :

ADD A, B, C" tambahkan bilangan di lokasi memory A ke bilangan di lokasimemory B dan taruh hasilnya di lokasi memory C".

Contoh di atas merupakan instruksi dalam bahasa perakitan (assembly language).Instruksi-instruksi dalam bahasa assembly masih harus diterjemahkan ke dalam bahasamesin (machine language). Instruksi-instruksi dalam bahasa mesin terdiri dari 0 dan 1,sebagai contoh

ADD A, B, C = 0110000100100011

Untuk memecahkan suatu masalah dengan komputer, bagian yang paling sulit adalahmendapatkan langkah-langkah penyelesainnya. Langkah-langkah yang jelas dan lengkap,dan yang dapat memberikan solusi disebut dengan ALGORITMA (algorithm) yangdiambil dari nama seorang ilmuwan muslim yang bernama : AL - KHOWARIZMI.

CPU

Inputdevice

Outputdevice

MEMORY

0111010101111

Page 3: Modul Konsep Pemrograman

Konsep Pemrograman 3

Bahasa tingkat tinggi (high level languages) :- mirip bahasa manusia (Inggris)- mudah untuk menulis program- mudah untuk dibaca oleh manusia program mudah dirawat.- memberikan keuntungan :

-readability-maintainability-portability

Contoh BTT :C, C++, BASIC, Pascal, FORTRAN, LISP, COBOL, ADA, LINDA, MIRANDA,ALGOL, PROLOG, MODUL…

Perlu diingat bahwa setiap bahasa TT harus diterjemahkan ke dalam bahasa mesinsebelum komputer dapat mengikutinya. Program yang menterjemahkan suatu BTT kebahasa mesin disebut compiler (kompilator). Ada beberapa bahasa yang tidakmenggunakan compiler, yaitu memamakai interpreter.Secara skematis bisa dituliskan sbb:

source program (code) object program (code)

Operating system (Sistem Operasi) adalah program yang mengontrol dan mengelolaprogram-program lain. Manusia berkomunikasi dengan mesin komputer lewat OS.Contoh : MS-DOS, Windows 95, Windows NT, Unix, AIX, Xenix, Linux.

Editor

OS

Hardware

COMPILER

Page 4: Modul Konsep Pemrograman

Konsep Pemrograman 4

1.3 Contoh program sederhana dalam Bahasa C.

1. main() {}

2. main() {}

3. main() { }

4. main() {printf("Selamat datang. \n");}hasilnya :

Keterangan :\n : newline\t : tab\a : alert (bel berbunyi)\b : backspace\\ : \\" : "

5. main() {printf("Selamat datang.\n\n");}

hasilnya :

Selamat datang.-

Selamat datang.baris 1

- baris 2

Page 5: Modul Konsep Pemrograman

Konsep Pemrograman 5

6. main() {printf("Selamat \n datang.\n");}

hasilnya :

7. main() {printf("Selamat");printf("\ndatang\n");}hasilnya :

8. main() {printf("\"Selamat\"");

}

hasilnya :

Selamatdatang.-

Selamatdatang-

"Selamat"_

Page 6: Modul Konsep Pemrograman

Konsep Pemrograman 6

1.4 Pemrograman Bahasa C

C dirancang oleh Dennis Ritchie di Bell laboratories pada tahun 1972 dan dibakukanpada tahun 1989 oleh ANSI (American national Standards Institute) kemudian jugadisetujui oleh ISO (International Standard Organization) ANSI C

Sistem yang diperlukan untuk menjalankan C terdiri atas bahasa C, Standard Libraries

dan Environment-nya bisa UNIX-based atau MS-DOS –based.

Contoh program :

(1) /* Contoh Program Bahasa C */

(2) #include <stdio.h>

(3) main() {

(4) int bilangan1, bilangan2, jumlah;

(5) printf("Ketik bilangan pertama :\n");

(6) scanf("%d", &bilangan1);

(7) printf("Ketik bilangan kedua :\n");

(8) scanf("%d", &bilangan2);

(9) jumlah = bilangan1 + bilangan2;

(10) printf("Jumlahnya = %d\n", jumlah);

(11) return 0;

(12) }

Page 7: Modul Konsep Pemrograman

Konsep Pemrograman 7

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 dengan # diolah oleh preprocessor sebelum di-

kompilasi (compiling).

- baris ke (2) tersebut menyuruh preprocessor untuk meng-include isi dari file

stdio.h ke 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 ( ) menyatakan main() adalah suatu fungsi dengan nama main.

- setiap program C yang lengkap harus mengandung satu fungsi dengan nama

main.

- setiap program C terdiri dari satu atau lebih fungsi

- setiap pogram C dilaksanakan (di-execute) mulai dari fungsi main.

- kurung kurawal { } mengapit nol atau lebih statement, yang membentuk bodydari fungsi.

- bagian program yang diapit oleh { } disebut block, karenanya bahasa C dan

Pascal disebut sebagai block structured language.

(4) merupakan suatu declaration (deklarasi) bilangan1, bilangan2 dan jumlah adalah

nama-nama variabel.

- variabel adalah lokasi dalam memori dimana suatu nilai dapat disimpan dan

dapat dibaca untuk digunakan oleh program.

Page 8: Modul Konsep Pemrograman

Konsep Pemrograman 8

memori

bilangan1

bilangan2

jumlah

- declaration itu menyatakan bahwa variabel-variabel bilangan1, bilangan2 dan

jumlah, masing-masing bertipe int dan menyebabkan memori dialokasi.

- 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 variable itu dan operasi

apa yang bisa dilakukan pada variabel tersebut.

- variabel bertipe int dapat berisi nilai-nilai berupa bilangan bulat, misalnya : 193,

0, -23 dsb.

- nama variabel adalah suatu identifier (tanda pengenal).

- identifier dalam bahasa C adalah seuntai karakter - karakter yang terdiri dari

huruf, angka, dan underscore (_), yang tidak dimulai dengan angka.

- panjang identifier sebaiknya tidak lebih dari 31 karakter, karena hanya 31

karakter pertama yang membedakan.

- contoh identifier :

bilangan4, abcde, AI3, Lion_King

Lion-King ……..???

C++

- nilai maksimum yang dapat ditampung oleh variabel bertipe int biasanya :

32767 (= INT_MAX), tergantung mesin prosesornya.

- nilai minimum int, biasanya : -32768 (= INT_MIN)

- INT_MAX dan INT_MIN didefinisikan dalam file <limits.h>

Page 9: Modul Konsep Pemrograman

Konsep Pemrograman 9

- 32767 = 2 15 - 1

(5) - baris ini merupakan suatu statement yang menginstruksikan komputer untuk

melakukan suatu aksi (action), yaitu mencetak string yang diapit oleh " ke layar

monitor.

- setiap statement harus diakhiri dengan tanda ;.

- \n tidak dicetak

- backslash (\) : karakter 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, \\, \", \t, \r (return).

(6) - statement ini dipakai untuk memperoleh masukan dari pemakai berupa sebuah

bilangan bulat.

- fungsi scanf mengambil input dari standard-input, yang biasanya adalah

keyboard.

- argumen pertama untuk scanf : "%d" menyatakan tipe data yang harus

dimasukkan oleh pemakai :

% : escape characterd : decimal integer

- argumen kedua untuk scanf : &bilangan1 menyatakan alamat memori dimana

nilai yang didapatkan dari pemakai akan disimpan.

& : address (alamat)&bilangan1 memberikan address dari variabel bilangan1.

Page 10: Modul Konsep Pemrograman

Konsep Pemrograman 10

(9) - merupakan suatu assignment - statementpihak-kiri = pihak-kanan;

- maknanya : nilai dari pihak-kanan disimpan ke variabel di pihak-kiri.

jumlah = bilangan1 + bilangan2;

- statemen diatas berarti : nilai yang diperoleh dari penjumlahan nilai bilangan1

dan nilai bilangan2 disimpan dalam variabel jumlah. nilai lama dari jumlah

menjadi hilang, tetapi nilai dari variabel bilangan1 dan bilangan2 masing-

masing tetap.

contoh :

sebelum assignment sesudah assignmentbilangan1 : 24 bilangan1 : 24

bilangan2 : -10 bilangan2 : -10

jumlah : 0 jumlah : 14

- + dan = adalah operator biner, karena perlu dua operand. operator

menandakan suatu operasi.

operator biner operand-operandnya+ bilangan1, bilangan2

= jumlah, bilangan1 + bilangan2

(10) - statement ini menggunakan printf untuk mencetak pesan Jumlahnya = diikuti

dengan nilai dari jumlah.

"Jumlahnya = %d\n " : format-control-string

%d : conversion specifier, menyatakan bahwa suatu integer akan dicetak di

tempatnya.

(11) - statement return 0; menyalurkan nilai 0 (nol) kepada sistem operasi.

berdasarkan kesepakatan, nilai 0 menandakan bahwa program telah berjalan

dengan sukses.

(12) - } menandakan akhir dari fungsi main.

- program selesai kalau } sudah tercapai.

Page 11: Modul Konsep Pemrograman

Konsep Pemrograman 11

Hasil program :

Ketik bilangan pertama :20Ketik bilangan kedua :-10Jumlahnya = 10_

Program pada halaman 6 itu dapat ditulis menjadi sebagai berikut, tanpa mengubah

keluarannya :

/* Versi lain dari contoh program pada halaman 7,* Variabel jumlah dapat ditiadakan*/

#include <stdio.h>main() {

int bilangan1, bilangan2;printf("Ketik bilangan pertama :\n");scanf("%d", &bilangan1);printf("Ketik bilangan kedua :\n");scanf("%d", &bilangan2);printf("Jumlahnya = %d\n", bilangan1 + bilangan2);return 0;

}

Page 12: Modul Konsep Pemrograman

Konsep Pemrograman 12

Kata - kata berikut ini (keyword mempunyai arti khusus dalam ANSI C dan tidak boleh

dipakai sebagai nama.

autobreakcasecharconstcontinuedefaultdo

doubleelseenumexternfloatforgotoif

intlongregisterreturnshortsignedsizeofstatic

structswitchtypedefunionunsignedvoidvolatilewhile

Page 13: Modul Konsep Pemrograman

Konsep Pemrograman 13

MODUL 2OPERASI ARITMATIKA DAN LOGIKA

1. Operasi Aritmatika

Operasi Operator Contoh EkspresiPenjumlahan + x + y

Pengurangan - x - y

Perkalian * x * y

Pembagian / x / y

Modulus % X % y

Untuk x dan y yang bertipe integer, ekspresi x/y memberikan hasil sebuah integer.

Contoh :15/3 memberikan 57/4 memberikan 13/6 memberikan 0

Operator modulus hanya berlaku untuk bilangan bulat. Ekspresi x%y memberikan sisadari pembagian x oleh y.

Contoh :15%3 memberikan 0 (baca : 15 mod 2)7%4 memberikan 33%6 memberikan 3

Perhatikan bahwa beberapa simbol mempunyai arti yang bergantung pada konteks.Bandingkan arti-arti simbol % dalam statement :

printf ("Hasil a %% b = %d", a % b); Setiap operator mempunyai precedence (presedensi) dan associtivity (asosiativitas), yang

menentukan bagaimana suatu ekspresi dievaluasi.

Urutan pengevaluasian suatu ekspresi adalah sebagai berikut :Ekspresi atau bagian ekspresi yang berada dalam tanda kurung ( ) dievaluasi lebihdulu. Ekspresi dalam tanda kurung yang paling dalam dievaluasi paling dulu.

Page 14: Modul Konsep Pemrograman

Konsep Pemrograman 14

Operator dengan presedensi lebih tinggi terikat lebih kuat dengan operanda-operandnya, dibandingkan dengan operator dengan presedensi lebih rendah. Jadioperator dengan presedensi lebih tinggi dievaluasi lebih dulu.Contoh :

1 + 2 * 3 memberikan 7(1 + 2) * 3 memberikan 9

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

int a= 1, b=2, c=3;

Ekspresi Ekspresi setara Nilaia * b / c (a * b ) / c 0- a * b - c ( (- a ) * b ) – c -51 + a * b % c 1 + ( ( a * b ) % c) 3

Daftar presedensi dan assosiativitas :

OPERATOR ASOSIATIVITAS

( ) [ ] -> left to right

! ~ ++ -- + - * & (type)sizeof

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

? : right to left= += -= *= /= %= &= ^= |=<<= >>=

right to left

, left to right

Page 15: Modul Konsep Pemrograman

Konsep Pemrograman 15

2. Operasi Logika

Komputer dapat disuruh membuat keputusan berdasarkan kondisi tertentu, melalui if -statement.

Ada dua bentuk if - statement :

if (kondisi) statement

if (kondisi) statement1 else statement2

Semantik (makna) dari :

if (kondisi) statement

adalah : kondisi dievaluasi; jika nilainya true (benar) maka statement dilaksanakan.

Semantik (makna) dari :

if (kondisi) statement1 else statement2adalah : kondisi dievaluasi; jika nilainya true (benar) maka statement1 dilaksanakan; jika

tidak , maka statement2 dilaksanakan.

Dalam bahasa C, kondisi berupa suatu ekspresi yang dapat bernilai NOL atau TIDAKNOL. Nilai NOL dianggap sama dengan FALSE, sedangkan nilai TIDAK NOLdianggap sama dengan TRUE.

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

Operator kesamaan membentuk ekspresi kesamaan sedangkan operator relasionalmembentuk ekspresi relasional.

OPERATOR EKSPRESI MAKNA

== a == b a sama dengan b

!= a != b a tidak sama dengan b

> a > b a lebih besar dari b

< a < b a lebih kecil dari b

>= a >= b a lebih besar dari atau sama dengan b

<= a <= b a lebih kecil dari atau sama dengan b.

Page 16: Modul Konsep Pemrograman

Konsep Pemrograman 16

Contoh :

int a = 10, b=15;

Ekspresi Nilai Numerik Nilai Lojik

a == b 0 falsea != b 1 truea > b 0 falsea < b 1 truea >= 10 1 true90 <= b 0 falseb 15 true

/** Contoh pemakaian if - statement, operator kesamaan dan* operator relasional*/

#include <stdio.h>main() {int bil1, bil2;

printf(" Ketikkan dua bilangan bulat,\n");printf(" nanti kami beritahu hubungan antara keduanya\n");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 \n", bil1);

elseprintf("%d adalah bilangan gasal \n", bil1);

printf ("\n Sampai jumpa lagi! \n");return 0; /*program berakhir dengan baik */

}

Page 17: Modul Konsep Pemrograman

Konsep Pemrograman 17

Contoh hasilnya :

Salah satu keampuhan komputer adalah dapat melaksanakan sejumlah aksi atau operasisecara berulang-ulangmhingga suatu kondisi terpenuhi.

Untuk melakukan pengulangan (iterasi), kita dapat mengunakan suatu iteration-statement(statemen iterasi).

Salah satu statemen iterasi berbentuk :

while (ekspresi) statement

Semantik dari bentuk iterasi di atas adalah : ekspresi dievaluasi; jika nilainya tidak nol(true), maka statement dilaksanakan, dan seterusnya. Siklus ini berlangsung terus sampaiekspresi bernilai NOL (false), yaitu apabila ekspresi bernilai nol, keseluruhan while-statement itu langsung selesai.

/* --------------------------------------------** Contoh penggunaan while statement ** --------------------------------------------*/

#include <stdio.h>

main () {int pangkatDua = 1;

while (pangkatDua <= 100)pangkatDua = pangkatDua * 2;

printf("Nilai pangkatDua = %d\n", pangkatDua);return 0;

}

Outputnya :

Hai, ketikkan dua bilangan bulat,nanti kami beritahu hubungan antara keduanya19 25619 tidak sama dengan 25619 adalah bilangan gasal

Sampai jumpa lagi!

Nilai pangkatDua = 128

Page 18: Modul Konsep Pemrograman

Konsep Pemrograman 18

3. Statemen Majemuk

Suatu statemen dibagi menjadi dua , yaitu :1. Statemen TUNGGAL2. Statemen MAJEMUK (compound-statement atau block)

Nol atau lebih statemen dalam kurung kurawal disebut sebagai statemen majemuk.Sesudah kurung buka { dan sebelum statemen boleh ada deklarasi.

Statemen majemuk dapat ditempatkan dimana saja suatu statemen tunggal dapatberada.

Suatu statemen majemuk tidak diakhiri tanda titik koma, tetapi diakhiri dengan kurungtutup }.

/* Contoh penggunaan statemen majemuk.* Program ini menghitung nilai rata-rataa dengan* iterasi yang dikontrol oleh suatu counter*/

#include <stdio.h>#define JUMLAH_NILAI 10main () {

float rata_rata;int counter, nilai, total;/* tahap inisialisasi */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 : %.2f\n", rata_rata);return 0;

}

Page 19: Modul Konsep Pemrograman

Konsep Pemrograman 19

Contoh hasilnya :

Tipe float mencakup bilangan-bilangan yang mengandung pecahan, seperti : 81.70, 0.6,2.55, dsb.

Apa yang terjadi kalau kurung kurawal { } setelah while ( ) dihilangkan ?

Yang terjadi adalah statemen :

printf("Masukkan nilai : ");akan diulang terus tanpa henti, karena kondisi

counter <= JUMLAH_NILAItidak pernah menjadi false. D.k.l terjadi pengulangan tak hingga (infinite-loop).

Supaya pembagian total/JUMLAH_NILAI itu tidak dilakukan secara integer , makakita buat nilai salinan sementara bertipe float dari nilai total. (Isi variabel total tidakberubah). Caranya adalah dengan menggunakan 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.

Conversion-specifier %.2fmenyatakan bahwa suatu bilangan pecahan (floating-pointnumber) akan ditayangkan dengan ketelitian 2 angka desimal di kanan titik desimal.

**** Penghitungan Nilai Rata-rata Kelas ****Masukkan nilai : 76Masukkan nilai : 71Masukkan nilai : 98Masukkan nilai : 87Masukkan nilai : 83Masukkan nilai : 90Masukkan nilai : 57Masukkan nilai : 79Masukkan nilai : 94Masukkan nilai : 82Nilai rata-rata kelas : 81.70

Page 20: Modul Konsep Pemrograman

Konsep Pemrograman 20

Contoh :printf("%.2f",3.447); /* cetak 3.45 */printf("%.1f",3.447); /* cetak 3.4 */

%f identik dengan %.6f

4. Operator-operator Assignment dan Ekspresi

= adalah suatu operator biner, oleh karena itu

variabel = pihak_kanan

merupakan suatu ekspresi. Nilai dari pihak_kanan disimpan ke variabel. Nilai daripihak_kanan ini juga menjadi nilai dari ekspresi assignment itu secara keseluruhan.

Contoh :

int a = 1, b = 2;

Ekspresi Nilai Ekspresi

a = a + 3

b = b - 7

4

-5

Statemen merupakan satuan terkecil yang dapat dieksekusi. Statemen diakhiri dengan tandatitik koma. Statemen yang paling sederhana adalah null-statement (statemen kosong).

;Suatu ekspresi yang diikuti oleh tanda titik koma merupakan statemen.Contoh : a = 3;

b = b +2;

Statemen berikut ini tidak berguna, karena tidak ada efeknya :

a + 1;

Page 21: Modul Konsep Pemrograman

Konsep Pemrograman 21

Statemen a = b = c = 1; ekivalen dengan a = ( b = ( c = 1)); karenaasosiatifitas operator = adalah right-to-left.Jadi, c diberi nilai 1 dan ekspresi c = 1 mempunyai nilai 1. Kemudian b diberi nilai 1tersebut dan ekspresi b = (c = 1) mempunyai nilai 1. Akhirnya a diberi nilai 1 tersebut danekspresi a = (b = (c = 1)) mempunyai nilai 1.

Statemen total = total + nilai; dapat disingkat menjadi total += nilai;

+= adalah juga suatu assignmnet-operator.

Semua assignment-operator dalam bahasa C adalah :

= += -= *= /= %= >>= <<= &= ^= |=

Semua operator ini mempunyai presedensi yang sama dan assosiativitas right-to-left. Makna(semantik) dari :

variabel op= ekspresi

ekivalen dengan makna dari

variabel = variabel op (ekspresi)

kecuali bahwa variabel dalam bentuk yang ringkas itu dievaluasi hanya satu kali. Jadi waktueksekusi dari bentuk yang ringkas bisa lebih pendek.

j *= k + 3 ekivalen dengan j = j * (k + 3)bukan j = j * k + 3

Operator increment (tambah 1) ++ dan operator decrement (kurang 1) -- merupakanoperator unary, dapat diterapkan pada variabel.

Keduanya dapat berada pada posisi PREFIX atau POSTFIX, dengan semantik yangberbeda.

Ekspresi Efek Nilai ekspresi

++a

a++

--a

a--

nilai a bertambah 1

nilai a bertambah 1

nilai a berkurang 1

nilai a berkurang 1

nilai a baru

nilai a lama

nilai a baru

nilai a lama

Page 22: Modul Konsep Pemrograman

Konsep Pemrograman 22

Contoh :

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

Page 23: Modul Konsep Pemrograman

Konsep Pemrograman 23

MODUL 3STRUKTUR LOOPING

Pengulangan (repetition/looping) dapat dikontrol dengan :counter, atausentinel (nilai pembatas)

Jika jumlah iterasi diketahui sebelumnya, maka pengulangan dikontroldengan counter. Counter merupakan suatu variabel untuk menghitungjumlah iterasi.

Sentinel dipakai untuk mengontrol pengulangan (looping) apabila :1. Jumlah iterasi tidak diketahui sebelumnya2. Looping itu mengandung statemen untuk mengambil data

dalam tiap iterasi.

Sentinel (nilai pembatas) menyatakan akhir data. Sentinel harus munculsetelah semua data regular telah muncul. Sentinel harus berbeda dengandata regular.

Statemen while dapat dikontrol dengan counter maupun sentinel.

Pengulangan yang dikontrol dengan counter lebih mudah dilakukandengan menggunakan statemen for yang berbentuk :

for (ekspresi1;ekspresi2;ekspresi3)statemen

Statemen di atas ekivalen dengan :

eskpresi1;while (ekspresi2) {

statemenekspresi3;

}kecuali apabila statemen mengandung statemen continue yang

akan dibahas nanti.ekspresi1 menginisialisasi counter (variabel pengontrol looping) ;ekspresi2 merupakan kondisi yang menentukan kelanjutan looping;ekspresi3 mengubah nilai counter.

Page 24: Modul Konsep Pemrograman

Konsep Pemrograman 24

/* Contoh penggunaan for - loop */

#include <stdio.h>

main() {int a;

/* mengubah counter a dari 1 s/d 10,* dengan kenaikan 1*/

for (a=1; a <= 10; a++)printf ("%d", a);

printf("\n");

/* mengubah counter a dari 10 s/d 1,* dengan kenaikan -1 (penurunan 1)*/

for (a=10; a >= 1; a--)printf ("%d", a);

printf("\n");

/* mengubah counter a dari 2 s/d 20,* dengan kenaikan 3*/

for (a=2; a <= 20; a += 3)printf ("%d", a);

printf("\n");return 0;

}

Output :

1 2 3 4 5 6 7 8 9 1010 9 8 7 6 5 4 3 2 12 5 8 11 14 17 20

Page 25: Modul Konsep Pemrograman

Konsep Pemrograman 25

/** Program ini melakukan penjumlahan :* 1 + 2 + 3 + ...N*/

#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 + 3 + . . . . %d = %ld\n", N, jumlah);return 0;

}

Output :

Variabel bertipe long int (dapat disingkat long) dapat menampungbilangan 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 %ld dipakai untuk menampilkansuatu nilai bertipelong int.

ekspresi1, ekspresi2 dan ekspresi3 dalam suatu statemen foradalah bersifat opsional (dapat dihilangkan).

Mau menjumlahkan 1 s/d berapa ? 991 + 2 + 3 + . . . . 99 = 4950

Page 26: Modul Konsep Pemrograman

Konsep Pemrograman 26

Jika ekspresi2 tidak ada, maka kondisi itu dianggap selalu true.Jadi

for(;;) {. . . . .}

merupakan suatu infinite-loop. (Dapat dipecah dengan menggunakanreturn atau break.).

Ada satu lagi statemen yang bisa digunkan untuk melakukan looping,yaitu statemen do /while, yang bentuknya :

do {statemen

} while (kondisi);

Berbeda dengan statemen while, statemen while/do melakukanevaluasi terhadap kondisi sesudah pelaksanaan statemen. Jadi dalamsuatu looping do/while, statemen dilaksanakan minimal satu kali.

/* Contoh penggunaan statemen 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 10

Page 27: Modul Konsep Pemrograman

Konsep Pemrograman 27

3.1. Statemen break dan continue

Statemen break dan continue digunakan untuk mengubah alur kontrol

Pelaksanaan statemen break dalam struktur while, for, do/whileatau switch menyebabkan keluar segera dari struktur tersebut.

/* Contoh penggunaan statemen 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 :

Pelaksanaan statemen continue dalam struktur while, for atau

do/while menyebabkan lompat ke iterasi berikutnya.

Dalam struktur while dan do/while, evaluasi kondisi segera dilakukansetelah pelaksanaan continue. Dalam struktur for, setelah

pelaksanaan continue yang dilakukan berikutnya adalah evaluasi

ekspresi3 dan kemudian evaluasi ekspresi2.

1 2 3 4Keluar dari loop ketika x == 5

Page 28: Modul Konsep Pemrograman

Konsep Pemrograman 28

/* 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 :

3.2. Statemen switch

Untuk memilih dari beberapa alternatif, dengan cara menguji apakahsuatu ekspresi mempunyai nilai yang cocok dengan satu dari beberapakonstanta bernilai bulat.

switch (ekspresi) {case ekspresi-konstan : statemen

.

.

.case ekspresi-konstan : statemendefault : statemen

}

1 2 3 4 5 6 7 8 9 10Nilai 5 dilompati dengan continue.

Page 29: Modul Konsep Pemrograman

Konsep Pemrograman 29

Tiap alternatif diberi label suatu konstanta atau ekspresi konstanbernilai bulat. Jika ekspresi cocok dengan salah satu label ekspresi-konstan, eksekusi dimulai dari statemen yang mengikuti label itusampai dengan statemen break / statemen terakhir sebelum tanda }.Tiap ekspresi-konstan harus unik. Alternatif yang dilabel defaultakan dilaksanakan jika tidak ada alternatif lain yang cocok. Alternatifdefault bisa dihilangkan. Jika tidak ada alternatif default dan tidakada case yang cocok, maka tidak ada aksi sama sekali

/* 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);printf("E : %d\n", hitungE);return 0;

}Contoh outputnya :

Page 30: Modul Konsep Pemrograman

Konsep Pemrograman 30

getchar(), yang didefinisikan dalam stdio.h, memberikan nilaikarakter yang dibacanya dari keyboard.

Karakter biasanya disimpan dalam variabel bertipe char. Tetapi karenachar adalah subtipe dari int, maka karakter juga dapat disimpandalam variabel bertipe int.

Variabel bertipe char memerlukan memori 1 byte, tipe char terdiri dariinteger-integer kecil.

Konstanta karakter adalah suatu integer yang ditulis dalam bentuk satukarakter dalam tanda kutip tunggal, misalnya : 'a'Contoh :printf("Karakter (%c) mempunyai nilai %d.\n",'a','a');

akan mencetak

Karakter (a) mempunyai nilai 97.

Penentu konversi (conversion-specifier) %c dipakai untuk mencetakkarakter dan %d untuk mencetak nilai desimalnya. %x untuk mencetakbilangan hexadesimal.

Masukkan nilai dalam huruf(EOF untuk berhenti) :BAaBbBFInput salah. Tolong ulangi.cE

Banyaknya nilaiA : 2B : 4C : 1D : 0E : 1

Page 31: Modul Konsep Pemrograman

Konsep Pemrograman 31

Bilangan 97 itu merupakan representasi numerik desimal dari karakter adalam komputer. Kebanyakan komputer menggunakan character-set ASCII (American

Standard Code for Information Interchange), dimana 97 mengkodekanhuruf kecil a.

Karakter dapat dibaca dengan fungsi scanf dengan memakaiconversion-specifier %c.

EOF adalah konstanta simbolik (biasanya bernilai -1) yang menyatakanend-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 / Linux, EOF dibuat dengan mengetikkan<return> <ctrl-d>

Untuk sistem DOS, dibuat dengan mengetiikka <ctrl-z

3.3. 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 kondisiyang lebih rumit dengan menggunakan operator-operator logika :

! (NOT logika)&& (AND logika)|| (OR logika)

ekspresi !ekspresi0 (false) 1 (true)tidak-nol (true) 0 (false)

Page 32: Modul Konsep Pemrograman

Konsep Pemrograman 32

ekspresi1 ekspresi2 ekspresi1 && ekspresi20 (false) 0 (false) 0 (false)0 (false) tidak-nol (true) 0 (false)tidak-nol (true) 0 (false) 0 (false)tidak-nol (true) tidak-nol (true) 1 (true)

ekspresi1 ekspresi2 ekspresi1 || ekspresi20 (false) 0 (false) 0 (false)0 (false) tidak-nol (true) 1 (true)

tidak-nol (true) 0 (false) 1 (true)tidak-nol (true) tidak-nol (true) 1 (true)

Contoh :char c = 'B';int k = 7, h = 8;

ekspresi nilai!c!(k - h)!k - h!!k'A' < c && c <= 'Z'k > h || c < 'K'k / h || k && h - 8

00-81110

Perhatikan presedensi dari masing-masing operator.

Page 33: Modul Konsep Pemrograman

Konsep Pemrograman 33

3.4 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 nilainol. Dalam ekspresi logika :

eksp1 && eksp2

evaluasi terhadap eksp2 tidak terjadi, karena nilai dari ekspresi logika itusecara keseluruhan sudah dapat ditentukan sama dengan nol.

Demikian pula, jika eksp1 bernilai tidak-nol, maka evaluasi terhadapeksp2 dalam ekspresi logika :

eksp1 || eksp2

tidak terjadi, karena nilai dari ekspresi logika itu secara keseluruhan sudahdapat ditentukan sama dengan 1.

Page 34: Modul Konsep Pemrograman

Konsep Pemrograman 34

MODUL 4PEMROGRAMAN TERSTRUKTUR

Membuat program yang mudah dimengerti dan mudah dirawat(maintainance) oleh manusia.

Mengutamakan kesederhanaan.

Menggunakan 3 struktur / bentuk kontrol, yaitu :1. SEQUENCE (Urutan statemen dalam program).2. SELECTION (Pemilihan satu dari beberapa alternatif).3. REPETITION (Pengulangan / looping).

Dalam bahasa C,

1. SEQUENCE, diimplementasikan dengan menuliskan satustatemen setelah statemen lainnya.

2. SELECTION, diimplementasikan dengan menggunakanstruktur if, if / else atau switch.

3. REPETITION, diimplementasikan dengan menggunakanstruktur while, for, atau do/while.

4.1. FUNGSI

Solusi masalah dunia nyata biasanya memerlukan program yang jauhlebih besar dari pada program yang telah kita bahasa sejauh ini.

Program yang besar sebaiknya terdiri dari satuan-satuan yang lebih kecilatau modul-modul, supaya lebih mudah dikelola.

Modul- modul program C berbentuk FUNGSI.

Program C biasanya merupakan kombinasi dari fungsi-fungsi baru yangditulis oleh programmer dan fungsi-fungsi yang telah tersedia dalam C-standard library.

printf dan scanf adalah contoh fungsi-fungsi dari C-standard libraryyang sering kita gunakan.

Program yang telah kita bahas sejauh ini terdiri dari hanya satu fungsi,yaitu fungsi main yang memanggil fungsi-fungsi dari C-standard library.

Programmer dapat membuat fungsi sesuai dengan kebutuhannya.

Page 35: Modul Konsep Pemrograman

Konsep Pemrograman 35

Bentuk umum penulisan definisi suatu fungsi :

tipe-hasil nama-fungsi (deklarasi parameter){

deklarasi-deklarasistatemen-statemen

}

/* Program ini mengandung fungsi bernama pangkat* yang dibuat sendiri oleh programmer* --------------------------------------*/

#include <stdio.h>int pangkat(int, int); /*prototipe fungsi */

main(){

int x;for (x=1; x <= 10; x++)

printf("%d ", pangkat(2,x));

printf("\n");return 0;

}

/* --------------------------------* Definisi fungsi pangkat :* pokok dipangkatkan n, n >= 0* --------------------------------*/

int pangkat(int pokok, int n){

int hasil, b;

hasil = 1;for (b=1; b <= n; ++b)

hasil *= pokok;

return hasil;}

OUTPUT :

Page 36: Modul Konsep Pemrograman

Konsep Pemrograman 36

Function-prototype (prototipe fungsi) memberitahu kompilatormengenai :

1. tipe dari hasil yang dikembalikan fungsi kepada pemanggilnya.2. jumlah parameter, tipe parameter, dan urutan parameter yang

harus diberikan kepada fungsi oleh pemanggilnya.

Prototipe fungsi dipakai oleh kompilator untuk melakukan validasiterhadap function-call (pemanggilan fungsi). Dengan demikian,kompilator dapat membantu programmer dalam menangkap kesalahan-kesalahan dalam program.

Prototipe fungsi seharusnya diletakkan sebelum fungsi itu digunakan(dipanggil)

Nama fungsi harus berupa suatu identifier yang sahih. Nama fungsisebaiknya mencerminkan tugas yang dilakukan oleh fungsi tersebut.

Return-type (tipe hasil) dari suatu fungsi menyatakan tipe hasil yangdikembalikan fungsi kepada pemanggilnya.

Tipe hasil void menyatakan bahwa fungsi tidak mengembalikanapa-apa.Tipe hasil yang tidak ditulis dianggap (default-nya) olehkompilator sebagai int.

Deklarasi parameter void menyatakan bahwa fungsi itu tidakmembutuhkan parameter.

Semua variabel yang dideklarasikan dalam fungsi adalah variabel lokal,artinya hanya diketahui (bisa diakses) dalam fungsi tersebut.

- Semua parameter fungsi juga bersifat lokal- Jadi, dua fungsi boleh mempunyai parameter / variabel lokal

dengan nama yang sama, tanpa terjadi konflik.

Function-body merupakan suatu block (yaitu deklarasi dan statemendalam sepasang tanda kurung kurawal).

Ada 2 cara untuk mengembalikan kontrol dari fungsi kepadapemanggilnya :

2 4 8 16 32 64 128 256 512 1024

Page 37: Modul Konsep Pemrograman

Konsep Pemrograman 37

- Jika fungsi tidak mengembalikan suatu hasil, fungsi berakhirapabila tanda kurung kurawal akhir } sudah tercapai ataudengan pelaksanaan statemen return.

- Jika fungsi mengembalikan suatu hasil, pelaksanaan statemenreturn ekspresi; mengakhiri fungsi dan mengembalikan nilaidari ekspresi kepada pemanggil.

Motivasi-motivasi utama dalam membuat program sebagai sistem daribeberapa fungsi :

- pendekatan divide-and-conquer mempermudah pengembanganprogram

- fungsi merupakan alat untuk melakukan abstraksi- software reusability (penggunaan fungsi-fungsi yang telah ada

untuk membuat program baru).- sekelompok statemen yang melakukan tugas tertentu dapat

dieksekusi pada beberapa tempat dalam program tanpamengulangi penulisan sekelompok statemen tersebut.

Parameter-parameter fungsi yang tertera pada definisi fungsi jugadisebut sebagai argumen-argumen formal.

Pada waktu fungsi dipanggil, argumen-argumen yang diberikan kepadafungsi disebut argumen-argumen aktual.

Dalam C, semua argumen fungsi disalurkan secara pindah nilai (byvalue) . Artinya, fungsi yang dipanggil itu diberikan salinan dari nilaiargumen aktualnya. Jadi variabel dari pemanggil yang menjadi argumenaktual dari suatu fungsi tidak dapat diubah oleh fungsi itu.

Dalam contoh program tadi, variabel x yang menjadi argumen aktual darifungsi pangkat tidak dapat diubah oleh fungsi pangkat tersebut.Salinan dari nilai x diberikan kepada argumen formal n (dapat dipikirkanseperti assignment n = x). Meskipun n diubah dalam fungsi pangkat,perubahan ini tidak mempengaruhi x.

Page 38: Modul Konsep Pemrograman

Konsep Pemrograman 38

Pemanggilan fungsi (function call) dengan mekanisme di atas disebutdengan call by value.

Definisi untuk fungsi pangkat itu dapat juga ditulis menjadi :

/* --------------------------------* Versi ringkas dari fungsi pangkat* pokok dipangkatkan n, n >= 0* --------------------------------*/

int pangkat(int pokok, int n){

int hasil = 1;for (; n > 0; --n)

hasil *= pokok;return hasil;

}

dimana n dipakai sebagai variabel sementara untuk mengontrol loop.Nilai n diturunkan sampai dengan 0. Perubahan terhadap nilai n tidakmempengaruhi x pada fungsi main.

Pemanggilan fungsi dengan mekanisme lain, yaitu call by referenceakan dibahas nanti pada saat pembahsan tentang pointer. Dalam call byreference, 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 integer 1 s/d n; n >=1

Page 39: Modul Konsep Pemrograman

Konsep Pemrograman 39

* ------------------------------------------*/

int hitung_jumlah(int n){

int hasil = 0;

for (; n > 0; --n)hasil += n;

return hasil;

}

4.2. Fungsi - Fungsi Matematik

Fungsi - fungsi matematik yang umum diperlukan tersedia dalamstandard-library dengan header <math.h>

Tabel berikut ini memperlihatkan beberapa fungsi matematik yang seringdipakai, masing-masing mengembalikan nilai bertipe double, x dan ybertipe double.

Fungsi Keterangan Contoh Ekspresi Nilaisqrt(x) akar kuadrat dari x sqrt(9.0) 3.0exp(x) e pangkat x exp(1.0) 2.718282log(x) logaritma natural

dari x (pokok e)log(exp(1.0)) 1.0

log10(x) logaritma dari x(pokok 10)

log10(100.0) 2.0

fabs(x) nilai mutlak dari x fabs(-2.5) 2.5ceil(x) nilai bulat terkecil

yang >=xceil(9.3) 10.0

floor(x) nilai bulat terkecilyang <=x

floor(-9.7) -10.0

pow(x,y) x pangkat y pow(2,7) 128.0sin(x) x dalam radian sin(0.0) 0.0cos(x) x dalam radian cos(0.0) 1.0tan(x) x dalam radian tan(0.0) 0.0

ANSI C menyediakan tiga tipe untuk bilangan floating-point : float,double dan long double

Page 40: Modul Konsep Pemrograman

Konsep Pemrograman 40

Jumlah byte yang dibutuhkan untuk menyimpan suatu objek (misalnyavariabel, tipe, dsb) dalam memori dapat ditentukan dengan menggunakanoperator unary sizeof.

sizeof(char) bernilai 1; ini berarti satu variabel bertipe char memerlukanmemori sebanyak 1 byte.

Jumlah byte untuk tipe-tipe dasar, meskipun bergantung pada mesinkomputer / kompilator ybs, dalam ANSI C memenuhi hubungan sbb :

sizeof(char) = 1sizeof(short) sizeof(int) sizeof(long)sizeof(signed) sizeof(unsigned) sizeof(int)sizeof(float) sizeof(double) sizeof(long double)

Pada mesin PC, biasanya :

sizeof(int) bernilai 2sizeof(long) bernilai 4sizeof(float) bernilai 4sizeof(double) 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;}

Ouput dari mesin PC (486) :

Page 41: Modul Konsep Pemrograman

Konsep Pemrograman 41

/* Contoh penggunaan fungsi matematik dari standard ** library dengan header <math.h> */

#include <stdio.h>#include <math.h>

main(){

double x;printf("\n%s\n%s\n",

"Kalkulasi akar kuadrat dari x","-----");

printf("Input x : ");scanf("%lf", &x);if (x >= 0.0)

printf("\n%22s%21.15e\n%22s%21.15e\n","x = ",x,"akar kuadrat dari x = ", sqrt(x));

elseprintf("\nMaaf, input harus non negatif.\n");

return 0;}

Outputnya :

Kompilasi di UNIX / Linux :

Jumlah byte untuk tipe-tipe dasar.char :1

short :2int :2

long :4unsigned :2

float :4double :8

long double :10

Kalkulasi akar kuadrat dari x-----Input x : 2

x = 2.000000000000000e+00akar kuadrat dari x = 1.414213562373095e+00

Page 42: Modul Konsep Pemrograman

Konsep Pemrograman 42

c89 -lm namafile.c -o namafile 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 dalamnotasi eksponen seperti dalam contoh;field-width 21 karakter dengan 15 karakter dibelakang titik desimal.

Untuk scanf :%lf adalah penentu konversi untuk tipe double.

Ketelitian (precision) untuk tipe float biasanya adalah 6 digit,sedangkan untuk tipe double biasanya adalah 15 digit.

Page 43: Modul Konsep Pemrograman

Konsep Pemrograman43

43

MODUL 5ARRAY / LARIK

Array merupakan suatu struktur data yang terdiri dari beberapadata bertipe sama.

Suatu array menempati sekelompok lokasi memori yangberurutan. Tiap lokasi memori ini berlaku sebagai variabel dengantipe yang sama.

Unsur dari suatu array dapat diakses secara langsung denganmenggunakan nama array dan indeks(subskrip) yangbersangkutan.

Nama array mengikuti aturan seperti nama variabel. Contoh :

Int A[5]; /* mendeklarasikan array bernama A,Yang terdiri dari 5 unsur,Masing-masing int */

Array A

A[0] A[1] A[2] A[3] A[4]

Unsur pertama mempunyai indeks atau subskrip 0. Kurung siku [ ] yang mengapit subskrip array merupakan suatu

operator. Perhatikan presedensi dan assosiativitasnya dalam tabeloperator pada bab yang terdahulu.

/* Contoh Array */#include <stdio.>main () {int a[10], j;

/*Inisialisasi array dengan nilai 1*/for(j=0;j<=9;j++)

a[j]=1;

printf(“%s%12s\n”,”Unsur ke”,”Nilai”);for(j=0;j<=9;j++)

printf(“8d%12d\n”,j,a[j]); /* Cetak array */

return 0;}

Page 44: Modul Konsep Pemrograman

Konsep Pemrograman44

44

OUTPUT :

/* Menghitung jumlah unsur-unsur array----------------------------------*/

#include<stdio.h>#define UKURAN 12main (){

int a[UKURAN] = {1,3,5,7,2,99,16,-5,0,-11,-6,18};int j,jumlah=0;

for (j=0; j<=UKURAN-1; j++)jumlah+=a[j];

printf(“Jumlahnya = %d \n”,jumlah);return 0;

}

OUTPUT :

Unsur ke Nilai0 11 12 13 14 15 16 17 18 19 1

Jumlahnya = 129

Page 45: Modul Konsep Pemrograman

Konsep Pemrograman45

45

INISIALISASI ARRAY

Array dapat diinisialisasi secara eksplisit pada waktu deklarasi.Nilai-nilai awal diapit oleh kurung kurawal { }. Apabila banyaknyanilai kurang dari ukuran array, maka unsur-unsur array yangtersisa diberi nilai awal 0 (nol).

Contoh :

int a[50]={0};/* Semua unsur dari array a diberi nilai 0 */

int b[10]={-1,4};/* Semua unsur dari array b diberi nilai 0, kecualib[0] diberi nilai –1 dan b[1] diberi nilai 4 */

Jika suatu array dideklarasikan tanpa ukuran dan diinisialisasisecara eksplisit dengan sebarisan nilai, maka kompilator akanmenentukan ukuran array tersebut sama dengan banyaknya nilaiawal.Contoh :

int a[ ]={2,3,-8,8};

ekivalen dengan

int a[4]={2,3,-8,8};

ARRAY OF CHAR

char s[ ] = ”abc”; ekivalen dengan

char s[ ] = { ‘a’,’b’,’c’,’\0’}; ekivalen dengan

char s[ ] = {‘a’,’b’,’c’,’\0’};

String seperti “abc” adalah suatu array yang terdiri dari karakter-karakter, dengan diakhiri oleh karakter null ‘\0’.

Jadi string “abc” sebenarnya terdiri dari 4 karakter. Berapakahnilai dari sizeof(“abc”) ? 4.

Page 46: Modul Konsep Pemrograman

Konsep Pemrograman46

46

ARRAY SEBAGAI ARGUMEN FUNGSI

Prototipe fungsi :

int maksimum(int a[ ], int ukuran)

Menyatakan bahwa fungsi maksimum memerlukan dua argumen.Argumen pertama suatu array bertipe int; argumen kedua suatuint yang merupakan ukuran dari array tersebut. Fungsimaksimum akan mengembalikan suatu int.

Sebagai argumen aktual, yang dipakai nama array saja.

/* 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;}

/*fungsi untuk mencari nilai maksimum dalam array*/int maksimum(int ar[ ],int uk){

int j,maks;maks=ar[0];for(j=1;j<=uk-1;j++)

if(ar[j]>maks) maks=ar[j];return maks;

}

output :

Nilai maksimum dalam array berukuran 8 ituadalah 14

Page 47: Modul Konsep Pemrograman

Konsep Pemrograman47

47

‘x’ tidak sama dengan “x”. Bedanya mana ? Scanf dapat dipakai untuk meng-input suatu string dari keyboard

dengan penentu konversi %s. String itu disimpan dalam array ofchar.

Suatu array of char yang merepresentasikan suatu string dapat di-output dengan printf melalui penentu konversi %s.

/* Tentang string dan array of char-------------------------------- */

#include<stdio.h>main ( ){char str1[20],str2[]=”Ilmu Komputer”;int j;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(j=0;str1[j] != ‘\0’;j++)printf(“%c”,str1[j]);printf(“\n”);return 0;}

output :

Ketikkan sebuah string : apa sajaString1 : apa sajaString2 : Ilmu KomputerString1 dengan spasi antar karaktera p a

Page 48: Modul Konsep Pemrograman

Konsep Pemrograman 53

Modul 6STORAGE CLASS

Setiap variabel dan fungsi dalam C mempunyai dua atribut : tipe danstorage-class. Ada 4 macam storage-class : automatik, eksternal, registerdan statik. Keyword-nya masing-masing : auto, extern, register, static.

Keyword auto dipakai untuk secara eksplisit menyatakan storage-classautomatik. Contoh :

auto int a, b;auto float f;

Variabel yang dideklarasikan dalam suatu block adalah automatik,secara implist. Jadi keyword auto jarang dipakai.

Makna storage-class auto Apabila suatu block mulai dimasuki, memori dialokasikan untuk variabel

- variabel automatik. Variabel-variabel ini bersifat lokal dalam block.Pada waktu block itu ditinggalkan (keluar dari block), memori yangdialokasikan untuk variabel-variabel auto itu menjadi bebas lagi. Jadinilai dari variabel - variabel auto ini menjadi hilang. Jika block inidimasuki lagi nanti, sistem mengalokasikan lagi memori untuk variabel-variabel auto, tetapi nilai sebelumnya tidak diketahui. Jadi masa hidupvariabel auto adalah sejak block-nya dimasuki sampai saat block-nyaditinggalkan.

Makna storage-class extern Salah satu cara untuk menyalurkan informasi lintas block dan lintas

fungsi adalah dengan menggunakan variabel eksternal.

Variabel yang dideklarasikan di luar fungsi mendapat alokasi memorisecara permanen (selama program aktif). Storage-class-nya extern.

Variabel extern ini bersifat global, artinya bisa diakses oleh semua fungsiyang dideklarasikan sesudahnya.

Page 49: Modul Konsep Pemrograman

Konsep Pemrograman 54

/* Contoh variabel-variabel eksternal */

#include <stdio.h>int a=1, b=2, c=3; /* variabel-variabel global */int f(void); /* prototipe fungsi */

main(){

printf("%3d\n", f()); /*cetak 12 */printf("%3d%3d%3d\n",a,b,c); /*cetak 4 2 3 */return 0;

}

int f(void){

int b, c; /* b dan c ini bersifat lokal *//* b dan c yang global tertutupi */

a = b = c= 4;return (a+b+c);

}

Baris int a=1, b=2, c=3;bisa ditulis lebih eksplisit :

extern int a=1, b=2, c=3;

Tetapi kata kunci extern dalam hal ini tidak diperlukan. Kata kunciextern dipakai untuk menyuruh compiler untuk mencari definisi darivariabel-variabel ybs di tempat lain, baik dalam file ini maupun dalamfile lainnya.

Contoh penggunaan kata kunci extern yang sepatutnya adalah sebagaiberikut. Program tadi bisa ditaruh dalam dua file.Dalam file berkas1.c :

#include <stdio.h>int a=1, b=2, c=3; /* variabel-variabel global */int f(void); /* prototipe fungsi */

main(){

printf("%3d\n", f()); /*cetak 12 */printf("%3d%3d%3d\n",a,b,c); /*cetak 4 2 3 */return 0;

}

Page 50: Modul Konsep Pemrograman

Konsep Pemrograman 55

Dalam file berkas2.c :

int f(void){

extern int a; /*cari definisinya di tempat lain */int b, c;

a = b = c= 4;return (a+b+c);

}

Bahwa suatu program dapat dipisahkan dalam beberapa file dan dapatdi-compile secara terpisah, sangat penting dalam pembuatan programyang besar.

Cara kompilasi di UNIX, misalnya :gcc -c berkas1.c (menghasilkan berkas1.o)gcc -c berkas2.c (menghasilkan berkas2.o)gcc -c berkas1.o berkas2.o -o prog

atau :gcc berkas1.c berkas2.o -o prog

Masa hidup variabel-variabel eksternal adalah selama program aktif.Tetapi bisa saja tersembunyi (tertutupi) oleh variabel lokal.

Semua fungsi mempunyai storage-class eksternal. Ini berarti kita bisa(kalau mau) pakai kata kunci extern di depan prototipe fungsi atau didepan definisi fungsi.

Contoh :extern double sqrt(double);extern double sqrt(double x){

. . . .}

Penggunaan variabel eksternal sebagai alat komunikasi antar fungsiharus dibatasi, karena dapat terjadi efek sampingan yang sulit dikontrol.Komunikasi antar fungsi sebaiknya dilakukan lewat argumen-argumenfungsi.

Page 51: Modul Konsep Pemrograman

Konsep Pemrograman 56

Makna storage-class register

Memberitahu compiler bahwa variabel ybs seharusnya disimpan dalamregister (storage berkecepatan sangat tinggi) jika keadaanmemungkinkan. Jumlah register yang tersedia sangat terbatas (biasanyahanya beberapa).

Jika keadaan tidak memungkinkan, storage-class register dianggapmenjadi storage-class automatik.

Biasanya storage-class register dipakai untuk variabel yang sangatsering diakses, misalnya variabel pengontrol looping, agar program bisalebih cepat.Contoh :

{register int j;for (j=0; j< Batas; j++)

{. . . .

}}

Makna storage-class statik

Memberikan dua macam pemakaian yang penting :

1. Membuat variabel lokal mempertahankan nilai sebelumnya, pada waktublock-nya dimasuki lagi.Contoh :Fungsi berikut ini melakukan hal yang berbeda tergantung pada berapakali ia telah dipanggil.

void f (void){

static int kali = 0;++kali;if (kali<=3) printf("Belum lebih dari 3 kali.\n");else printf("Sudah lebih lebih dari 3 kali.\n");

}

Page 52: Modul Konsep Pemrograman

Konsep Pemrograman 57

Waktu program mulai, variabel kali diberi nilai awal 0. Pertama fungsi fdipanggil, kali bernilai 0. Pada pemanggilan berikutnya, kali tidakdiinisialisasi lagi tapi mempunyai nilai dari akhir pemanggilansebelumnya.

Jadi variabel lokal yang berstorage-class static merupakan kepunyaanpribadi fungsi ybs (alokasi memorinya permanen).

2. Variabel eksternal yang juga dideklarasikan static dibatasi scopenya,yaitu dari tempat deklarasinya sampai dengan akhir dari file dimanavariabel itu dideklarasikan.

Penggunaan static sebagai storage-class untuk definisi fungsi danprototipe fungsi mengakibatkan scope fungsi itu dibatasi pada filedimana fungsi itu didefinisikan.

Contoh :

void f(int a){

. . . . . /* g() tersedia disini,tetapi tidak di file lainnya */

}

static int g(void)

{. . . . .

}

Page 53: Modul Konsep Pemrograman

Konsep Pemrograman 58

Modul 7POINTER

Menentukan alamat (address ) suatu variabel Setiap variabel mempunyai suatu alamat yang unik yang menyatakan

lokasinya dalam memori.

Seringkali sangat berguna untuk mengakses suatu variabel lewatalamatnya, tidak lewat namanya.

Untuk mendapatkan alamat dari suatu variabel, kita pakai operatorAMPERSAND, yaitu &

Andaikan x adalah suatu variabel yang mendapat alokasi memori mulaidari lokasi 1234, maka ekspresi &x akan memberikan alamat dari x,yaitu 1234.

Untuk mencetak alamat dengan fungsi printf, pergunakan conversion-specifier %p.

/* Contoh pencarian alamat suatu variabel */

#include <stdio.h>main()

{int j=10;printf("Nilai (value) dari variabel j = %d\n", j);printf("Alamat (address) dari variabel j = %p\n", &j);return (0);

}

Outputnya :

Nilai (value) dari variabel j = 10Alamat (address) dari variabel j = f7fffba4

Page 54: Modul Konsep Pemrograman

Konsep Pemrograman 59

Pointer Pointer adalah suatu variabel yang berisi alamat (address) dari suatu

variabel.

Ingat bahwa pada umumnya memori suatu mesin komputer terdiri dariumit-unit (cell-cell) yang berurutan (diberi alamat terurut) yang dapatdimanipulasi secara individu (per byte) atau secara kelompok. Biasanyasatu byte untuk suatu char, dua byte berurutan untuk suatu int, empatbyte berurutan untuk suatu long ,dsb.

Suatu pointer biasanya memerlukan dua byte (misalnya di PC) atauempat byte (misalnya di SUN) untuk dapat menyimpan suatu alamat.

Sebelum dipakai, pointer perlu diberi alokasi memori melalui suatudeklarasi seperti variabel lainnya. Untuk mendeklarasikan suatu variabelpointer, kita taruh tanda * didepan nama pointer itu.

Contoh :

int *ip;

mendeklarasikan bahwa variabel ip mempunyai tipe int * (yaitu, bahwaip adalah suatu pointer ke int). Jadi ip dapat berisi alamat dari suatuvariabel yang bertipe int.

Perhatikan bahwa

int *ip, ipp;mendeklarasikan bahwa ip adalah suatu pointer ke int dan ipp adalahsuatu variabel bertipe int.

Tetapiint *ip, *ipp;mendeklarasikan bahwa ip dan ipp masing-masing adalah pointer ke int.

Operator unary * (sebagai operator indirection atau dereferencing )apabila diterapkan pada suatu pointer, memberikan objek (variabel) yangditunjuk oleh pointer tersebut.

Page 55: Modul Konsep Pemrograman

Konsep Pemrograman 60

/* Contoh Penggunaan operator unary * dan & */

#include <stdio.h>main() {

int a, *ip, b;

a=7;ip= &a;printf("Alamat variabel a = %p\n"

"Nilai (isi) dari pointer ip = %p\n\n",&a, ip);

printf("Nilai variabel a = %d\n""Nilai (isi) dari *ip = %d\n\n",a, *ip);

b = *ip;*ip = 4;

printf("Sekarang, nilai b = %d\n""nilai a = %d\ndan nilai *ip = %d\n",b, a, *ip);

return (0);

}

Outputnya :

Alamat variabel a = FFF4Nilai (isi) dari pointer ip = FFF4

Nilai variabel a = 7Nilai (isi) dari *ip = 7

Sekarang, nilai b = 7nilai a = 4dan nilai *ip = 4

Page 56: Modul Konsep Pemrograman

Konsep Pemrograman 61

PENJELASAN PROGRAM

int a, *ip, b;menyatakan bahwa a adalah suatu variabel int, ip adalahsuatu pointer ke int, dan b adalah suatu variabel int.Memori secukupnya dialokasikan untuk ketiga variabeltersebut.

ip = &a;Alamat dari variabel a diisikan ke pointer ip. Dikatakanip menunjuk ke a;

b = *ip;Variabel b diberi nilai dari variabel yang ditunjuk olehip. jadi b diberi nilai dari a, yaitu 7.

*ip = 4;Variabel yang ditunjuk oleh pointer ip diberi nilai 4.Jadi a diberi nilai 4.

Page 57: Modul Konsep Pemrograman

Konsep Pemrograman 62

Apakah output dari program di bawah ini ?

#include <stdio.h>

main(){

char *p, *q, cha1, cha2;

cha1 = 'a';cha2 = 'b''

p = &cha1;q = &cha2;

printf("%c%c%c%c\n",cha1,cha2,*p,*q);

p = q;

printf("%c%c%c%c\n",cha1,cha2,*p,*q);

q = &cha1;*p = *q;

printf("%c%c%c%c\n",cha1,cha2,*p,*q);

return 0;

}

OUTPUT

abab

abbb

aaaa

Page 58: Modul Konsep Pemrograman

Konsep Pemrograman 63

POINTER SEBAGAI ARGUMEN FUNGSI

Telah kita bahas sebelumnya bahwa semua pemanggilan fungsi dalambahasa C bersifat call-by-value. Variabel yang dipakai sebagai argumenaktual suatu fungsi tidak dapat diubah oleh fungsi pemanggiltersebut,karena berdasar mekanisme call-by-value hanya salinan nilaivariabel itu yang dipakai sebagai nilai awal bagi argumen fungsi tersebut.

Seringkali suatu fungsi perlu mengubah satu atau lebih variabel di luarfungsi tersebut, misalnya fungsi untuk menukarkan nilai dari duavariabel.

Suatu variabel dapat diubah oleh suatu fungsi apabila alamat darivariabel itu disalurkan sebagai argumen aktual kepada fungsi tersebut.

Suatu fungsi dapat menerima alamat dari variabel sebagai argumenaktualnya, apabila argumen formalnya merupakan pointer.

Call-by-reference merupakan suatu cara untuk menyalurkan alamat(address/reference) dari suatu variabel kepada suatu fungsi sehinggamemungkinkan fungsi tersebut mengubah nilai dari variabel itu.

Jadi efek call-by-reference dapat diperoleh dalam bahasa C denganmempergunakan pointer dan operator address-of &, walaupun bahasa Chanya mengenal call by-value.

Dua contoh program berikut ini memperlihatkan penggunaan pointersebagai argumen fungsi

/*----------------------------------------------------

Page 59: Modul Konsep Pemrograman

Konsep Pemrograman 64

* Program ini memperlihatkan versi fungsi tukar* yang BELUM BENAR* written : [email protected]*----------------------------------------------------*/

#include <stdio.h>

void tukar(int p, int r);

main(){

int a = 10, b =20;

prinft("a = %d b = %d\n", a, b);

tukar(a,b);

prinft("a = %d b = %d\n", a, b);

return 0;

}

/* Fungsi tukar yang ingin mempertukarkan nilai dari duavariabel TETAPI GAGAL

*/

void tukar(int p, int r){

int sementara;

sementara = p;p = r;r = sementara;

}

OUTPUT

/*----------------------------------------------------

a = 10 b = 20a = 10 b = 20

Page 60: Modul Konsep Pemrograman

Konsep Pemrograman 65

* Program ini memperlihatkan versi fungsi tukar* yang BENAR* written : [email protected]*----------------------------------------------------*/

#include <stdio.h>

void tukar(int *p, int *r);

main(){

int a = 10, b =20;

prinft("a = %d b = %d\n", a, b);

tukar(&a,&b);

prinft("a = %d b = %d\n", a, b);

return 0;

}

/* Fungsi tukar yang ingin mempertukarkan nilai dari duavariabel.

*/

void tukar(int *p, int *r){

int sementara;

sementara = *p;*p = *r;*r = sementara;

}

OUTPUT

CATATAN PENTING :

a = 10 b = 20a = 20 b = 10

Page 61: Modul Konsep Pemrograman

Konsep Pemrograman 66

Call-by-reference dapat dicapai secara tidak langsung dalam bahasa Cdengan jalan :1. Deklarasi parameter fungsi sebagai suatu pointer2. Dereference pointer itu dengan operator * dalam body fungsi3. Berikan alamat variabel sebagai argumen aktual pada waktu fungsi itu

dipanggil.

ARITMETIKA PADA POINTER

Operasi – operasi tambah dan kurang dapat dilakukan padapointer, tetapi maknanya sangat berbeda dengan tambah dankurang pada variable biasa.

Jika p adalah suatu pointer ke objek dengan tipe tertentu, makaekspresi p+1 memberikan alamat untuk objek berikutnya.

Secara umum, p+i memberikan alamat dari objek ke i setelahobjek yang sekarang ditunjuk oleh p. (i adalah suatu integer).

Contoh :Misalkan p adalah pointer ke variable ber tipe int dansatu int membutuhkan memori 4 byte. Jika p berisi alamat3000, maka :P+1 memberikan alamat 3004P+2 memberikan alamat 3008...p+i memberikan alamat 3000 + i*4

Jika p dan q masing-masing menunjuk ke unsur-unsursuatu array dan p > q, maka p-q menghasilkan suatuinteger yang menyatakan banyaknya unsur array antara pdan q.

/* Contoh operasi tambah dan kurang pada pointer */#include <stdio.h>

main() {double a[10], *p, *q, *r;

p = &a[0];q = p + 1;r = p + 2;

printf(“p: %p, q: %p, r: %p\n”, p, q, r);printf(“q-p: %d\n”, q-p);printf(“r-p: %d\n”, r-p);

Page 62: Modul Konsep Pemrograman

Konsep Pemrograman 67

printf(“++p: %p\n”, ++p);

return 0;}

Output di mesin PC 486 (Borland C++) :

Inga..inga.., tipe double memerlukan 8 byte.

POINTER DAN ARRAY

Dalam bahasa C, pointer dan array sangat erathubungannya.

Nama dari suatu array merupakan suatu pointer konstanyang menunjuk ke unsur pertama dari array itu.

Pointer dapat digunakan untuk menggantikan arraysubscripting. Dengan menggunakan pointer, komputasibiasanya berlangsung lebih cepat.

Contoh :Andaikan diberikan deklarasi sbb :

int b[5];int *p;

Maka statemen

p = bEkivalen denganp = &b[0];

p: FFA4, q:FFAC, r:FFB4q-p: 1r-p: 2++p: FFAC

Page 63: Modul Konsep Pemrograman

Konsep Pemrograman 68

Dengan statemen ini, keempat ekspresi berikut ini ekivalensatu sama lain.

b[3];*(b+3);p[3];*(p+3);

/* Hubungan antara array dan pointer */

# include <stdio.h>main() {

int i, offset, b[] = {1,2,3,4};int *pi = b; /* pi menunjuk ke unsure b[0]) */

printf(“Array b dicetak dengan:\n”“Notasi nama-array/subscript\n”);

for(i=0; i<=3; i++)printf(“b[%d] = %d\n”, i, b[i]);

printf(“\nNotasi nama-array/offset\n”);for (offset=0; offset <= 3; offset++)

printf(“*(b+%d) = %d\n”, offset, *(b+offset));

printf(“\nNotasi pointer/subscript\n”);for (i=0; i<=3; i++)

printf(“pi[%d] = %d\n”, i, pi[i]);

printf(“\nNotasi pointer/offset\n”);for(offset=0; offset <= 3; offset++)

printf(“*(pi+%d) = %d\n”, offset, *(pi+offset));

return 0;}

Page 64: Modul Konsep Pemrograman

Konsep Pemrograman 69

Output :

Array b dicetak dengan:Notasi nama-array/subscriptb[0] = 1b[1] = 2b[2] = 3b[3] = 4

Notasi nama-array/offset*(b+0) = 1*(b+1) = 2*(b+2) = 3*(b+3) = 4

Notasi pointer/subscriptpi[0] = 1pi[1] = 2pi[2] = 3pi[3] = 4

Notasi pointer/offset*(pi+0) = 1*(pi+1) = 2*(pi+2) = 3*(pi+3) = 4

Page 65: Modul Konsep Pemrograman

Konsep Pemrograman 70

/* Menyalin string dengan notasi array dan notasi pointer* ------------------------------------------------------*/

#include <stdio.h>void salin1(char *s2, const char *s1);void salin2(char *s2, const char *s1);

main() {

char string1[10], *string2 = “Hello”,string3[10], string4[]= “Apa kabar?”;

salin1(string1, string2);printf(“string1 = %s\n”, string1);

salin2(string3, string4);printf(“string3 = %s\n”, string3);

return 0;}

/* salin string s1 ke s2, pakai notasi array */void salin1(char *s2, const char *s1){

int i;for (i=0; s2[i] = s1[i]; i++)

; /* tidak melakukan apa-apa di sini */}

bg/* salin string s1 ke s2, pakai notasi pointer */void salin2(char *s2, const char *s1){

int i;for (; *s2 = *s1; s2++, s1++)

; /* tidak melakukan apa-apa di sini */}

Output :

string1 = Hellostring3 = Apa kabar?

Page 66: Modul Konsep Pemrograman

Konsep Pemrograman 71

Modul 8SORTING

Sorting merupakan salah satu kegiatan komputasi yang sangat penting.Aplikasinya banyak sekali, antara lain : pengurutan nilai ujian,pengurutan kata dalam kamus, bagian dari algoritma yang lebih rumit.

Input untuk algoritma sorting adalah suatu barisan unsur – unsur yangdapat diurutkan. Outputnya adalah barisan unsur – unsur terurutberdasarkan kriteria tertentu.

Beberapa algoritma sorting antara lain :1. bubble-sort2. selection-sort3. insertion sort4. merge-sort5. quick-sort

BUBBLE-SORT Sederhana, tetapi tidak efisien. Tidak baik untuk sorting data yang

banyak.

Intinya : Periksa barisan unsur dari ujung ke ujung, sepasangdemi sepasang, pertukarkan dua unsur yang belum terurut.Ulangi sampai semua unsur berada di tempat yang benar.

Dalam satu kali jalan (satu pass), minimal satu unsur di taruh ditempatnya yang benar. Jika ada N unsur maka diperlukanminimal N-1 pass. Dalam pass yang pertama, diperlukanmaksimal N-1 pertukaran. Dalam pass yang kedua, diperlukanmaksimal N-2 pertukaran. Dan seterusnya.

Unsur yang lebih kecil akan “bubble up” ke satu ujung sambilbertukaran tempat dengan unsur-unsur yang lebih besar.

Lihat algoritma dalam program sebagai berikut :

Page 67: Modul Konsep Pemrograman

Konsep Pemrograman 72

/* Program ini mengurutkan nilai-nilai dalam */* suatu array menjadi terurut naik, dengan */* algoritma sorting “bubble sort” */

#include <stdio.h>void bubbleSort(int arrayInt[], const int ukuran);

main() {int i, ukuran, ar[] = {7,3,66,3,-5,22,-77,2};

ukuran = sizeof(ar)/sizeof(int);

printf(“Data sebelum di-sort:\n”);for (i=0; i<=ukuran-1;i++) printf(“%4d”,ar[i]);printf(“\n”);

bubbleSort(ar,ukuran);

printf(“Data sesudah di-sort dalam urutan naik:\n”);for (i=0; i<=ukuran-1;i++) printf(“%4d”,ar[i]);printf(“\n”);

return 0;}

void bubbleSort(int arrayInt[], const int ukuran){

int i,j;void tukar(int *p1, int *p2);

for (i=0; i<=ukuran-2; ++i)for(j=ukuran-1; j > i; --j)

if (arrayInt[j-1] > arrayInt[j])tukar(&arrayInt[j-1], &arrayInt[j]);

}

void tukar(int *p1, int *p2){

int sementara;sementara = *p1;*p1 = *p2;*p2 = sementara;

}

Page 68: Modul Konsep Pemrograman

Konsep Pemrograman 73

Output :

Contoh bubble-sort :

Dataawal

Passke 1

Passke 2

Passke 3

Passke 4

Passke 5

Passke 6

Passke 7

ar[0] 7 -77 -77 -77 -77 -77 -77 -77ar[1] 3 7 -5 -5 -5 -5 -5 -5ar[2] 66 3 7 2 2 2 2 2ar[3] 3 66 3 7 3 3 3 3ar[4] -5 3 66 3 7 3 3 3ar[5] 22 -5 3 66 3 7 7 7ar[6] -77 22 2 3 66 22 22 22ar[7] 2 2 22 22 22 66 66 66

Untuk data di atas, 5 pass sudah cukup.

Algoritma sorting yang lain akan dijelaskan pada bab-bab yang akandatang.

Data sebelum di-sort:7 3 66 3 -5 22 -77 2

Data sesudah di-sort dalam urutan naik:-77 -5 2 3 3 7 22 66