1.1
Pendahuluan........................................................................................................... 1
1.2
1.3
1. 3.2
1.3.3
1.3.4
1.3.5
1.4
1.4.2
BAB 2.
2.1
Pendahuluan......................................................................................................... 12
2.2
2.3
2.4
2.5
Pengulangan ......................................................................................................... 19
2.5.1 For .................................................................................................................. 21
2.5.2 While ............................................................................................................... 22
2.5.3 Repeat ........................................................................................................... 22
2.6
Percabangan ......................................................................................................... 23
2.6.1
2.6.2
2.6.3
If dalam if ................................................................................................... 27
2.6.4
2.7
2.8
BAB 3.
3.1
3.2
3.3
3.4
3.5
3.6
Prosedur ............................................................................................................... 42
3.6.1 Deklarasi Prosedure ....................................................................................... 43
3.7
Fungsi.................................................................................................................... 45
3.8
BAB 4.
4.1
STRUKTUR DATA........................................................................................... 51
Program dengan beberapa Tipe Data .................................................................. 51
4.1.1
Penggunaan Record................................................................................... 51
4.2
Pointer .................................................................................................................. 59
4.3
4.4
4.5
Queue ................................................................................................................... 78
4.5.1
4.5.2
4.5.3
4.5.4
4.6
Stack ..................................................................................................................... 81
4.6.1
4.6.2
4.6.3
4.6.4
4.7
File ........................................................................................................................ 83
4.7.1
4.7.2
BAB 5.
5.1
5.2
5.3
5.2.1
5.2.2
5.2.2
Page xxii
5.3.1
5.3.2
5.4
BAB 6.
6.1
6.2
6.2.2
6.2.3
6.3
6.4
Membuat Dokumentasi Fungsi dan Prosedur pada Modul Program ................ 108
BAB 7
7.1
7.2
7.3
7.3.2
7.3.3
7.3.4
Page xxiii
BAB 1.
1.1
MENJAGA ETIKA
Pendahuluan
Menurut Kamus Besar Bahasa Indonesia etika adalah:
-
Ilmu tentang apa yang baik dan yang buruk, tentang hak dan kewajiban moral,
Dari asal usul kata, Etika berasal dari bahasa Yunani ethos yang berarti
adat istiadat atau kebiasaan yang baik. Perkembangan etika studi tentang kebiasaan
manusia berdasarkan kesepakatan, menurut ruang dan waktu yang berbeda, yang
menggambarkan perangai manusia dalam kehidupan pada umumnya.
Etika merupakan suatu cabang filosofi yang berkaitan dengan apa saja yang
dipertimbangkan baik dan salah. Ada beberapa definisi mengenai etika antara lain :
-
Salah satu yang harus dipahami adalah bahwa apa yang tidak etis tidak
berarti illegal. Dalam lingkungan yang kompleks, definisi benar dan salah tidak selalu
jelas. Juga perbedaan antara illegal dan tidak beretika tidak selalu jelas.
Dengan semakin berkembangnya teknologi informasi telah menciptakan
berbagai situasi etika yang baru. Misal isu sebuah perusahaan yang secara legal
memonitor email pegawai merupakan hal yang kontroversial. Selain itu ada
perbedaan antara etika di perusahaan dengan individu.
1.2
Isu Privacy
Isu Accuracy
Isu Property
Isu Accessibility
1.3
Perlindungan Privaci
Secara umum, privasi adalah hak untuk sendiri dan hak untuk bebas terhadap
gangguan orang yang tidak bertanggung jawab. Privasi informasi adalah hak untuk
menentukan kapan, dan untuk apa diperluas terhadap informasi diri sendiri yang
dapat dikomunikasikan dengan orang lain. Hak ini berlaku untuk individu, kelompok
dan institusi.
Ada 4 hal umum untuk identifikasi empat pernyataan privasi yaitu:
Tabel 1.2 Indentifikasi pernyataan privasi
1
2
3
4
Solitude
Intimacy
Anonimity
Reserve
Isu accuracy
Isu Property
Isu Accessibility
Ruang lingkup
Informasi apa saja mengenai diri sendiri yang sebaiknya menjadi hak individu
?
Jenis pelanggaran apa saja bagi seorang pegawai yang mempergunakan hak
kepegawaiannya?
Apa saja yang harus disimpan rapat untuk diri sendiri dan tidak diumumkan
ke orang lain?
Informasi apa saja mengenai individu yang sebaiknya disimpan dalam
database dan bagaimana mengamankan informasi tersebut?
Siapa yang bertanggung jawab untuk authenticity, fidelity dan akurasi
informasi yang berhasil dikumpulkan?
Bagaimana kita dapat meyakinkan bahwa informasi akan diproses secara
benar dan ditampilkan secara akurat kepada pengguna?
Bagaimana kita dapat meyakinkan bahwa kesalahan dalam database,
transmisi data, dan pengolahan data adalah kecelakaan dan tidak disengaja.
Siapa yang bisa dipercaya untuk menentukan kesalahan informasi dan
dengan cara apa kesalahan tersebut dapat dikompensasi.
Siapa yang memiliki informasi?
Apa saja yang perlu dipertimbangkan dan besarnya biaya pertukaran
informasi?
Bagaimana sebaiknya seseorang menangani software piracy (mengcopy
copyrighted software)?
Pada lingkungan yang bagaimana seseorang dapat mempergunakan
proprietary databases?
Dapatkah komputer perusahaan dipergunakan untuk keperluan pribadi?
Bagaimana sebaiknya para ahli memberikan kontribusi pengetahuannya
untuk membentuk sistem pakar?
Bagaimana sebaiknya akses terhadap jalur informasi dialokasikan?
Siapa saja yang diijinkan untuk mengakses informasi?
Berapa besarnya biaya yang dapat dibebankan untuk mengakses informasi?
Bagaimana kemampuan akses komputer yang diberikan kepada pegawai
dibatasi?
Siapa saja yang akan diberi peralatan yang diperlukan untuk mengakses
informasi?
Informasi apa saja bagi person atau organisasi yang mempunyai hak atau
privilege untuk mendapatkan informasi dalam keadaan apapun dan dengan
jaminan keamanan?
Definisi privasi dapat diintepretasikan sangat luas. Akan tetapi ada dua aturan
yang harus diikuti yaitu:
1. Hak privasi adalah tidak absolut. Privasi harus diseimbangkan dengan
keinginan masyarakat.
2. Hak publik untuk mengetahui lebih utama dibandingkan dengan hak privasi
individu.
Modul Pelatihan Junior Programming
Berdasar dua aturan tersebut terlihat mengapa dalam beberapa kasus menjadi
sulit untuk menentukan dan memaksa regulasi privasi. Hak privasi dikenal sampai hari
ini di seluruh Amerika Serikat dan oleh pemerintah Federal.
Tabel 1.4 Representasi Privasi Legislasi Federal terhadap Privasi dan Teknologi Informasi
Legislasi
Freedom of Information Act,
1970
Privacy Act of 1974
Pernyataan
Mengijinkan individu untuk mengakses sebarang informasi
mengenai diri sendiri yang disimpan oleh pemerintah
federal.
Melarang pemerintah untuk mengumpulkan informasi
secara rahasia. Informasi yang dikumpulkan harus
dipergunakan hanya untuk keperluan tertentu. Informasi
dapat digunakan untuk keperluan lainnya dengan ijin dari
individu. Individu dapat mengakses dan memperbaiki
informasi tersebut.
Jaminan
keamanan
data
pada
lembaga
keuangan. Masyarakat harus diberi pengertian jika
pemerintah akan mengakses data tersebut.
Memberikan proteksi privasi dalam bentuk komputerisasi
dan dokumen lainnya.
Proteksi privasi di TV dan transmisi kabel.
Melarang private citizens untuk mengakses komunikasi data
tanpa otorisasi.
Memerlukan keamanan informasi termasuk informasi
individu.
Regulasi untuk mencocokkan file komputer oleh
pemerintah dan agen federal
Proteksi privasi pada transmisi gambar
Membatasi praktek telemarketer
Memerlukan prioritas yang tertulis sebelum suatu layanan
komputer dapat memberikan informasi dari anggotanya
Membatasi disclosure jumlah Social Security dan informasi
yang berkaitan.
Melarang agen federal terhadap disclosing data personil
melalui internet.
Proteksi hak privasi dalam perdagangan online.
menyebabkan beberapa informasi menjadi tidak akurat, tidak uptodate dan tidak
aman. Ada beberapa contoh problem yang potensial:
Salah satu kota di New England gagal mendapatkan finansial. Sebuah investigasi yang
dilakukan telah menemukan bahwa semua wajib pajak diberi label yang salah yaitu sebagai
orang yang gagal membayar pajak property mereka.
Orang yang berpengalaman kesulitan dalam hal finansial atau refinancing home disebabkan
keterlambatan atau ketidakakuratan informasi dalam database.
Informasi pribadi seperti status kesehatan atau kondisi seksual dari seseorang dapat
berkibat negatif pada saat kontrak, promosi maupun kebijakan personal lainnya.
Database dipergunakan untuk mengkombinasikan mailing list yang berbeda. List semacam
itu dapat dijual kepada vendor lainnya, yang kemudian akan menghubungi orang tersebut
sebagai pelanggan potensial.
kepegawaian)
Data accuracy
Data confidentiality
mengacaukan aliran informasi antar negara dalam komunitas Eropa. Untuk mengatasi
problem tersebut maka Komisi Komunitas Eropa telah memberikan petunjuk untuk
semua negara anggota dengan memberikan hak individu untuk mengakses informasi
diri sendiri dan memperbaiki kesalahan.
Transfer informasi kedalam dan keluar suatu negara tanpa sepengetahuan
otoritas atau individu akan menimbulkan sejumlah isu privasi. Negara hukum mana
yang mempunyai yuridiksi pada saat data yang tersimpan berada pada negara yang
berbeda untuk keperluan proses ulang atau transmisi ulang? Sebagai contoh jika data
ditransmisikan oleh sebuah perusahaan asuransi melalui satelit Amerika ke perusahaan
di Inggris, hukum privasi negara mana yang mengontrol data dan kapan? Pertanyaan
semacam ini akan menjadi semakin berkembang dan lebih kompleks.
Organisasi kerjasama dan pengembangan ekonomi di Eropa telah memberikan
sekumpulan petunjuk yang dikenal dengan baik untuk proteksi privasi individu pada
era elektronik. Sebuah contoh prinsip yang berkaitan dengan koleksi data adalah
sebagai berikut:
Tabel 1.6 Prinsip-prinsip dalam koleksi data
Collection Limitation
Data Quality
Purpose Specification
Use Limitation
Security Safeguards
Openness
Individual
Participation
Copyright Act (1980) memberikan proteksi kepada source dan object code, tetapi satu
problem adalah adanya ketidak jelasan apa yang harus diproteksi. Sebagai contoh,
konsep dan fungsi yang serupa dan feature umum (seperti menu pull-down, warna
dan icon) tidak diproteksi oleh hukum copyright.
Trade secret
merupakan rahasia perusahaan dan tidak berdasar pada informasi publik. Contohnya
adalah rencana strategis perusahaan. Hukum mengenai trade secret disahkan di
Amerika.
Patent merupakan sebuah dokumen yang menjamin hak eksklusif pemilik atas
sebuah penemuan selama 17 tahun. Ratusan paten yang berhubungan dengan
teknologi informasi telah dilakukan selama bertahun-tahun. Contoh paten yang
berhubungan dengan TI adalah Metode dan sistem untuk translasi bahasa natural
dan Sistem berbasis pakar dan metode untuk mengelola kesalahan event pada
sebuah Local Area Network. Open Market Corporation mendapatkan beberapa paten
yang berkaitan dengan electronic commerce. Juno menerima paten untuk penampilan
dan update interaktif di internet. Kebanyakan karya intelektual yang berkaitan dengan
TI adalah software. Mengcopy software tanpa membayar pemilik (seperti memberikan
sebuah disk ke teman untuk diinstal di komputernya) merupakan problem utama. Akan
tetapi selain itu juga terdapat beberapa problem lain yang berkaitan dengan hak karya
intelektual.
1.4
pengetahuan dan memiliki status dan prestise dari masyarakat serta memiliki otonomi.
Profesional adalah Seseorang yang memperoleh penghasilan dengan melakukan suatu
kegiatan atau melakukan suatu kegiatan atau mengerjakan sesuatu yang memerlukan
ketrampilan / keahlian khusus serta memiliki semangat pengabdian. (Seseorang yang
melakukan karena hobi atau untuk kesenangan biasa disebut sebagai seorang amatir).
Profesionalisme adalah Suatu paham yang mencitakan dilakukannya kegiatan-kegiatan
kerja tertentu dalam masyarakat, berbekalkan keahlian kerja tertentu dalam
masyarakat, berbekalkan keahlian yang tinggi dan berdasarkan rasa keterpanggilan
serta ikrar (fateri/profilteri) untuk menerima panggilan tersebut untuk dengan
10
11
Pendahuluan
Program/Pemrograman adalah kumpulan instruksi-instruksi tersendiri yang
biasanya disebut source code yang dibuat oleh programmer (pembuat program).
Tabel 2.1 Paradigma Pemrograman
1
Pemrograman Prosedural
Pemrograman Fungsional
Pemrograman Terstruktur
Pemrograman Modular
Pemrograman
Obyek
Berorientasi
Pemrograman
Fungsi
Berorientasi
Pemrograman Deklaratif
12
2.2
Definisi Algoritma
Asal kata Algoritma berasal dari nama Abu Jafar Mohammed Ibn Musa al-
Urutan langkah logis tertentu untuk memecahkan suatu masalah. Yang ditekankan
adalah urutan langkah logis, yang berarti algoritma harus mengikuti suatu urutan
tertentu, tidak boleh melompat-lompat. (Microsoft Press Computer and Internet
Dictionary 1997, 1998)
Menulis surat
13
2.3
Definisi Program
Program adalah kata, ekspresi, pernyataan yang disusun dan dirangkai
menjadi satu kesatuan prosedur yang berupa urutan langkah untuk menyelesaikan
masalah yang diimplementasikan dengan menggunakan bahasa pemrograman
sehingga dapat dieksekusi oleh komputer.
Bahasa Pemrograman adalah prosedur atau tata cara penulisan program.
Sedangkan Pemrograman adalah proses mengimplementasikan urutan langkah untuk
menyelesaikan suatu masalah dengan menggunakan suatu bahasa pemrograman.
Tahapan-tahapan Problem Solving:
1. Memahami / menganalisis masalah
2. Merancang/merumuskan Algoritma
3. Membuat Flowchart
4. Menulis Program
Modul Pelatihan Junior Programming
14
5. Uji hasil
Program yang baik memiliki standar penilaian:
1.
2.
3.
4.
Standar Prosedur
Tahap-tahap Pemrograman :
I. Fase Problem Solving
II. Fase Implementation
15
Analisa
Problem
Pembuatan
Program
Perancangan
Algoritma
Test
Dokumentasi
Test
Dipakai
Fase I
Fase II
2.4
a. Variabel
Variabel adalah sebuah identifier dimana nilainya dapat diubah-ubah dalam
badan program. Variabel yang akan digunakan dalam program harus didefinisikan dulu
dalam bagian deklarasi bersama tipe data yang akan mengisinya.
Sintaksnya:
Var nama_variabel : tipe_variabel;
Ketentuan untuk penamaan variabel :
1. Nama identifier maksimal 63 karakter, tidak diperkenankan adanya blank
(spasi).
2. Dapat terdiri atas huruf dan angka atau gabungan keduanya serta tanda garis
bawah ('_'). Namun harus didahului oleh huruf.
3. Tidak membedakan antara huruf besar dan huruf kecil.
4. Bukan Reserved Word Identifier.
5. Tidak boleh mengandung karakter yang dipakai untuk operator, seperti : (,),+, -,
*, /, <, >, : , ; dan lain-lain
16
b. Konstanta
Adalah sebuah identifier yang memiliki nilai yang tetap (tidak dapat diubahubah) dalam satu program. Constanta harus didefinisikan terlebih dulu dalam bagian
deklarasi. Penulisan untuk nilai konstanta yang bertipe teks atau string diapit dengan
tanda petik tunggal ().
Contoh :
Const
Gajiperjam = 5000;
Maksimal = 100;
c. Operator
Dalam melaksanakan proses pengolahan data, Delphi menyediakan berbagai operator,
yaitu :
-
Operator assignment ( :=) berfungsi untuk memasukkan suatu nilai data ke dalam
sebuah variabel, dengan bentuk penulisan :
Nama variabel := ekspresi;
Contoh :
Harga := 500;
Jumlah:=20;
Total:= harga * jumlah;
1. Operator Aritmatika
Operator
*
/
+
Div
Mod
2. Operator Relasi
Operator relasi, berfungsi untuk membandingkan suatu nilai (ekspresi) dengan
nilai (ekspresi) lain yang akan menghasilkan suatu nilai logika (boolean) yaitu
true dan false. Kedua data yang dibandingkan harus memiliki tipe data yang
sama. Contoh : =, >,<,>=,<=,<> (tidak sama dengan).
3. Operator Logika
Operator logika, dibagi dua:
17
Operator
And
Or
Not
Xor
Shl
Shr
Keterangan
Dan
Atau
Tidak
Exclusive or
Geser ke kiri
Geser ke kanan
Operator
And
Or
Not
Xor
Tipe Hasil
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Tipe Hasil
Boolean
Boolean
Boolean
Boolean
*Operator boolean selalu memberikan hasil true atau false, sedangkan operator bit berhubungan dengan
pergeseran atau pembandingan pada level bit (pada nilai integer).
d. Tipe data
Tipe data adalah pengelompokan data berdasarkan isi dan sifatnya. Dalam
logika kita tipe data adalah jenis dari sesuatu yang dapat dimasukkan ke dalam kotak
kosong yang hanya khusus dibuat untuk jenis benda dengan jenis tertentu.
Tipe data yang biasa digunakan dalam sebuah algoritma dan pemrograman
adalah:
1. String
Biasa digunakan untuk masukan data string ( String merupakan gabungan beberapa
character ).
2. Integer
Merupakan bilangan asli ( 1, 2, 3, 4, ...).
3. Real
Bilangan bulat (berupa pecahan dan integer).
4. Boolean
Digunakan untuk data logika yang berisi true atau false.
5. Character
Digunakan untuk menyatakan karakter satu huruf.
6. Byte
Besar dari type ini hanya 8 bit.
18
7. Word
Besar bilangan ini 16 bit.
8. Date and time
Type waktu dan tanggal yang disediakan Delphi
9. Array
Variabel tunggal yang digunakan untuk menyimpan sekumpulan data yang sejenis.
Contoh :
Var x : array[1..8] of longint;
Tabel 2.4 Ragam Tipe Data
Name
char
Description
Character or small integer.
Size*
1byte
short int
(short)
int
Short Integer.
2bytes
Integer.
4bytes
long int
(long)
Long integer.
4bytes
bool
1byte
Range*
signed: -128 to 127
unsigned: 0 to 255
signed: -32768 to 32767
unsigned: 0 to 65535
signed: -2147483648 to
2147483647
unsigned: 0 to 4294967295
signed: -2147483648 to
2147483647
unsigned: 0 to 4294967295
true or false
4bytes
8bytes
8bytes
2bytes
1 wide character
float
double
long double
wchar_t
2.5
Pengulangan
Salah satu kemampuan komputer yang dapat dimanfaatkan adalah mengulang
suatu instruksi, bahkan aksi, secara berulang-ulang dengan peformansi yang sama.
Berbeda dengan manusia yang cenderung melakukan kesalahan jika melakukan hal
yang sama (karena lelah atau bosan), komputer akan melakukan pengulangan dengan
setia sesuai dengan perintah yang diberikan.
Pengulangan terdiri dari dua bagian yaitu:
a. kondisi yang mengakibatkan pengulangan suatu saat berhenti, yang
dinyatakan oleh sebuah ekspresi logik baik secara eksplisit maupun implisit,
b. badan pengulangan, yaitu aksi yang harus diulang selama kondisi yang
ditentukan untuk pengulangan masih dipenuhi.
19
Bahasa Manusia
Kasus menuliskan sesuatu ke layar
sebanyak 10 kali, maka harus
diselesaikan dengan membuat kode
pengulangan yang akan dijalankan oleh
compiler
atau interpreter
sebanyak 10 kali dengan aksi yang harus
dijalankan adalah menuliskan sesuatu
ke layar
Kasus mencari rata-rata dari sepuluh
bilangan positif pertama, maka harus
diselesaikan dengan membuat kode
Modul Pelatihan Junior Programming
Bahasa Algoritmik
i : integer
for i=0 to 10 do
output("sesuatu")
{end for}
i : integer
hasil : integer
hasil <- 0
20
pengulangan
yang
menambahkan
bilangan 1 sampai sepuluh dengan
menggunakan
pengulangan
yang
dijalankan 10 kali, baru kemudian
hasilnya dibagi dengan banyaknya
bilangan, misalkan membuat sebuah
variabel yang menyimpan nilai awal 0
kemudian setiap dijalankan blok
pengulangan
dirinya
ditambahkan
dengan nilai berapa kali pengulangan
telah dijalankan, secara logika pada
akhir pengulangan variabel ini akan
bernilai 1 + 2 + 3 + ..... + 10 baru
kemudian dicari rata-ratanya
for i=1 to 10 do
hasil <- hasil
{end for}
hasil <- has
il / 10
2.5.1 For
Pengulangan menggunakan for biasanya digunakan untuk pengulangan yang
sudah jelas perlu dilakukan berapa kali, dengan kata lain jumlah pengulangan yang
dibutuhkan sudah diketahui oleh pembuat program.
Deklarasi penggunaan pengulangan for adalah sebagai berikut:
Tabel 2.6 Deklarasi For untuk pengulangan
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
{pengulangan
for
positif}
for nama_variabel <nilai_awal
to
nilai_berhenti do
{proses}
.............
{end for}
{pengulangan for
positif}
for i <- 1 to 10 do
{proses}
..............
{end for}
{pengulangan for
negatif}
for nama_variabel <nilai_awal
downto
nilai_berhenti do
/*
pengulangan
for
positif */
for(nama_variabel=nilai_
awal;nama_variabel
operator_relasi;nama_var
iabel++){
// proses
...................
}
/* pengulangan for
positif */
for(i=1; i <= 10; i++){
//proses
.................
}
/* pengulangan for
negatif */
for(nama_variabel=nilai_
awal;
nama_variabel
operator nilai_berhenti;
nama_variabel --){
relasi
// proses
.................
}
/* pengulangan for
negatif */
for(i=10; i >= 1; i--){
{proses}
...............
{end for}
{pengulangan for
negatif}
for i <- 10 downto 1
21
do
{proses}
...............
.................
//proses
end;
.................
}
{end for}
2.5.2 While
Pengulangan while biasa digunakan jika jumlah pengulangan tidak diketahui.
Pengulangan while akan melakukan pengulangan selama kondisi pengulangan
terpenuhi. Deklarasi pengulangan while adalah sebagai berikut:
Tabel 2.7 Deklarasi While untuk pengulangan
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
{inisialisasi}
...........
while
kondisi_pengulangan
do
{proses} .
.........
{iterasi}
{end while}
i : integer
// inisialisasi
.................
while kondisi_pengulangan do
begin
// proses
.............
// iterasi
end;
// inisialisasi
.................
while(kondisi_pengulanga
n){
// proses
.............
// iterasi
}
var i : integer;
int i;
{inisialisasi}
i <- 1
while i 9 do
{proses}
.............
{iterasi}
i <- i + 1
{end while}
begin
// inisialisasi
i := 1;
while i <= 9 do
begin
// proses
.............
// iterasi
i := i + 1;
end;
end.
// inisialisasi
i = 1;
while(i <= 9){
// proses
.............
// iterasi i = i + 1;
}
2.5.3 Repeat
Pengulangan repeat biasa digunakan jika jumlah pengulangan tidak
diketahui, namun berbeda dengan while karena kondisi pengulangan ada di bagian
bawah blok pengulangan. Pengulangan repeat minimal selalu dilakukan sekali karena
kondisi pengulangan ada di bagian bawah, berbeda dengan pengulangan while yang
saat pertama kali masuk blok pengulangan dilakukan pengecekan kondisi pengulangan.
Hal tersebut dapat dianalogikan dengan pada repeat letak dari "pos satpam" yang
22
bertugas memeriksa apakah kondisi program memenuhi syarat pengulangan atau tidak
berada di akhir blok pengulangan (dapat dianalogikan berada pada pintu keluar blok).
Bahasa Algoritmik
Bahasa Pascal
{inisialisasi}
...........
repeat
{proses}
..........
{iterasi}
{ inisialisasi }
...............
repeat
begin
{ proses }
...........
{ iterasi }
until
kondisi_terminasi
end;
until(kondisi_pengulangan
);
var i : integer;
i : integer
{inisialisasi}
i <- 1
repeat
{proses}
..........
{iterasi}
i <- i + 1
until (i = 2)
begin
{ inisialisasi }
i := 1;
repeat
begin
{ proses }
.............
{ iterasi }
i := i + 1;
end;
until(i = 2);
end.
Bahasa C
// inisialisasi
...............
do{
// proses
...........
// iterasi
}
while(kondisi_pengulanga
n);
int i;
// inisialisasi
i = 1;
do{
// proses
.............
// iterasi
i = i + 1;
}while(i < 2);
2.6
Percabangan
Percabangan if merupakan sebuah blok program yang menyatakan bahwa
sebuah aksi akan dijalankan jika kondisi percabangan dipenuhi jika tidak dipenuhi maka
Modul Pelatihan Junior Programming
23
aksi tidak akan dijalankan. Percabangan if biasa digunakan untuk mengerjakan aksi
yang memiliki syarat tertentu untuk menjalankannya.
Bahasa Algoritmik
nilai : char
input(nilai)
if nilai = 'A' or nilai = 'B' or
nilai = 'C' then
output("lulus")
{end if}
Percabangan merupakan salah satu inti dari analisis kasus pada pembuatan
algoritma, sebuah kasus harus dipikirkan penyelesaiannya dengan pemikiran ada
sebuah syarat dan proses atau aksi yang harus dikerjakan jika syarat tidak terpenuhi
dan jika syarat terpenuhi, misalkan membuat sebuah penyelesaian kasus menyatakan
apakah sebuah bilangan ganjil atau genap, maka dapat dibuat sebuah penyelesaian
sebagai berikut:
Tabel 2.9 Deklarasi If dalam bahasa algoritmik
Bahasa Manusia
Bahasa Algoritmik
24
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
if kondisi_percabangan
then
{proses}
............
{end if}
if kondisi_percabangan
then
begin
{ proses }
.............
end;
if(kondisi_percabangan){
ketemu : boolean
var
ketemu : boolean;
int ketemu = 1;
// proses
.............
}
begin
ketemu <- true
if ketemu = true then
{proses}
output("nilai
variabel ketemu : ",
ketemu)
ketemu := true;
if ketemu = true then
begin
{proses}
{end if}
end;
end.
if(ketemu == 1){
// proses
printf("nilai variabel
ketemu : true\n");
write('nilai variabel
ketemu : true\n');
}
berarti ketika eksekusi program sampai pada blok percabangan akan dilakukan
pengecekan nilai variabel ketemu, jika variabel ketemu bernilai true maka aksi
menuliskan nilai variabel ketemu ke layar akan dikerjakan, tapi jika nilai ketemu
adalah false maka aksi menuliskan nilai variabel ketemu ke layar tidak dikerjakan.
25
Bahasa Algoritmik
if kondisi_percabangan
then
{proses}
............
{end if}
else
{proses}
............
{end else}
ketemu : boolean
Bahasa Pascal
Bahasa C
if kondisi_percabangan
then
begin
{ proses }
.............
end else{
if(kondisi_percabangan){
begin { proses }
.............
end;
var ketemu : boolean;
.............
}
// proses
.............
} else{
// proses
int ketemu;
ketemu = 0;
if(ketemu == 1){
{ proses }
write('(if) nilai
variabel ketemu :
true');
end else
// proses
printf("(if) nilai
variabel ketemu :
true\n");
begin
} else{
{proses}
output("(else) nilai
variabel ketemu : ",
ketemu)
{ proses }
write('(else) nilai
variabel ketemu :
false');
{end else}
end;
end.
// proses
printf("(else) nilai
variabel ketemu :
false\n");
}
26
2.6.3 If dalam if
Sebuah program mengijinkan blok percabangan if di dalam blok percabangan
lainnya, dan tidak membatasi jenis percabangan apa yang boleh berada di dalam
percabangan lainnya misalnya dalam bahasa algoritmik berikut:
if kondisi_percabangan_1 then
{ proses jika kondisi percabangan 1 terpenuhi }
if kondisi_percabangan_1_1 then
{ proses jika kondisi percabangan 1_1 terpenuhi }
{end if}
if kondisi_percabangan_1_2 then
{ proses jika kondisi percabangan 1_1 terpenuhi atau tidak
terpenuhi dan kondisi percabangan 1_2 terpenuhi }
{end if}
{end if}
else
{ proses jika kondisi percabangan 1 tidak terpenuhi }
{end else}
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
depend on
(nama_variabel)
case nama_variabel of
switch(nama_variabel){
nilai_variabel_1 :
nilai_variabel_1 :
begin
aksi_1
end;
nilai_variabel_2 :
begin
aksi_2
end;
.................
nilai_variabel_n :
begin
aksi_n
case nilai_variabel_1 :
aksi_1
break
nilai_variabel_2 :
aksi_2
break
...................
nilai_variabel_n :
aksi_n
aksi_1
break;
case nilai_variabel_2 :
aksi_2
break;
.................
case nilai_variabel_n :
27
break
default :
aksi_standar break
{end depend on}
end;
else
begin
aksi_standar
end;
end;
depend on (hari)
1:
output("hari senin")
break
case hari of
1:
begin
write('hari senin');
end;
2:
output("hari selasa")
break
2: begin
write('hari selasa');
end;
3:
output("hari rabu")
break
..................
3: begin
write('hari rabu');
end; ..................
7:
output("hari minggu")
break
default :
output("tidak ada hari
ke : ", hari)
break
{end depend on}
2.7
7: begin
write('hari minggu');
end;
else
begin write('tidak ada hari
ke : ', hari);
end;
end;
aksi_n
break;
default :
aksi_default
break;
}
switch(hari)
{ case 1 :
printf("hari senin");
break;
case 2 :
printf("hari selasa");
break;
case 3 :
printf("hari rabu");
break;
..................
case 7 :
printf("hari minggu");
break;
default :
printf("tidak ada hari
ke : %d\n", hari);
break;
}
Array (Larik)
Array secara gambaran pada dunia nyata hampir sama dengan tabel, dimana
tabel adalah sekumpulan elemen yang pada setiap elemennya dapat diakses dengan
indeksnya. Array biasa digunakan untuk menyimpan banyak data dalam sebuah tabel
yang terstruktur. Array merupakan bagian penting dalam penyimpanan data pada
pemrograman, karena alokasi atau pemesanan tempat dalam sebuah array tergantung
dari kebutuhan. Array sangat penting dalam penyimpanan data karena jika array tidak
ada bayangkan saja jika dibutuhkan sepuluh tempat untuk menyimpan sepuluh nilai,
apakah harus dibuat sepuluh buah variabel, bisa jadi dalam pengaksesannya nanti akan
menjadi sangat rumit.
Type array adalah type yang mengacu kepada sebuah atau sekumpulan elemen
melalui indeks. Elemen dari array dapat diakses langsung jika dan hanya jika indeks
terdefinisi (ditentukan harganya dan sesuai dengan domain yang didefinisikan untuk
28
indeks tersebut) . Array biasanya disebut juga sebagai tabel, vektor atau larik. Nama
suatu array diasosiasikan dengan banyak nilai elemennya yang disimpan dalam nama
tersebut.
Struktur data ini dipakai untuk merepresentasikan sekumpulan informasi yang
bertype sama, dan disimpan dengan urutan yang sesuai dengan definisi indeks secara
kontigu dalam memori komputer . Karena itu indeks harus suatu type yang mempunyai
keterurutan (ada suksesor dan predesesor), misalnya type integer, karakter.
Jika indeksnya adalah integer, maka keterurutan indeks sesuai dengan urutan
integer (suksesor adalah plus satu, predesesor adalah minus satu) Jika indeksnya
ditentukan sesuai dengan enumerasi (misalnya bertype pada karakter), maka
keterurutan indeks ditentukan sesuai dengan urutan enumerasi.
Contoh deklarasi Array adalah:
KAMUS
TabNamaHari: array [1..7] of string
TabJumlahHari : array [1..12] of integer
type Point : <x:integer, y:integer >
type Indeks : integer [1..10]
TabTitikSurvey : array [Indeks] of Point
TabFREK : array
['A'..'Z'] of integer
Domain :
Domain array sesuai dengan pendefinisian indeks
Domain isi array sesuai dengan jenis array
Konstanta :
Konstanta untuk seluruh array tidak terdefinisi,
Konstanta hanya terdefinisi jika indeks dari array terdefinisi
Cara mengacu sebuah elemen: melalui indeks
TabNamaHarii, jika i terdefinisi
TabNamaHari7
TabJumlahHari3
29
Nama hari dalam minggu akan direpresentasi sebagai array sebagai berikut, dan harus
dituliskan sebuah algoritma yang membaca hari ke berapa [1..7], kemudian menuliskan
nama harinya.
Contoh:
Input : 1
Input : 6
Output Senin
Output Sabtu
Program NamaHari
{ Mengisi TabelNamaHari yang akan memungkinkan untuk menuliskan nama
hari : tabulasi eksplisit nama hari berdasarkan indeks HariKe... }
Kamus :
TabelNamaHari :
array [1..7] of string
procedure IsiTabHari
{ mengisi tabel nama hari }
HariKe : integer [1..7] {nomor dari hari}
Algoritma :
IsiTabHari { Contoh pemanfaatan setelah Tabel TabNamaHari terdefinisi
isinya }
Input (HariKe) Output ( TabelNamaHariHariKe)
procedure IsiTabHari
{ mengisi tabel nama hari }
{ I.S : TabNamaHari tak terdefinisi }
{ F.S. : TabNamaHari siap dipakai, semua elemennya [1..7] sudah diisi }
Kamus lokal :
Algoritma :
TabelNamaHari
TabelNamaHari
TabelNamaHari
TabelNamaHari
TabelNamaHari
TabelNamaHari
TabelNamaHari
1
2
3
4
5
6
7
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Minggu
30
Berikut ini adalah prosedur untuk membaca sebuah kata dari keyboard, dan
menuliskan kata yang dibaca serta panjangnya ke layar dengan menggunakan kamus
umum di atas:
Procedure BacaTulisKata
{I.S. sembarang; F.S : sebuah kata dibaca dan dituliskan kembali di
layar. Jika karakter yang diketikkan melebihi panjang kata maksimum,
pembacaan dihentikan dan pada akhir proses dituliskan pesan. Jika
program terus menerus membaca tanpa menghentikan pembacaan ketika
ukuran array dilampaui, program akan abort. Maka jika pengguna
mengetikkan sejumlah karakter yang melebihi kapasitas pendefinisian
tabel TabKata, pembacaan dihentikan. }
Kamus lokal :
K : Kata
cc : character
i : integer
Algoritma :
{ Baca kata huruf demi huruf, pembacaan diakhiri dengan huruf @}
{ skema pemrosesan sekuensial dengan mark, dengan kasus kosong }
input (cc ) {First-Elmt}
K.Length 0 {Inisialisasi, harus di sini spy kata kosong
terdefinisi}
if (cc = @)then
output (tidak ada kata yang dibaca) {Proses-Kasus-Kosong}
else
repeat
K.Length K.Length + 1
K.TabKatai cc {Proses-Current-Elmt }
input (cc ) {Next-Elmt }
until (cc = @ or K.Length = Maxkata)
{Terminasi }
depend on TabKatai :
cc
= @ : output (Pembacaan kata dihentikan)
cc = @ : output (Kata yang dibaca adalah : )
{ Penulisan kata }
i traversal [1..K.Length]
output (K.TabKatai)
output (Panjang kata : , K.Length)
2.8
Sequential File
Sequential file (Arsip sekuensial) adalah sekumpulan rekaman yang disimpan
dalam media penyimpanan sekunder komputer, yang dapat diakses secara sekuensial
mulai dari rekaman pertama sampai dengan rekaman yang terakhir, rekaman per
rekaman secara searah. Rekaman terakhir adalah rekaman fiktif, yang menandai akhir
dari arsip. Pada beberapa implementasi, rekaman fiktif ini disebut sebagai EOF (End Of
File). Arsip sekuensial berasal dari hasil perekaman (penulisan) yang juga dilakukan
rekaman per rekaman.
Setiap rekaman boleh berisi type dasar ataupun type terstruktur yang telah
didefinisikan, setiap rekaman strukturnya sama. Elemen dari rekaman disebut sebagai
31
"field", ada field (atau juga sekumpulan field) rekaman yang disebut sebagai "key"
karena kekhususannya dalam proses. Jika key dari setiap rekaman tidak ada yang sama
(unik), maka key menjadi identitas rekaman, dan disebut "primary key".
Setiap rekaman dapat diakses dan dikonsultasi (dibaca) menurut urutannya
dengan pemanggilan primitif akses yang tersedia. Perekaman dapat dilakukan melalui
primitif penulisan. Perhatikan bahwa suatu arsip sekuensial hanya dapat disiapkan
hanya pada salah satu modus operasi: diakses/dibaca, atau ditulis. Dalam definisi arsip
sekuensial, tidak pernah sebuah arsip diproses untuk kedua modus: dibaca dan
sekaligus ditulis. Primitif-primitif tersebut, akan didefinisikan kemudian.
MARK
Rekaman Pertama
Urutan Akses
(satu per satu)
Rekaman Terakhir
Rekaman Kedua
Cara Pendefinisian:
type rekaman : <.........> sebuah type terdefinisi untuk setiap rekaman
NamaArsip : SEQFILE of
(*) <nama_rek>: rekaman (
1) <mark>
Catatan:
Pada beberapa pemroses bahasa, primitif ASSIGN diberikan dalam teks
algoritma, dan dalam beberapa pemroses bahasa pemrograman yang lain diberikan di
luar program (pada Job Control Language). Pada teks algoritma di buku ini, perintah
ASSIGN tidak diberikan di dalam teks algoritma.
32
Contoh:
Sebuah arsip sekuensial berisi data mahasiswa, yang setiap rekamannya memuat data NIM,
Nama dan Nilai akhir mahasiswa.. Maka dapat dituliskan:
type rekaman : < NIM:integer, Nama : string, Nilai :integer [0..100]>
ArsipMhs : SEQFILE of
(*) RekMhs : rekaman
(1) <9999999, '',0>
Domain setiap rekaman : sesuai dengan domain masing-masing rekaman Konstanta : sebuah
rekaman, misalnya :
<7473001,'Juliette',95> <8690022,'Laura',80>
Cara akses rekaman pertama : OPEN (ArsipMhs, RekMhs)
Cara akses : { NIM = 9999999 } READ (ArsipMhs, RekMhs )
Cara menyiapkan untuk direkam:REWRITE (ArsipMhs)
Cara mengisi :
WRITE (ArsipMhs, RekMhs ) {Harga Current }
33
34
BAB 3.
3.1
PEMROGRAMAN ALGORITMA
LANJUT
Array Multidimensi
Sering kali digambarkan/dianalogikan sebagai sebuah matriks. Jika array
berdimensi satu hanya terdiri dari 1 baris dan banyak kolom, array berdimensi dua
terdiri dari banyak baris dan banyak kolom yang bertipe sama.
Contoh struktur matriks adalah:
3.2
0
5
4
9
1
20
7
0
2
1
67
45
3
11
9
3
Contoh:
int matriks[3][4];
int matriks2[3][4] = { {5,20,1,11}, {4,7,67,-9}, {9,0,45,3} };
#include <stdio.h>
#include <conio.h>
int main ()
{
int x(3) (3) = ((1,2,3), (4,5,6), (7,8,9)), b,k;
printf(BENTUK BIASA\n);
for (b=0; b<3; k++)
for (k=0; k<3; k++)
printf(x(%d) - %d\n,b,k,x(b) (k));
35
3.3
3.4
yang berbeda adalah cara penentuan indeks, yaitu menggunakan nested looping.
Untuk pengisian matrik dapat digunakan fungsi berikut:
void isi_matriks(int MatX[][MATSIZE],int bar, int kol)
{
int i,j;
for(i=0;i<bar;i++)
for(j=0;j<kol;j++){
cout << "Elemen Matriks [<<i<<,<<j;
cin >> MatX[i][j]);
}
}
36
3.5
23
35
46
87
a[0] = 27
a[1] = 23
.
.
a[4] = 87
Contoh 1:
#include <iostream.h>
#include <conio.h>
37
main() {
int a[5];
cout<<"Data ke 0 = ";cin>>a[0];
cout<<"Data ke 1 = ";cin>>a[1];
cout<<"Data ke 2 = ";cin>>a[2];
cout<<"Data ke 3 = ";cin>>a[3];
cout<<"Data ke 4 = ";cin>>a[4];
int jumlah;
jumlah=a[0]+a[1]+a[2]+a[3]+a[4];
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Contoh 2:
#include <iostream.h>
#include <conio.h>
main() {
int a[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Tipe array juga dapat digabungkan dengan pointer. Untuk itu kita akan melakukan
perubahan pada contoh 3 menjadi sebagai berikut:
Contoh 3:
#include <iostream.h>
#include <conio.h>
main() {
int *a=new int[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
38
cout<<"\nData = "<<*a;
atau instuksi :
cout<<"\nData = "<<a[0];
akan mempunyai arti yang sama, data akan diambil dari data pertama (alamat 0).
Selain itu untuk input data dan proses penjumlahan, dapat juga dibuat dalam bentuk
fungsi seperti pada contoh 4. Perhatikan pada saat tipe array menjadi parameter
fungsi, jumlah data yang tersimpan dalam array boleh ditulis boleh tidak (optional).
Sehingga bisa ditulis dengan : b[] saja
Contoh 4 :
#include <iostream.h>
#include <conio.h>
void input_array(int b[],int n)
{ for(int i=0;i<n;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>b[i]; }
}
int jumlah(int b[],int n)
{ int hasil=0;
for(int i=0;i<n;i++)
hasil+=b[i];
return hasil;
}
main() {
int a[100];
int bd;
cout<<"Masukkan banyaknya data = ";cin>>bd;
input_array(a,bd);
cout<<"\n\nJumlahnya = "<<jumlah(a,bd);
getch();
}
39
}
}
void urutkan(int a[], int n)
{ int temp;
for(int i=0;i<n;i++)
for(int j=0;j<(n-i);j++)
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
void tampil(int a[], int n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
main() {
int a[100];
int jml;
cout<<"Banyak data = ";cin>>jml;
masukan(a,jml);
urutkan(a,jml);
cout<<"\n\nSetelah diurutkan ";
tampil(a,jml);
getch();
}
Pada contoh program diatas ada tiga fungsi, fungsi pertama digunakan untuk
menginputkan data ke dalam array, fungsi kedua untuk mengurutkan arraynya, dan
fungsi ketiga untuk menampilkan data yang tersimpan di array ke layar.
Array 2 Dimensi
Contoh deklarasi :
int a[4][5];
0
1
2
3
4
0
25
6
1
15
0
1
40
8
3
22
5
2
26
12
8
13
7
3
12
5
9
19
15
Mengakses data :
a[0][0] = 25
a[0][1] = 40
.
.
40
Perhatikan pada saat array 2D menjadi parameter fungsi, jumlah baris boleh
ditulis boleh tidak, tetapi jumlah kolom harus ditulis. Tipe array dapat dikembangkan
menjadi array multidimensi. Misal 3D, 4D, dan sebagainya.
41
3.6
Prosedur
Prosedur adalah sebuah blok program tersendiri yang merupakan bagian dari
program lain yang lebih besar. Prosedur dapat dipanggil oleh program utamanya
ataupun oleh prosedur lain yang juga merupakan bagian dari program utamanya
(masih dalam satu kode program). Sebuah program yang memiliki prosedur biasanya
terdiri dari satu atau lebih prosedur dan satu program utama.
Kode Program
Prosedur
Prosedur
Program
Utama
Orang yang pertama kali belajar memprogram sering kali berpikir kenapa
diperlukan prosedur, kenapa tidak hanya satu program utama saja. Prosedur memiliki
beberapa keuntungan sebagai berikut :
1. Memecah-mecah program menjadi lebih sederhana, misalnya jika diperlukan
proses pencarian berkali-kali jika hanya terdiri dari satu program utama tanpa
prosedur, maka kode program pencarian akan beberapa kali ditulis ulang dan
hasilnya dapat memperbesar ukuran file. Untuk lebih jelasnya dapat dilihat pada
gambar 3.2.
42
Kode Program
Kode Program
Program Utama
Prosedur Pencarian
Panggil Prosedur
Pencarian
Panggil Prosedur
Pencarian
Panggil Prosedur
Pencarian
2. Blok program yang digunakan jelas jika akan digunakan pada program lain, cukup
dengan mengkopi satu prosedur dan meletakkannya pada program lain yang
membutuhkannya dan program lain tersebut tinggal memanggil prosedur tersebut.
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
procedure
nama_prosedur(input:
variabel_input1 :
tipe_data; ......;
variabel_inputn :
tipe_data)
procedure
nama_prosedur(variabel_i
nput1 : tipe_data;
.......; variabel_inputn
: tipe_data);
var {variabel}
void
nama_prosedur(tipe_data
variabel_input1,
......., tipe_data
variabel_inputn){
{proses}
..................
{end procedure}
begin
{ proses }
......................
end;
procedure
cariNama(input: nama
: string)
procedure cariNama(nama
: string); var
{variabel}
// proses
....................
}
void cariNama(char
nama[]){
43
{proses}
...................
{end procedure}
begin
{ proses }
......................
// proses
......................
}
end;
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
nama_prosedur(variabe
l_ masukan)
cariNama(nama)
nama_prosedur(variabel
_m asukan);
cariNama(nama);
nama_prosedur(variabel
_m asukan);
cariNama(nama);
Bahasa Algoritmik
procedure nama_procedure(input
nama_variabel : tipe_data)
Keterangan
:
44
procedure
nama_procedure(input/output
nama_variabel : tipe_data)
3.7
nilai
Fungsi
Fungsi adalah sebuah blok program tersendiri yang merupakan bagian dari
program lain yang lebih besar sama halnya dengan prosedur hanya saja fungsi memiliki
hasil keluaran sedangkan prosedur hanya berisi proses. Fungsi dapat dipanggil oleh
program utamanya ataupun oleh prosedur atau fungsi lain yang juga merupakan
bagian dari program utamanya (masih dalam satu kode program).
Sebuah program bisa terdiri dari satu atau lebih prosedur, satu atau lebih
fungsi, dan satu program utama. Fungsi juga memiliki keuntungan- keuntungan seperti
halnya prosedur, hal paling mendasar yang membedakan prosedur dan fungsi adalah
fungsi menghasilkan sebuah keluaran sedangkan prosedur tidak. Pada gambar xxx,
prosedur melakukan proses dan melakukan perubahan nilai di dalam proses yang
dilakukan di dalam prosedur, keluaran atau output yang ada pada deklarasi prosedur
berarti nilai variabel itu akan berubah bergitu prosedur dijalankan sedangkan fungsi
melakukan proses dan perubahan nilai dengan proses di dalam fungsi namun fungsi
menghasilkan nilai keluaran yang dapat ditangkap oleh sebuah variabel.
45
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
function
nama_fungsi(nama_vari
abel_ masukan :
tipe_data)
-> tipe_data_keluaran
function
nama_fungsi(nama_varia
bel_ masukan :
tipe_data) :
tipe_data_keluaran;
var
tipe_data_keluaran
nama_fungsi(tipe_d ata
nama_variabel_masu
kan){
{proses}
.....................
...
-> variabel_keluaran
{end function}
function
nilaiTerbesar(a :
integer; b : integer,
c : integer)
-> integer
{proses} integer
hasil
.....................
....
-> hasil
{end function
begin
{ proses }
......................
.....
nama_fungsi
:=
variabel_keluaran;
end;
function
nilaiTerbesar(a :
integer; b : integer;
c : integer) :
integer;
var hasil : integer;
begin { proses }
......................
..
// proses
......................
.....
return
variabel_keluaran; }
int nilaiTerbesar(int
a, int b, int c){
// proses int hasil;
......................
..
return hasil;
}
nilaiTerbesar :=
hasil;
end;
46
Bahasa Algoritmik
Bahasa Pascal
Bahasa C
nama_variabel
<nama_fungsi
(variabel_masukan)
nama_variabel
:=
nama_fungsi(variabel_mas
ukan);
nama_variabel
=
nama_fungsi(variabel_ma
sukan);
maksimum <nilaiTerbesar(a, b,
c)
maksimum :=
nilaiTerbesar(a, b, c);
maksimum =
nilaiTerbesar(a, b, c);
Berikut adalah sebuah fungsi yang menghasilkan hasil perkalian dari tiga buah
parameter masukan:
Tabel 3.6 Deklarasi memanggil Fungsi
Bahasa Manusia
Bahasa Algoritmik
function
hasilKali(a
: integer; b
Mendeklarasikan fungsi hasilKali yang
: integer; c : integer)-> integer
menghasilkan nilai hasil perkalian dari
tiga buah variabel masukan
Mendeklarasikan variabel hasil yang
nilainya merupakan nilai keluaran
fungsi
Mendeklarasikan
program utama,
mendeklarasikan tiga variabel masukan
dan variabel hasil, memanggil fungsi
hasilKali serta menampilkannya ke layar
hasil : integer
hasil <- a * b * c
-> hasil
{algoritma utama}
a : integer
b : integer
hasil : integer
a <- 1
b <- 2
c <- 3
hasil <- hasilKali(a, b, c)
output("hasil
perkalian
:
hasil)
{end algoritma utama}
3.8
",
fisika,
etc)
menggunakan
sistem
koordinat
cartesius
untuk
47
merepresentsikan dunia 2 dimensi (2D). Hal ini tidak berbeda dengan penggunaan
sistem koordinat pada komputer. Namun ada sedikit perbedaan dalam referensi titik
pusat (origin) yang digunakan dan arah dari sumbu-y yang digunakan.
Pada sistem koordinat normal titik pusat (0,0) tampak berada pada bagian
tengah sebuah diagram cartesius diantara perpotongan 4 sumbu. Sedangkan pada
sistem koordinat komputer titik pusat (0,0) terletak pada pojok kiri atas layar monitor
komputer, sehingga titik yang berada pada sumbu x dan sumbu y tidak akan tampak
pada layar monitor komputer.
48
}
void buatLingkaran(int cx, int cy,int r, int c)
{
// Menggunakan optimasi algoritma lingkaran
float s=0.0;
int x,y;
while(s<M_PI_4)
{
x=(float)r*cos(s);
y=(float)r*sin(s);
putpixel(cx+x,cy+y,c);
putpixel(cx+x,cy-y,c);
putpixel(cx-x,cy+y,c);
putpixel(cx-x,cy-y,c);
putpixel(cx+y,cy+x,c);
putpixel(cx+y,cy-x,c);
putpixel(cx-y,cy+x,c);
putpixel(cx-y,cy-x,c);
s+=0.005f;
}
}
int main()
{
// Mulai menggunakan mode grafik
int a;
mulaimodegrafik (..\\BGI\\);
// Mulai menggambar disini.
// lingkaran
buatLingkaran(250,260,5,15);
buatLingkaran(300,250,25,20);
buatLingkaran(393,186,50,2);
for(a=1;a<=200;a++)
{
// garis vertikal
putpixel(200,200+a/2,1);
putpixel(220,120+a/3.3,1);
putpixel(260,120+a/9,1);
putpixel(220,220+a/2.5,20);
putpixel(260,220+a/2.5,20);
putpixel(330,200+a/2,1);
putpixel(300,225+a/4,15);
putpixel(380,235+a/3,20);
putpixel(405,235+a/3,20);
// garis horizontal
putpixel(200+a/1.55,200,53);
putpixel(220+a/5,220,20);
putpixel(220+a/5,120,1);
putpixel(275+a/4,250,15);
putpixel(200+a/1.55,300,1);
putpixel(380+a/8,300,20);
// garis diagonal
putpixel(265-a/3,135+a/3,53);
putpixel(265+a/3,135+a/3,53);
delay(10);
}
getch();
tutupmodegrafik();
return 0;
}
49
Garis Vertikal
Untuk setiap y dari y1 sampai y2, gambarlah pixel pada posisi x,y dengan warna
c dikarenakan x tidak berubah.
UNTUK y = y1 SAMPAI y2 LONCAT 1 putpixel(x, y, c) ULANGI y.
Garis horizontal
Untuk setiap x dari x1 sampai x2, gambarlah pixel pada posisi x,y dengan warna
c dikarenakan y tidak berubah.
UNTUK x = x1 SAMPAI x2 LONCAT 1 putpixel(x, y, c) ULANGI x.
Garis diagonal
Untuk setiap y dari y1 sampai y2, dan x mulai dari x1 gambarlah pixel pada
posisi x, y dengan warna c.
X = x + 1
X = x1
UNTUK y = y1 SAMPAI y2 LONCAT 1
Putpixel(x, y, c)
X = x + 1
ULANGI y
Atau
Untuk setiap x dari x1 sampai x2, dan y mulai dari y1 gambarlah pixel pada posisi x, y
dengan warna c
Y = y + 1
Y = y1
UNTUK x = x1 SAMPAI x2 LONCAT 1
Putpixel(x, y, c)
Y = y + 1
ULANGI x
50
Dengan mendeklarasikan seperti di atas, Barang akan mengandung tiga buah field,
yaitu :
-
Nama,
Kualitas,
Harga.
51
Variabel.field
Sebagai contoh :
Barang.Nama
Dengan cara seperti di atas, field Nama dari record Barang berisi string Ubin TISKA
20x20. Isi dari suatu field ditampilkan dengan menggunakan Write atau Writeln.
Contoh :
Writeln (Barang.Nama);
Merupakan perintah untuk menampilkan isi field Nama dari record Barang.
Contoh program yang memberikan gambaran pendeklarasian record, pengisian
terhadap field-field serta menampilkan isi masing-masing field dapat dilihat di bawah
ini.
Program Rec1;
Uses crt;
Type
RecBarang = Record
Nama
: String[25];
Kualitas
: Char;
Harga
: LongInt
End;
Var
Barang : RecBarang;
{variabel bertipe record}
Begin
Clrscr;
{Penugasan nilai terhadap field-field}
Barang.Nama := Kabel Console;
Barang.Kualitas := 1;
Barang.Harga := 150000;
{menampilkan isi field}
writeln (Nama Barang
: , Barang.Nama);
writeln (Kualitas
: , Barang.Kualitas);
writeln (Harga
: , Barang.Harga);
Readln
52
End.
Hasil program :
Nama Barang : Kabel Console
Kualitas
: 1
Harga
: 150000
: , Barang2.Nama);
: , Barang.Kualitas);
: , Barang.Harga);
53
: 1
Harga
: 150000
: String [35];
TglLahir
Gaji
: RecTanggal;
: LongInt
End;
Tampak bahwa tipe record bernama RecPegawai berisi record yang lain
(RecTanggal). Hal yang menarik yang perlu diperhatikan adalah cara mengakses
field seperti Tanggal, Bulan dan Tahun. Notasi yang diperlukan adalah sebagai berikut.
Nama_variabel.TglLahir.Tanggal
Nama_variabel.TglLahir.Bulan
Nama_variabel.TglLahir.Tahun
Praktekkan program berikut, untuk mencoba pembuatan record dengan bentuk seperti
di atas.
Program Rec3;
Uses crt;
Type
RecTanggal = Record
Tanggal,
Bulan,
54
Tahun : Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : string [35];
TglLahir
: RecTanggal;
Gaji : longInt
End;
Var
DataPeg : RecPegawai;
{variabel betipe record}
Begin
Clrscr;
Penugasan nilai terhadap field-fiedl}
DataPeg.Nomor := 891011;
DataPeg.Nama
:= Noorhadi;
DataPeg.TglLahir.Tanggal := 11;
DataPeg.TglLahir.Bulan := 11;
DataPeg.TglLahir.Tahun := 1971;
DataPeg.Gaji := 1200000;
{menampilkan isi field}
Writeln (Nama Pegawai
: , DataPeg.Nama);
Writeln (Tanggal Lahir
: , DataPeg.TglLahir.Tanggal,
/, DataPeg.TglLahir.Bulan,
/, DataPeg.TglLahir.Tahun);
Readln
End.
: Noorhadi
Tanggal Lahir
: 11 / 11 / 1971
e. Pernyataan With
Untuk menyederhanakan notasi seperti :
DataPeg.TglLahir.Tanggal
Turbo Pascal menyediakan pernyataan WITH. Bentuk pernyataan ini adalah sebagai
berikut :
With nama_record do
pernyataan
Pada bentuk ini, field-field yang terletak pada bagian pernyataan dapat
disebutkan tanpa perlu menyertakan lagi nama record dan tanda titik. Untuk lebih
jelasnya, perhatikan program berikut yang merupakan alternatif lain dari program di
atas.
55
Program Rec4;
Uses crt;
Type
RecBarang = Record
Nama : String [25];
Kualitas
: Char;
Harga : LongInt
End;
Var
Barang : RecBarang;
{variabel bertipe record}
Begin
Clrscr;
{penugasan nilai terhadap field-field}
With Barang do
Begin
Nama := Kabel Console;
Writeln (Nama Barang
: , Nama);
Writeln (Kualitas
:, Kualitas);
Writeln (Harga
:, Harga);
End;
Readln
End.
Bila suatu record memiliki record lain, pernyataan With dapat diikuti dengan with yang
lain. Sebagai contoh, program di atas ditulis menjadi :
Program Rec5;
Uses crt;
Type
RecTanggal = Record
Tanggal,
Bulan,
Tahun : Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : string [35];
TglLahir
: RecTanggal;
Gaji : LongInt
End;
Var
DataPeg : RecPegawai; {variabel bertipe record}
Begin
Clrscr;
{Penugasan nilai terhadap field-field}
With DataPeg do
With TglLahir do
Begin
Nomor := 891011;
Nama := Noorhadi;
Tanggal
:= 11;
Bulan := 11;
Tahun := 1971;
Gaji := 1200000;
End;
{menampilkan isi field}
With DataPeg do
With TglLahir do
56
Begin
Writeln (Nama Pegawai :, DataPeg.Nama);
Writeln (Tanggal lahir :, DataPeg.TglLahir.Tanggal,
/, DataPeg.TglLahir.Bulan
/, DataPeg.TglLahir.Tahun)
End;
Readln
End.
Pernyataan seperti :
With DataPeg do
With TglLahir do
Program Rec6;
Uses crt;
Type
RecTanggal = Record
Tanggal,
Bulan,
Tahun : Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : string [35];
TglLahir
: RecTanggal;
Gaji : LongInt
End;
Var
DataPeg : RecPegawai; {variabel bertipe record}
Begin
Clrscr;
{Penugasan nilai terhadap field-field}
With DataPeg, TglLahir do
Begin
Nomor := 891011;
Nama := Noorhadi;
Tanggal
:= 11;
Bulan := 11;
Tahun := 1971;
Gaji := 1200000;
End;
{menampilkan isi field}
With DataPeg, TglLahir do
Begin
Writeln (Nama Pegawai :, DataPeg.Nama);
Writeln (Tanggal lahir :, DataPeg.TglLahir.Tanggal,
/, DataPeg.TglLahir.Bulan
/, DataPeg.TglLahir.Tahun)
End;
57
Readln
End.
f. Array Record
Elemen suatu array juga bisa berupa record. Sebagai contoh dapat dilihat di
bawah ini.
Const
Jum_Maks = 20;
Type
RecBarang = Record
Nama : String [25];
Kualitas
: Char;
Harga : LongInt
End;
TabelBarang = Array [ 1 . . Jum_Maks] of RecBarang;
Var
DafBarang : TabelBarang;
{array record}
Pada contoh di atas, DafBarang adalah array yang maksimum berisi 20 buah elemen
bertipe record.
Untuk mengakses suatu field, kita perlu menggunakan notasi :
DafBarang [indeks].NamaField
Program Rec7;
Uses Crt;
Const
Jum_Maks = 20;
Type
RecBarang = Record
Nama : string [25];
Kualitas
: char;
Harga : longInt
End;
TabelBarang = Array [ 1 . . Jum_Maks] of RecBarang;
Var
DafBarang : TabelBarang;
JumBarang : Integer;
{array record}
58
4.2
Pointer
Pointer adalah suatu variabel penunjuk yang menunjuk pada suatu alamat
memori komputer tertentu. Pointer merupakan variabel level rendah yang dapat
digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan
bahkan tipe-tipe data lain yang didukung oleh bahasa C. Variabel biasa, sifatnya statis
dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel.
Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL,
dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat
diprediksi.
59
ampersand, atau menunjuk pada nama variabel array pada indeks yang ke nol nya.
Untuk lebih jelasnya, silahkan lihat contoh berikut:
Pendeklarasian variabel biasa dan pointer:
//variabel biasa
int nilai1 = 4;
float nilai2 = 3.5;
char nama[10] = anton; //array of char (string)
//variabel pointer
int *nilai_p1; //dangling pointer
int *nilai_p2 = &nilai1; //menunjuk ke tipe data int
char *nilai_p3 = nama; //menunjuk ke tipe data array of char
char *nilai_p4 = &nama[0];
Ilustrasi Pointer:
Contoh program untuk dicoba:
#include
#include
int main(){
int nilai1 = 4;
int nilai2 = 5;
float nilai3 = 3.5;
char nama[11] = "abcdefghij";
int *nilai_p1 = &nilai1;
int *nilai_p2 = &nilai2;
char *nilai_p4 = nama;
float *nilai_p3= &nilai3;
printf("nilai 1 = %d, alamat1 = %p, ukuran
%d\n",*nilai_p1,&nilai_p1,sizeof(nilai1));
printf("nilai 2 = %d, alamat2 = %p, ukuran
%d\n",*nilai_p2,&nilai_p2,sizeof(nilai2));
printf("nilai 3 = %f, alamat3 = %p, ukuran
%d\n",*nilai_p3,&nilai_p3,sizeof(nilai3));
printf("nilai 4 = %s, alamat4 = %p, ukuran
%d\n",nama,&nilai_p4,sizeof(nama));
getch();
return 0;
}
Operasi pointer:
1. Operasi Pemberian nilai
Contoh 1:
#include
#include
int main(){
float nilai,*p1,*p2;
nilai = 14.54;
printf("nilai = %2.2f, alamatnya %p\n",nilai,&nilai);
p1 = &nilai;
60
61
2. Operasi Aritmatika
#include
#include
int main(){
int a,b=10,*p,*q;
p=&a;
*p=25;
printf("nilai a = %d\n",a);
printf("alamat p = %p\n",p);
q=&b;
printf("alamat q = %p\n",q);
printf("nilai a + b = %d\n",(*p+*q));
//posisi alamat p menjadi bergeser, nilai berubah
p=p+1;
printf("nilai p = %d, alamat = %p\n",*p,&p);
q=q-1;
printf("nilai q = %d, alamat = %p\n",*q,&q);
getch();
}
Pointer pada array 1 dimensi:
#include
#include
int main(){
char S[] = "anton";
char *p;
//cara 1
//langsung menunjuk nama array.
p=S;
for(int i=0;i<5;i++){ printf("%c",*p); p++; } printf("\n"); //cara 2
p=&S[0]; for(int i=0;i<5;i++){ printf("%c",*p); p++; } printf("\n");
//Membalik kalimat p--; for(int i=0;i<5;i++){ printf("%c",*p); p--; }
printf("\n"); getch(); } Pointer pada Struct: #include
#include
typedef struct{
int nim;
int umur;
float ipk;
} Mahasiswa;
Mahasiswa m;
Mahasiswa *p = &m;
int main(){
//struct biasa
m.nim=123;
m.ipk=3.2;
m.umur=23;
printf("nim = %d\n",m.nim);
printf("ipk = %f\n",m.ipk);
printf("umur = %d\n",m.umur);
//struct pointer
p->ipk = 3.5;
p->nim = 321;
p->umur = 32;
printf("nim = %d\n",p->nim);
printf("ipk = %f\n",p->ipk);
62
printf("umur = %d\n",p->umur);
//mengacu pada variabel aslinya
printf("nim = %d\n",m.nim);
printf("ipk = %f\n",m.ipk);
printf("umur = %d\n",m.umur);
getch();
}
Pengembangan:
Buatlah sebuah program untuk mengecek apakah suatu kata palindrom atau bukan,
tanpa memperhatikan spasi dan huruf besar/kecilnya. Program dibuat dengan
menggunakan template struct sebagai berikut:
typedef struct{
char elemen[30];
int jml_kata;
} Kata;
Kata kata;
Kata *p_kata=&kata;
63
4.3
Pengurutan (Sorting)
gelembung
(bubble
sort),
pengurutan
maksimum/minimum
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
64
Di sini kita akan mengurutkan array tersebut secara menaik, yaitu dengan
mengapungkan nilai terkecil ke posisi teratas (paling kiri). Proses ini tentu akan
dilakukan dengan menggunakan pertukaran antar elemen array. Tahapan-tahapan
yang harus dilakukan adalah sebagai berikut.
Tahap 1
Mulai dari A[5] sampai A[2], lakukan perbandingan nilai antara A[k] dan A[k-1] dimana
variabel k mewakili indeks array yang sedang aktif. Apabila nilai A[k] lebih kecil, maka
tukarkan nilai A[k] dengan A[k-1]. Sampai di sini, array tersebut akan menjadi seperti
berikut.
15
25
22
18
20
A[1]
A[2]
A[3]
A[4]
A[5]
Tahap 2
Mulai dari A[5] sampai A[3], lakukan proses seperti pada tahap 1 sehingga array akan
menjadi seperti berikut.
15
18
25
22
20
A[1]
A[2]
A[3]
A[4]
A[5]
Tahap 3
Mulai dari A[5] sampai A[4], lakukan proses seperti pada tahap 1 dan 2 sehingga array
akan menjadi seperti berikut.
15
18
20
25
22
A[1]
A[2]
A[3]
A[4]
A[5]
Tahap 4
Tahap ini merupakan tahap terakhir dimana kita akan melakukan perbandingan
terhadap nilai dari elemen terakhir (A5]) dengan elemen terakhir-1 (A[4]). Apabila nilai
A[5] lebih kecil maka tukarkan nilainya dengan A[4] sehingga array A di atas akan
terurut secara menaik seperti yang tampak di bawah ini.
Modul Pelatihan Junior Programming
65
15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
Pada proses yang terjadi di atas tampak jelas bahwa untuk melakukan
pengurutan data dengan lima buah elemen, kita harus melakukan empat tahapan.
Sekarang, apabila proses di atas kita translasikan ke dalam bahasa pascal, maka
hasilnya adalah sebagai berikut.
Var
n,
{banyaknya elemen array}
j, k
{variabel bantu untuk indeks pengulangan}
temp : integer;
{variabel bantu untuk melakukan pertukarannilai}
begin
for j:= 1 to N-1 do begin
for k:= N downto j+1 do begin
if A[k] < A[k-1] then begin
temp := A[k];
A[k] := A[k-1];
A[k-1] := temp;
End;
End;
End;
End;
pengurutan data}
do begin
j+1 do begin
then begin
66
Writeln;
Writeln (Data setelah diurutkan);
For j:= 1 to n do begin
Writeln(A[, j, ] = , A[j]);
End;
Readln;
End.
Hasil yang akan diberikan oleh program di atas adalah sebagaii beriku.
Data sebelum diurutkan
25
22
18
20
15
Data setelah diurutkan
15
18
20
22
25
2) Pengurutan Maksimum/Minimum
Dengan metode ini, elemen array dengan nilai maksimum/minimum akan disimpan ke
bagian ujung array (elemen pertama maupun terakshir). Selanjutnya nilai tersebut
akan diisolasi atau diikat dan tidak diikutkan lagi dalam proses selanjutnya. Di sini, kita
hanya akan menggunakan metode maksimum saja dan tidak akan membahas
mengenai metode minimum. Hal ini disebabkan karena konsep yang terdapat pada
metode minimum sama persis dengan metode maksimum. Untuk mempermudah
pembahasan, coba perhatikan kembali array A yang terdapat pada bahasan
sebelumnya.
25
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
67
Pada bagian ini kita akan melakukan pengurutan data di dalam array tersebut dengan
menggunakan metode maksimum, di mana kita akan melempar nilai maksimum ke
bagian paling kanan array. Adapun tahapan-tahapan yang perlu dilalui untuk
melakukan hal tersebut adalah sebagai berikut.
Tahap 1
Mulai dari A[1] sampai A[5], cari nilai maksimum dan tukarkan nilainya dengan elemen
terakhir (A[5]) sehingga array akan akan berubah menjadi seperti di bawah ini.
15
22
18
20
25
A[1]
A[2]
A[3]
A[4]
A[5]
Sampai di sini, elemen terakhir (A[5]) tidak akan diikutkan lagi ke dalam proses atau
tahap selanjutnya.
Tahap 2
Mulai dari A[1] sampai A[4], cari nilai maksimum dan tukarkan nilainya dengan elemen
terakhir saat ini (A[4]) sehingga array akan akan berubah menjadi seperti di bawah ini.
15
20
18
25
A[1]
A[2]
A[3]
A[4]
A[5]
Sampai di sini, elemen ke-4 (A[4]) juga tidak akan diikutkan lagi ke dalam proses atau
tahap selanjutnya.
Tahap 3
Mulai dari A[1] sampai A[3], cari nilai maksimum dan tukarkan nilainya dengan elemen
terakhir saat ini (A[3]) sehingga array akan tampak seperti di bawah ini.
15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
68
Sampai di sini, elemen ke-3 (A[3]) juga tidak akan diikutkan lagi ke dalam proses
selanjutnya.
Tahap 4
Tahap terakhir, cari nilai maksimum antara A[1] sampai A[2] dan tukarkan nilainya
dengan elemen A[2]. Untuk kasus ini nilai maksimum terdapat pada A[2] sehingga di
sini benarnya terjadi proses yang seharusnya tidak perlu dilakukan, yaitu menukarkan
nilai A[2] dengan A[2]. Berikut ini bentuk translasi metode di atas ke dalam bahasa
Pascal.
Var
n,
x,
j, k,
maks,
imaks,
temp : integer;
begin
x:= n;
{mula-mula semua belum terurut}
for j:= 1 to n-1 do begin
maks := A[1];
imaks := 1;
for k:= 2 to x do begin
if(A[k] > maks) then begin
maks := A[k];
imaks := k;
end;
end;
{tukarkan maks dengan A[x]}
Temp := A[x];
A[x] := A[imaks];
A[imaks] := temp;
{ikat elemen terakshir dengan menurunkan nilai x}
x := x 1;
end;
end;
3) Pengurutan Seleksi
Pengurutan dengan metode seleksi ini bekerja dengan cara memilih salah satu elemen
serta menganggapnya sebagai nilai terkecil. Kemudian nilai tersebut aan dibandingkan
dengan elemen-elemen pada posisi berikutnya. Apabila nilai yang dipilih pertama kali
lebih besar dari nilai elemen pembanding maka tukarkan kedua buah nilai tersebut.
Untuk memperjels pembahasan ini, marilah kita perhatikan kembali array A seperti
pembahasan sebelumnya. Berikut gambarannya.
25
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
69
Tahap 1
Mula-mula, A[1] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan
nilai 1 ke dalam variabel, misalnya dengan nama min. Mulai dari j = min + 1 sampai n
(jumlah elemen array), lakukan perbandingan antara A[j] dengan nilai A[min]. Apabila
nilai dari A[min] > A[j], isikan min = j. Setelah pengulangan selesai, tukarkan nilai
A[min] dan A[1]. Untuk kasus ini, nilai min adalah 5 karena nilai terkecil tersimpan pada
indeks ke-5. hal tersebut akan menyebabkan array A tampak menjadi seperti berikut.
15
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
Tahap 2
Mula-mula, A[2] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan
nilai 2 ke dalam variabel, misalnya dengan nama min. Kemudian sama seperti di atas,
lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya.
Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[2]. Untuk kasus ini, nilai
minimum ditemukan pada indeks ke-3 sehingga min = 3. Tukarkan A[min] dengan A[2]
sehingga array A akan tampak seperti berikut.
15
18
22
20
25
A[1]
A[2]
A[3]
A[4]
A[5]
Tahap 3
Mula-mula, A[3] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan
nilai 3 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan
mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan
nilai min, maka tukarkan A[min] dengan A[3]. Untuk kasus ini, nilai minimum
ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga
array A akan tampak seperti berikut.
15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
70
Tahap 4
Mula-mula, A[4] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan
nilai 4 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan
mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan
nilai min, maka tukarkan A[min] dengan A[4]. Untuk kasus ini, nilai minimum
ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga
array A akan tampak seperti berikut.
15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
4.4
Link List
Dalam suatu linier list kita dapat melakukan operasi penyisipan atau
penghapusan atas elemen-elemennya pada sembarang posisi. Misalkan ada 1500 item
yang merupakan elemen dari suatu linier list. Jika elemen ke-56 akan kita keluarkan,
maka elemen ke-1 s/d elemen ke-55 tidak akan berubah posisinya pada linier list
tersebut. Tetapi elemen ke57akan menjadi elemen ke-56, elemen ke-58 akan menjadi
elemen ke-57 dst. Selanjutnya, jika kita sisipkan satu elemen pada posisi setelah
elemen ke-41, maka elemen ke-42 s/d elemen ke-1500 akan berubah posisinya.
Untuk menyatakan keadaan diatas diperlukan suatu konsep yang berbeda
dengan konsep sekuensial sebelumnya. Linked list merupakan suatu cara nonsekuensial yang digunakan untuk merepresentasikan suatu data. Linked list (one way
list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana
urutannya ditentukan oleh suatu pointer.
Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu:
NEXT (link field/next pointer field), berisi alamat dari elemen (node)
selanjutnya
yang dituju.
71
Berikut ini sebuah contoh linked list yang terdiri atas 4 node:
Start
Info
next
info next
info next
info next
NULL
Node ke-1
node ke-2
node ke-3
node ke-4
Pada node ke-4 field NEXTnya berisi NULL , artinya node ke-4 tsb adalah node
terakhir.
Node-node dalam linked list tidak harus selalu digambarkan paralel seperti pada
gambar diatas. Linked list pada contoh diatas dapat pula digambarkan seperti
berikut ini:
Info
next
Info next
null
Info next
Info next
CATATAN :
Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan
linked list ini,
yaitu:
1. Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.
2. Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked
list.
Sedangkan keuntungannya adalah :
1. Jenis data yang berbeda dapat di-link
2. Operasi REMOVE atau INSERT hanya dilakukan dengan mengubah pointer-nya
saja .
OPERASI DASAR PADA LINKED LIST
72
Ada beberapa aturan yang didefinisikan pada operasi didalam linked list yaitu:
Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi
dari variabel lain yang dituju.
Operasi yang didefinisikan pada suatu variabel pointer adalah:
1.
2.
3.
4.
star
Info next
A
B
B
B ke-2
node
info next
C
node ke-1
node ke-3
P
Info next
D
null
A
Node ke-4
NODE (P) = node yang ditunuk oleh P yaitu node pertama
INFO (P) = A
NEXT (P) = node kedua
INFO (NEXT(NEXT(P))) = C
MENGHAPUS SUATU NODE DARI LINKED LIST (REMOVE)
73
Jika Q adalah suatu variabel pointer, maka FREENODE (Q) akan menyebabkan
node yang ditunjuk oleh variabel poinnter Q dihapus dalam linked list.
Perhatikan linked list berikut :
Langkah ke-1 :
Q := Next (P)
Info next
info
next
info next
Info next
.
Langkah ke-2 :
Next (P) := Next (Q)
Info next
Info next
info next
info next
Langkah ke-3 :
Freenode (Q)
Procedure Freenode (Q)
(a) Next (Q) := Avail
(b) Info (Q) := Null
(c)
Avail := Q
Jika NEW adalah suatu variabel pointer, maka GETNODE (NEW) akan menyebabkan
node yang ditunjuk oleh variabel pointer NEW disisipkan kedalam linked list.
74
Q := Next (P)
(d)
(e)
Next (NEW) := Q
Kemudian membuat fungsi init(), yaitu membuat kepala linked list. Di sini
terjadi pengalokasian memory secara dinamis untuk start. Kepala linked list ini tidak
masuk dalam hitungan rangkaian.
Contoh Deklarasi init:
void init(void) {
start = malloc(sizeof(node));
// alokasi memori dinamis
if(!start) {
// bila alokasi gagal
printf("alokasi gagal..\n");
return; }
start->next = NULL;
count = 0; }
75
tmp = start;
while(tmp->next && tmp->next->elm <= e) {
tmp = tmp->next; }
curr->next = tmp->next;
tmp->next = curr;}
count++; }
Berikutnya
adalah
membuat
fungsi
delete()
yang
digunakan
untuk
76
tmp = malloc(sizeof(node));
curr = malloc(sizeof(node));
if(!(tmp && curr)) {
printf("alokasi gagal..\n");
return; }
tmp = start; // posisikan tmp di start
// lakukan perulangan selama isi node tidak ketemu
while(tmp->next && tmp->next->elm != e) {
tmp = tmp->next;
}
// bila node berikutnya adalah NULL
// tidak tidak ditemukan
if(!tmp->next) {
printf("tidak ada node berisi elemen '%d'..\n", e);
return;
}
curr = tmp->next;
tmp->next = curr->next;
free(curr);
count--; }
Kemudian membuat fungsi show() yang digunakan untuk membaca isi linked
list. Pembacaan berdasarkan arah rangkaian.
Contoh Fungsi Show
void show(void) {
node *tmp;
if(!start->next) {
printf("List kosong..\n");
return; }
tmp = malloc(sizeof(node));
if(!tmp) {
printf("alokasi gagal..\n");
return;
}
printf("Jumlah: %d\n", count);
printf("Isi
: ");
tmp = start;
while(tmp = tmp->next) {
printf("%d ", tmp->elm);
}
printf("\n");}
77
init();
for(;;) {
system("clear");
printf("Linked List. Jumlah: %d\n", count);
printf("1. Insert\n");
printf("2. Show\n");
printf("3. Delete\n");
printf("4. Exit\n");
printf("
: ");
gets(s);
if(strcmp(s, "") == 0)
break;
switch(*s) {
case '1' :
printf(" Insert: ");
gets(e);
insert(atoi(e));
break;
case '2' :
show();
system("pause");
break;
case '3' :
printf(" Delete: ");
gets(s);
delete(atoi(s));
break;
case '4' :
exit(0);
break;
}
}
return 0; }
4.5
Queue
Queue (antrian) dibuat menggunakan array dan dua buah variabel bertipe
integer yang menunjukkan posisi awal dan akhir antrian. Dalam queue terdapat
beberapa fungsi untuk operasi dasar, yaitu store() dan retrieve(). Percobaan kali
ini menerangkan queue dalam potongan potongan kode program. Langkah
pertama adalah membuat array untuk queue. Dalam kode ini menggunakan asumsi
bahwa queue digunakan untuk tipe data integer saja.
4.5.1 Contoh Deklarasi Queue
int queue[MAX];
int spos = 0;
int rpos = 0;
// antrian
// index posisi simpan (store)
// index posisi ambil (retrieve)
Index posisi ambil biasanya terletak di awal, dan index posisi simpan terletak di
akhir. Kemudian membuat fungsi store() untuk operasi memasukkan elemen baru ke
78
dalam queue. Dalam fungsi ini terdapat pemeriksaan, bila nilai spos sama dengan
atau lebih dari MAX berarti queue sudah penuh.
4.5.2 Contoh Fungsi store
void store(int e) {
if(spos == MAX) {
printf("antrian penuh\n");
return; }
queue[spos++] = e; }
Fungsi yang kedua adalah retrieve() yang digunakan untuk operasi mengambil isi
queue. Fungsi akan mengembalikan nilai elemen antrian pada posisi rpos. Dalam
fungsi ini juga terdapat pemeriksaan bila nilai spos sama dengan rpos berarti queue
kosong.
4.5.3 Contoh Fungsi Retrieve
int qretrieve(void) {
if(rpos == spos) {
printf("antrian kosong\n");
return 0; }
return queue[rpos++]; }
Selain dua fungsi di atas bisa pula ditambahkan dengan fungsi show() untuk
menampilkan isi queue dan fungsi menu() untuk menampilkan daftar menu pilihan.
4.5.4 Contoh Program queue
#include <conio.h>
#include <iostream.h>
#include <string.h>
#define max 20
typedef struct queue // Mendefinisikan queue dengan menggunakan struct
{ int head;
int tail;
char data [15][20];
// menampung 15 data dengan jumlah
string max 20 huruf
}antrian;
queue antri;
void inisialisasi()
{ antri.head = antri.tail = -1;}
int isFull()
{
if (antri.tail==max-1)
return 1;
else
return 0; }
int isEmpty(){
if (antri.tail==-1)
79
antri.head=-1;
return 1;}
else
return 0; }
void enqueue(char d[20])
{
antri.head=0;
antri.tail++;
strcpy(antri.data[antri.tail],d);
cout<<"\tdata berhasil dimasukkan,tekan sembarang tombol untuk
lanjut !\n\n";}
void dequeue()
{ cout<<"data terambil"<<"
"<<antri.data[antri.head]<<endl;
for (int i=antri.head;i<=antri.tail;i++)
strcpy (antri.data[i],antri.data[i+1]);
antri.tail--; }
void clear()
{ antri.head=antri.tail=-1;
cout<<"semua data terhapus.\n";}
void print()
{
for (int i=0;i<=antri.tail;i++)
cout<<"\ntampil data "<<antri.data[i]<<endl<<endl;}
int main()
{
int pil;
inisialisasi();
char dt[20];
do{
cout<<"1. input\n";
cout<<"2. delete\n";
cout<<"3. print\n";
cout<<"4. clear\n";
cout<<"5. exit\n";
cout<<"Pilihan : ";cin>>pil;
switch(pil){
case 1: if(isFull() != 1){
cout<<"Data = ";cin>>dt;
enqueue(dt);}
else
cout<<"\nSudah penuh!\n";
break;
case 2: if(isEmpty() != 1)
dequeue();
else
cout<<"\nMasih kosong!\n";
break;
case 3: if(isEmpty() != 1)
print();
else
cout<<"\nMasih kosong!\n";
break;
case 4: clear();
cout<<"\nSudah kosong!\n";
break; }
getch();}
while(pil != 5);
getch();}
80
4.6
Stack
Stack dibuat menggunakan array dan sebuah variabel bertipe integer yang
menunjukkan posisi puncak stack. Dalam stack terdapat beberapa fungsi untuk operasi
dasar, yaitu push() dan pop(). Percobaan kali ini menerangkan stack dalam potongan
potongan kode program. Langkah pertama adalah membuat array untuk stack. Dalam
kode ini menggunakan asumsi
bahwa stack digunakan untuk tipe data integer saja.
Kemudian membuat fungsi push() untuk operasi memasukkan elemen baru ke dalam
stack. Dalam fungsi ini terdapat pemeriksaan, bila nilai top sama dengan atau
lebih dari MAX berarti stack sudah penuh.
4.6.2 Contoh Fungsi push()
void push(int e) {
if(top >= MAX) {
printf("Stack penuh\n");
} else {
stack[top] = e;
top++;
}}
Fungsi yang kedua adalah pop() yang digunakan untuk operasi mengeluarkan isi stack.
Fungsi akan mengembalikan nilai stack paling atas. Dalam fungsi ini juga terdapat
pemeriksaan bila nilai top sama dengan atau kurang dari 0 berarti stack kosong.
4.6.3 Contoh Fungsi pop()
void push(int e) {
if(top >= MAX) {
printf("Stack penuh\n");
} else {
stack[top] = e;
top++;
}}
81
Selain dua fungsi di atas bisa pula ditambahkan dengan fungsi show() untuk
menampilkan isi stack dan fungsi menu() untuk menampilkan daftar menu pilihan.
82
cout<<"5. exit\n";
cout<<"\nPilihan : ";cin>>pil;
switch(pil){
case 1: if(IsFull() != 1){
cout<<"\nData = ";cin>>dt;
cout<<endl;}
else
cout<<"\nSudah penuh!\n";
break;
case 2: if(IsEmpty() != 1)
else
cout<<"\nMasih kosong!\n";
break;
case 3: if(IsEmpty() != 1)
else
cout<<"\nMasih kosong!\n";
break;
case 4: Clear();
cout<<"\nSudah kosong!\n";
break;}
getch(); }
while(pil != 5);
getch();}
4.7
File
Dalam kasus-kasus pemrograman tertentu kita sering disudutkan untuk
menggunakan file sebagai media yang digunakan untuk menyimpan data-data, baik
berupa data input (untuk masukan) maupun sebagai data output (untuk keluaran).
Sebagai contoh, apabila kita menggunakan sistem operasi Microsoft Windows maka
kita akan menemukan file sistem seperti autoexec.bat, config.sys, system.ini dan
lainnya. File tersebut sebenarnya digunakan untuk menyimpan data-data secara
terpisah sehingga nilainya dapat diubah dengan mudah sesuai dengan kebutuhan.
Sebagai seorang programmer, kita tentu dituntut untuk dapat menggunakan
(mengakses) file dari dalam prograam yang kita buat. Berdasarkan prosedur yang ada,
proses pengaksesan file di dalam bahasa Pascal terdiri dari emapt tahap, yaitu :
(a) Menghubungkan file fisik yang akan dibuka atau dibuat dengan variabel file
(b) Membuka file
(c) Melakukan operasi file (membaca atau menulis)
(d) Menutup file
4.7.1 Variabel File
Sebelum
file
dapat
dibuka
atau
dibuat
oleh
program,
kita
harus
83
data dari atau ke sebuah file fisik yang tersimpan di dalam disk. Dengan kata lain,
sebenarnya kita tidak secara langsung memanipulasi file fisik tersebut, melainkan
melalui variabel file. Dalam bahasa Pascal, variabel seperti ini dianggap sebagai
variabel biasa yang dideklarasikan dengan tipe file tertentu. Cara yang harus dilakukan
untuk dapat menghubungkan file fisik dengan variabel file adalah dengan
menggunakan prosedur Assign, yang memeiliki bentuk umum sebagai berikut.
Procedure Assign (NamaVariabelFile, NamaFileFisik);
NamaVariabelFile merupakan nama variabel yang sebelumnya harus
dideklarasikan terlebih dahulu, sedangkan NamaFileFisik merupakan nama file
yang akan dibuka atau dibuat. Perlu diperhatikan bahwa nama file tersebut harus
dituliskan secara lengkap beserta lokasi atau path-nya. Sebagai contoh, apabila kita
ingin membuka file dengan nama CONTOH.TXT yang terdapat di dalam direktori COBA
di drive D, maka kode yang harus dituliskan adalah sebagai berikut.
Var
F:TextFile; {mendeklarasikan variabel file denagn nama F}
Begin
Assign (F, D:\COBA\CONTOH.TXT);
. . .
end.
Sedangkan apabila file yang akan kita akses berada dalam satu direktori dengan
program (file eksekusi) yang kita buat, maka kita tidak perlu menuliskan lokasi atau
path-nya. Artinya kita hanya perlu untuk menuliskan nama file-nya saja seperti berikut.
Assign (F, CONTOH.TXT);
84
prosedur yang dapat digunakan untuk membuka file, yaitu Rewrite, Reset dan
Append.
Prosedur Rewrite
Prosedur ini digunakan untuk membuka file yang sama sekali belum terdapat di
dalam disk. Artinya, di sini kompiler akan melakukan proses pembuatan file baru
sekaligus membuka file tersebut. Bentuk umum dari prosedur Rewrite adalah sebagai
berikut.
Procedure Rewrite(NamaVariabelFile[:File;
UkuranRecord : Word]);
Bila file yang dibuka berupa file teks, maka file tersebut akan bersifat writeonly
atau tidak dapat dibaca, artinya operasi yang diizinkan untuk file tersebut hanyalah
operasi tulis. UkuranRecord merupakan ekspresi yang bersifat opsional yang hanya
disertakan apabila file yang dibuka merupakan file tanpa tipe. Nilai tersebut akan
digunakan sebagai ukuran record dalam transfer data. Nilai tersebut akan digunakan
sebagai ukuran record dalam transfer data. Apabila dihilangkan, maka UkuranRecord
ini alan dianggap bernilai 128 byte. Untuk lebih memahami penggunaan prosedur ini,
perhatikan contoh program sederhana ini.
Program ContohRewrite;
Var
F : TextFile;
Begin
Assign (F, D:\CONTOH.TXT);
Rewrite (F);
End.
Jalankan program tersebut dan lihatlah drive D pada komputer anda, maka di situ
pasti akan tercipta file baru dengan nama CONTOH.TXT dimana isinya kosong. Apabila
anda bereksperimen untuk membuka filee yang sudah ada sebelumnya dengan
menggunakan prosedur Rewrite maka isi dari file tersebut akan ditimpa dengan isi file
baru. Satu hal lagi yang perlu diperhatikan adalah bahwa etelah pemanggilan prosedur
Rewrite, fungsi EOF (end-of-file) akan selalu menghasilkan nilai true.
-
Prosedur Reset
Prosedur ini digunakan untuk membuka file yang sebelumnya sudah ada di dalam
disk. Hal ini bertujuan untuk membaca isi dari file tersebut untuk kemudian
85
dimanipilasi sesuai dengan kebutuhan. Perlu sekali untuk diperhatikan bahwa apabila
file yang dibuka merupakan file teks, maka variabel file akan bersifat read only (hanya
dapat dibaca). Berikut ini prototype dari prosedur Reset.
Procedure Reset (NamaVariabelFile [: file; UkuranRecord: word]);
: Budi Raharjo
Tahun
: 2005
Penerbit
: INFORMATIKA
Selanjutnya kita ingin membaca isi file tersebut dan ditampilkan di layar monitor,
maka kita dapat menggunakan prosedur Reset seperti yang tampak pada kode berikut.
Program ContohReset;
Uses crt;
Var
F : TextFile;
Teks : string;
Begin
Assign (F, D :\SAMPLE.TXT);
Reset (F);
While not eof (F ) do begin
Readln (F, teks) ;
{membaca data dari file dan mengisikannya ke
variabel teks}
Writeln (teks);
menampilkan variabel teks ke layar}
Close (F);
Readln;
End.
Sekarang coba jalankan program tersebut dan akan melihat bahwa seluruh isi dari
file SAMPLE.TXT akan ditampilkan di layar monitor. Apabila kita menggunakan
prosedur Reset pada file yang belum terdapat di dalam disk maka kompiler akan
menampilkan pesan kesalahan pada saat program dijalankan.
-
Prosedur Append
Prosedur ini digunakan untuk menambahkan isi file yang sebelumnya sudah
terdapat di dalam disk. Isi yang ditambahkan selalu berada pada bagian akhir dari isi
file yang sudah ada sebelumnya. Dalam menggunakan prosedur ini kita tidak perlu
86
memanggil prosedur Rewrite maupun reset karena prosedur Append secara otomatis
akan membuka file yang telah dihubungkan dengan variabel file. Namun sebagai
catatan bagi Anda bahwa prosedur Append hanya dapat digunakan apabila file yang
dibuka merupakan file teks. Berikut ini bentuk umum dari prosedur Append.
Procedure Append (NamaVariabelFile: Text ) ;
Apabila anda membuka file teks yang belum ada didalam diks dengan
menggunakan prosedur Append, maka akan terjadi kesalahan pada saat program
sedang berjalan (run-time). Setiap pemanggila prosedur Append, file bersifat write-only
(hanya dapat ditulis) dan posisi file akan diset pada bagian akhir baris file. Untuk dapat
lebih memahaminya, buatlah file teks (*.TXT) dengan program teks editor yang
tersedia, misalnya Notepad, kemudian isikan teks berikut ke dalamnya.
Ini adalah data yang dituliskan pada baris pertama.
Ini adalah data yang dituliskan pada baris pertama.
Sebagai contoh, file tersebut disimpan dengan nama TEST.TXT pada drive D di
dalan direktori COBA. Selanjutnya kita ingin menamnbahkan dua buah baris data ke
dalam file di atas, maka kita dapat melakukannya melalui kode program dibawah ini.
Program ContohAppend;
Uses
Crt;
Var
F: TextFile;
Begin
Assign (F,D:\COBA\TEST.TXT) ;
Append (F) ;
{Membuka file untuk di tambah isinya}
{Menambahkan data ke dalam file}
writeln (F,Ini adalah data pertama yang ditambahkan) ;
writeln (F,Ini adalah data kedua yang ditambahkan) ;
close(F) ;
end.
Ini
Ini
Ini
Ini
adalah
adalah
adalah
adalah
data
data
data
data
variabel file dan juga bagaimana cara membuka file tersebut maka kini saatnya Anda
mengetahui bagaimana cara memanipulasi data dalam file dari program yang kita
87
buat. Untuk melakukan hal tersebut tentu Anda harus memahami dengan benar cara
membaca data dan menuliskan data kedalam file.
-
menggunakan prosedur Write, Writeln maupun BlockWrite. Untuk informasi lebih detil
mengenai masing-masing prosedur tersebut, Anda dapat melihat sub bab di bawah ini.
3) Menggunakan Prosedur Write
Prosedur Write digunakan untuk menuliskan data kedalam file dimana posisi
kursor tidak akan dipindahkan kebaris selanjutnya.
Berikut ini bentuk prototipe dari prosedur Write.
Procedure Write (NamaVariabelFile; VI [ , V2..VN] ) ;
Dimana V1..VN adalah nama variabel yang akan digunakan untuk menyimpan data
yang akan dituliskan. Walaupun demikian, Andajuga dapat menuliskannya secara
langsung tanpa harus menyimpannya terlebih dahulu ke dalam variabel seperti yang
tampak pada kode berikut.
write (F,Mencoba menuliskan data ke dalam file);
Berdasarkan kode di atas, maka teks tersebut akan dimasukkan atau ditulis ke
dalam file yang telah dihubungkan dengan variabel file F. Untuk lebih memahaminya,
perhatikan contoh program di bawah ini dimana kita akan melakukan penulisan
terhadap file DATA.TXT yang terdapat pada direktori COBA di dalam drive D. Sebagai
catatan bahwa file DATA.TXT ini sebelumnya sudah ada di dalam disk dimana isi dari
file tersebut masih kosong.
Program ContohWrite;
Uses crt;
Var
F : TextFile;
Begin
Assign (F,D:\COBA\DATA.TXT);
Reset (F);
Write (F, Teknik Pemrograman );
Write (F, Pascal);
Close (F);
End.
Jalankan program tersebut dan buka kembali isi dari file DATA.TXT, maka kita akan
melihat bahwa file tersebut sekarang telah berisi teks berikut.
Teknik Pemrograman Pascal
88
Apabila dijalankan, program di atas akan menyebabkan isi file DATA.TXT berubah
menjadi seperti di bawah ini.
Teknik Pemrograman
Pascal
dimana V1 . . VN adalah nama variabel yang akan digunakan untuk menyimpan data
hasil proses pembacaan.
(2) Menggunakan Prosedur Readln
Cara kerja dari prosedur ini sebenarnya sama dengan prosedur Read, hanya saja
dalam prosedur Readln proses pembacan datanya tidak dilakukan per karakter
melainkan per baris data. Setelah mengeksekusi prosedur Read, maka kursor akan
ditujukkan ke baris selanjutnya. Proses pembacaan data dengan prosedur Readln tentu
89
akan membutuhkan waktu yang relatif lebih cepat apabila dibandingkan dengan
prosedur Read karena dilakukan per baris. Hal yang perlu diingat bahwa prosedur
Readln hanya dapat digunakan untuk file teks saja. Bentuk umum dari prosedur Readln
adalah sebagai berikut.
procedure Readln (NamaVariabelFile; V1[, V2 . . VN]);
dimana F adalah sebuah variabel file yang sebelumnya telah dibuka dengan
menggunakan fungsi Reset, Rewrite maupun Append.
6) Jenis File
Dalam bahasa Pascal, file dibedakan menjadi tiga jenis, yaitu :
(a)
File Teks
(b)
File Bertipe
(c)
90
: 2005);
: INFORMATIKA Bandung);
Sebagai contoh, apabila kita akan mendeklarasikan variable file yang mengakses
file yang berisi data integer amak kode yang harus dituliskan adalah sebagai berikut.
var
F : file of integer;
Begitu juga apabila file berisi data real, maka kodenya adalah seperti berikut.
var
F : file of real;
Contoh penggunaan file bertipe untuk tipe record adalah sebagai berikut.
Type
Tsiswa = Record
NIM : string [8];
Nama : string [25];
Umur : integer;
Alamat : string [30];
Kota : string [15];
End;
Var
F : file of Tsiswa;
91
Dalam bahasa Pascal, file tanpa tipe direpresentasikan dengan tipe FILO. File jenis
ini dapat digunakan untuk menyimpan jenis data apa saja, baik teks maupun tipe
lainnya, namun biasanya digunakan untuk menyimpan data-data biner (termasuk file
EXE maupun COM). Berikut bentuk umumnya.
Var
NamaVariabelFile : FILE
Sebagai contoh apabila kita ingin mendeklarasikan variabel F yang akan digunakan
sebagai variabel file tanpa tipe, maka kita harus mendeklarasikannya sebagai berikut.
var
F : FILE
92
secara begitu saja, namun mengikuti perencanaan dan metodologi yang terstruktur
yang memisahkan proses suatu aplikasi menjadi beberapa bagian. Berikut ini langkah
langkah sistematis dasar dalam menyelesaikan permasalahan pemrograman :
1. Mendefinisikan masalah
2. Menganalisa dan membuat rumusan pemecahan masalah
3. Desain Algoritma dan Representasi
4. Pengkodean, Uji Coba dan pembuatan dokumentasi
b. Analisa Permasalahan
Modul Pelatihan Junior Programming
93
Setelah sebuah permasalahan terdefinisi secara memadai, langkah paling ringkas dan
efisien dalam penyelesaian harus dirumuskan. Umumnya, langkah berikutnya meliputi
memecahkan masalah tersebut menjadi beberapa bagian kecil dan ringkas.
Contoh masalah :
Menampilkan jumlah kemunculan sebuah nama pada daftar
Input Terhadap Program :
Daftar Nama, Nama yang akan dicari
Output Dari Program :
Jumlah kemunculan nama yang dicari
c. Desain Algoritma dan Representasi
Setelah kita mengetahui dengan baik dan jelas mengenai permasalahan yang ingin
diselesaikan, langkah selanjutnya yaitu membuat rumusan algoritma untuk
menyelesaikan permasalahan. Dalam pemrograman komputer penyelesaian masalah
didefinisikan dalam langkah demi langkah. Algoritma adalah urutan langkah langkah
logis penyelesaian masalah yang disusun secara sistematis dan logis. Logis merupakan
kunci dari sebuah algoritma. Langkah-langkah dalam algoritma harus logis dan bernilai
benar atau salah.
Algoritma dapat diekpresikan dalam bahasa manusia, menggunakan presentasi grafik
melalui sebuah FlowChart (diagram alir) ataupun melalui PseudoCode yang
menjembatani antara bahasa manusia dengan bahasa pemrograman. Berdasarkan
permasalahan yang terjadi pada bagian sebelumnya, bagaimanakah kita dapat
memberikan solusi penyelesaian secara umum dalam sebuah alur yang dapat dengan
mudah dimengerti?
94
95
5.2
96
Karena orangorang di proyek Green berbasis C++ dan bukan Pascal maka
kebanyakan sintaks diambil dari C++, serta mengadopsi orientasi objek dan bukan
prosedural. Mulanya bahasa yang diciptakan diberi nama Oak oleh James Gosling
yang mendapat inspirasi dari sebuah pohon yang berada pada seberang kantornya,
namun dikarenakan nama Oak sendiri merupakan nama bahasa pemrograman yang
telah ada sebelumnya, kemudian SUN menggantinya dengan JAVA. Nama JAVA sendiri
terinspirasi pada saat mereka sedang menikmati secangkir kopi di sebuah kedai kopi
yang kemudian dengan tidak sengaja salah satu dari mereka menyebutkan kata JAVA
yang mengandung arti asal bijih kopi. Akhirnya mereka sepakat untuk memberikan
nama bahasa pemrograman tersebut dengan nama Java.
Produk pertama proyek Green adalah Star 7 (*7), sebuah kendali jarak jauh
yang sangat cerdas. Dikarenakan pasar masih belum tertarik dengan produk konsumer
cerdas maka proyek Green harus menemukan pasar lain dari teknologi yang
diciptakan. Pada saat yang sama, implementasi WWW dan Internet sedang mengalami
perkembangan pesat. Di lain pihak, anggota dari proyek Green juga menyadari bahwa
Java dapat digunakan pada pemrograman internet, sehingga penerapan selanjutnya
mengarah menjadi teknologi yang berperan di web.
Java telah mengakomodasi hampir seluruh fitur penting bahasabahasa pemrograman
yang ada semenjak perkembangan komputasi modern manusia:
1. Dari SIMULA, bahasa pada tahun 65-an, bahasa yang paling mempengaruhi Java
sekaligus C++. Dari bahasa ini diadopsi bentukanbentukan dasar dari
pemrograman berorientasi objek.
2. Dari LISP bahasa tahun 55-an. Diadopsi fasilitas garbage collection, serta
kemampuan untuk meniru generic list processing, meski fasilitas ini jarang yang
memanfaatkannya.
3. Dari Algol bahasa pada tahun 60-an, diambil struktur kendali yang dimilikinya.
4. Dari C++, diadopsi sintaks,s ebagian semantiks dan exception handling.
5. Dari bahasa Ada, diambil strongly type, dan exception handling.
6. Dari Objective C, diambil fasilitas interface.
7. Dari bahasa SmallTalk, diambil pendekatan single-root class hirarchie, dimana
object adalah satu kesatuan hirarki pewarisan.
8. Dari bahasa Eiffel, fasilitas assertion yang mulai diterapkan di sebagian JDK
97
98
99
Gambar dibawah ini menjelaskan aliran proses kompilasi dan eksekusi sebuah program
Java :
Proses
Menulis kode program
Kompilasi program
Menjalankan program
5.3
Tool
Text Editor
Java Compiller
Java Interpreter
Hasil
Berkas berekstensi .java
Berkas berekstensi .class
Output
menjalankan program Java. Terdapat dua cara dalam melakukannya, yang pertama
menggunakan
dengan
console
menggunakan
yang
merupakan
cara kedua
Integrated
adalah
Development
Environment atau yang disebut IDE. Pada akhir pembahasan, diharapkan dapat:
1. Membuat program Java menggunakan text editor dan console dalam Linux
(Ubuntu Dapper)
2. Membedakan antara syntax-errors dan runtime-errors
100
101
Sekarang, dalam textbox Selection, ketiklah nama file dari program Anda, yaitu
''Hello.java'', kemudian klik pada tombol SAVE. Sekarang Anda telah menyimpan file
Anda, ingatlah cara bagaimana nama frame dapat berubah dari ''Untitled Document 1
(modified) gedit'' menjadi "Hello.java (~/MYJAVAPROGRAMS) gedit". Jika Anda
ingin melakukan perubahan pada file Anda, Anda hanya perlu mengeditnya, kemudian
menyimpannya kembali dengan mengklik pada File->Save.
102
103
java Hello.
Sekarang Anda dapat melihat di layar bahwa Anda telah menjalankan program
Java pertama Anda, yang menampilkan pesan, ''Hello world!''.
5.4
Errors
Apa yang telah ditunjukan sejauh ini adalah program Java dimana kita tidak
dan penghilangan
dari pemberian
tanda
104
Tentang Dokumentasi
Salah satu hal yang paling penting ketika seorang programmer melakukan
Terkadang program harus ada perbaikan, jika ternyata pada saat digunakan
ditemukan kesalahan.
Dokumentasi juga berguna untuk menginformasikan tentang proses yang ada
dalam program, sehingga jika ada pertanyaan tentang program yang dibuat memiliki
kemampuan apa saja, kita dapat mengetahui atau menjelaskan berdasarkan
dokumentasi.
Dokumentasi program sangat diperlukan oleh pemilik aplikasi, jika ingin
mengembangkan aplikasinya bukan oleh pengembang yang sama. Pengembang lain
yang diserahi tugas untuk mengembangkan aplikasi dapat dengan cepat mempelajari
dari dokumentasi tersebut.
6.2
105
106
sering harus mempelajari terlebih dahulu alur programnya sendiri, baru kemudian baru
bisa melakukan modifikasi sesuai dengan yang diinginkan. Dari sisi lain, dokumentasi
juga diperlukan untuk memudahkan untuk memvalidasi apakah program yang telah
dikembangkan, sudah sesuai dengan yang dispesifikasikan atau belum. Proses validasi
ini akan dilakukan oleh tim penguji (validator).
Dokumentasi kode program merupakan pelengkap dokumentasi spesifikasi,
karena menjelaskan bagaimana dari spesifikasi diterjemahkan ke dalam program. Jika
dokumentasi spesifikasi tidak ada maka dokumentasi kode program akan menjadi
dokumentasi yang sangat berharga, karena bukan menjadi dokumen pelengkap tetapi
menjadi dokumentasi utama. Dokumentasi dalam kode program umumnya dilakukan
dengan menuliskan baris-baris komentar dalam kode sumber programnya. Isi dari
dokumentasi kode program, setidaknya terdiri atas:
1. langkah-langkah dalam program untuk menyelesaikan masalah
2. komentar dituliskan pada setiap awal modul atau fungsi,
3. jika mungkin komentar ditulis pada setiap blok program, jika tidak maka ditulis
pada blok-blok yang penting saja. Lebih baik lagi jika setiap baris ada
komentarnya.
4. Informasi tentang siapa yang membuat, kapan pertamakali dibuat, kapan
terakhir diperbaiki, jika mungkin informasi perubahan dari waktu ke waktu
Cara menuliskan komentar harus mengikut kepada cara penulisan yang baku. Jika
menggunakan bahasa pemrograman Java, maka dapat menggunakan format yang
telah ditetapkan oleh javadoc.
6.2.3 Dokumentasi Penggunaan Program
Dokumentasi penggunaan program sangat diperlukan untuk dapat memberitahu
kepada pengguna bagaimana cara menggunakan program yang telah dibuat. Jika tidak
dibuatkan cara menggunakan programnya, dikhawatirkan program menjadi tidak
dapat dipakai, apalagi jika programnya kurang interaktif. Banyak program yang dibuat,
cara pemakaiannya sesuai dengan alur logika pemrogramnya. Bukan berdasarkan alur
logika pengguna program. Karenanya harus dibuatkan dokumentasi cara menggunakan
program, agar pengguna tahu bagaimana cara menggunakan dengan benar.
Modul Pelatihan Junior Programming
107
6.3
Tools
Jika kita hanya memiliki dokumentasi kode program, maka kita dapat
108
HIPO WORKSHEET
Designer: ________________ Author: _____________________ Date: __________________ Page:
____________of _____________
Input
Output
Proses
Extended Description
Notes
Extended Description
Ref
Notes
Ref
109
110
Kebutuhan Pemrosesan
Dalam hal mencatat langkah-langkah pemrosesan, pemrogram dapat
menggunakan bahasa yang mudah dipahami seperti bahasa Indonesia ataupun
bahasa sehari-hari sekalipun. Kecuali pada perintah atau sintaks yang native
dari bahasa pemrograman tertentu sebaiknya menggunakan huruf kapital
seperti DO, UNTIL, IF, THEN, ELSE, dan sebagainya.
kotak
pemrosesan.
Pada
kotak
pemrosesan,
pemrogram
dapat
ini
adalah
contoh
dari
penerapan
dokumentasi
modul
111
HIPO WORKSHEET
Designer: P.No. 111
Date: 11/11/2011
Page: 1 of 5
Input
Output
Proses
FOUND-SW
ITR-RECORD
VALID-TRAN-SW
1.
VALID-TRAN
2.
DO 280-SEARCH-PART-NUMBERTABEL
IF not FOUND
Move N to VALID-TRAN-SW
Move * to mark error field in ITLLINE
Extended Description
Notes
ITL-LINE
Extended Description
Ref
Valid is:
ITR-UPDATE-CODE Must be C
ITR-CUST-ORDER-NO Any data
ITR-ORDER-DATE Numeric with
ITR-ORDER-DAY day less than 32
ITR-ORDER-MONTH month less then 13
ITR-ORDER-YEAR year=current year or
Current year -1
Notes
Ref
3
3
3
112
BAB 7 .
7.1
MENGOPERASIKAN APLIKASI
BASIS DATA
113
5. Mengeksekusi query
6. Memroses hasil
7. Menutup koneksi
Memuat driver
Class.forName(com.mysql.jdbc.Driver);
Mendefinisikan URL koneksi
String url = jdbc:mysql:3306//localhost:/nama_db;
Menetapkan koneksi
koneksi = DriverManager.getConnection(url,user, password);
Menciptakan Statement
Statement statement = connection.createStatement();
Mengeksekusi Query
String query = "SELECT * FROM tabel";
ResultSet resultSet = statement.executeQuery(query);
Menutup Koneksi
connection.close();
7.2
Buka aplikasi MySQL Command Line Client, lewat klik Start All Programs
AppServ MySQL Command Line Client
114
4.
115
package dm;
import
import
import
import
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.sql.*;
116
11. Jalankan aplikasi. Klik link: Test Koneksi Driver Manager (Servlet)
117
118
Menghapus record
14. Pada node Web Pages, buat file JSP dengan nama hapus.jsp dengan kode
seperti berikut.
<%@ page import="java.sql.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
String url = "jdbc:mysql://localhost/tokobuku";
Connection con = null;
Statement st = null;
int hasil = 0;
String sql = new String();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>Hapus buku</title>
</head>
<body style="text-align:center;" bgColor=#ffff00 text=#0000ff>
<%try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(url,"root","root");
st = con.createStatement();
sql = "delete from buku where id = '" +
request.getParameter("id") + "'";
out.print(sql);
hasil = st.executeUpdate(sql);
if(hasil != 0) {
out.print("<br/>Berhasil menghapus");
} else {
out.print("<br/>Gagal menghapus");
}
st.close();//Close statement
con.close(); //Close database Connection
}catch(Exception e){
out.println(e.getMessage());//Print trapped error.
}
%>
</body>
</html>
119
7.3
menggunakan Java yang menggunakan sistem basis data M SQL. Adapun Tabel yang
akan kita buat sekarang adalah tabel MAHASISWA, dimana tabel tersebut memiliki
beberapa kolom, yaitu NIM, NAMA, TANGGAL_LAHIR, JURUSAN dan ALAMAT.
7.3.1
Membuat Database
Sebelum membuat program sederhana ini, hal yang pertama perlu kita buat adalah
database yang akan kita gunakan. Misal kita akan membuat database UNIVERSITAS,
maka kita bisa menggunakan perintah :
Setelah membuat database, kita terlebih dahulu perlu membuat tabel MAHASISWA.
Kita dapat menggunakan perintah sebagai berikut untuk membuat tabel MAHASISWA.
Sekarang kita sudah punya sebuah tabel dengan nama MAHASISWA. Saatnya kita
lanjutkan membuat project Java-nya menggunakan NetBeans IDE.
7.3.2 Membuat New Project
Sama seperti sebelumnya, untuk membuat sebuah project dalam NetBeans IDE kita
dapat membuatnya menggunakan menu File -> New Project. Setelah itu pilih kategori
Java dan pilih tipe project -nya Java Application.
120
Beri nama project dan jangan diceklis c eckbox Create Main Class. Hal ini dikarenakan
kita tidak memerlukan dahulu membuat sebuah Main Class.Setelah itu klik tombol
Finish, sekarang kita telah membuat project Java menggunakan NetBeans IDE.
7.3.3 Membuat Koneksi MySQL
Setelah membuat project, saatnya membuat koneksi ke database UNIVERSITAS yang telah kita
buat sebelumnya. Jadi hal yang pertama kitalakukan adalah menambah driver MySQ ke dalam
project yang telah kita buat. Caranya klik kanan bagian Libraries project yang telah kita buat
lalu pilih Add Library.
121
Setelah keluar dialog Add Library, pilih MySQL JDBC Driver lalu klik tombol Add Library
untuk menambahkan MySQL Driver kedalam project. Setelah menambahkan driver
MySQL, sekarang saatnya membuat sebuah kelas yang akan kita gunakan untuk
melakukan koneksi ke database MySQL. Tapi sebelum membuat sebuah kelas, pastikan
kita membuat package dulu,caranya klik kanan bagian Source project yang telah kita
buat lalu pilih Ne -> Other.
Setelah keluar dialog Ne File, pilih kategori Java dan jenis file Java Package. Klik Next untuk
melanjutkan membuat package.
Setelah itu beri nama packagenya, misal program .universitas, setelah itu klik Finish
untuk membuat package-nya. Setelah membuat package program .universitas,
sekarang kita buat sebuah kelas untuk melakukan koneksi ke MySQL. Caranya klik
kanan package program .universitas lalu pilih Next -> Other.
Modul Pelatihan Junior Programming
122
Pilih kategori Java dan tipe filenya Java Class, setelah itu klik tombol Next untuk
melanjutkan membuat sebuah kelas.
Sekarang, saatnya melakukan proses pengkodean. Pertama buat sebuah variabel static
yang bertipe java.sql.Connection, kita menggunakan static agar nanti aplikasi dapat
mengakses koneksi secara langsung tanpa harus membuat object KoneksiDatabase.
package program.universitas;
import java.sql.Connection;
public class KoneksiDatabase {
private static Connection koneksi;
}
Setelah itu buat sebuah metode static getKoneksi(), metode ini digunakan untuk
mendapatkan koneksi itu sendiri.
package program.universitas;
import java.sql.Connection;
public class KoneksiDatabase {
private static Connection koneksi;
public static Connection getKoneksi() { return koneksi;
}
}
123
KoneksiDatabase.getKoneksi(), namun pastinya jika kita melakukan hal itu akan terjadi
error. Tentu karena pada kelas KoneksiDatabase tersebut kita belum membuat
koneksinya, jadi sebelum return koneksi, pada metode getKoneksi() seharusnya kita
cek dulu apakah koneksi-nya null, jika null, maka kita deklarasikan sebuah koneksi yang
baru.
package program.universitas;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class KoneksiDatabase { private static Connection koneksi;
public static Connection getKoneksi() {
// cek apakah koneksi null if (koneksi == null) {
try { String url = "jdbc:mysql://khannedy.server:3306/UNIVERSITAS";
String user = "echo"; String password = "xxxxx";
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
koneksi = DriverManager.getConnection(url, user,
password);
} catch (SQLException t) { System.out.println("Error Membuat
Koneksi");
}
} return koneksi;
}
}
124
Pilih kategori Swing GUI Forms dan pilih tipe file JFrame Form. Lalu klik Next untuk
melanjutkan membuat Form.
Beri nama Form tersebut, misal dengan nama Form, dengan begitu maka NetBeans akan
membuatkan sebuah kelas dengan nama Form yang merupakan turunan dari kelas JFrame,
dimana kelas JFrame ini merupakan kelas Java Swing. Sekarang kita dapat melihat GUI builder
pada editor NetBeans dan disebelah kanannya terdapat Pallete yang merupakan komponenkomponen GUI yang ada di Java danProperties yang merupakan editor atribut-atribut
komponen yang kita klik pada GUI Builder.
125
Untuk mengubah tulisan pada Label, kita dapat mengklik label teresbut, lalu lihat pada
bagian Properties. Ubah atribut text, misa menjadi NIM, Nama, Tanggal Lahir, Jurusan
dan Alamat. Setelah itu klik dan drag tiga buat Text Field yang ada dipallete ke Form,
gunakan Text Field untuk Nim, Nama dan Jurusan. Untuk Tanggal Lahir dan Alamat kita
tidak menggunakanText Field, hal ini dikarenakan Tanggal Lahir memerlukan inputan
berupa tanggal sedangkan Text Field hanya mendukung teks (string), sedangkan untuk
Alamat, biasanya isi alamat itu panjang, sehingga lebih tidak cocok menggunakan Text
Field, karena Text Field hanya mendukung satu baris. Dengan demikian, untuk Tanggal
Lahir kita akan menggunakan Formatted Field, tinggal kita klik dan drag Formatted
Field dari Palette ke dalam Form.
Dan untuk Alamat, gunakan komponen Text Area. Text Area hampir mirip dengan Text
Field, namun mendukung lebih dari satu baris. Untuk mengosongkan isi tulisan pada
NIM, Nama, Tanggal Lahir dan Jurusan, kosongkan atribut text pada setiap komponen
pada Properties-nya.
126
Setelah itu, sekarang saatnya kita mengubah setiap nama variabel komponenya, misal
untuk Text Field NIM kita beri nama variabelnya dengan nama inputNim, untuk Text
Field Nama dengan nama inputNama dan seterusnya, caranya dengan mengklik kanan
komponennya lalu pilih menu Change Variable Name. Untuk melihat seluruh nama
variabelnya, kita dapat melihatnya pada bagian Inspector di sebelah kiri bawah Form
NetBeans.
127
DAFTAR PUSTAKA
Java Education Network Indonesia. Pengenalan Pemrograman. Jardiknas. 2007.
Kadir, Abdul. Pengenalan Algoritma. Andi Publisher. 2013.
Khanedy, Eko. Membuat Aplikasi Sederhana dengan Java. Modul. 2010.
Kristanto, Andri. Algoritma dan Pemrograman dengan C++. Graha Ilmu. 2010.
Kusuma, YM. Algoritma Pemrograman C++ Dalam Ilustrasi. Jasakom. 2011.
Liem, Inggriani. Diktat Kuliah Dasar Pemrograman, Kelompok Keahlian Rekayasa
Perangkat Lunak dan Data, Institut Teknologi Bandung. 2007.
Ngoen, Thompson. Algoritma dan Struktur Data Pengurutan Dan Pencarian. Mitra
Wacana Media. 2011.
Rosa AS, dkk. Modul Pembelajaran Algoritma dan Pemrograman. Modul. 2010.
Siswanto. Algoritma dan Pemrograman Non Linear dengan Java. Graha Ilmu. 2011.
Sjukani, Moh. Struktur Data. Mitra Wacana Media. 2012.
Suarga. Algoritma dan Pemrograman. Andi Offset. 2012.
Sukamto, Rosa. Diktat Kuliah Algoritma dan Pemrograman I. Program Ilmu Komputer
Universitas Pendidikan Indonesia. 2010.
128