MODUL I
TIPE ARRAY
I.
TUJUAN
Mempelajari tipe
terstruktur Array dimensi satu dan dimensi dua.
II.
TEORI SINGKAT
Array merupakan tipe data
terstruktur yang dapat menyimpan banyak data yang bertipe sama, dimana
masing-masing elemen array dapat diakses melalui indek array.
Arrray
Dimensi Satu
Adalah array yang hanya
memiliki satu tipe indek.
Deklarasi variabel bertipe
array dimensi :
Var
NamaArray : Array{tipeIndek] of TypeArray;
NamaArray
adalah
nama variabel bertipe array dan TypeArray
adalah tipenya. TypeArray dapat
berupa Integer, real, char, string atau record. Sedangkan tipeIndek dari array merupakan tipe ordinal seperti char, byte,
integer, atau enumerasi.
Contoh deklarasi tipe array
:
Nilai :
Array [1 .. 100] of integer;
Contoh diatas berarti
dilakukan pemesanan tempat dimemori sebanyak 100 elemen yang akan ditampung
dalam variabel Nilai yang tiap-tiap elemen hanya dapat menampung data bertipe
integer (bilangan bulat)
Contoh Program :
Program
Array_Dimensi_satu;
uses
Crt;
Const
max = 100;
Var
Nilai : Array[1..max] of integer;
i, j : integer;
Begin
ClrScr;
{Menciptakan angka random}
Randomize;
for i := 1 To Max do
Nilai[i] := random(Max);
j := 0;
for i := 1 to max do
Begin
Write(i,' ');
j := j + 1;
if J >= 10 Then
Begin
Writeln;
J := 0;
End;
End;
Readln
End.
|
Perhatikan output dari
program tersebut dilayar komputer anda. Perhatikan hasilnya bahwa setiap kali
anda menjalankan program maka angka yang ditampilkan akan selalu berubah.
Arrray
Dimensi Dua
Adalah array yang memiliki
dua tipe indek.
Deklarasi variabel bertipe
array dimensi dua :
Var
NamaArray : Array{tipeIndek1,tipeIndek2] of TypeArray;
Contoh program :
Prog
Matrik2Dimensi;
Use
Crt;
var
Matrik
: Array[1..10,1..10] Of integer;
Baris,Kolom : Integer;
Begin
ClsRcr;
{-Memasukkan data matrik-}
For Baris := 1 to 2 Do
Begin
For kolom := 1 to 2 Do
Begin
Write('Baris ',Baris,' Kolom
',Kolom,' : ');
Readln(Matrik(Baris,Kolom));
End;
End
{--Menampilkan Hasil--}
For Baris := 1 to 2 Do
Begin
For kolom := 1 to 2 Do
Begin
Write(Matrik(Baris,Kolom):5);
End;
End;
Readln
End.
|
Latihan
Soal
Buatlah algoritma, flowchart
dan program untuk menghitung perkalian dua buah matrik.
MODUL II
PROCEDURE DAN FUNGSI
(2x pertemuan)
I. Tujuan
Mempelajari pemecahan program ke dalam modul-modul
program dalam bentuk prosedur dan fungsi
II. Teori Singkat
a.
PROCEDURE
Procedure
merupakan sub program yang berdiri sendiri yang dapat dipanggil dari program
utama.
Deklarasi
prosedur :
PROCEDURE
<Nama_prosedur> (<Daftar_parameter_formal>);
<Bagian_deklarasi>
Begin
<Bagian _pernyataan>
End;
Dalam prosedur
atau fungsi dikenal adanya parameter. Parameter adalah suatu nilai atau
variabel yang akan dilewatkan dalam prosedur atau fungsi. Pengiriman paramter
dalam prosedur atau fungsi dibedakan menjadi 2 yaitu parameter nilai dan
parameter referensi. Pelewatan parameter secara nilai dimaksudkan jika
parameter yang dileatkan dimasudkan tidak unutk diubah oleh prosedur atau
fungsi sekalipun perubahan telah terjadi di dalam prosedur atau fungsi
tersebut. Sedangkan parameter referensi dimasudkan unutk mengubah nilai atau
variabel sekeluarnya dari prosedur atau fungsi. Perbedaan cara pengiriman
parameter didalam prosedur atau fungsi terletak pada deklarasi prosedur atau
fungsinya. Contoh deklarasi prosedur dengan pengiriman parameter secara refensi
:
Procedure Tukar(var x,y :
real);
Untuk mengubah
sifat pengiriman parameter secara nilai, tinggal diubah deklarasi prosedur
dengan menghilangkan var dalam kepala prosedur sehingga menjadi :
Procedure Tukar(x,y :
real);
Berikut contoh
program pemakaian untuk menukarkan dua nilai memakai prosedure :
Contoh :
PROG3_01.PAS contoh program menukarkan
data dengan prosedur
program
tukar_data;
var
a, b : real; {deklarasi variabel global}
procedure
info;
begin
writeln('****************************');
writeln('** Program Tukar Data **');
writeln('** Dengan Procedure **');
writeln('** Oleh
: **');
writeln('** Ki Joko Bodho **');
writeln('****************************');
end;
{Prosedur
penukaran data}
procedure
tukar(var x,y : real);
var
tamp : real;
begin
tamp := x;
x
:= y;
y
:= tamp;
end;
{Program
utama}
Begin
info;
a := 12.33;
b := 67.98;
writeln('Sebelum memanggil prosedur
Tukar');
writeln('a = ',a:7:2,' b = ',b:7:2);
tukar(a,b);
writeln('Setelah memanggil prosedur
Tukar');
writeln('a = ',a:7:2,' b = ',b:7:2);
readln;
End.
|
Contoh diatas
pengiriman parameter dilakukan secara referensi, cobalah program diatas diubah
pengiriman parameter dalam prosedur secara nilai!
b.
FUNCTION
Fungsi memiliki
struktur yang hampir sama dengan procedure, bedanya fungsi memiliki tipe hasil
sedangkan procedure tidak.
Deklarasi fungsi
:
FUNCTION
<Nama_fungsi> (<Daftar_parameter>): tipe;
<Bagian_deklarasi>
Begin
<Bagian _pernyataan>
End;
Contoh :
PROG2_02.PAS contoh program perkalian
dengan fungsi
program
kali_data;
var
a, b : integer; {deklarasi variabel global}
procedure
info;
begin
writeln('****************************');
writeln('** Program Tukar Data **');
writeln('** Dengan Procedure **');
writeln('** Oleh
: **');
writeln('** Ki Joko Bodho **');
writeln('****************************');
end;
{Prosedur
peerkalian data}
function
kali(x,y : integer):integer;
begin
kali := x * y;
end;
{Program
utama}
Begin
info;
a := 12;
b := 67;
writeln(a,' x ',b,' = ',kali(a,b));
writeln('12 x 13 = ',kali(12,13));
readln;
End.
|
c.
LATIHAN SOAL :
(Program yang anda buat harus dipecah dalam prosedur
dan fungsi!!!!!!)
1. Buatlah program
dengan menggunakan prosedur untuk membalik suatu angka
Misalnya
:
Masukkan
angka : 12309
Hasil
pembalikan : 90321
2. Buatlah program dengan menggunakan fungsi
untuk mencari jumlah dan rata-rata dari sejumlah data yang dimasukkan.
MODUL III
REKURSI
(1 x pertemuan)
I. Tujuan
Mempelajari proses rekursi dalampenggunaan prosedur
dan fungsi
II. Teori Singkat
Rekursi adalah suatu
prosedur atau fungsi yang dapat memanggil dirinya sendiri. Contoh dari rekursi
adalah proses menghitung faktorial dan proses menghitung bilangan fibonacci.
Program berikut menunjukkan
contoh penggunaan rekursi yang identik dengan suatu perulangan.
Prog4_01.pas
Program
rekursi;
var
i : integer;
procedure
ulang;
begin
writeln(i,'. Tulisan ini akan tercetak 10
kali');
if i < 10 then
begin
i := i + 1;
ulang;
end;
end;
begin
i := 1;
ulang;
readln
end.
|
Perhatikan hasil dari
eksekusi program diatas. Terlihat bahwa di dalam prosedur ulang terdapat baris
perintah yang berfungsi untuk memanggil dirinya sendiri sebelum i = 10.
Contoh program berikut
merupakan contoh rekursi untuk perhitungan suatu nilai faktorial.
Prog4_02.prg
Var
i : byte;
function
Faktorial(m:byte):longint;
begin
if m = 0 then
faktorial := 1
else
faktorial := m * Faktorial(m - 1)
end;
begin
for i := 1 to 8 do
writeln(i:2,'! = ',Faktorial(i));
readln
end.
|
Perhatikan hasil tampilan
dari program diatas, modifikasi program dengan bilangan yang akan
difaktorialkan diinputkan dari keyboard, sehingga menghasilkan tampilan seperti
berikut :
Masukkan anngka :
5
Hasi faktorial :
2 x 4 x 3 x 2 x 1 =
120
Contoh program berikut
merupakan contoh rekursi untuk menghitungan bilangan fibonnaci Prog4_03.prg
Var
suku, nilai : integer;
function
fibo(n:integer):longint;
begin
if (n=1) or (n=2) then
fibo:=1
else
fibo := fibo(n-1)+fibo(n-2);
end;
begin
for suku := 1 to 10 do
writeln(suku:3,fibo(suku):8);
readln
end.
|
Soal
latihan :
Ubahlah ketiga contoh
program diatas tanpa menggunakan rekursi, tetapi menghasilkan output yang sama.
MODUL IV
RECORD
(2 x pertemuan)
I. Tujuan
Mempelajari penggunaan tipe data terstruktur record
pada pascal
II. Teori Singkat
Record merupakan tipe
berstruktur yang memiliki beberapa komponen atau elemen dengan masing-masing
elemen boleh memiliki tipe data yang berlainan.
Bentuk deklarasi variabel
record :
RECORD
Daftar_field_1 : tipe_1;
Daftar_field_2 : tipe_2;
…
Daftar_field_n : tipe_n;
END;
|
Masing-masing elemen dari
record disebut dengan field. Masing-masign field dapat berupa tipe apa saja
termasuk array.
Contoh deklarasi :
Type
RecBarang = RECORD
Nama : string;
Banayk : integer;
Harga : LongInt;
End;
Var
Barang : RecBarang;
|
Cara Mengakses field
Bentuk :
Variabel.field
|
Contoh :
Barang.Nama;
Berarti field nama dari
variabel record benama barang.
Contoh lain :
Barang.Nama
:= ‘Sabun Mandi’;
Field Nama pada record
Barang diisi string ‘Sabun Mandi’
Contoh program :
Program
contoh_record;
Type
Recbarang = RECORD
Nama_B : string[8];
Jumlah : Integer;
Harga_b : LongInt;
End;
Var
Barang : Recbarang;
Begin
{Memasukan data ke dalam record barang}
Barang.Nama_b := 'Baju koko';
Barang.Jumlah := 10;
Barang.Harga_b := 200000;
{Menampilkan isi field record}
Writeln('Nama Barang
: ',Barang.Nama_b);
Writeln('Jumlah Barang : ',Barang.Jumlah);
Writeln('Harga Barang : ',Barang.Harga_b);
End.
|
Record di dalam record.
Mungkin saja sebuah record
berisikan record saja. Sebagai contoh :
Type
RecTgl
= RECORD
Tgl,
Bln,
Thn : Integer;
End;
RecPegawai = RECORD
Nmr : Integer;
Nama : String[35];
TgLahir : RecTgl;
Gaji : LongInt;
End;
Var
DataPeg : RecPegawai;
Begin
{Mengisikan nilai terhadap field-field}
DataPeg.Nmr := 123;
DataPeg.Nama := 'Joko Bodho';
DataPeg.TgLahir.Tgl := 13;
DataPeg.TgLahir.Bln := 10;
DataPeg.TgLahir.Thn := 1975;
{menampilkan isi field}
Writeln('Nomor : ',DataPeg.Nmr);
Writeln('Nama : ',DataPeg.Nama);
Writeln('Tanggal Lahir : ',DataPeg.TgLahir.Tgl,
'/',DataPeg.TgLahir.Bln,'/',DataPeg.TgLahir.Thn);
readln;
End.
|
Pernyataan WITH
Untuk menyederhanakan
pernyataan seperti
DataPeg.TgLahir.Tgl
Pascal
menyediakan pernyataan WITH, dengan bentuk :
WITH nama_record Do
<pernyataan>
|
Pada bentuk ini field-field
yang terletak pada pernyataan dapat disebutkan tanpa menyertakan lagi nama
recordnyadan tanda titik. Untuk jelasnya pada contoh program pertama akan
dimodifikasi dengan pernyataan WITH :
Latihan Soal :
Buatlah algoritma, flowchart
dan progam untuk memasukkan sejumlah data nilai mahasiswa dalam bentuk record.
Data yang dimasukkan adalah Nim, Nama, Nilai UTS, Nilai UAS, Nilai Tugas.
Setelah semua data dimasukkan, semua data ditampilkan dalam bentuk tabel yang
diurutkan secara descending berdasarkan nilai rata-rata tiap mahasiswa,
kemudian konversi nilai rata-rata ke dalam nilai angka dengan aturan.
Rata-rata >= 80 nilai
huruf A keterangan Lulus
Rata-rata >= 70 nilai
huruf B keterangan Lulus
Rata-rata >= 60 nilai
huruf C keterangan Lulus
Rata-rata >= 50 nilai
huruf D keterangan Tidak Lulus
Rata-rata < 50 nilai
huruf E keterangan Tidak Lulus
Contoh output program :
Jumlah Data : 2
Data ke-1
N
I M : 11010001
N
a m a : Jono
Nilai
UTS : 50
Nilai
UAS : 50
Nilai
TUGAS : 50
Data ke-1
N
I M : 11010002
N
a m a : Hari
Nilai
UTS : 90
Nilai
UAS : 90
Nilai
TUGAS : 90
H A S I L P R O S E S
No
|
NIM
|
Nama
|
Rata
|
Huruf
|
Keterangan
|
1
|
11010002
|
Hari
|
90
|
A
|
Lulus
|
2
|
11010001
|
Jono
|
50
|
D
|
Tidak Lulus
|
MODULL V
MEMBUAT UNIT
(1 x pertemuan)
I. TUJUAN
Mempelajari
pembuatan unit dengan mengunakan pascal
II. TEORI
Unit merupakan group dari prosedur atau fungsi (untuk berbagai
deklarasi/definisi seperti variabel dan tipe) yang dpat dikompilasi terpisah
terhadap program turbo pascal. Keuntungan dengan adanya unit, program yang
memakai fasilitas dalam unit akan dikompilasi lebih cepat, sebab bagian dari
unit tidak ikut dikompilasi lagi.
Struktur Unit
Unit terdiri dari tiga buah
bagian :
- Bagian Interface
- Bagian Implementation
- Bagian Inisialisasi
Struktur Sebuah Unit :
UNIT nama_unit;
INTERFACE
USES daftar_nama_unit; {optional}
{bagian deklarasi yang bersifat global}
IMPLEMENTATION
{Bagian deklarasi yang bersifat lokal
dan implementasi dari subprogram yang
terdapat pada bagian interface}
BEGIN {opsional}
(* bagian inisialisasi *) {opsional}
END.
Bagian Interface
Bagian interface merupakan
bagian penghubung antara unit dengan unit lain atau program. Jika unit
mengandung prosedur atau fungsi yang dapat diakses oleh program atau unit lain,
hanya kepala/judul prosedur/fungsi yang berada pada bagian interface. Adapun tubuh fungsi berada pada bagian implementation.
UNIT
TambKur;
INTERFACE
USES
CRT;
PROCEDURE
Tambah(x, y : integer);
PROCEDURE
Kurang(x, y : integer);
PROCEDURE
Hapuslayar;
PROCEDURE
TUNDA;
|
Bagian Implementation
Bagian implementation berisi
:
·
Bagian tubuh dari fungsi atau prosedur yang
kepalanya dideklarasikan pada bagian interface
·
Deklarasi konstanta, tipe, variabel, prosedurdan
fungsi yang bersifat lokal (hanya dikenal dibagian implementation)
Bagian ini dapat menggunakan
semua fasilitas yang ada pada bgian interface
(seperti deklarasi variabel dan tipe) dan juga fasilitas yang terdapat pada
unit yang dilibatkan pada bagian interface.
IMPLEMENTATION
PROCEDURE
HAPUSLAYAR;
Begin
ClrScr;
End;
PROCEDURE
Tunda;
Begin
Readln;
End;
PROCEDURE
Tambah(x, y : integer);
VAR
Total
: integer;
begin
total := x + y;
writeln(x,' + ',y,' = ',total);
End;
PROCEDURE
Kurang(x, y : integer);
VAR
Total
: integer;
begin
total := x - y;
writeln(x,' - ',y,' = ',total);
End;
|
Bagian Inisialisasi
Bagian ini bisa terdiri kata
tercadang END saja yang diakhiri dengan titik. Dan menyatakan unit tidak
mengandung kode inisialisasi.
Begin
End.
|
Dari contoh-contoh pada
bagian diatas anda ketikkan menjadi sebuah program dan beri nama TambKur.prg. Kemudian Compile program
diatas dengan menekan tobol Alt+F9 atau dari menu Compile pilih Compile. Jika
program anda tidak mengandung kesalahan maka anda akan mendapatkan sebuah file
baru dengan nama TambKur.tpu. yaitu
file TPU yang anda bisa sisipkan pada program utama anda dengan menggunakan
perintah Uses.
Ketikkan program dibawah ini
kemudian simpan dengan nama Test.prg
uses
tambkur;
begin
Hapuslayar;
Tambah(2,3);
Kurang(10,4);
Tunda;
end.
|
Perhatikan hasilnya dan
pelajari !!!!!!!!!!!!!!!!!!!
Latihan
Soal :
Buatlah sebuah program pascal yang memanfaatkan fasilitas unit untuk
menghitung jumlah huruf hidup dan huruf mati dari suatu string yang diinputkan
dari keyboard.
MODUL VI
POINTER
(2 x pertemuan)
I. TUJUAN
Mempelajari tipe
pointer dan penerapannya dalam program
II. TEORI
Pengertian
pointer (Santoso, 1992) adalah suatu tipe data yang dapat digunakan untuk
mengalokasikan dan mendealokasikan (mengambil / mengurangi) pengingat secara
dinamis, yaitu sesuai dengan kebutuhan pada saat suatu program dieksekusi.
Data bertipe
pointer merupakan suatu fasilitas yang dimiliki pernrograrnan bahasa Pascal
untuk mengatasi tipe data yang bersifat statis, misaInya data bertipe larik
yang penyimpanannya dalam pengingat terbatas, data yang tersimpan dalam perubah
tidak boleh melebihi pesanan yang telah dideklarasikan. Gambar 3. menunjukkan
ilustrasi perubah statis dan dinamis.
Gambar 3.
llustrasi perubah statis dan dinamis
Gambar diatas
bisa dijelaskan sebagai berikut. Pada gambar 3.a. perubah A adalah perubah
statis. Dalam hal ini 1000 adalah nilai data yang sesungguhnya dan disimpan
pada perubah (lokasi) A. Pada gambar 3.b. perubah A adalah perubah dinamis.
Nilai perubah ini misalnya adalah 10. Nilai ini bukan nilai data yang
sesungguhnya, tetapi lokasi dimana data yang sesunggulmya berada. Jadi dalam
hal ini nilai data yang sesungguhnya tersimpan pada lokasi 10.
Dari ilustrasi di
atas bisa dilihat bahwa nilai perubah dinamis akan digunakan untuk menunjuk ke
lokasi lain yang befisi data sesungguhnya yang akan diproses. Karena alasan
inilah perubah dinamis lebih dikenal dengan sebutan pointer yang artinya kira‑kira menunjuk ke sesuatu.
Dalam perubah
dinamis, nilai data yang ditunjuk oleh suatu pointer biasanya disebut sebagai
simpul/node.
Struktur
Data.
Struktur data
yang dimaksud disini adalah struktur data yang digunakan dalam data bertipe
pointer. Data bertipe pointer ditandai dengan meletakkan tanda ^ didepan nama
simpul pada deklarasinya.
Simpul bisa
dideklarasikan sebagai sebuah record yang berisi field‑field data yang bertipe
selain pointer dan field‑field yang bertipe pointer.
Field bertipe pointer dalam
sebuah record bisa satu buah (untuk single link list), bisa dua buah (untuk
double link list) dan sebagainya.
Single link list hanya bisa
menunjuk ke satu arah, sedang double link list bisa menunjuk ke dua arah.
Dalam pemrograman bahasa
Pascal, struktur data bertipe pointer yang bersifat dinamis berbeda dengan tipe
data lainnya yang besifat statis.
Bentuk umum deklarasi
pointer adalah sebagai berikut:
Type
pengenal = ^simpul;
simpul
= tipe;
dengan pengenal : nama pengenal yang menyatakan data
bertipe pointer.
Simpul : nama simpul.
Tipe :
tipe dari simpul.
Tanda ^ didepan nama simpul harus
ditulis apa adanya dan menunjukkan bahwa pengenal adalah suatu tipe data
pointer. Tipe data simpul yang dinyatakan dalam tipe bisa berupa sembarang tipe
data, misainya char, integer, real, rekaman (record) dan sebagainya.
Contoh:
Type patkiang = string [301;
pegawai=.^simpul;
simpul
= record
Nama
: panjang;
Alamat : panjang;
pekerjaan: patkiang;
End;
Var P1,P2: pegawai;
Deklarasi pada contoh diatas sifat kedinamisannya masih tersamar,
karena jika dfinginkan sejumlah simpul aktif dalam pengingat, maka kita perlu
menyediakan sejumlah pointer yang sesuai. Dengan demikian seolah‑olah tidak ada
perbedaan yang nyata antara perubah statis dengan dinamis. Gambar 4.
menunjukkan medan informasi pada simpul pointer P1 dan P2.
Dari gambar 4. terlihat ada
kemiripan dengan perubah statis tanpa larik.
Gambar 4.
ilustrasi medan informasi pada simpul pointer P I dan P2.
Jika benar‑benar diinginkan mempunyai perubah yang bersifat dinamis,
harus ditarnbalikan satu medan lagi dalarn rekaman yang mampu menunjuk simpul
lain, yang disebut dengan medan penyambung dengan tipenya sama dengan tipe
pointer awal (P1). Deklarasinya struktur data untuk single‑link‑list dapat
diubah menjadi:
Type panjang = string[30];
pegawai=
'I simpul;
simpul
= record
Nama : panjIang;
Alamat : panjang;
Pekerjaan
: panjang;
berikut : pegawai;
End;
Var PI : pegawai;
Gambar 5. menunjukkan
ilustrasi simpul dengan medan informasi, medan penyambung dan senarai berantai
dari single‑link‑list.
Gambar 5.
Ilustrasi simpul dengan medan informasi, medan penyambung dan
senarai berantai
Gambar 5.a. menunjukkan
suatu simpul dengan medan informasi berisi nama, alamat, peke~aan dan medan
penyambung yang bertipe pointer. Garnbar 5.b. menunjukkan senarai berantai yang
dapat dibentuk dari deklarasi diatas, ada kemiripan dengan data yang bertipe
larik.
Demikian pula
untuk deklarasi struktur data doubly‑link‑list dapat diubah menjadi:
Type
panjang = string [301;
pegawai=
Simpul;
simpul
= record
Nama : panjang;
Alamat : panjang;
pekerjaan : panjang;
kiri,kanan : pegawai;
End;
Var P1 : pegawai;
Gambar 6. menunjukkan
ilustrasi simpul dengan medan informasi, medan penyambung dan senarai berantai
dari doubly‑link‑list.
Gambar 6. a.
menunjukkan suatu simpul dengan medan penyambung kiri, medan informasi berisi
nama, alamat, pekedaan dan medan penyambung kanan yang bertipe pointer. Gambar
6.b. menunjukkan senarai berantai yang dapat dibentuk dari deklarasi struktur
data doubly‑link‑list.
Kegunaan.
Kegunaan yang utarna dari
data bertipe pointer adalah untuk mengatasi kekurangan yang terdapat pada data
yang bertipe larik. Misalnya ada deklarasi sebagai berikut (dalam bahasa
Pascal): var Tabel : array [ 1.. 100, 1.. 50] of integer;
Gambar 6.
Ilustrasi simpul dengan medan penyambung kiri, medan informasi,
medan penyambung
kanan dan senarai berantai
Perubah tabel di atas hanya mampu
untuk menyimpan data sebanyak 5000 buah data, tidak boleh lebih, proses akan terhenti
jika perubah tabel digunakan lebih dari 5000 buah data. Sebaliknya, pengingat/penyimpan
mengalami banyak kekosongan jika perubah tabel hanya sedikit yang digunakan,
misalnya yang digunakan hanya 10 buah data, maka sisanya sebanyak 4990
pengingat dibiarkan kosong.
Penggunaan data bertipe pointer adalah untuk mengolah data yang banyaknya
tidak bisa dipastikan sebelumnya, bisa lebih dari 5000 buah data atau kurang
dari 10 buah data.
Pengingat yang digunakan data yang bertipe pointer bisa sebanyak‑banyaknya
tergantung dari kemampuan pengingat komputer yang digunakan dan tidak ada pengingat
yang dibiarkan kosong jika jumlah data yang diolah hanya sedikit.
Teknik.
Teknik
pengoperasian pointer secara umum dibagi kedalam kelompok‑kelompok sebagai
berikut:
1. Baru
2. Tambah:
a. Awal (depan)
b. Tengah
c. Akhir
3. Hapus:
a. Awal (depan)
b. Tengah
c. Akhir
Ketiga teknik
pengoperasian pointer diatas diberlakukan untuk ilustrasi‑ilustrasi:
1. Senarai
berantai tunggal tanpa kepala, yaitu kumpulan komponen yang disusun secara
berurutan dengan bantuan pointer. Masing‑masing komponen dinamakan dengan
simpul (node).
2. Senarai
berantai tunggal bekepala, yaitu senarai berantai yang diawali sebuah simpul
sebagai kepala dengan bantuan pointer menyambung ke sekumpulan simpul yang
disusun secara berurutan.
3. Senarai
berantai tunggal berkepala dan memutar, yaitu sama seperti no. 2. Diatas,
tetapi simpul terakhir menyambung kembali ke simpul kepala.
4. Senarai
berantai ganda bekepala, yaitu senarai berantai yang diawali sebuah simpul
sebagai kepala dengan bantuan pointer menyambung kiri tidak menunjuk ke simpul
yang lain (nil) dan pointer penyambung kanan menunjuk ke sekumpulan simpul yang
disusun secara berurutan. Pointer penyambung kiri dari simpul yang ditunjuk
pointer penyambung kanan simpul kepala kembali menunjuk ke simpul sebelumnya.
Pointer penyambung kanan simpul terakhir tidak menunjuk ke simpul yang lain
(nil).
5. Senarai
berantai ganda berkepala dan memutar, yaitu sama seperti no. 4. diatas, tetapi
pointer penyambung kiri simpul kepala menunjuk ke simpul terakhir dan pointer
menyambung kanan simpul terakhir menunjuk ke simpul kepala, jadi tidak ada
pointer yang bernilai nil.
Selain ketiga
teknik pengoperasian pointer diatas, ditambah lagi teknik menukar posisi simpul yang sering diterapkan pada pengurutan data
(sortir) dan teknik penelusuran yang sering diterapkan pada pohon (tree).
Contoh‑contoh
dasar operasi pointer:
Apabila dideklarasikan tipe
pointer sebagai berikut:
type simpul = Data;
Data
= record
Nama
: string;
alamat
: string;
berikut
: simpul;
end;
var
T1J2 : simpul;
1. Senarai berantai (linked list)
Pada penjelasan
tentang pointer diatas telah dijelaskan bahwa senarai berantai bersifat dinamis
yang dapat mengatasi kekurangan yang terdapat pada data bertipe larik yang
bersifat statis.
Penyajian Senarai berantai:
Penyambung pada
setiap simpul digunakan untuk menunjuk kesimpul lain, jika pointer (penunjuk)
bemilai nill, berarti suatu simpul tidak menunjuk ke simpul lain. Contoh
senarai berantai dapat dilihat pada gambar 8. berikul ini:
Gambar 8. Contoh senarai berantai tunggal (single link list)
Dari gambar 8.
diatas dapat dijelaskan sebagai berikut:
Pointer awal
menunjuk simpul pertama yang berisi info A, dari medan penunjuk simpul pertama
menunjuk simpul kedua yang berisi info B dan seterusnya hingga akhirnya simpul
terakhir tidak menunjuk ke simpul yang lain lagi (nil).
Operasi pada senarai berantai:
1. Operasi pointer pada senarai berantai tunggal
Sebelum
membicarakan operasi pointer pada senarai berantai tunggal (single link list)
yang diberlakukan untuk semua operasi‑operasi data bertipe pointer terlebih
dahulu disampaikan deklarasi umum sebagai berikut:
type Simpul = ^Data;
Data = record
info : char;
berikut :
simpul;
end;
var
elemen : char;
awal, akhir, haru :
Simpul;
a. Simpul baru
Simpul baru dapat
ditambahkan pada senarai berantai dengan perintahperintah:
Readln(elemen);
new(baru);
baru^.info := elemen;
baru^.berikut := nil;
awal := baru;
akhir := baru;
b. Tambah simpul
Untuk sernua
proses penambahan baris pertama dan
kedua dari program simpul baru diatas selalu digunakan. Penambahan Simpul
pada senarai berantai tunggal dibagi kedalam beberapa cara, yaitu:
1. Tambah di belakang:
Untuk menambah di
akhir senarai, terlebih dahulu ditinjau apakah senarai sudah ada atau belum,
jika belum ada (awal := nil), maka program simpul baru diatas bisa digunakan,
jika sudah ada (berarti simpul yang ditunjuk pointer akhir sudah ada), maka
program berikut ini dikedakan (gambaran urutan hasilnya dapat dilihat pada
garnbar 10:
Akhir^.berikut := baru;
akhir := baru;
akhir^.berikut:=nil;
2. Tambah di depan
Sama seperti
tambah simpul di belakang, terlebih dahulu tinjau apakah senarai sudah ada atau
belum, jika belum lakukan perintah yang sama dengan tambah dibelakang, jika
sudah ada lakukan perintah berikut
baru^.berikut:= awal;
awal:=baru;
3. Penambahan di tengah
Sama dengan
operasi penambahan simpul di belakang dan di depan, operasi penambahan simpul
ditengah diawali dengan membuat simpul baru, mengkopi nilai elemen ke info pada
simpul, meninjau apakah senarai sudah ada atau belum.
Jika pada operasi
penambahan di belakang atau di depan dengan cepat ditemukan posisi peletakan
simpul (karena awal dan akhir simpul
sudah diketahui), tetapi pada penambahan simpul di tengah harus dicari dahulu
posisi peletakan simpul baru tersebut.
Untuk proses
pencarian ini dibutuhkan pointer bantuan
(pada deklarasi Var ditambahkan. nama pointer, misaInya bantu yang bertipe pointer) yang
berfungsi untuk penunjuk simpul pada posisi schelum (didepan) simpul baru disisipkan.
Berikut ini
adalah program untuk meletakkan posisi bantu:
bantu := awal;
while elemen > bantu^.berikut^.info do
bantu := bantu^.berikut;
Program diatas
mengandung pengertian bahwa selama nilai elemen lebih besar dari nilai info
pada simpul setelah simpul yang ditunjuk oleh bantu maka pointer bantu menunjuk
simpul berikutnya.
Gambar 12.
menunjukkan ilustrasi penyisipan simpul baru di tengah, jika penunjuk bantu
berhenti pada suatu simpul, programnya adalah sebagai berikut:
Baru^.berikut:=bantu^.berikut;
Bantu^.berikut := baru;
Perintah diatas
jangan dibalik.
c. Hapus simpul
Seperti operasi
pada penambahan simpul, operasi menghapus simpul juga bisa dibagi menjadi:
1.
hapus simpul pertarna.
2.
hapus simpul akhir
3.
hapus simpul di tengah
pada senarai
berantai.
Untuk operasi
penghapusan simpul nilai elemen tidak perlu di kopikan ke variabel simpul
(untuk deklarasi diatas, variabelnya adalah info), karena hanya berfungsi untuk
pembanding. Kemudian untuk operasi penghapusan simpul ini, selain pointer awal dan akhir dibutuhkan beberapa
pointer bantuan untuk menunjuk pointeryang akan dihapus dan pointer pencari
posisi simpul.
Yang terpenting
dalam menghapus simpul adalah usahakan bahwa senarai jangan sampai terputus
terutama, pada saat menghapus simpul ditengah.
Bustrasi penghapusan simpul:
1. Menghapus simpul di awal
Gambar 13.
dibawah mengilustrasikan penghapusan simpul yang terdapat di awal senarai, yang
pada mulanya pointer awal menunjuk ke
simpul terdepan dari senarai berantai.
Gambar 13.
llustrasi penghapusan simpul di awal
Program
penghapusan simpul di awal senarai dapat ditulis sebagai
berikut:
hapus:= awal;
awal:=hapus^.berikut; {gambarl3}
dispose (hapus);
2. Menghapus simpul di tengah
Gambar 14. dibawah
menunjukkan flustrasi penghapusan simpul yang terdapat di tengah senarai
berantai. Apabila lokasi simpul yang akan dihapus sudah diketemukan (setelah
simpul yang ditunjuk oleh pointer bantu), maka program penghapusan tersebut
adalah sebagai berikut:
hapus:=bantu^.berikut;
bantu^.berikut:=hapus^.berikut;
dispose (hapus);
3. Menghapus
simpul di akhir
Menghapus simpul
di akhir senarai dapat dilakukan dengan program berikut Oika memenuffi if hapus = akhir):
akhir := bantu;
akhir^.berikut:= nil;
dispose(hapus);
Contob program:
{ contoh program pointer}
program tambah_hapus_pointer;
type Simpul = ^Data;
Data = record
info : char;
berikut : Simpul;
end;
var
Elemen : char;
Awal,Akhir,Baru : Simpul;
procedure inisialisasi(var
awal,akhir: Simpul);
begin
awal := nil;
akhir := nil;
end;
procedure tambah_belakang(var
awal,akhir : Simpul;elemen : char);
var
baru: Simpul;
begin
new(baru);
baru^.info=elemen;
if awal = nil then
awal := baru
else
akhir^.betikut := baru;
akhir := baru;
akhir^.berikut := nil;
end;
procedure tambah_depan(var awal,akhir
: Simpul;elemen : char);
var
baru : Simpul;
begin
new(baru);
baru^.info := elemen;
if awal = nil then
akhir := baru
else
baru^.berikut := awal;
awal := baru;
end;
procedure tambah_tengah(var
awal,akhir : Simpul;elemen : char);
var
baru,bantu : Simpul;
begin
new(haru);
baru^.info := elemen;
if awal = nil then
begin
awal:=baru;
akhir:=baru;
end
else
begin
{ mencari lokasi yang sesuai }
bantu:=awal;
while elemen >
bantu^.berikut^.info do
bantu:=bantu^. berikut;
{menyisipkan simpul baru}
baru^.berikut:=bantu^. berikut;
bantu^. berikut:=baru;
end;
end;
procedure hapus_simpul (var
awal,akhir : simpul;elemen : char);
var
bantu,hapus : simpul;
begin
if awal=nil then { senarai masih kosong}
writeln(‘Senarai masih kosong’)
else
if awal^.info = elemen then {simpul pertama dihapus}
begin
hapus:=awal;
awal:=hapus^.berikut;
dispose(hapus);
end
else {menghapus tengah atau terakhir}
begin
bantu:=awal; {mencari simpul yang
akan dihapus}
while (elemen <>
bantu^.berikut^.info) and (hantu^. berikut<>nil) do
bantu:=bantu^.berikut;
hapus:=bantu^.berikut;
if hapus<>nil then {simpul
yang akan dihapus ketemu}
begin
if hapus <> akhir
then {simpul tengah dihapus}
bantu^.berikut:=hapus^.berikut
else {simpul terakkir dihapus}
begin
akhir:=bantu;
akhir^. berikut:=nil;
end;
dispose(hapus);
end else
{ simpul yang akan dihapus
tidak ketemu }
writeln(Simpul yang akan
dihapus tidak ketemu');
readln;
end;
end;
procedure baca_tambah;
var
menu : integer;
begin
repeat
clrscr;
gotoxy (10,5);write(‘Masukkan karakter : ‘);readln(elemen);
gotoxy (10,7);write('1. Tambah depan);
gotoxy (10,8);write('2. Tambah tengah');
gotoxy (10,9);write('3. Tambah akhir');
gotoxy (10,10);write('4. Selesai);
gotoxy (10,12); write('Pilihan : ');readln(menu);
case menu of
1 :
tambah_depan(awal,akhir,elemen);
2 :
tambah_tengah(awal,akhir,elemen);
3 :
tambah_belakang(awal,akhir,elemen);
end;
until menu = 4;
end;
procedure baca_hapus;
begin
clrscr;
gotoxy (10,11); write('Masukkan karakter : ');readln(elemen);
hapus_simpul (awal,akhir,elemen);
end;
procedure cetak(var awal : simpul);
var
bantu : simpul;
begin
bantu := awal;
repeat
write(bantu^.info:2,');
bantu:=bantu^. berikut;
until bantu = nil;
readln;
end;
{ program utama }
begin
repeat
clrscr;
gotoxy (10,5); write('1. Tambah');
gotoxy (10,6); write(‘2. Cetak’);
gotoxy (10,7); write(‘3. Hapus’);
gotoxy (10,8); wiite('4. Selesai);
gotoxy (10,10); write('Pilihan : ');readin(pil);
case pil of
'1' : baca_tambah;
'2’ : cetak(awal);
‘3’ : baca_hapus;
end;
until Pil =’4’;
end.
|
Soal:
1. Buatlah program antrian untuk pembehan karcis Bioskop,
setiap ada tambahan pembeli diletakkan di akhir antrian, pembeli yang selesai
dilayani dihapus dari antrian (hapus di depan) dan bagi pembeli yang batal
(keluar dad antrian) segera dihapus.
MODUL VII
GRAFIK DAN SUARA
(1 x pertemuan)
I. TUJUAN
Mempelajari
pembuatan program untuk membangkitkan suara dan mode grafik
II. TEORI
SUARA
Bunyi speaker dapat dibangkitkan dengan menggunakan prosedur Sound.
PROCEDURE Sound(frek:Word);
Frek menyatakan
frekuensi bunyi dalam herzt. Bunyi yang dihasilkan hanya dapat dihentikan dengan
prosedur NoSound. Lama suara diatur
dengan delay.
Program
Suara;
Uses
Crt,graph3;
Begin
Repeat
Sound(1000); {frekuensi pertama}
Delay(200); {tunda sebentar}
Sound(400); {frekuensi kedua}
Delay(200); {tunda sebentar}
Until Keypressed;
NoSound; {menghentikan suara}
End.
|
Program
Piano;
Uses
Crt, Graph3;
Const
Escape=#27;
Var
Tombol : Char;
Frek
: Word;
Bunyi
: Boolean;
Begin
ClrScr;
GotoXY(30,07);Write(' SIMULASI PIANO ');
GotoXY(30,09);Write('===================');
GotoXY(30,10);Write('| W E
T Y U |');
GotoXY(30,11);Write('| A S
F G H J K |');
GotoXY(30,12);Write('===================');
Repeat
Tombol := ReadKey;
Tombol := UpCase(Tombol);
Bunyi
:= True;
Case Tombol Of
'A' : Frek := 131;
'W' : Frek := 191;
'S' : Frek := 147;
'E' : Frek := 156;
'F' : Frek := 175;
'T' : Frek := 185;
'G' : Frek := 196;
'Y' : Frek := 208;
'H' : Frek := 220;
'U' : Frek := 233;
'J' : Frek := 247;
'K' : Frek := 262;
Else
Bunyi := False
End;
If Bunyi Then
Begin
Sound(frek);
Delay(200);
NoSound;
End;
Until Tombol = Escape;
End.
|
MODE GRAFIK
Pada mode grafik
memungkinkan kita menggambar apapun, karena elemen terkecil penyusun grafik
adalah titik (pixsel).
Mengaktifkan Mode Grafik
Untuk memilih mode grafik
anda harus melakukan inisialisasi terlebih dahulu terhadap sistem grafik. Hal
ini dilakukan dengan memanggil prosedur bernama Initgraph.
Bentuk deklarasi :
PROCEDURE InitGraph(Var DriverGrafik :
Integer;
Var ModeGrafik : Integer;
PathDriver : String);
Conoth program untuk membentuk lingkaran :
program
grap;
uses
graph;
var
DriverGrafis,
ModeGrafis : integer;
Begin
DriverGrafis := Detect;
InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\');
If GraphResult <>GrOk then
Begin
Writeln(‘Mode grafik tidak berhasil’);
Halt(1); {Berhenti}
End;
Circle(GetMaxX div 2, GetMaxY div 2,
GetMaxY div 4);
Readln;
Closegraph;
End.
|
GraphResult
à dipakai untuk memeriksa keberhasilan mode grafik
anda.
CloseGraph à dipakai untuk
menutup mode grafik ke mode teks.
GetMaxX à memberi nilai bertipe integer yang menyatakan nomor kolom terbesar pada mode grafik sekarang.
GetMaxY
à memberi nilai
bertipe integer yang menyatakan nomor baris terbesar pada mode grafik sekarang.
PutPixel(x,
y, w); à menggambar sebuah
titik pada baris yang, kolom x dan warna w
Contoh program :
program
Frekw;
uses
g
raph;
var
DriverGrafis,
ModeGrafis : integer;
FrekDasar,
FrekMod,
Amp,
Sudut,
SumbuX : integer;
Tinggi : real;
Begin
DriverGrafis := Detect;
InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\');
If GraphResult <>GrOk then
Begin
Writeln('Mode grafik tidak berhasil');
Halt(1); {Berhenti}
End;
FrekDasar := 3;
FrekMod:= 10;
Amp := GetmaxX div 4;
SumbuX := GetMaxY div 2;
For Sudut := 1 To GetMaxX do
Begin
Tinggi := Amp * (Sin(FrekDasar * PI *
Sudut/180)) *
(Sin(FrekDasar * PI *
Sudut/180));
PutPixel(Sudut, SumbuX - Round(Tinggi),
GetMaxColor);
End;
Readln;
Closegraph;
End.
|
GetPixel(x,
y); à memberi kode warna pixel yang berada pada koordinat
x kolom yang
MoveTo(x,
y); à meletakkan penunjuk sekarang ke kolom x baris yang
MoveRel(dx, dy); à meletakkan penunjuk sekarang ke kolom x+dx, baris yang+dy dengan (x,y)
adalah posisi semula dari penunjuk sekarang.
GetX à menghasilkan posisi kolom dari penunjuk sekarang
GetY à menghasilkan posisi baris dari penunjuk sekarang
LineTo(x,y); à Menggambar
dari posisi penunjuk sekarang ke koordinat (x, y). setelah dibuat penunjuk
sekarang ada di koordinat (x,y).
LineRel(dx,dy) à Menggambar dari
posisi penunjuk sekarang ke koordinat (x+dx, y+dy)., dengan (x,y) adalah posisi
semula dari penunjuk sekarang . setelah dibuat penunjuk sekarang ada di koordinat
(x+dx,y+dy).
Line à dipakai untuk
menggambar garis tetapi tidak mengubah penunjuk sekarang.
Setcolor(x) à memberikan warna x pada palete sekarang
Contoh program :
program
rumah;
uses
graph;
var
DriverGrafis,
ModeGrafis : integer;
FrekDasar,
FrekMod,
Amp,
Sudut,
SumbuX : integer;
Tinggi : real;
Begin
DriverGrafis := Detect;
InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\');
If GraphResult <>GrOk then
Begin
Writeln('Mode grafik tidak berhasil');
Halt(1); {Berhenti}
End;
SetColor(4);
Line(320, 100, 200, 200);
Line(320, 100, 440, 200);
SetColor(7);
Line(250, 300, 250, 160);
Line(390, 300, 390, 160);
SetColor(6);
Line(150, 300, 490, 300);
Readln;
Closegraph;
End.
|
Soal :
Buatlah tampilan gambar
grafik dengan bentuk :
No comments:
Post a Comment