Oleh:
Djuniadi
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
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.
Start
Problem sorving
Phase Implementation phase
Problem
definition
Algorithm Coding
design algorithm as a
program
Dekstop Testing
testing
Working
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.
• CPU :
- Otak dari komputer.
- Yang melaksanakan instruksi-instruksi dalam suatu program
- Dapat melaksanakan perhitungan (aritmetik): tambah, kurang, kali, bagi,
compare.
4
CPU
Memory
0
1
Input device 2 Output device
3
4
5
6
7
8
9
10
11
12
• 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 ANSI C
• 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
7
Program penjumlahan bilangan
1. /* contoh program C */
2. # include <stdio.h>
3. main ( ) {
4. int bil1, bil2, jum;
5. printf (“ ketik bilangan pertama : “);
6. scanf (“ %d “, & bil1);
7. printf (“ ketik bilangan kedua : “);
8. scanf (“ %d “, & bil2);
9. jum = bil1 + bil2;
10. printf (“Jumlah kedua bilangan tersebut = %d \n “ , jum);
11. 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
9
Contoh identifier :
Bilangan2
-ABC-
A3b
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.
% escape character
d 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 Sesudah
assignment assignment
bil1 bil1 15
15
bil2 -6 bil2 -6
jum 0 jum 9
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
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.
Tabel 1. Aritmatika
Operasi Operator Contoh Ekspresi
penjumlahan + x + y
pengurangan - x – y
perkalian * x * y
Pembagian / x / y
Modulus % x % y
13
• Operator modulus hanya berlaku untuk bilangan bulat.
Ekspresi
x%y
memberika sisa dari pembagian x oleh y.
Contoh :
4%2 memberikan 0 (baca : 4 mod 2)
2%4 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 );
14
Contoh :
int a=1, b=2, c=3;
Ekspresi Ekspresi setara Nilai
a * b / c (a * b) / c 0
-a * b - c ( (-a ) * b) - c -5
1 + a*b %c 1 + ( (a*b) %c) 3
Tabel 2. Asosiativitas
OPERATORS ASSOCIATIVITY
( ) [ ] 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
&& = dan left to right
:: = atau left to right
? : right to left
= + = - = * = / = % = & = ^ = | = << = >> = right to left
, left to right
if-statement
15
• Semantik (makna) dari
If (kondisi) statement
Adalah :
Kondisi dievaluasi; jika nilainya true (benar), maka statement
dilaksanakan.
• Semantik dari
if (kondisi) statement1 else statement2
Adalah :
Kondisi dievaluasi ; jika nilainya true, maka statement1 dilaksanakan ; jika
tidak , maka statement2 dilaksanakan.
Operator
Operator-operator yang biasa dipakai untuk membentuk kondisi adalah operator -
operator kesamaan (= =, ! =) dan operator-operator relasional (<, > , < =, >=).
Operator kesamaan membentuk ekspresi kesamaan.
Operator relasional membentuk ekspresi relasional.
16
Contoh :
int a=10, b=15;
Ekspresi Nilai numerik Nilai lojik
a == b 0 false
a != b 1 true
a > b 0 false
a < b 1 true
a > = 10 1 true
69 < = b 0 false
b 15 true
/*
∗ Contoh pemakaian if -statement , operator kesamaan
∗ Dan operator relasional
*/
#include <stdio.h>
main ( ) {
int bill , bil 2;
printf (“Hai, ketikkan dua bilangan bulat , \n”) ;
printf (“nanti saya beri tahu hubungan \n”) ;
printf (“antara keduanya : “) ;
scanf (“%d %d” , &bil1 , &bil2) ;
if (bil1 = = bil2)
printf (“%d sama dengan %d\n”, bil1, bil2) ;
if (bil1 ! = bil2)
printf (“%d tidak sama dengan %d\n”, bil1, bil2) ;
if (bil1 < bil2)
printf (“%d lebih kecil dari %d\n”, bil1, bil2) ;
if (bil1 > bil2)
printf (“%d lebih besar dari %d\n”, bil1, bil2) ;
if (bil1 %2 = = 0 )
printf (“%d adalah bilangan genap %d\n”, bil1, bil2) ;
else
printf (“%d adalah bilangan gasal %d\n”, bil1, bil2) ;
printf (“\nSampai jumpa lagi ! \n”) ;
return 0; /* Program berakhir dengan baik */
}
17
Contoh hasil :
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* Contoh penggunaan while-statement tunggal*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include <stdio.h>
main ( ) {
int pangkatDua = 1 ;
while (pangkatDua < = 100 )
pangkatDua = pangkatDua * 2 ;
printf (“Nilai pangkatDua = %d\n”, pangkatDua ) ;
return 0;
}
Output :
18
MODUL 4
STATEMENT
• 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 }.
19
Hasilnya :
20
Conversion – specifier
%. 2f
Menyatakan bahwa suatu bilangan pecahan (floating – point number) akan
ditayangkan dengan ketelitian 2 angka desimal di kanan titik decimal.
Contoh :
Printf (“%.2f” , 3.447 ) ; /* cetak 3.45 */
Printf (“%.1f” , 3.447 ) ; /* cetak 3.4 */
%f identik dengan %. 6f
Assignment operator
Operator - operator Assignment dan Ekspresi = adalah suatu operator biner; oleh
karena itu Variabel = pihak_kanan. Hal ini merupakan suatu ekspresi. Nilai dari
pihak_kanan disimpan ke variabel. Nilai dari pihak_kanan ini juga menjadi nilai
dari ekspresi assignment itu secara keseluruhan .
Contoh :
int a = 1, b = 2;
Ekspresi Nilai Ekspresi
a=a+3 4
b=b-7 -5
Statement merupakan satuan terkecil yang dapat dieksekusi. Statement diakhiri
dengan tanda titik - koma. Statement yang paling sederhana adalah null-statement
(statement kosong):
;
Suatu ekspresi yang diikuti oleh tanda titik-koma merupakan suatu statement.
Contoh: a = 3;
b = b + 2;
Statement berikut ini tidak berguna, karena tidak ada efeknya.
a + 1;
Statement
a = b = c = 1;
Ekivalen dengan
a = ( b = ( c = 1 ) );
21
Karena asosiativitas operator = adalah right–to-left jadi, c diberi nilai 1 dan
ekspresi c = 1 mempunyai nilai 1. Kemudian b diberi nilai 1 itu dan ekspresi b =
(c = 1) mempunyai nilai 1 . akhirnya a diberi nilai 1 itu dan ekspresi a = (b = (c =
1) ) mempunyai nilai 1.
Statement
total = total + nilai;
Dapat disingkat menjadi
total += nilai;
+ = adalah juga suatu assignment – operator.
Increment operator
Operator increment (tambah 1) ++ dan Operator decrement (kurang 1) - -
merupakan operator unary , dapat diterapkan pada variabel.
Keduanya dapat berada pada posisi prefix ataupun postfix, dengan semantic yang
berbeda.
Ekspresi Efek Nilai Ekspresi
++i Nilai bertambah 1 Nilai i baru
i++ Nilai bertambah 1 Nilai i baru
--i Nilai bertambah 1 Nilai i baru
i-- Nilai bertambah 1 Nilai i baru
22
Contoh:
int a, b, c = 0;
a = ++c;
b = c++;
Printf ( “%d %d\n “ , a,b,++c ) ; /* cetak : 1 1 3 */
23
MODUL 5
PENGULANGAN
Struktur pengulangan
• Pengulangan (repetition/looping) dapat dikontrol dengan :
counter, atau
sentinel (nilai pembatas)
Jika jumlah iterasi diketahui sebelumnya, gunakan counter.
Counter merupakan suatu variabel untuk menghitung jumlah iterasi.
Sentinel dipakai untuk mengontrol looping apabila :
1) Jumlah iterasi tidak diketahui sebelumnya
2) Loop itu mengandung statement untuk mengambil data dalam tiap
iterasi
Sentinel (nilai pembatas) menyatakan akhir data. Sentinel harus muncul
setelah semua data regular telah muncul. Sentinel harus berbeda dengan data
regular.
• Statement while dapat dikontrol dengan counter maupun sentinel.
24
/* Contoh penggunaan for-loop */
#include <stdio.h>
main ( ) {
int i ;
/ * Mengubah counter i dari 1 s / d 10,
* dengan kenaikan 1
*/
for ( i = 1 ; i < = 10 ; i++ )
printf (“%d “, i) ;
printf (“\n”) ;
/ * Mengubah counter idari 10 s / d 1,
* dengan kenaikan -1 (penurunan 1 )
*/
for ( i = 10 ; i > = 1 ; i-- )
printf (“%d “, i) ;
printf (“\n”) ;
/ * Mengubah counter i dari 2 s / d 20,
* dengan kenaikan 3
*/
for ( i = 2 ; i < = 20 ; i+ = 3 )
printf (“%d “, i) ;
printf (“\n”) ;
return 0 ;
}
Output :
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
2 5 8 11 14 17 20
25
/*
* Program ini melakukan penjumlahan :
* 1 + 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 + . . . + %d = %1d\n”, N, jumlah);
return 0 ;
}
Output :
Mau menjumlahkan 1 s / d berapa ? 99
1 + 2 + . . . + 99 = 4950
• variabel bertipe long int (dapat disingkat long) dapat menampung bilangan
bulat, biasanya dari -2147483648
(LONG_MIN) sampai dengan + 2147483647 (LONG_MAX)
Konstanta LONG_MAX dan LONG_MIN didefinisikan dalam header-file
<limits.h>
• Conversion-specifier %1d dipakai untuk menampilkan nilai bertipe long int.
• ekspresi1, ekspresi2 dan ekspresi3 dalam suatu statement for adalah
opsional (dapat dihilangkan). Jika ekspresi2 tidak ada, maka kondisi itu
dianggap selalu true.
Jadi
for (;;) {
...
}
26
merupakan suatu infinite-loop. (Dapat dipecah dengan menggunakan return
atau break.)
do - while
• Ada satu lagi statement untuk melakukan looping, yaitu statement do/while,
yang bentuknya :
do {
statement
} while (kondisi) ;
Berbeda dengan statement while, statement do-while melakukan evaluasi
terhadap kondisi sesudah pelaksanaan statement. Jadi dalam suatu loop do-
while, statement dilaksanakan minimal satu kali.
1 2 3 4 5 6 7 8 9
27
/* Contoh penggunaan break dalam struktur for * /
#include <stdio.h>
main ( ) {
int x ;
for (x = 1; x < = 10; x++) {
if (x = = 5) break;
printf (%d “, x) ;
}
printf (“\nKeluar dari loop ketika x = = %d \ n”, x) ;
return 0 ;
}
Output :
1 2 3 4
Keluar dari loop ketika x = = 5
28
Statement switch
• Untuk memilih dari beberapa alternative, dengan cara menguji apakah suatu
ekspresi mempunyai nilai yang cocok dengan satu dari beberapa konstanta
bernilai bulat.
switch (ekspresi) {
case ekspresi-konstanta : statements
.
.
.
case ekspresi-konstanta : statements
default : statement
}
Tiap alternatif diberi label suatu konstanta atau ekspresi konstanta bernilai bulat.
Jika ekspresi cocok dengan salah satu label ekspresi-konstanta, eksekusi dimulai
dari statement yang mengikuti label itu sampai dengan statement break atau
statement terakhir sebelum tanda }.
Tiap ekspresi-konstanta harus unik.
Alternatif yang dilabel default akan dilaksanakan jika tidak ada alternatif
lain yang cocok. Alternatif default boleh dihilangkan. Jika tidak ada
alternatif default dan tidak ada case yang cocok, maka tidak ada aksi sama
sekali.
29
/*
* Program ini menghitung banyaknya nilai-huruf
*/
#include <stdio.h>
main ( ) {
int nilai;
int hitungA = 0, hitungB = 0, hitungC = 0,
hitungD = 0, hitungE = 0;
printf (“Masukkan nilai dalam huruf\n”) ;
printf (“ (EOF untuk berhenti) : \n”) ;
while ( (nilai = getchar ( ) ) ! = EOF) {
switch (nilai) {
case ‘A’ : case ‘a’ : hitungA++ ;
break;
case ‘B’ : case ‘b’ : hitungB++ ;
break;
case ‘C’ : case ‘c’ : hitungC++ ;
break;
case ‘D’ : case ‘d’ : hitungD++ ;
break;
case ‘E’ : case ‘e’ : hitungE++ ;
break;
case ‘\n’ : case ‘ ’ : /* Abaikan ‘\n’ dan ‘ ‘*/
break;
default : /* menangkap karakter lainnya */
printf (“Input salah. Tolong ulangi. \n”) ;
break ;
}
}
printf (“\nBanyaknya nilai \n”) ;
printf ( “A : %d\n”, hitungA) ;
printf ( “B : %d\n”, hitungB) ;
printf ( “C : %d\n”, hitungC) ;
printf ( “D : %d\n”, hitungD) ;
return 0 ;
}
30
Variabel bertipe char memerlukan memori 1 byte. Tipe char terdiri dari
integer-integer kecil. Jadi suatu karakter dapat diperlakukan sebagai suatu int
atau suatu char.
Konstanta karakter adalah suatu integer yang ditulis dalam bentuk satu karakter
dalam tanda kutip tunggal, misalnya : ‘a’.
Contoh :
printf (“Karakter (%c) mempunyai nilai %d.\n” ,
‘a’ , ‘a’ ) ;
Di layar akan dicetak
karakter (a) mempunyai nilai 97 .
OUT PUT :
Conversion-specifier %c dipakai untuk mencetak karakter dan %d untuk
mencetak nilai desimalnya.
31
• Bilangan 97 itu adalah representasi numerik desimal dari karakter a dalam
komputer.
Kebanyakan komputer menggunakan character-set ASNII (American Standard
Code for Information Interchange), dimana 97 mengkodekan huruf kecil a.
• Karakter dapat dibaca dengan fungsi scanf dengan memakai conversion-
specifier %c.
• EOF adalah konstanta simbolik (biasanya bernilai -1) yang menyatakan end –
of - file. Didefinisikan dalam berkas stdio.h
Variabel nilai dalam program itu diberi tipe int agar aman, karena harus
menampung nilai dari EOF.
• Untuk sistem UNIX , EOF dibuat dengan mengetikkan
<return> <ctrl-d>
(artinya menekan tombol return , kemudian sekaligus menekan tombol ctrl dan
tombol d)
Untuk DOS, gunakan <ctrl-z>.
Left \ Right ASCII
digits American Standart Code for Information Interchange
0 1 2 3 4 5 6 7 8 9
0 nul soh stx etx eot enq ack bel bs ht
1 nl vt np er so si dle del dc2 dc3
2 dc4 nak syn etb can em sub esc fs gs
3 rs us sp ! “ # $ % & ‘
4 ( ) * + , - . / 0 1
5 2 3 4 5 6 7 8 9 : ;
6 < = > ? @ A B C d E
7 F G H I J K L M n O
8 P Q R S T U V W x Y
9 Z [ \ ] ^ _ ‘ a b c
10 d e f g h i j k l m
11 n o p q r s t u v w
12 x y z { | } ~ dal
32
Control characters :
NUL Null DLE Data link escape
SOH Start of heading DC1 Device control 1
STX Start of text DC2 Device control 2
ETX End of text DC3 Device control 3
EOT End of DC4 Device control 4
transmission
ENQ Enquiry NAK Negative acknowledge
ACK Acknowledge SYN Synchronous idle
BEL Bell ETB End of transmission block
BS Backspace CAN Cancel
HT Horizontal tab EM End of medium
NL Newline SUB Substitute
VT Vertical tab ESC Escape
FF Form feed FS File separator
CR Carriage reurn GS Goup separator
SO Shift out RS Record separator
SI Shift in US Unit separator
SP Space DEL Delete
33
MODUL 6
OPERATOR LOGIKA
34
Contoh:
char C = ‘B’;
int i = 7, j = 8;
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 C-
Standard 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
}
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;
}
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.
ANSI C menyediakan tiga tipe untuk bilangan floating-point: float, double, dan
long double.
Jumlah byte yang dibutuhkan untuk meyimpan suatu objek (misalnya variabel,
tipe, dsb.) dalam memori dapat ditentukan dengan menggunakan operator unary
sizeof
Sizeof (char) bernilai 1; ini berarti satu variabel bertipe char memerlukan memori
sebanyak 1 byte.
Jumlah byte untuk tipe-tipe dasar, meskipun bergantung pada mesin
computer/kompilator ybs .. dalam ANSI C mememnuhi hubungan sbb:
Sizeof (char) = 1
Sizeof (short) < sizeof (int) < sizeof (log)
41
Sizeof (signed) = sizeof (unsigned) = sizeof (int)
Sizeof (float) < sizeof (double) < sizeof (long double)
Pada mesin PC, biasanya:
Sizeof (int) bernilai 2
Sizeof (long) bernilai 4
Sizeof (float) bernilai 4
Sizeof (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;
}
Output dari PC
Jumlah byte untuk tipe-tipe dasar.
Char : 1
Short: 2
Int : 2
Long: 4
Unsigned: 2
Float: 4
Double: 8
Long double: 10
42
/*contoh penggunaan fungsi matematik dari standard
*library dengan header (math.h)
*/
#include<stdio.h>
#include<math.h>
main ( ) {
double x;
printf (“ \n%s\n ”,
“kalkulasi akar kuadrat dari x”,
“ - - - - - - “);
printf (“ input x: “);
scanf (“ %1f”, &x);
if (x >= 0.0)
printf(“\n%22s%21.15e\n%22s%21.15e\n”,
“x = “ , x,
“akar kuadrat dari x = “, sqrt (x);
else
printf (“\nMaaf, input harus nonnegative.\n”);
return 0;
}
Outputnya:
Kalkulasi akar kuadrat dari x
-----
Input x: 2
X = 2.000000000e+00
Akar kuadrat dari x = 1.414213562373095e+00
• Kompilasi di UNIX:
C89 –Im namafile.c -0 namafile
43
• Untuk printf:
%s adalah penentu konversi untuk string.
%22s - - > tempat yang disediakan (field width) 22 karakter, rapat ke kanan.
%s - - > tempat yang disediakan secukupnya.
%21.15e - - > cetak sebagai bilangan floating-point dalam notasi eksponen
seperti dalam contoh; field-width 21 karakter dengan 15 karakter di
belakang titik decimal.
• Untuk scanf:
%1f adalah penentu konversi untuk tipe double.
• Ketelitian (precision) untuk tipe float biasanya adalah 6 digit, sedangkan
untuk tipe double biasanya adlah 15 digit.
44
MODUL 8
ARRAY
LARIK (ARRAY)
• Array merupakan suatu struktur data yang terdiri dari beberapa data bertipe
sama.
• Suatu array menempati sekelompok lokasi memori yang berturutan. Tiap lokasi
memori ini berlaku sebagai suatu variabel dengan tipe yang sama.
• Unsur dari suatu array dapat diakses secara langsung dengan menggunakan
nama array dan indeks (subskrip) ybs.
• Nama array mengikuti aturan seperti nama variabel.
• Contoh:
Int A [5] ; /* mendeklarasikan array bernama A, yang terdiri dari 5 unsur,
masing-masing bertipe int. */
Array A
/*contoh array */
#include (stdio.h)
main ( )
{
int a [ 10 ], i;
45
Output :
Unsure ke Nilai
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
Output;
Jumlahnya = 129
46
Inisialisasi Array
• Array dapat diinisialisasi secara ekplisit pada waktu deklarasi. Nilai-nilai awal
diapit oleh kurung kurawal { }. Apabila banyaknya nilai awal kurang dari
ukuran array, maka unsur-unsur array yang tersisa diberi nilai awal nol.
Contoh :
int a[50] = {0} ; /* semua unsur dari array a diberi nilai 0 */
int a[10] = {-1,3} ; /* semua unsur dari array b diberi nilai 0 kecuali b [0]
diberi nilai awal -1 dan b[ 1] diberi nilai awal 3 */
• Jika suatu array dideklarasikan tanpa ukuran dan diinisialisasi secara eksplisit
dengan sebarisan nilai, maka kompilator akan menentukan ukuran array tsb.
Sama dengan banyaknya nilai awal.
Contoh :
Int a [ ] = { 2,3,-7,5} ;
Ekivalen dengan
Int a [4 ] = { 2,3,-7,5} ;
Array of char
char s [ ] = “abc” ;
ekivalen dengan
char s [ ] = {‘a’ , ‘b’ , ‘c’ , ‘\0’} ;
ekivalen dengan
char s [4 ] = {‘a’ , ‘b’ , ‘c’ , ‘\0’} ;
• String seperti “abc” adalah suatu array yang terdiri dari karakter-
karakter, dengan diakhiri oleh karakter null ‘\0’.
Jadi string “abc” sebenarnya terdiri dari 4 karakter
Berapakah nilai dari sizeof (“abc”) ?
4
• ‘x’ tidak sama dengan “x”. bedanya ?
• scanf dapat dipakai untuk menginput suatu string dari keyboard dengan
penentu konversi %s. String itu disimpan dalam suatu array char.
47
Suatu array char yang merepresentasikan suatu string dapat dioutput
dengan printf melalui penentu konversi %s.
48
/* Contoh penggunaan array sebagai argumen */
#include <stdio.h>
int maksimum (int ar [ ] , int uk) ;
main ( )
{
int ukuran, a[ ] = {9,0,-7,3,14,9,5,-3} ;
ukuran = sizeof (a) / sizeof (int) ;
printf (“Nilai maksimum dalam array berukuran %d”
“ itu \nadalah : %d\n”,
ukuran, maksimum (a,ukuran) ) ;
return 0 ;
}
/* Mengembalikan nilai maksimum dalam array */
int maksimum (int ar [ ] , int ukuran)
{
int i, maks ;
maks = ar[0] ;
for (i = 1; i < = ukuran-1; i++)
if (ar[i] > maks ) maks = ar[i] ;
return maks ;
}
Output :
49
MODUL 9
SCOPE
Scope
Scope (lingkup) dari suatu identifier (nama) adalah bagian dari program di mana
identifier itu dapat dipakai / diakses.
Ada identifier yang dapat dipakai di seluruh program. Ada identifier yang dapat
dipakai hanya dalam bagian tertentu dari program
50
“ Block Nested”
/* Contoh scoping */
#include <stdio.h>
main ( ) {
int a=1, b=2, c=3 ;
printf (“%2d%2d%2d\n” ,a,b,c|) ; /* 1 2 3 */
{
int b=4
float c=5.0;
printf (“%2d%2d%4.1f\n” ,a,b,c|) ; /* 1 4 5 . 0 */
a = b
{
int c ;
c=b:
printf (“%2d%2d%2d\n” ,a,b,c|) ; /* 4 4 4 */
}
printf (“%2d%2d%4.1f\n” ,a,b,c|) ; /* 4 4 5 . 0 */
}
printf (“%2d%2d%2d\n” ,a,b,c|) ; /* 4 2 3 */
return 0 ;
}
“ Block Paralel “
{
int a,b ;
...
{ /* block-dalam 1 */
float b ;
... /* int a diketahui , int b tidak */
}
...
{ /* block-dalam 2 */
float a ;
... /* int b diketahui , int a tidak */
/* Tidak ada dari block-dalam 1
diketaui */
}
...
}
51
DAFTAR PUSTAKA
1. H.M. Deitel & P.J. Deitel. C: How to program. 2nd edition. Prentice Hall
2. Brian W Kernighan and Dennis M Ritche. The C Programming Language,
Prentice Hall, Second edition
3. Paul M Embree and Bruce Kimble, C Language Algorithms for Digital Signal
Processing, Printice Hall
4. Catatan Kuliah Konsep Pemrograman
52