Anda di halaman 1dari 59

BAB IV

MATERI UNIT KOMPETENSI


MEMBUAT ALGORITMA PEMROGRAMAN DASAR

4.1 Tujuan Instruksional Umum


o Siswa

mampu

mengerti

tentang

apa

itu

Algoritma

Pemrograman.
o Siswa mampu mengerti dasar dasar Algoritma Pemrograman.
o Siswa mampu berpikir secara logis dalam menyelesaikan
masalah.
o Siswa mampu menganalisa masalah dan menciptakan solusti
untuk menyelesaikan sebuah masalah

4.2 Tujuan Instruksional Khusus


o Siswa

dapat

mengetahui

seberapa

pentingnya

Algoritma

Pemrograman sebagai dasar untuk mempelajari pemrograman


lanjut.
o Siswa

dapat

mengerti

dasar

dasar

pemikiran

dalam

menyelesaikan masalah dalam pemrograman.


o Siswa dapat mengerti tentang logika dasar pemrograman.
o Siswa dapat mengerti tentang tipe tipe data dasar dalam
pemrograman.
o Siswa

dapat

memahami

tentang

alur

program

meliputi

sekuensial, percabangan dan perulangan.


o Siswa dapat mengerti tentang dasar dasar struktur data.
o Siswa dapat memahami mengenai dasar dasar file beserta
pengelolaannya.

Dasar Dasar Pemrograman


4.1

Apa itu Algoritma Pemrograman ?


Algoritma adalah urutan langkah langkah logis penyelesaian
masalah yang disusun secara sistematis. Berdasarkan defisini
algoritma

diatas

maka

dapat

diartikan

sebuah

Algoritma

Pemrograman adalah suatu urutan yang logis dan sistematis yang


digunakan

untuk

menyelesaikan

sebuah

penyususan

program

komputer.
Dasar dasar dari algoritma pemrograman dibagi menjadi 3 bagian,
yaitu
1 Proses
2 Instruksi
3 Aksi
Pada dasarnya sebuah algoritma adalah deskripsi pelaksanaan suatu
proses yang disusu berdasarkan sederetan langkah instruksi yang
logis. Tiap langkah instruksi tersebut melakukan suatu tindakan (aksi)
yang akan menghasilkan sejumlah operasi yang bersesuaian dengan
aksi tersebut. Hasil yang diperoleh dari pengerjaan suatu aksi
tersebut dapat dibandingkan berdasarkan keadaan sebelum aksi
dimulai dan keadaan pada saat aksi selesai dikerjakan. (Lihat contoh
dibawah)
.
Contoh kasus :
Terdapat 2 Gelas A dan B, gelas A berisi warna merah dan gelas B
berisi warna biru. Bagaimana memindahkan isi dari gelas A ke B dan
gelas B ke A ?

Deskripisi :
Keadaan awal : Gelas A berisi warna merah dan gelas B berisi warna
biru.
Aksi :
-

Pindahkan isi dari gelas A ke dalam gelas C

Pindahkan isi gelas B ke dalam gelas A

Pindahkan isi gelas C ke dalam gelas A.

Keadaan akhir : Gelas A berisi warna biru dan gelas B berisi warna
merah.
Contoh

diatas

memperlihatkan

urutan

yang

logis

dalam

menyelesaikan suatu masalah / memperoleh hasil yang diinginkan.


Struktur Dasar Algortima
1.

Runtunan (Sequence)

2.

Pemilihan (Selection)

3.

Pengulangan (Repetition)

Runtunan
Runtunan (Sequence) terdiri dari satu atau lebih instruksi yang akan
dikerjakan secara berurutan sesuai dengan urutan penulisannya.
Urutan instruksi menentukan keadaan akhir algoritma, bila urutannya
diubah akan memberikan hasil yang berbeda.
Contoh :
Instruksi 1
Instruksi 2
Instruksi 3

Pemilihan
Pemilihan (Selection) adalah suatu kondisi dimana sebuah instruksi
dijalankan apabila kondisi tertentu dipenuhi. Ini akan mengakibatkan
tidak semua instruksi akan dijalankan sesuai urutan dan tidak semua
instruksi akan dijalankan.

Contoh :
Jika nilai a lebih kecil dari 10 maka
Cetak nilai a sebanyak 10 kali ke layar monitor
Pengulangan
Salah

satu

kelebihan

komputer

adalah

kemampuan

untuk

mengerjakan proses yang sama berulang kali tanpa mengenal lelah.


Ini

akan

mengakibatkan

sebuah

instruksi

mungkin

dijalankan

beberapa kali sebelum menjalankan instruksi yang lain.


Contoh :
Tuliskan angka dari 1 sampai 100
Angka = 0
Repeat
Tuliskan angka
Tambahkan nilai angka dengan 1
Until angka = 100
Pada praktenya, ketiga elemen itu dapat dikombinasikan menjadi
sekumpulan instruksi yang membangun sebuah program komputer.
Namun pemahaman tentang dasar dari masing masing elemen
sangatlah penting.

4.2

Tipe data, Variabel dan Konstanta


Dalam

pembahasan mengenai pengertian dan dasar dasar dari

algoritma pemrograman telah dijelaskan mengenai urutan kerja dari


sekumpulan instruksi yang digunakan untuk memecahkan sebuah
permasalahan.
Pada pembahasan ini kita akan mempelajari beberapa hal, antara
lain :

4.2.1 Tipe Data


Pada

dasarnya

sebuah

program

komputer

bekerja

dengan

memanipulasi obyek (data) di dalam memori. Obyek yang akan


diprogram bermacam macam jenis dan tipenya, misalnya nilai
numerik, karakter, string dan rekaman (record). Tipe data terbagi
menjadi beberapa bagian, antara lain :
4.2.1.1 Tipe Data Dasar
A. Tipe Logika / Bilangan Logika
Tipe data ini hanya memiliki 2 nilai saja, benar atau salah
atau 0 atau 1. Nilai 0 ini akan melambangkan salah dan 1
akan

melambangkan

benar.

Tipe

data

ini

biasanya

digunakan untuk operasi operasi logika (logical operation).


Operasi logika ini akan menghasilkan nilai dalam ranah tipe
boolean,

yaitu

betul

atau

salah.

Operasi

yang

dapat

digunakan untuk operasi logika adalah : not, and, or dan xor.


Dibawah ini akan diberikan contoh pemakaiannya :
Jika a dan b adalah peubah (variabel) yang bertipe boolean /
logika maka hasil variabel a dan b dengan operator boolean
tersebut diberikan berdasarkan tabel kebenaran berikut :

A
True
True
False
False

B
True
False
True
False

A and B
True
false
false
False

A or B
true
True
True
False

A xor B
False
True
True
False

B. Tipe Bilangan Bulat


Tipe ini adalah tipe yang sudah kita kenal dengan baik dalam
kehidupan sehari hari. Tipe data ini mempunyai nilai yang
tidak
mengandung pecahan desimal, misalnya : 34, 8, 1200, 10
dan seterusnya. Nama tipe dari bilangan bulat adalah
integer. Secara teori, tipe bilangan bulat memiliki ranah nilai
yang tidak terbatas dimulai dari minus tidak terhingga
sampai plus tidak terhingga. Namum dalam penerapan
algoritma kita dapat mendefinisikan tipe bilangan bulat
dalam suatu rentang nilai tertentu. Penetapan rentang
nilai ini dimaksudkan untuk menyatakan bahwa nilai dari
suatu obyek hanya boleh pada ranah nilai tersebut.
Contoh :
Misalkan sebuah obyek jumlah murid 1 kelas yang berisi 100
orang, hendaknya didefinisikan pada tipe bilangan bulat yang
memiliki rentang nilai dari 1 .. 100. Apabila sebuah obyek
tidak didefinisikan rentang nilainya, maka dianggap obyek
tersebut memiliki rentang nilai dari minus tidak terhingga
sampai plus tidak terhingga.
Pada implementasinya, tipe integer memulai rentang nilai
yang terbatas dan tergantung dari setiap kompiler dimana
kita membuat program aplikasinya. Berikut saya berikan
contoh pada kompiler Turbo Pascal.

Tipe
Byte
Shortlist
Word

Rentang Nilai
0 ... 255
- 128 ... 127
0 ... 65535

Format
Unsigned 8 bit
Signed 8 bit
Unsigned 16

Integer
Longint

- 32768 ... 32767


-2147483648 ... 2147483647

bit
Signed 16 bit
Signed 32 bit

Rentang nilai dari tipe data ini sangat bervariatif dan


bergantung pada jenis program kompilernya. Contoh diatas
tidak berlaku bagi semua jenis kompiler.
Operasi
Operasi yang dapat dilakukan pada tipe data ini ada 2
macam, yaitu : Operasi artimatika dan Operasi perbandingan.
Operasi Aritmatika

Operasi

aritmatika

pada

bilangan

bulat

akan

menghasilkan bilangan bulat juga. Operator aritmatika


yang digunakan antara lain :
+ (penjumlahan)
- (Pengurangan)
* (Perkalian)
Div (Pembagian)
Mod (sisa hasil bagi)
Operasi Perbandingan

Operasi perbandingan terhadap bilangan bulat dengan


menggunakan operator relasional akan menghasilkan
nilai
booelan (true atau false). Operator perbandingan yang
digunakan antara lain :
<

(lebih kecil)

<

(lebih kecil atau sama dengan)

>

(lebih besar atau sama dengan)

==

(sama dengan)

(tidak sama dengan)

Contoh operasi perbandingan :


3<8

(true)

99

(true)

( 24 div 3) 8 (false)
C. Tipe Bilangan Riil
Tipe bilangan riil adalah bilangan yang mengandung nilai
pecahan / desimal misalnya 3.65, 0.0003, 29.0 dan lain lain.
Karakter yang identik dengan bilangan desimal adalah harus
selalu mengandung .
(titik). Jadi apabila terdapat nilai 20 maka akan dianggap
sebagai bilangan bulat, sedangkan nilai 20.0 akan dianggap
sebagai bilangan riil. Selain itu bilangan riil juga dapat
dituliskan dengan notasi eksponential (E) yang artinya
perpangkatan sepuluh. Nama tipe dari bilangan riil ini lebih
sering dikenal dengan nama real.
Secara teoritis, tipe data ini memiliki ranah nilai yang tidak
terbatas dimulai dari minus tak terhingga hingga plus tak
terhingga. Namun
pada implementasinya, tipe bilangan riil juga memiliki batas
nilai yang tergantung pada masing masing kompiler. Berikut
akan diberikan contoh pada kompiler Turbo Pascal.
Tipe
Real

Rentang Nilai
2.9 X 10

Format
6 byte

Single
Double
Extended

4 byte
8 byte
10 byte
Operasi
Operasi yang dapat dilakukan pada tipe data ini ada 2
macam, yaitu : Operasi artimatika dan Operasi perbandingan.
Operasi Aritmatika

Operasi

aritmatika

pada

bilangan

riil

akan

menghasilkan bilangan riil juga. Operator aritmatika


yang digunakan antara lain :
+ (penjumlahan)
- (Pengurangan)
* (Perkalian)
Div (Pembagian)
Mod (sisa hasil bagi)
Operasi Perbandingan

Operasi perbandingan terhadap bilangan riil dengan


menggunakan operator relasional akan menghasilkan
nilai booelan (true atau false). Operator perbandingan
yang digunakan antara lain :
<

(lebih kecil)

<

(lebih kecil atau sama dengan)

>

(lebih besar atau sama dengan)

==

(sama dengan)

(tidak sama dengan)

Contoh operasi perbandingan :


0.003 < 0. 3

(true)

8.0 5

(false)

3.0 3.5

(true)

D. Tipe Karakter
Tipe data yang termasuk karakter ini adalah huruf huruf
alfabet, tanda baca, angka 0, 1, 2, .... dan karakter
karakter khusus seperti <, ?, dan sebagainya. Tipe data ini
biasa dikenal sebagi char.
Rentang nilai dari tipe data ini adalah karakter karakter
yang telah disebutkan diatas, untuk lebih detilnya dapat
melihat pada buku buku yang memuat daftar tabel ASCII.
Karakteristik yang identik dengan tipe data ini adalah setiap
karakter harus diapit dengan tanda petik tunggal.
Contoh :
a, 1, , +, ?, &.
Satu hal yang perlu diperhatikan adalah : bilangan 1 adalah
integer dan 1 adalah karakter.
Operasi
Satu satunya operasi yang digunakan untuk tipe data ini
adalah operasi perbandingan.
-

Operasi perbandingan
Operasi perbandingan terhadap tipe data karakter
dengan

menggunakan

operator

relasional

akan

menghasilkan nilai boolean (true atau false). Operator


perbandingan yang digunakan antara lain :
<

(lebih kecil)

<

(lebih kecil atau sama dengan)

>

(lebih besar atau sama dengan)

==

(sama dengan)

(tidak sama dengan)

Contoh :
a == a

(true)

m < z

(true)

y Y
Hal

yang

harus

diperhatikan

dalam

operasi

perbandingan pada tipe data karakter adalah operasi


ini membandingkan kode ASCII diantara 2 obyek yang
dibandingkan. Jadi bisa dilihat pada contoh diatas
bahwa y tidak sama dengan Y, ini dikarenakan kode
ASCII dari 2 karakter tersebut memang berbeda.
4.2.1.2 Tipe Data Bentukan
A. String / Kalimat
String

adalah

sebuah

kalimat

atau

merupakan kumpulan dari karakter.

dapat

dikatakan

Tipe data ini dikenal

juga dengan nama string.


Rentang nilai dari string adalah sesuai dengan rentang nilai
dari karakter (lihat pembahasan diatas). String adalah
bentukan dari sederetan karakter yang dikombinasikan
menjadi satu untuk membentuk sebuah arti tertentu.
Contoh :
Bandung, Jakarta, ABCDE, 12345
hal yang perlu diperhatikan adalah string 123 berbeda
dengan 123.
Operasi
Operasi yang dapat dilakukan pada tipe data string ada 2
macam, yaitu :
-

Operasi Penyambungan (Concatenation)

Operasi

penyambungan

ini

berfungsi

untuk

menggabungkan 2 string atau lebih. Operator yang


digunakan adalah + dan & (Tergantung dari jenis
kompilernya)
Contoh Concatenation :
TEKNIK + INFORMATIKA = TEKNIK INFORMATIKA
1 + 2 = 12
Hal yang perlu diperhatkan adalah operator + ini
bukanlah operator penjumlahan / operator artimatika.
Operasi Perbandingan

Operasi perbandingan terhadap tipe data string dengan


menggunakan operator relasional akan menghasilkan
nilai booelan (true atau false). Operator perbandingan
yang digunakan antara lain :
<

(lebih kecil)

<

(lebih kecil atau sama dengan)

>

(lebih besar atau sama dengan)

==

(sama dengan)

(tidak sama dengan)

Contoh :
abcde == abc
aku < AKU
Hal

yang

(false)
(true)

perlu

diperhatikan

dalam

operasi

perbandingan pada tipe data string adalah kompiler


akan membandingkan berdasarkan kode ASCII dari tiap
tiap karakter terhadap kode ASCII dari obyek lainnya.
Prinsip ini sebenarnya sama dengan
prinisp operasi perbandingan pada tipe data karakter
yang telah dijelaskan di atas.

B. Tipe data dasar yang diberi nama tipe baru


Pemrogram dapat memberi sebuah nama baru dati tipe data
dasar yang ada, dengan menambahkan kata kunci type.
Pengubahan

nama

ini

biasanya

digunakan

bagi

para

programmer untuk memudahkan dalam penamaan pada


variabel pada penulisan program.
Contoh :
Type bilBulat : integer
Penulisan diatas berarti bilBulat memiliki tipe yang sama
dengan
integer dan dapat digunakan untuk mendeklarasikan sebuah
obyek integer.
C. Record / Rekaman
Tipe data rekaman atau bisa disebut record. Record ini
merupakan dasar daripada pemrograman basis data. Pada
dasarnya record adalah sekumpulan baris data yang tersusun
dari beberapa field.
Contoh :
Nama
Budi

Alamat
Gelong Baru 72

Telp
713.26.905

NO_Ktp
123/456/789

Pada contoh diatas akan menjelaskan mengenai dasar dari


field dan record sendiri. Field adalah setiap kolom (nama,
alamat, telp dan no ktp). Field ini adalah data tunggal yang
berdiri sendiri dan belum memiliki arti yang sempurna
sebelum disusun menjadi 1 kesatuan. Record adalah 1 baris
data

(Budi,

Gelong

Beru

72,

713.26.905,123/456/789).

Record adalah sekumpulan baris data yang disusun dari field


field.
Pendefinisian Tipe Data Record
Pendefinisian tipe data record sangat tergantung dari bahasa
pemrograman yang digunakan, disini akan diberikan contoh
menggunakan bahasa pemrograman Turbo Pascal.
Contoh :
Record DataMhs adalah record yang menyimpan nilai ujian
mahasiswa beserta kode mata kuliah yang diambil.
Type DataMhs : record
< NIM : string, Nama : string, KdMtk : string, nilai : real
>
Pendefinisian tipe data record menggunakan kata kunci type
kemudian dilanjutkan dengan menuliskan nama Record dan
menuliskan field field yang ingin ditampung dalam 1 record.
Penulisan dan pembacaan dari Record
Sebelum

mempelajar

tentang

bagaimana

menulis

dan

membaca dari record, ada baiknya kita pelajari dahulu


bagaimana mendefinisikan obyek dari sebuah tipe data
record yang telah didefinisikan.
Contoh :
Misalkan anda mempunyai sebuah struktur record yang
bernama DataMhs, dan saat ini hendak memberi nilai dari
masing masing field yang ada di dalam struktur tersebut.
Buatlah obyek yang merujuk ke struktur record.

DataMhs rudy
Mendefinisikan

obyek

rudy

sebagai

obyek

nyata

dari

DataMhs
Memasukkan nilai ke dalam setiap field dalam struktur
record
Rudy.Nama = Rudy Haryanto
Rudy.NIM = 0600671590
Rudy.KdMtk = MTK001
Rudy.Nilai = 98
Menampilkan nilai dari struktur record ke standar
output
Cetak Rudy.NIM + Rudy.Nama + Rudy.KdMtk + Rudy.Nilai
Akan memberikan hasil sama seperti contoh tabel diatas. Hal
yang
harus diperhatikan pada operator + tersebut bukanlah
operator artimatika dan berupa operator penggabungan
string ( lihat pembahasan tipe data string ).
4.2.2 Variabel
Setiap mempelajari sebuah bahasa pemrograman anda pasti
akan dihadapkan dengan yang namanya variabel. Variabel
merupakan sebuah obyek yang digunakan untuk menyimpan
data tertentu berdasarkan tipe data dasar tertentu.
Setiap obyek yang ada di dunia pasti memiliki nama, begitu
pula dalam bahasa pemrograman. Seluruh variabel yang
dideklarasikan harus memiliki nama dan tipe dasarnya. Ini

dimaksudkan

untuk

memudahkan

kompiler

dalam

mengidentifikasi variabel variabel yang digunakan dalam


proses perhitungan.
Variabel memiliki aturan dalam penamaan yang biasanya
berlaku bagi hampir seluruh bahasa pemrograman.
-

Nama harus dimulai dengan huruf alfabet, tidak boleh


dimulai dengan angka , spasi atau karakter khusus
lainnya

Bagi bahasa pemrograman tertentu huruf besar dan


kecil

tidak

berpengaruh,

tapi

bagi

bahasa

pemrograman tertentu akan dibedakan.


-

Tidak boleh mengandung operator aritmatika, tanda


baca dan karakter khusus lainnya.

Tidak boleh dipisahkan menggunakan spasi, apabila


ingin memisahkan harus menggunakan karakter _.

Panjang nama tidak dibatasi, tetapi hendaknya tidak


terlalu

panjang

sehingga

tidak

menimbuikan

kebingungan saat menulis program.


-

Penamaan hendaknya disesuaikan dengan kegunaan


dari variabel tersebut.

Contoh :
Integer nilai_ujian

(variabel

bernama

nilai_ujian

dengan tipe integer)


Integer nilai ujian
String nama-murid

(salah, mengandung spasi)


(salah, mengandung karakter

-)
String nama_murid
_)

(benar, menggunakan karakter

Pemberian nilai pada variabel


Setelah

mempelajari

bagaimana

cara

mendeklarasikan

sebuah variabel, kita akan mempelajari bagaimana cara


memberi nilai kedalam sebuah variabel berdasarkan tipe
data dasarnya.
A. Secara Langsung
Pemberian nilai secara langsung ini berarti memberikan
sebuah nilai ke dalam variabel secara langsung di dalam teks
algortma program. Nilai yang diberikan dapat berupaq
konstanta, tetapan atau nama variabel lain. Tipe yang
diberikan harus sesuai dengan tipe data dari variabel
penerima.

Contoh :
Integer nilai
Nilai = 10

(benar)

Integer nilai_2
Nilai2 = nilai

(benar,

memasukkan

nilai

dari

variabel lain)
Nilai2 = alo

(salah, tipe dasarnya tidak sama)

B. Melalui Piranti Masukan (Standart Input)


Metode untuk memberikan nilai ke dalam sebuah variabel
tidak hanya
dilakukan secara langsung, namun juga dapat dilakukan
melalui sebuah piranti masukan (keyboard, file ataupun
database).
Setiap bahasa pemrograman menggunakan function yang
berbeda beda dalam menangani proses inputan nilai dari

piranti masukan. Contoih dibawah ini menggunakan bahasa


Turbo Pascal.
Contoh :
Integer nilai
Read (nilai)
Function read() ini digunakan untuk menerima inputan dary
keyboard. Jadi ketika anda mengetikkan angka 10 dan
menekan ENTER, maka nilai akan berisikan angka 10.
Apabila anda mengetikkan nilai yang memiliki tipe yang
berbeda dari pada tipe data dari variabel penampungnya,
respon yang akan diberikan oleh kompiler berbeda beda
dan tergantung dari masing masing kompiler. Ada yang
langsung memberikan pesar error namun ada pula yang
tetap

dapat

menjalankan

instruksi

selanjutnya

baru

kemudian menampilkan nilai yang salah ketika hendak


mengakses isi dari variabel tersebut.

4.2.3

Konstanta
Konstanta adalah sebuah variabel yang memiliki nilai yang
tetap
selama program berlangsung dan tidak dapat dirubah
nilainya. Konstanta dibagi menjadi 2 bagian, yaitu :
A. Konstanta yang telah ditetapkan
Konstanta ini biasanya telah ada bersamaan dengan satu
paket dari bahasa pemrograman yang digunakan, dan

nilainya tidak dapat dirubah. Biasanya digunakan untuk


mendukung function
function yang disediakan pada masing masing bahasa
pemrograman.
B. Konstanta yang kita tetapkan sendiri
Konstanta yang kita ciptakan sendiri, nama ataupun isi
dari konstanta ini terserah pada kita.

Kata kunci yang

digunakan biasanya adalah const.


Contoh :
Const PHI = 3.14
Const keyWords = rahasia
Const nMaks = 100
4.3

Alur Logika Program


Algoritma Pemrograman terdiri dari sekumpulan instruksi yang
disusun berdasarkan urutan logis tertentu untuk memecahkan suatu
permasalahan.
Alur logika program dibagi menjadi 3 bagian besar, antara lain :
4.3.1 Proses sekuensial
Proses sekuensial berarti kompiler program akan menjalankan
instruksi yang ada satu persatu hingga ditemukan dari akhir
sebuah instruksi.
Karakteristik dari proses sekuensial adalah :
-

Setiap instruksi dikerjakan satu per satu

Setiap instruksi dijalankan hanya sekali saja, tidak


ada perulangan.

- Setiap instruksi dijalankan tepat sesuai dengan urutan


sebagaimana ditulis di dalam teks algoritma

- Kompiler

akan

berhenti

menjalankan

instruksi

setelah

bertemu dengan instruksi terakhir.


Contoh :
Penulisan contoh ini menggunakan bahasa pseudocode dan bahasa
pemgoraman Turbo C.
Pseudocode
String nama
Integer nilai
Read nama
Read nilai
Nilai = nilai * 1.4
Print Nama anda : + nama + Nilai anda : + nilai
Bahasa C
#include <stdio.h>
void main(){
// deklarasi variabel berdasarkan tipe data dasarnya.
char *nama;
int nilai;
// instruksi secara sekuensial mulai dilaksanakan.
scanf(%s,nama);
scanf(%d,&nilai);
nilai = nilai * 1.4;
printf(Nama anda : %s Nilai anda : %d,nama,&nilai);
// akhir dari instruksi dilaksanakan.
}

Kedua contoh diatas sama sama menggunakan konsep sekuensial


meskipun menggunakan 2 jenis bahasa pemrograman yang
berbeda.
Program

akan

menjalankan

instruksi

pertama

dengan

mendeklarasikan variabel kemudian menjalankan proses input


data, mengalikan isi dari variabel nilai sebanyak 1.4 dan instruksi
terakhir adalah menuliskan hasilnya ke stardar output (biasanya
monitor), setelah itu program akan sslesai karena tidak instruksi
lagi yang dijalankan.
Hal yang perlu diperhatikan adalah : Urutan sebuah instruksi
sangat memgang peranan yang dominan, apabila instruksi diatas
posisinya ditukar antara :
Scanf(%d, &nilai); dan
Nilai = nilai * 1.4;
Maka dapat dipastikan akan memberikan hasil yang sangat
berbeda

dari

yang

kita

inginkan,

karena

kompiler

hanya

menjalankan sesuai dengan peletakan urutan instruksi saja.


4.3.2 Proses percabangan
Percabangan adalah suatu kondisi dimana sebuah instruksi tidak
dijalankan secara sekuensial, tetapi lebih berdasarkan pada
kondisi kondisi tertentu yang ditetapkan oleh pembuat program.
Pada inti pemrograman, percabangan memegang peranan yang
sangat penting dalam penyusunan program.
Contoh :
-

Sebuah

sistem

pengguna.

menginginkan

adanya

otorisasi

kepada

Sehingga pengguna yang namanya terdaftar di

data perusahaan yang bisa menggunakan sistem tersebut.


-

Sebuah program menginginkan pencatatan data hanya dapat


dilakukan pada pukul 09.00 10.00.

Dan lain sebagainya.

Proses percabangan memiliki 3 jenis, antara lain :


4.3.2.1 Percabangan Tunggal
Percabangan tunggal bekerja apabila hanya ada 1 alternatif
instruksi saja yang dijalankan. Logika ini memungkinkan
kompiler untuk
menjalankan sebuah
Notasi algortimik yang dgunakan adalah :
If (kondisi) {
Instruksi yang hendak dijalankan ......
}
Notasi algoritmik yang digunakan ini masing masing berbeda
tergantung dari bahasa pemrograman yang dipakai. Pada
pembahasan
ini

kami

menggunakan

contoh

menggunakan

bahasa

pemrograman Turbo C.
Contoh :
1. Program membaca inputan dari keyboard dan apabila diinput
oleh karakter vokal maka program akan menuliskan Huruf
Hidup

dan

apabila

menjalankan apapun.

#include <stdio.h>
void main(){
char huruf;
scanf(%c,&huruf);

bukan

maka

program

tidak

akan

if (huruf == a || huruf = i || huruf = u || huruf ==e || huruf


== o)
printf (Huruf Hidup);
}
2. Program membaca apakah bilangan yang diinput habis dibagi
2 atau tidak, apabila habis dibagi 2 maka program akan
menuliskan Bilangan genap dan bukan maka program tidak
akan menjalankan apapun.
#include <stdio.h>
void main(){
int angka;
scanf(%d,&angka);
if (angka % 2 == 0)
printf (Bilangan Genap);}
4.3.2.2 Percabangan Ganda
Percabangan ganda apabila terdapat 2 alternatif instruksi yang
dijalankan. Logika ini memungkinkan kompiler menjalankan
salah satu dari 2 alternatif instruksi yang ada, dan salah satu
instruksi pasti dijalankan.
Notasi algoritmik yang digunkanan :
If (kondisi) {
Instruksi pertama
}else{
Instruksi kedua
}

Contoh :
1. Program memeriksa inputan apakah bilangan ganjil atau
genap.

Apabila

diperiksa

bilangan

genap

maka

tulis

Bilangan genap dan kalau bukan maka tulis Bilangan


ganjil.
#include <stdio.h>
void main(){
int angka;
scanf(%d,&angka);
if (angka % 2 == 0)
printf (Bilangan Genap);
else
printf(Bilangan Ganjil);
}
Program memeriksa bilangan yang lebih besar dari 2 inputan
bilangan.
#include <stdio.h>
void main(){
int angka1, angka2;
scanf(%d,&angka1);
scanf(%d,&angka2);
if (angka1 > angka2)
printf (Bilangan pertama lebih besar dari Bilangan kedua);
elseprintf

(Bilangan

kedua

lebih

pertama);
}
4.3.2.3 Percabangan Lebih dari 2

besar

dari

Bilangan

Pada dasarnya hanya terdapat 2 jenis seleksi dalam struktur


algoritma
pemrograman, namun bukan berarti hanya bisa dikembangkan
pada

jenis

tersebut

saja.

Struktur

seleksi

dapat

dikembangkan menjadi bentuk yang tidak terbatas dan dapat


dikombinasikan kedalam bentuk perulangan selama notasi
penulisannya tidak terdapat kesalahan.
Kemampuan logika seseorang dalam merancang program dan
mengamati dari permasalahan yang ada menjadi bagian yang
paling penting dalam melakukan pengembangan dari bentuk
seleksi ini.
Dibawah ini akan diberikan contoh seleksi menggunakan
kondisi lebih dari 2.
Contoh :
Program untuk menentukan grade dari sebuah nilai ujian,
dengan aturan grade A untuk rentang nilai 80 100, grade B
untuk nilai 70 80 dan grade C untuk nilai 50 70 dan grade D
untuk nilai dibawah itu.
#include <stdio.h>
void main(){
int nilai;
scanf(%d,&nilai);
if (nilai >= 80 && nilai <= 100)
print(Grade A);
else if (nilai >= 70 && nilai <= 80)
printf(Grade B);
else if (nilai >= 50 && nilai <= 70)
printf(Grade C);
else
printf(Grade D);

}
4.3.2.4 Struktur Case
Struktur case sebenarnya memiliki fungsi yang sama dengan
struktur if yang telah kita pelajari diatas. Struktur case ini dapat
meringkaskan alur logika yang terjadi apabila diaplikasikan pada
pada alur seleksi yang memiliki lebih dari 2 kondisi. Berikut
adalah notasi algoritmiknya :
switch (kondisi){
case kondisi_1 :
break;
case kondisi2 :
break;
default : }
Struktur logika seleksi menggunakan struktur case ini jauh lebih
ringkas
memiliki

apabila
kondisi

diaplikasikan
lebih

dari

pada
2.

struktur

Kompiler

seleksi

yang

program

akan

menjalankan instruksi dari struktur case dan memeriksa setiap


kondisi yang ada, apabila belum ada kondisi yang bernilai benar
maka kompiler akan terus menjalankan instruksi dibawahnya
sampai ditemukan kondisi yang bernilai benar. Namun apabila
hingga kondisi terakhir diperiksa dan tidak ditemukan kondisi
yang bernilai benar maka kondisi default yang akan dijalankan.
Contoh :
Program untuk menentukan apakah karakter %, spasi, & atau
$ yang ditekan oleh pengguna melalui keyboard.
#include <stdio.h>
void main(){
int tombol;

scanf(%d,&tombol);
swicth(tombol){
case 32:
printf(Anda menekan tombol spasi);
break;
case 36: printf(Anda menekan tombol $);
break;
case 37 : printf(Anda menekan tombol %);
break;
case 38: printf(Anda menekan tombol &);
break;
default : printf(Anda tidak mematahui aturan.);
}}
Perbedaan yang paling jelas antara stukrut if dengan struktur case
adalah :
- Struktur if dapat menerima kondisi yang berupa operasi
logika. Sedangkan stuktur case tidak.
- Struktur case lebih efektif apabila digunakan untuk logika
seleksi lebih dari 2 kondisi.
- Struktur case dan sktuktur if dapat dikombinasikan kedalam
satu bagian, dengan catatan tata cara penulisan notasi tidak
terdapat kesalahan.
- Struktur case tidak dapat melakukan pengecekan terhadap
tipe data string / kalimat.
4.3.3 Proses perulangan
Salah satu bagian yang paling membedakan antara manusia
dengan
instruksi

komputer
dalam

adalah

hitungan

Komputer

ribuan

mampu

bahkan

jutaan

mengerjakan
kali

tanpa

mengenal lelah. Dalam mempelajari algoritma pemrograman,

struktur perulangan menjadi bagian yang sangat penting untuk


dipelajari.
Struktur Perulangan
Struktur perulangan terdiri dari 2 bagian, yaitu :
1. Kondisi perulangan, yaitu ekspresi yang dilakukan sebelum
pengulangan dilakukan pertama kali.
2. Body atau tubuh pengulangan, yaitu satu atau lebih instruksi
yang diulang.
Selain itu biasanya di perulangan juga terdapat 2 hal dibawah ini,
antara lain :
1. Inisialisasi

aksi

yang

dilakukan

sebelum

pengulangan

dilakukan pertama kali.


2. Terminasi : aksi yang dilakukan untuk membuat perulangan
berakhir. Biasanya berupa sebuah kondisi.
Dalam setiap bahasa pemrograman pada umumnya

biasanya

terdapat 3 jenis perulangan, antara lain :


1. Struktur WHILE DO
2. Struktur Do WHILE / REPEAT UNTIL
3. Struktur FOR.
Ketiga

jenis

diatas

hanyalah

sebuah

metode

dan

pada

implementasinya, notasi penulisannya (sintaks) sangat tergantung


dari setiap bahasa pemrograman yang digunakan.
4.3.3.1

Struktur WHILE DO

Ciri khas dari struktur ini adalah :


-

Dilakukan pengencekan di awal pada kondisi sebelum


menjalankan instruksi di tubuh perulangan.

Ada kemungkinan tubuh perulangan tidak dijalankan


sama sekali.

Setiap kali hendak melakukan perulangan berikutnya,


selalu memeriksa kondisi perulangan. Apabila kondisi
perulangan telah

memberikan nilai false / salah. Maka perulangan akan


dihentikan.

Notasi algoritmiknya adalah :


while (KONDISI){
tubuh perulangan yang berisi instruksi untuk dijalankan.
}
Contoh :
Progam membuat tulisan di angka 1 .. 100.
# include <stdio.h>
void main(){
int nilai_awal = 1; // inisialisasi awal. Sangat penting.
While (nilai_awal <= 100){
Printf(/n%d,nilai_awal);
Nilai_awal ++; // memanipulasi variabel awal agar tercapai
kondisi terminasi.
}}
Dalam

struktur

perulangan

ini,

ada

hal

yang

harus

diperhatikan untuk menghindari terjadinya kesalahan logika


pada program.
-

Inisialisasi variabel awal.


Ini dimaksudkan agar ketika kompiler program melakukan
pemeriksaan terhadap kondisi awal, ditemukan kondisi
yang

benar.

Pada

beberapa

bahasa

pemrograman

tertentu, apabila sebuah variabel tidak diinisialisasikan


maka nilainya bisa berupa random ataupun nol. (lihat
contoh dibawah)

Manipulasi variabel awal.


Banyak terjadi kesalahan pada programmer ketika mereka
membuat program perulangan, memanipulasi variabel
kondisi sangat penting untuk menjaga program tetap
sesuai

dengan

yang

diinginkan.

Ketika

kita

lupa

memanipulasi variabel awal, ada kemungkinan program


mengulang terus menerus (looping forever) karena kondisi
yang diinginkan tercapat terus tanpa ada perubahan.
(lihat contoh dbawah)
Contoh 1 :
Program menulis angka dari 1 .. 100.
# include <stdio.h>
void main(){
int nilai_awal ; // tidak dilakukan inisialisasi awal.
While (nilai_awal <= 100){
printf(/n%d,nilai_awal);
Nilai_awal ++; // memanipulasi variabel awal agar tercapai
kondisi terminasi.
}}
Program diatas tidak melakukan inisialisasi awal terhadap variabel
nilai_awal, sehingga ada kemungkinan nilai_awal berisni nilai
random. Misalkan nilai_awal berisi -1200, dan secara logika -1200

memang kurang dari 100. Maka program bukan mencetak 1 100,


melainkan mencetak -1200 100.
Contoh 2 :
Program menulis angka dari 1 .. 100.

# include <stdio.h>
void main(){
int nilai_awal = 1; // inisialisasi awal dilakukan
While (nilai_awal <= 100){
Printf(/n%d,nilai_awal);
}}
Program diatas tidak melakukan manipulasi terhadap nilai_awal ,
sehingga nilainya selalu 1. Program bukannya mencetak 1 100,
melainkan mencetak
angka 1 terus menerus dan tidak pernah berhenti karena kondisi
perulangan selalu benar.
4.3.3.2

Struktur Do WHILE / REPEAT UNTIL

Struktur Do = WHILE / REPEAT UNTIL hampir mirip dengan


struktur WHILE DO. Berikut adalah ciri khas dari struktur
perulangan ini.
-

Tidak dilakukan pengecekan kondisi perulangan di awal


eksekusi program.

Minimal perulangan yang terjadi di tubuh program sebanyak


1 kali
awal).

(Kerena tidak ada pengecekan kondisi perulanga di

Setiap kali hendak melakukan perulangan berikutnya, selalu


memeriksa kondisi perulangan. Apabila kondisi perulangan
telah memberikan nilai false / salah. Maka perulangan akan
dihentikan.

Perbedaan paling mendasar sebenarnya terletak pada pengecekan


kondisi perulangan, struktur ini melakukan pengecekan kondisi
perulangan di akhir tubuh perulangan (bukan di awal seperti
struktur WHILE DO) sehingga mengakibatkan instruksi dijalankan
minimal 1 kali.

Notasi algoritmiknya adalah :


do {

repeat

Tubuh perulangan

atau

}while (KONDISI);

until KONDISI

Pada impelemntasinya notasi penulisan struktur perulangan ini


juga bergantung pada bahasa pemgoraman yang digunakan.
Pembahasan ini menggunakan bahasa pemrograman Turbo C dan
leih ditekankan kepada
konsep konsep perulangannya.
Contoh :
Program menulis angka dari 1 .. 100.
# include <stdio.h>
void main(){
int nilai_awal = 1; // inisialisasi awal dilakukan
do{

Printf(/n%d,nilai_awal);
Nilai_awal += 1;// tambahkan nilai_awal sebanyak 1.
}while(nilai_awal <= 100);
}
Program untuk meminta inputan dari keyboard, apabila pengguna
menekan tombol esc maka program akan berhenti.
#include <stdio.h>
#include <conio.h>

void main(){
char tombol;
do{
tombol = getch(); // peminta penekanan tombol dari keyboard.
// selama tombol yang ditekan tidak memiliki ASCII = 27 (tombol
esc) maka //program akan tetap berjalan.
}while (tombol != 27);
// program berhenti, karena pengguna telah menekan tombol
escape.
}
Kapan menggunakan WHILE DO atau Do WHILE ?
Pemilihan antara kedua struktur ini sangat tergantung pada
permasalahan yang dihadapi. Apabila sebuah program memerlukan
instruksi dijalankan
dahulu dan baru diperiksa kondisinya maka strukltur DO WHILE
harus digunakan namun apabila sebuha program harus memeriksa
kondisi perulangan terlebih dahulu dan baru menjalankan tubuh
perulangan, maka kondisi WHILE DO harus digunakan.

4.3.3.3

Struktur FOR

Struktur perulangan for ini digunakan untuk perulangan yang tidak


perlu

memeriksa

kondisi

apapun

dan

hanya

melaksanakan

perulangan sejumlah kali tertentu.


Struktur perulangan ini paling cocok untuk proses perulangan yang
telah

diketahui

batas

akhirnya,

karena

kompiler

akan

mengeksekusi lebih cepat daripada 2 jenis struktur perulangan


diatas.

Notasi algoritmiknya :
For (variabel awal = nilai awal; kondisi ; faktor penaik){
Tubuh perulangan
}
Contoh :
Program menulis bilangan genap dari 2 100.
#include <stdio.h>
void main(){
int nilai_genap = 2; // inisialisasi awal.
for (nilai_genap =2; nilai_genap <= 100; nilai_genap+=2)
printf(%d,&nilai_genap);}
Program diatas akan melakukan inisialisasi nilai_genap sebanyak 2,
dan setelah itu akan dilakukan pemeriksaan apakan kondisi

terpenuhi / memberikan nilai benar. Apabila kondisi terpenuhi maka


tubuh

perulangna

nilai_genap)

akan

dijalankan

mencetak

nilai

dari

dan kemudian menaikkan nilai_genap sebanyak 2.

Setlah itu akan dilakukan pemeriksaan kondisi sekali lagi, dan


apabila kondisi tersebut terpenuhi maka tubuh perulangan akan
dijalankan

lagi

sedangkan

apabila

kondisi

perulangan

tidak

terpenuhi maka struktur perulangan akan berakhir.


Inti dari struktur perulangan ini adalah :
-

Lebih cocok untuk jenis perulangan yang memiliki batas


akhir yang sudah jelas.

Pemeriksaan kondisi awal akan dilakukan di awal. Apabila


kondisi terpenuhi, maka tubuh perulangan akan dilakukan.
Apabila tidak, maka tubuh perulangan tidak akan pernah
dilakukan.

Ada kemungkinan tubuh perulangan tidak dijalankan sama


sekali.

Memiliki proses yang lebih cepat dibandingkan bentuk DO


WHILE atau WHLE DO dalam proses perhitungan
matematika.

4.4

Menerapkan Pengelolaan Array


4.4.1 Pengenalan Array.
Sebuah variabel hanya mampu menyimpan sebuah nilai berdasarkan
tipe data tertentu, variabel tidak mampu menyimpan beberapa buah
data dengan tipe yang sejenis. Seringkali dalam pemrograman kita
harus mengolah sekumpulan data dengan tipe data yang sama.
Misalnya nilau ujian 50 orang, no telp dari seluruh karyawan, dan
sebagainya. Apabila kita mengacu pada penggunaan variabel, maka
dapat dibayangkan berapa banyak nama variabel yang akan

diperlukan dan betapa sukarnya untuk mengorganisasi variabel


sebanyak itu.
Array mampu memberikan solusi atas permasalah tersebut, karena
dengan penggunaan array tidak diperlukan lagi perulangan variabel
yang memilikit tipe data dasar sama dengan nama berbeda.
Array adalah struktur data yang mampu menyimpan sekumpulan
data dengan tipe yang sama, setiap elemen data dipisahkan
menggunakan indeks. Pada bahasa pemrograman pada umumnya,
indeks dari sebuah array selalu diawali dari 0 hingga n -1 (n =
jumlah elemen maksimum).
Contoh :
Terdapat struktur data array bertipe integer, dengan 5 buah elemen
didalamnya.
Indeks = 0

Indeks = 1

Indeks = 2

Indeks = 3

Indeks = 4

Nilai = 10

Nilai = 20

Nilai = 30

Nilai = 40

Nilai = 50

Pada tabel diatas terdapat 2 buah penamaan, indeks dan nilai.


Indeks adalah sebuah nilai yang menjadi identitas dari masing
masing elemen data dari sebuah struktur array. Nilai adalah nilai
nyata yang tersimpan pada setiap elemen pada indeks tertentu dari
sebuah struktur array.
Hal yang harus diperhatikan dalam menyimpan data pada elemen
array adalah kesamaan tipe data, karena tidak mungkin menyimpan
data yang berbeda beda kedalam sebuah struktur array.
Pendeklarasian Array
Pendeklarasian array tidak bedanya dengan pendeklarasian variabel
biasa, terdapat aturan aturan penamaan yang sama persis dengan
aturan penamaan variabel. Perbedaannya terletak pada :

Saat pendeklarasian array, hendaknya menentukan tipe dari


array tersebut.

Saat pendeklarasian array, hendaknya menentukan jumlah


dari elemen yang terkandung di dalam struktur array
tersebut.

Dalam

menentukan

jumlah

elemen

dari

array

hendaknya

diperhatikan dengan baik, karena banyaknya elemen array berarti


memesan sejumlah tempat di memori komputer. Tipe data array
dapat berupa tipe sederhana (integer, char, double, boolean)
ataupun tipe terstruktur (record).
Contoh :
int nilai[10];
Perintah diatas akan memberikan instruksi untuk memesan 10
tempat di memori komputer bertipe integer. Variabel array nilai
memiliki indeks mulai dari 0 hingga 9.

Contoh lain :
char nama[100], double nilai_ujian[100];
Mengakses Elemen Array
Setelah struktut array dideklarasikan, tiba saatnya untuk mengakses
masing masing elemen dari struktur array tersebut. Cara
pengaksesannya sangat
mudah dan hampir sama dengan proses pemberian nilai kepada
sebuah variabel. Hanya disini yang harus diperhatikan adalah indeks
setiap elemen array, karena kesalahan yang timbul akibat kesalahan
pemberian indeks pada array akan mengakibatkan data dikirim pada
tempat yang salah.

Contoh :
Int nilai[5]; // Pendeklarasian Array.
// memberi nilai pada indeks ke 0.
nilai[0] = 10;
nilai[1] = 20; nilai[2] = 30; nilai[3] = 40; nilai[4] = 50;
Perintah diatas akan mengisi kelima elemen yang dimiliki oleh array
nilai, pemetaan di memory akan menjadi seperti dibawah ini.
Indeks = 0

Indeks = 1

Indeks = 2

Indeks = 3

Indeks = 4

Nilai = 10

Nilai = 20

Nilai = 30

Nilai = 40

Nilai = 50

Cara menampilkan array juga sangat mudah, tinggal memilih data


pada elemen ke berapa yang ingin ditampilkan.
Contoh :
Cetak nilai[2] // maka akan menampilkan array pada indeks ke 2.
Harap diperhatikan indeks ke 2 berbeda dengan array ke 2. Pada
contoh diatas indeks ke 2 berarti nilai = 30, sedangkan array ke 2
berarti nilai = 20.
Berikut

akan diberikan contoh program untuk mengisi array dan

menampilkan array menggunakan logika perulangan.


Contoh :
Program untuk menginput nilai dari keyboard dan menyimpan ke
dalam array kemudian menampilkan hanya apabila nilainya ganjil.

#include <stdio.h>
void main(){

int nilai[100];
int inputan_nilai;
// ini untuk proses meminta input dari keyboard sebanyak 100 kali
dan //menyimpan ke dalam array nilai.
for (int i = 0; i < 100; i++){
scanf(%d,& inputan_nilai);
nilai[i] = inputan_nilai;
}
// ini proses untuk membaca dari array nilai dan melakukan proses
seleksi //apakah bilangan ganjil atau bukan. Kalau ganjil, maka
ditampilkan ke layar.
for (int i = 0 ; i < 100; i++){
if (nilai[i] % 2 == 1)
printf(%d,&nilai[i]);
}}

Mengakses Elemen Array Melalui Piranti Masukan


Untuk mengakses eleman dari strukut array selain dapat dilakukan
dengan menggunakan pemberian nilai melalui sebuah variabel, juga
dapat dilakukan dengan menerima inputan langsung dari piranti
masukan (keyboard, file ataupun database). Konsep dasar proses
pemberian nilai tetap sama dengan apa yang telah dijelaskan pada
pembahasan diatas. Notasi / sintaks yang
digunakan tiap tiap bahasa pemrograman tidak sama, dan
tergantung dari bahasa pemrograman yang digunakan.
Contoh :

Program untuk menerima inputan dari keyboard dan langsug


disimpan ke dalam struktur array.
#include <stdio.h>
void main(){
int nilai [10];
for (int i = 0; i < 10; i++){
scanf(%d, &nilai[i]);
// menginput nilai dari keyboard dan disimpan pada elemn ke i dari
array nilai.
}}
Pada contoh program diatas hanya menunjukkan bahwa array dapat
lansung dirujuk dari piranti masukan, pembahasan detil metode
yang digunakan diharapkan dapat mempelajari sesuai dengan
bahasa pemrograman yang akan digunakan.
Melakukan Inisialisasi Array
Inisialisasi array berarti mendeklarasikan array sekaligus memberi
nilai ke tiap tiap elemennya. Seperti halnya variabel biasa, struktr
array juga dapat melakukannya. Sekali lagi, sintaks / notasi yang
digunakan tergantung dari bahasa pemrograman yang digunakan.
Dibawah ini akan diberikan contoh melakukan inisialisasi array
dalam bahasa Turbo C.
Contoh :
Program melakjukan inisialisasi array sebanyak 5 elemen dan
langsung memberikan nilai ke dalamnya.
#include <stdio.h>

void main(){
int nilai[] = {10,20,30,40,50};
// melakukan inisialisasi 5 elemen array sekaligus memberi nilai
didalamnya.
for (int i = 0; i < 5; i++)
printf(%d,nilai[i]); // mencetak tiap elemen array ke layar.
}
4.4.2 Array N Dimensi.
Kelebihan struktur data array dibandingkan variabel biasa adalah
kemampuan array untuk menyimpan elemen data lebih dari 1
dimensi. Secara teori tidak ada batas maksimum dari jumlah dimensi
sebuah struktur array, namun

pada impelementasinya

sangat

jarang sekali ditemukan penggunaan array lebih dari 3 dimensi.


Jumlah dimensi pada array menentukan berapa banyak data yang
dapat disimpan di dalam array tersebut, semakin banyak jumlah
dimensi yang dimiliki maka semakin banyak jumlah data yang dapat
disimpan di dalam array tersebut.
Pada

pembahasan

sebelumnya

telah

kita

bahas

mengenai

pemakaian array 1 dimensi / array tunggal, saat ini akan dijelaskan


mengenai array 2 dimensi secara detil.

Definisi Array 2 Dimensi


Array 2 dimensi memungkinkan tiap elemen dari array untuk
menyimpan data juga. Secara fisik memiliki bentuk seperti tabel.
Berikut akan diberikan contoh kasus untuk menjelaskan mengenai
pemakaian array 2 dimensi.
Contoh :

Data keseluruhan kelulusan dari jurusan Teknik Informatika, Sistem


informasi dan Komputer Akuntansi pada sekolah tinggi komputer dari
tahun 1995 1998 dirangkum pada tabel dibawah ini.
Jurusan
T.

1995
300

1996
345

1997
279

1998
336

Informatika
S. Informasi
K. Akuntansi

167
467

156
465

180
435

187
398

Permasalahan

diatas

tidak

dapat

diselesaikan

menggunakan

pendekatan struktur array 1 dimensi, dikarenakan terdapat 2


dimensi penilaian yang
digunakan yaitu : Tahun kelulusan dan Jurusan. Kedua elemen data
ini

harus

disimpan

terpisan

hamun

masih

tetap

terjaga

konsistensinya (Tidak menampilkan data yang salah). Menggunakan


array 2 dimensi, bentuknya menjadi :
Int jumlah_kelulusan[3][4]
Pada pendefinisian diatas menyatakan :
3 menyatakan jumlah baris (mewakili Jurusan)
4 menyatakan jumlah kolom (tahun kelulusan)
Jurusan
T.

1995
Baris 0

1996
Baris 0

1997
Baris 0

1998
Baris o

Informatika

Kolom 0

Kolom 1

Kolom 2

Kolom 3

Contoh :
Jumlah_kelulusan[0][0] = 300
Jumlah_kelulusan[0[[1] = 345

Hal diatas berarti, jumlah kelulusan jurusan Teknik Informatika pada


tahun 1995 sebesar 300 dan pada tahun 1996 sebesar 345.
Hal lain yang harus diperhatikan adalah indeks awal array bagi
sebagian besar bahasa pemrograman selalu berawal dari 0 dan ini
berlaku bagi array dengan dimensi tunggal ataupun ganda. Metode
untuk memasukkan nilai ke dalam struktur array dimensi 2 sama
persis dengan struktur array 1 dimensi.
Contoh :
Program menginput jumlah kelulusan untuk setiap tahunnya, mulai
dari tahun 1995 1998 untuk jurusa n Teknik Informatika.
#include <stdio.h>
void main(){
int jumlah_lulusan[1][4]; // karena hanya satu jurusan dan tahun
1995 1998.
for (int baris = 0; baris <1;baris++){
for(int kolom = 0; kolom < 4; kolom++){
scanf(%d, &jumlah_lulusan[baris][kolom]);
}}}
Pada contoh program diatas penggunaan 2 logika for (nested
looping), saat kita menggunakan struktur array 2 dimensi maka anda
harus menggunakan logika perulangan bersarang (perulangan di
dalam perulangan). Tabel di bawah ini akan menjelaskan alur logika
tersebut.
Jurusan
T.

1995
Baris 0

1996
Baris 0

1997
Baris 0

1998
Baris 0

Informatika
S. Informasi

Kolom 0
Baris 1

Kolom 1
Baris 1

Kolom 2
Baris 1

Kolom 3
Baris 1

Kolom 0

Kolom 1

Kolom 2

Kolom 3

for (int baris = 0; baris <1;baris++){


for(int kolom = 0; kolom < 4; kolom++){
scanf(%d, &jumlah_lulusan[baris][kolom]);
}}
Alur logika program dimulai dari perulangan pertama yang akan
memeriksa kondisi baris, apakah telah mencapai akhir dari baris
(dalam hal ini jurusan). Apabila belum, maka alur logika progam
akan masuk kedalam perulangan kedua yang akan memeriksa
kondisi kolom apakah telah mencapai akhir
kolom (dalam hal ini tahun kelulusan). Apabila belum maka program
akan dijalankan, ketiga akhir kolom telah tercapai maka program
akan

keluar

dari

perulangan

kedua

dan

kembali

memerika

perulangan pertama, apabila masih belum mencapai akhir baris


(jurusan) maka program akan berjalan terus.
4.4.3 Algoritma Pengurutan Data (Sorting Data)
Pengertian dari pengurutan data (sorting) adalah penyusunan urutan
data sehingga tersusun berdasarkan kata kunci tertentu dari nilai
terkecil ke nilai terbesar (ascending) atau dari nilai terbesar ke nilai
terkecil (descending).
Pada dasarnya algoritma sorting dibagi menjadi 2 bagian, yaitu :
-

Algortima Sorting Internal


Algoritma sorting internal akan memuat seluruh data ke
dalam memori komputer. Penggunaan cara ini apabila
seluruh data masih memungkinkan untuk di muat ke dalam
memori komputer.

Algoritma Sorting Eksternal


Algoritma sorting eksternal tidak memuat seluruh data ke
dalam memori komputer, data yang akan diurutkan akan di
pecah menjadi beberapa bagian dan akan diurutkan secara

terpisah. Setelah pecahan data tadi terurut, barulah data


digabung menjadi satu.
Data yang akan diurutkan biasanya berbentu record dengan salah
satu field yang berfungsi sebagai kata kunci yang nilainya sebagai
pembanding dalam mengurutkan data.
Pada pembahasan ini kita akan menggunakan nilai dari kunci
pengurutan
daya dan akan menggunakan metode bubble sort, yang sangat
terkenal kesederhanaannya meskipun hanya bisa digunakan untuk
pengurutan data yang tidak terlalu besar (internal sorting).
Algortima Bubble Sort
Algoritma Bubble Sort menggunakan metode membandingkan dua
data yang berdekatan. Pertukaran data akan terjadi apabila data ke
i lebih besar dari pada data ke i + 1. Algoritma ini akan melakukan
beberapa kali putaran sampai data terurut secara keseluruhan.
Contoh :
Simulasi pengurutan data menggunakan algortima bubble sort
dengan tipe menaik (ascending) terhadap 6 buah data dibawah ini
b:
[0]
70

[1]
60

[2]
30

[3]
50

[4]
40

[5]
20

Algoritma akan melakukan beberapa putaran dan pada setiap


putarannya akan membandingkan data yang ke i dengan data yang
ke i + 1, apabila ada data data ke [i] lebih besar makan akan
terjadi pertukaran. Berikut simulasi sederhana nya :

Putaran
Elemen yang dibandingkan
Ke 1
[5] vs [4], [4] vs [3], [3] vs [2], [2] vs [1], [1] vs [0]
Ke 2
[5] vs [4], [4] vs [3], [3] vs [2], [2] vs [1]
Ke 3
[5] vs [4], [4] vs [3], [3] vs [2]
Ke 4
[5] vs [4], [4] vs [3]
Ke 5
[5] vs [4]
Pada putaran tersebut terlihat bahwa putaran dimulai data terakhir
/ data indeks ke 5, dan perulangan dilakukan dilakukan hingga
putaran terakhir dimana data telah terurut secara keseluruhan.
Banyaknya putaran yang
dilakukan

tergantung

dari

berapa

banyak

data

yang

akan

diurutkan. Penggunaan operator pembanding tergantung dari jenis


pengurutan apa yang diinginkan (menaik atau menurun).
Berikut algortima lain yang dapat

dilakukan dalam melakukan

pengurutan data / sorting :


-

Algoritma Selection Sort

Algoritma Insertion Sort

Algortima Quick Sort

Algoritma Merge Sort

Algortima Radix Sort dan Heap Sort.

4.4.4 Algoritma Pencarian Data (Searching Data)


-

Pada

suatu

data

seringkali

dibutuhkan

pembacaan

kembali informasi (retrieval information) dengan cara


searching.
-

Searching adalah pencarian data dengan menelusuri


tempat pencarian data tersebut.

Tempat pencarian data tersebut dapat berupa array


dalam memori, bias juga pada file pada penyimpanan
eskternal.

Teknik-teknik Searching
1. Sequential Search

Adalah suatu teknik pencarian data dalam array ( 1

dimensi ) yang akan menelusuri semua elemen-elemen


array dari awal sampai akhir, dimana data-data tidak perlu
diurutkan terlebih dahulu.
-

Kemungkinan terbaik (best case) adalah jika data yang dicari


terletak di indeks array terdepan (elemen array pertama)
sehingga waktu yang dibutuhkan untuk pencarian data
sangat sebentar (minimal).

Kemungkinan terburuk (worst case) adalah jika data yang


dicari terletak di indeks array terakhir (elemen array
terakhir) sehingga
waktu yang dibutuhkan untuk pencarian data sangat lama
(maksimal).

Contoh :
Misalkan ada sekumupulan data pada array 1 dimensi seperti
dibawah ini :
Indeks

Indeks

Indeks

Indeks

Indeks

Indeks

Indeks

Indeks

0
8

1
10

2
6

3
-2

4
11

5
7

6
1

7
100

Program akan mencari data bernilai 6, apabila diketumkan maka


akan menuliskan kalimat ADA dan kalau tidak maka akan
menuliskan kalimat TIDAK ADA.
# include <stdio.h>
# include <conio.h>
void main(){
clrscr();
int data[8] = {8,10,6,-2,11,7,1,100};

int cari;
int flag=0;
printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);
for(int i=0;i<8;i++){
if(data[i] == cari) flag=1;
}
if(flag==1) printf("Data ada!\n");
else printf("Data tidak ada!\n"); }
Keterangan / simulasi program diatas adalah :
- Program melakukan perulangan untuk megakses satu persatu
data pada elemen array.
-

Program menggunakan sebuah variabel flag yang berguna


untuk menadai ada atau tidaknya data yang dicari dalam
array data. Hanya bernilai 0 atau 1. Nilai variable flag akan
diinisialisasi pada nilai 0.

Apabila data ketemu, maka nilai variable flag akan diberi nilai
1, sedangkan apabila tidak ketemu nilai flag tetap 0.

Program akan mencari seluruh data pada elemen array


dengan membandingkan satu persatu.

Algortima

sequential search merupakan algortima yang paling

sederhana dan mudah. Kelemahan algoritma ini terletak pada


jumlah data yang terbatas, ketika pencarian data melibatkan data
yang sangar besar akan sangat tidak efisien. Karena ada 2
kemungkinan, yaitu :
-

Data

terletak

pada

indeks

paling

akhir.

Program

akan

mengulang sampai akhir secara berurutan.


-

Data yang dicari telah ketemu sejak awal, dan program terus
mengulang hingga akhir perulangan. Sebenarnya ini dapat di

pecahkan dengan menghentikan program ketika data telah


ketemu.

2. Binary Search
Teknik pencarian yang akan membagi data menjadi dua pada setiap
pengurutan data. Data yang ada harus diurutkan terlebih dahulu
berdasarkan urutan tertentu yang dijadikan kunci pencarian.
Prinsip pencarian biner adalah :
- Data diambil dari posisi 1 sampai posisi akhir N
- Kemudian cari posisi data tengah dengan rumus (posisi awal
+ posisi akhir) / 2
- Kemudian data yang dicari dibandingkan dengan data yang di
tengah, apakah sama atau lebih kecil, atau lebih besar.
- Jika lebih besar, maka proses pencarian dicari dengan posisi
awal adalah posisi tengah + 1
- Jika lebih kecil, maka proses pencarian dicari dengan posisi
akhir adalah posisi tengah 1
- Jika data sama, maka pencarian berakhir. Data ketemu.
Contoh :
Misalkan program akan mencari data 17 dari sekumpulan data
dibawah ini.
Idx 0
3
A

Idx 1
9

Idx 2
11

Idx 3
12

Idx 4
15
B

Idx 5
17

Idx 6
23

Idx 7
21

Idx 8
35
C

Idx 6

Idx 7

Idx 8

Karena 17 > 15, maka awal = tengah + 1


Idx 0

Idx 1

Idx 2

Idx 3

Idx 4

Idx 5

17
23
21
A
B
Karena 17 < 23 (data tengah), maka: akhir = tengah 1

Idx 0
3

11

12

15

Idx 1
9

Idx 2
11

Idx 3
12

Idx 4
15

Idx 5
17
A=B=

Idx 6
23

Idx 7
21

35
C
Idx 8
35

C
Karena 17 = 17 (data tengah), maka KETEMU!
3. Interpolation Search
Teknik ini dilakukan pada data yang telah terurut berdasarkan kata
kunci tertentu. Metode ini menggunakan perkiraan letak data.
Misalkan :
Apabila kita hendak mencari nama dalam buku telepon yang
berinisial T, maka kita tidak akan mencari pada awal dayta melainkan
akan langsung mecari dengan membuka pada 2/3 atau dari buku
tersebut.
Bisa dikatakan metode ini mencari data relatifd terhadap jumlah data.
Rumus relative yang digunakan adalah :
Posisi = kunci data[low] / data[high] data[low] X (high low) + low
Contoh :
Kode
025
063
088

Judul Buku
C++ Programnming
Java Programming
Visual Basic Programming

Pengarang
Abdul Kadir
Ben Stiller
Kaka

Kunci Pencarian ? 088


Low ? 0
High ? 7
Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]
Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005

Kunci Pencarian ? 060


Low ? 0
High ? 7
Posisi = (060 025) / (096 025) * (7 0) + 0 = [3]
Kunci[3] < kunci pencarian, maka teruskan
Low = 3 + 1 = 4
High = 7
Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.
Berarti tidak ada kunci 060.
Contoh programnya :
int interpolationsearch(int key,int n){
int low,high,pos,i;
low=0;
high=n-1;
do{
pos = (key data[low]) * (high low) / data[high]
data[low] + low;
if (data[pos] == key] return pos;
if (data[pos] > key) high = pos-1;
else
if (data[pos] < key) low = pos + 1;
} while(key >= data[low] && key <= data[high]);
return -1 }
4.5

Pengelolaan File
File digunakan sebagai media penyimpanan data eksternal selain
memori, media penyimpanan ini bersifat non volatile dan biasanya
memiliki ukuran besar untuk dapat dibaca kembali.
Operasi yang biasa dilakukan terhadap sebuah file adalah : menulis,
membaca, memeriksa keberadaan file, mengetahui status file,

ukuran file dan lain sebagainya. Setiap operasi untuk mengolah file
pasti memerlukan buffer untuk menampung sementara informasi dari
file tersebut.
File Stream
Stream adalah kumpulan karakter yang disusun dalam baris-baris
yang berpindah dari satu media ke media lain pada sistem komputer.
Semua data masukan dan keluaran pasti berupa stream. Pada bahasa
pemrograman C memperlakukan file sebagai stream, berikut terdapat
3 jenis stream yang otomatis dijalankan dan masing masing
berasosiasi dengan sebuah file.
-

Standar input stream, yang mengatur aliran masukan data


melalui keyboard.

Standard output stream, yang mengatur aliran data keluaran


ke layar monitor

Standard error stream, yang mengatur tampilan kesalahan


ke layer monitor

Jenis File
File dibedakan menjadi 2 bagian berdasarka jenisnya, antara lain :
1.

File Teks

File teks adalah file yang berisi data data ASCII sehingga dapat
ditampilkan dilayar apa adanya. Satu karakter ASCII dalam teks
berukuran 2 bytes.
2.

File Biner

File biner adalah file yang berisi data data biner dan berupa byte
stream sehingga tidak dapat ditampilkan apa adanya di layar. Satu
karakter akan berukuran 1 byte, sedangkan nilai yang bukan karakter
akan

disimpan

sesuai

dengan

ukuran

microprocessor.

Ukuran

tergantung pada ketentuan microprocessor dan bukan tergantung


pada jumlah digit bilangan.
Operasi dasar yang biasa dilakukan dalam manajemen file ada 3
bentuk, antara lain :
4.5.1 Membuka File
Membuka file merupakan operasi yang paling dasar dalam
manajemen file, karena sebuah file harus dalam kondisi terbuka
terlebih dahulu agar dapat diakses.
Notasi yang digunakan adalah :
FILE * fopen(const char *filename, const char *mode)
Apabila

proses

pembukaan

file

gagal,

maka

pointer

akan

mengembalikan nilai null. Parameter yang harus diperhatikan saat


membuka file adalah :
Modus r

Membuka untuk dibaca.

Modus w

Membuka untuk menulis ( File tidak harus eksis

dahulu)
Modus a

Membuka untuk menambahkan data.

Modus r+ Membuka untuk membaca dan menulis.


Modus w+

Membuka untuk membaca dan menulis (akan

menimpa file)
Modus a+

Membuka

untuk

membaca

dan

menulis

(menambahjan
apabila file sudah ada sebelumnya)
File dapat dibuka sebagai file teks ataupun biner, aturan yang
harus diperhatikan adalah :

File teks menggunakan parameter tambahan menjadi rt. Wt,


at, r+t, w+t dan a+t.

File biner menggunakan parameter tambahan menjadi rb. Wb,


ab, r+b, w+b dan a+b.

Secara default kompiler akan mengenali sebagai odus teks (t).

Notasi

algoritmik

yang

digunakan

pada

setiap

bahasa

pemrograman berbeda beda, dalam pembahasan ini kita akan


menggunakan bahasa pemrograman Tubro C untuk membahas
manajemen file lebih lanjut.
Contoh :
FILE *fp;
fp=fopen("c:\\test.txt", "r");
if (fp==NULL) printf(Error, file tidak dapat dibuka!);
Program diatas akan membuka file bernama test.txt dengan
modus operasi
pembacaan,

dan

apabila

file

tidak

ditemukan

maka

akan

memberikan nilai kembalian NULL.


4.5.2

Memanipulasi File

Berikut adalah beberapa cara / fungsi yang digunakan untuk


melakukan manipulasi file (baca atau tulis). Sekali lagi ditekankan
bahwa pada setiap bahasa pemrograman memiliki ketentuang
yang berbeda beda.
Untuk menulis ke file dalam format tertentu:
int fprintf(fp, "Testing...\n");
jika berhasil akan dikembalikan jumlah byte yang dituliskan
sedangkan jika gagal dikembalikan EOF

Untuk membaca dari file dalam format field tertentu:


int fscanf(fp, "Testing...\n");
jika

berhasil

akan

dikembalikan

jumlah

field

yang

dibaca

sedangkan jika gagal dikembalikan EOF


Untuk menulis karakter ke file teks:
int fputc( int c, FILE *fp );
jika berhasil akan dikembalikan karakter c sedangkan jika gagal
dikembalikan EOF
Untuk membaca file teks perkarakter:
int fgetc (FILE *fp);
jika berhasil akan dikembalikan karakter c sedangkan jika gagal
dikembalikan EOF
Untuk meletakkan nilai integer ke file:
int putw(int w, FILE *fp);
jika berhasil akan dikembalikan integer w sedangkan jika gagal
dikembalikan EOF
Untuk membaca nilai integer:
int getw(FILE *fp);
jika berhasil akan dikembalikan integer w sedangkan jika gagal
dikembalikan EOF
Untuk menulis string ke file tanpa ada karakter NULL dan
newline:
int fputs(const char *s,FILE *fp);
jika berhasil akan dikembalikan string s sedangkan jika gagal
dikembalikan EOF
Untuk membaca string dari file sebanyak n karakter atau
bertemu karakter \n:

char *fgets(const char *s,int n,FILE *fp);


jika berhasil akan dikembalikan string s sedangkan jika gagal
dikembalikan EOF
Untuk mengetahui akhir sebuah file stream:
int feof(FILE *fp);
jika berhasil akan dikembalikan nilai integer selain 0.

4.5.3

Menutup File

Operasi file tidak berakhir hanya pada bagaimana memanipulasi


file yang telah dibuka, menutup hubungan dengan file yang telah
dibuka sebelumnya merupakan hal yang harus diperhatikan. Pada
bahasa Turbo C, notasi algoritmik yang digunakan adalah :
int fclose(FILE *a_filename);
int fcloseall(void);
Pada fungsi pertama akan menutup pada file tertentu saja,
sedangkan pada
fungsi kedua akan menutup seluruh hubungan dengan file yang
ada saat itu juga ( kecuali stdin, stdout, stdprn, stdaux ).
Apabila

proses

mengembalikan

penutupan
nilai

file

dan

ini
apabila

berhasil

maka

akan

gagal

maka

akan

mengembalikan nilai -1 (EOF).


Contoh :
FILE *fp;
fp=fopen("c:\\test.txt", "r");
if (fp==NULL) printf(Error, file tidak dapat dibuka!);
fclose(fp);

Program diatas akan membuka file bernama test.txt dengan


modus operasi membaca dan kemudian langsung menutup
hubungan dengan file tersebut.
Contoh :
Program untuk menulis ke dalam file yang disimpan di hardisk.
#include <stdio.h>
#include <stdlib.h>
void main(){
FILE *fp;
if((fp=fopen("C:\\test.txt","w"))==NULL){ // bikin file test.txt di
drive C.
printf("error!");
exit(1);
}
fputs("ABCDE\n",fp); // menulis ke dalam file test.txt
printf("alamat file : %p\n",fp->buffer); // tampilkan alamat file.
printf("ukuran file : %d byte \n",fp->bsize); // ukuran file.
printf("posisi file : %p\n",fp->curp); //
printf("isi file :");
for(int i=0;i<=4;i++){
printf("%c",*(fp->buffer+i)); // membaca dari buffer sampai habis.
}
printf("\n") // turun 1 baris.;
printf("no pengenal file : %d\n",fp->fd); // identifier file.
printf("status file :\n");
if((fp->flags & 1)==1) printf("readonly\n");
if((fp->flags & 2)==2) printf("writeonly\n");
if((fp->flags & 3)==3) printf("read/write\n");
if((fp->flags & 8)==8) printf("file line\n");

if((fp->flags & 16)==16) printf("error\n");


if((fp->flags & 32)==32) printf("akhir file\n");
if((fp->flags & 64)==64) printf("file biner\n"); else printf("file
teks\n");
if((fp->flags & 128)==128) printf("data dari file\n");
if((fp->flags & 256)==256) printf("data ke file\n");
if((fp->flags & 512)==512) printf("file ada diterminal\n"); else
printf("file
di disk");
fclose(fp);} // tutup hubungan ke dalam file

DAFTAR PUSTAKA

Algoritma dan Pemrograman Dasar. Rinaldi Munir. Buku 1. Penerbit


Informatika Bandung.

Website:

http://www.ilmukomputer.com

http://www.ibii.ac.id/pdfs/bubble-sort.pdf

http://www.ilkom.unsri.ac.id/dosen/sri/materi

http://id.wikipedia.org

Anda mungkin juga menyukai