Diktat Algoritma Pemroraman II
Diktat Algoritma Pemroraman II
ARRAY
DEFINISI
Array atau Larik adalah :
Type data terstruktur yang terdiri dari sejumlah elemen dimana setiap elemennya mempunyai tipe data
yang sama atau sejenis (setype).
Larik dimanipulasikan dengan memanfaatkan index (subscript) dari tiap elemen larik tersebut.
Nilai … … … … …
1 2 3 4 5
Elemen array bisa diakses dengan cara menyebutkan nama array diikuti nilai indeksnya didalam kurung
siku.
Nilai [1], ini berarti mengakses nilai elemen pertama.
Untuk memberikan nilai ke array, bisa menggunakan 2 cara, yaitu :
Dengan operator penugasan (:=)
Nilai [1] := 0 , elemen pertama dari nilai diberi nilai 70
Dengan statemen Read/readln
Read (nilai[1]);
Read (nilai[2]);
Jika menggunakan perintah ini banyaknya perintah yang diberikan harus sebanyak elemen yang
dideklarasikan pada deklarasi array, sehingga bias digunakan perintah perulangan seperti berikut :
For I := 1 to 5 do
Begin
Readln(nilai[I]);
End;
Untuk mengambil nilai/membaca elemen dari array dimensi satu digunakan statemen Write
Write (nilai[1]);
Untuk mempersingkat program dipergunakan perintah berikut :
For I := 1 to 5 do
Begin
Writeln(nilai[I]);
End;
Contoh 1 :
program 1;
uses crt;
const
max_test = 4;
type
data_nilai = array[1..max_test] of integer;
var
i,jum : integer;
rata : real;
nilai_test : data_nilai;
begin
clrscr;
{memasukkan data}
for i := 1 to max_test do
begin
write ('masukkan nilai test ke ',i,' = ');
readln (nilai_test[i]);
end;
{menhitung total nilai dan rata-rata}
jum := 0;
for i := 1 to max_test do
begin
jum := jum + nilai_test[i];
end;
rata := jum / max_test;
{mencetak}
writeln ('Total nilai = ',jum);
writeln ('Rata-rata nilai = ',rata:5:2);
readln;
end.
Array berdimensi dua mempunyai bentuk table yang menpunyai 2 indeks, baris dan kolom
Format :
Deklarasi array dimensi dua bisa ditempatkan pada bagian type ataupun Var seperti halnya array dimensi
satu.
Bentuk 1:
Var
NamaLarik : Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik;
Bentuk 2 :
Type
NamaType = Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik;
Var
NamaVarArray : NamaType;
Indeks1 biasa disebut indeks baris yang menunjukkan banyaknya baris, sedang indeks2 disebut indeks
kolom yang menunjukkan banyaknya kolom.
Contoh :
Var
Nilai_mhs : array [1..100,1..3] of integer;
Dari deklarasi array 2 dimensi diatas dapat direpresentasikan dalam memori seperti berikut :
Untuk mengambil atau mencetak nilai dari array, digunakan pernyataan keluaran (write/writeln)
Write (Nilai_mhs [4, 1]);
Untuk mempersingkat perintah bisa dipergunakan perintah perulangan, untuk deklarasi diatas bisa
dipergunakan perintah berikut :
For I := 1 to 100 do
Begin
For J := 1 to 3 do
begin
Writeln(Nilai_mhs[I,J);
End;
End;
Contoh 2:
Program lat2;
Uses Crt;
Const N = 10;
Var
Nim : Array[1..N] Of integer;
Nama : Array[1..N] Of String[20];
IP : Array[1..N] Of real;
I : Integer;
Begin
Clrscr;
{Baca Data}
Writeln(‘Masukkan’,N,‘buah data’);
For I := 1 to N Do
Begin
Write(‘No.Mhs : ’);Readln(NIM[I]);
Write(‘Nama Mhs : ’);Readln(Nama[I]);
Write(‘IP Mhs : ’);Readln(IP[I]);
End;
{Cetak Hasil}
Writeln(‘Daftar Nilai’);
Writeln(‘No NIM NAMA IP’);
For I := 1 to N Do
Writeln(‘I:2, Nim[I]:10, Nama[I]:15, IP[I]:6:2);
Readln
End.
Contoh 3 :
program lat3;
uses crt;
type
data_nilai = array[1..100,1..3] of integer;
var
max_siswa,i,j,jum : integer;
rata : real;
nilai_test : data_nilai;
begin
clrscr;
{memasukkan data}
write ('masukkan jumlah siswa = ');
readln (max_siswa);
for i := 1 to max_siswa do
begin
writeln ('data Mahasiswa ke ',i,' = ');
for j := 1 to 3 do
begin
write ('masukkan nilai test ke ',i,' = ');
readln (nilai_test[i,j]);
end;
end;
{menhitung total nilai dan rata-rata}
clrscr;
writeln ('DAFTAR NILAI');
write ('No ');
for i := 1 to 3 do
write ('nilai ke-',i,' ');
writeln ('rata-rata');
writeln;
for i := 1 to max_siswa do
begin
jum := 0;
for j := 1 to 3 do
jum := jum + nilai_test[i,j];
rata:= jum / 3;
write (i:2);
for j := 1 to 3 do
write (' ',nilai_test[i,j],'':7);
writeln(rata:5:2);
end;
readln;
end.
Contoh 4 :
program lat4;
uses crt;
type
tabel = array[1..10,1..10] of integer;
var
matrixA,matrixB,mat_kali,mat_plus : tabel;
No_baris,baris,kolom : integer;
begin
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
gotoxy((j-1)*5+1,No_baris);
read(mat[i,j])
end;
no_baris :=no_baris + 1;
writeln;
end;
end;
begin
for i := 1 to baris do
for j := 1 to kolom do
begin
mat_kali[i,j] := 0;
for k := 1 to baris do
mat_kali[i,j] := mat_kali[i,j] + matA[i,k] * matB[k,j];
end;
end;
begin
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
mat_plus[i,j] := matrixA[i,j] + matrixB[i,j];
end;
end;
end;
begin
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write(matrix[i,j]:8);
end;
writeln;
end;
end;
begin
repeat
clrscr;
writeln ('perkalian dan penjumlahan matriks');
No_baris := 6;
write ('masukkan baris = '); readln(baris);
write ('masukkan kolom = '); readln(kolom);
if kolom <> baris then
begin
writeln ('banyaknya kolom harus sama dengan kolom');
write ('tekan enter untuk ulangi');readln;
end;
until kolom = baris;
writeln('MATRIKS A ');
baca(matrixA,No_baris);
writeln;
writeln('MATRIKS B ');
no_baris := 15;
baca(matrixB,No_baris);
kali(mat_kali,matrixA,matrixB);
plus(mat_plus,matrixA,matrixB);
clrscr;
writeln('hasil');writeln;
writeln('MATRIKS A =');writeln;
cetak(matrixA);writeln;
writeln('MATRIKS B =');writeln;
cetak(matrixB);writeln;
writeln('matrik A kali matriks B =');writeln;
cetak(mat_kali);
writeln;writeln;
writeln('matriks A tambah matrik B =');writeln;
writeln;
cetak(mat_plus);
readln;readln;
end.
Tugas I mahasiswa :
Buat program untuk menghitung nilai huruf dari sejumlah mahasiswa yang diinputkan
Input yang diminta :
Pemrograman dengan menggunakan konsep subprogram merupakan konsep yang paling bermanfaat dan
produktif, dan penggunaan subprogram ini bisa mempertinggi derajad pemrograman terstruktur. Dalam
pascal subprogram ini dikenal dengan istilah Procedure dan Function.
Modularisasi akan memberikan keuntungan :
Untuk aktivitas yang harus dilakukan lebih dari satu kali, modul program cukup ditulis sekali
saja, lalu modul tersebut bisa dipanggil dari bagian lain dalam program.
Kemudahan menulis dan menemukan kesalahan program.
Di dalam Pascal terdapat dua jenis procedur dan fungsi, yaitu procedur dan fungsi bawaan (standard) yang
sudah disediakan oleh pascal dan procedur dan fungsi yang diciptakan sendiri oleh pemrogram.
Fungsi adalah suatu routine yang terdefinisi, baik di definisikan oleh PASCAL (fungsi standard) maupun
didefinisikan oleh pemakai (user define function). Fungsi dapat kita bedakan dari hasil fungsinya, yang
dapat berupa String, Numeric atau Boolean. Berikut ini adalah fungsi-fungsi pustaka ynag sudah terdefinisi
dalam PASCAL.
1. Fungsi Standard Aritmatika
Abs(x) : Menghasilkan nilai mutlak dari x, x real atau integer.
Exp(x) : Menghasilkan e x , x real atau integer.
Ln(x) : Menghasilkan logaritma natural x.
Int(x) : Menghasilkan nilai integer dari x, x real.
Frac(x) : Menghasilkan bagian pecah dari x yang real.
Sqr(x) : Menghasilkan nilai kuadrat dari x, x real atau integer.
Sqrt(x) : Menghasilkan akar kuadrat dari x, x real.
Sin(x) : Sinus x, x real.
Cos(x) : Cosinus x, x real.
ArcTan(x) : Arch Tg x.
Random(x) : Menghasilkan bilangan bulat acak dari 0 – x.
2. Fungsi Standard String
Copy(s,I,n) : Menyalin n buah character mulai dari posisi i dari string x.
Pos(s1,s2) : Menghasilkan posisi suatu string s1 dalam string s2.
Length(s) : Menghasilkan panjang suatu string s.
Readkey : Menghasilkan satu character yang diketik dari keyboard. Bersifat menunggu masukkan
satu character.
3. Fungsi Standard Transfer
Ord(x) : Menghasilkan KODE ASCII dari x, x bertype Char.
Chr(x) : Menghasilkan character yang berkode ASCII x.
Round(x) : Menghasilkan nilai longint yang terdekat dari x real sesuai dengan aturan pembulatan.
Trunc(x) : Menghasilkan nilai longint yang terkecil dari x real.
Upcase(x) : Menghasilkan huruf besar.
Procedure standard adalah suatu routine yang juga siap pakai dan dipanggil dengan menyebutkan nama
procedure dengan memberikan argumen yang sesuai. Berikut adalah procedure-procedure standard yang
sering kita pakai.
5.1. Procedure Input / Output
Write, writeln : sudah dibahas
Read, Readln : sudah dibahas
Untuk procedure dan fungsi standard yang sudah disediakan oleh pascal semuanya terdapat pada unit-unit
yang harus disertakan pemakaiannya pada USES (pada kepala program).
Untuk selanjutnya yang akan dibahas adalah procedure dan function buatan pemakai.
5.2. MENCIPTAKAN FUNGSI DAN PROCEDURE
Fungsi merupakan sebuah subprogram yang apabila dipanggil akan menghasilkan sebuah nilai.
Ciri-ciri suatu fungsi :
Fungsi hanya memberikan sebuah hasil
Nama fungsi selain digunakan untuk memanggil fungsi tersebut, juga dianggap sebagai suatu variable
sehingga bias digunakan sebagai bagian dari ungkapan.
Dalam fungsi tidak digunakan parameter variable, semua parameter dianggap sebagai parameter nilai.
Semua parameter digunakan sebagai masukan pada fungsi tersebut dengan keluarannya nama fungsi
yang bertindak sebagai satu variable.
Deklarasi fungsi :
Function, adalah kata tercadang pascal yang memberi tanda bahwa deklarasi fungsi dimulai.
Pengenal, adalah nama fungsi
Daftar parameter formal, adalah nama parameter yang akan dioperasikan dalam fungsi
tipe, adalah tipe data dari nilai fungsi. (yang diperbolehkan hanya tipe skalar, subjangkauan atau terbilang).
Kemudian untuk memanggil fungsi yang sudah dideklarasikan, digunakan bentuk sebagai berikut :
Berapa hal yang harus diperhatikan dalam penggunaan prosedur, antara lain :
Deklarasi prosedur terletak pada bagian deklarasi program.
Sembarang tipe statemen pascal bisa digunakan dalam prosedur.
Parameter dalam prosedur bersifat optional, boleh ada boleh tidak.
Suatu prosedur bisa memanggil prosedur lain yang sudah didefinisikan terlebih dahulu.
Pemberian nama prosedur mengikuti aturan pemberian nama pengenal atau perubah.
Mendeklarasikan prosedur
Pemanggilan prosedur dilakukan dengan cara menyebutkan nama prosedurnya diikuti dengan parameter
(parameter aktual) jika memakai parameter formal pada saat mendeklarasikan.
Nama lokal adalah suatu nama (variabel, konstanta dan type) yang dideklarasikan didalam sebuah prosedur
(atau fungsi), yang mana nama tersebut hanya berguna didalam kelompok statemen atau dalam prosedur
(atau fungsi) yang mendeklarasikannya. nama lokal ini hanya memerlukan tempat dimemori pada saat
prosedur atau fungsi yang menggunakannya dikerjakan. Sembarang tipe data bisa digunakan sebagai nama
lokal.
Nama global adalah nama (variabel, konstanta dan type) yang dideklarasikan dibagian deklarasi pada
pogram yang mana nama tersebut bisa digunakan diseluruh bagian program termasuk pada prosedur dan
fungsi.
Untuk menghindari kesalahan pengalihan informasi ke dan dari prosedur yang menggunakan variabel
global, maka bisa dengan cara mendeklarasikan parameter-parameter yang harus digunakan.
Sebisa mungkin diminimalkan penggunaan nama global, karena penggunaan nama lokal bisa
meminimalkan usaha pencarian kesalahan yang disebabkan oleh nama tersebut.
PARAMETER
Kebanyakan program memerlukan pertukaran informasi antara prosedur atau fungsi dan titik dimana
prosedur atau fungsi dipanggil. Untuk hal tersebut digunakan suatu parameter.
Tujuan penggunaan parameter formal adalah untuk mengontrol komunikasi informasi ke dan dari prosedur.
Ada dua jenis parameter yang bisa digunakan, yaitu :
Parameter formal
Parameter formal adalah parameter yang dideklarasikan didalam bagian kepala procedure atau fungsi itu
sendiri.
Daftar parameter formal bisa berisi 4 tipe parameter yang berbeda, yaitu : perubah (var), nilai, fungsi dan
prosedur.
Var, adalah kata baku yang menunjukkan pengenal yang mengikutinya adalah parameter perubah.
Pengenal, adalah nama parameter perubah.
Tipe , adalah tipe data parameter perubah.
Tipe data yang digunakan dalam parameter formal harus berupa pengenal atau tipe data skalar, tidak boleh
menggunakan tipe data terstruktur.
Parameter aktual
Parameter aktual adalah parameter yang disertakan pada saat pemanggilan suatu prosedur atau fungsi.
Bentuk umum pemanggilan prosedur
Nama prosedur yang dinyatakan oleh pengenal harus sesuai dengan nama prosedur yang digunakan pada
waktu mendeklarasikan prosedur. Daftar parameter aktual berisi nama-nama parameter aktual yang akan
digunakan atau dioperasikan didalam prosedur yang akan dipanggil.
Parameter aktual harus sesuai dengan parameter formal dalam hal :
Urutan posisi dan jumlah parameter yang digunakan
Tipe data dari setiap parameter.
Operasi yang dilaksanakan pada saat prosedur dipanggil:
1. Nilai dari semua parameter aktual yang berupa parameter nilai akan diberikan pada parameter
formal untuk dioperasikan didalam prosedur.
2. Lokasi setiap parameter perubah dialokasikan.
3. Alokasi perubah untuk perubah lokal.
4. Statemen dalam prosedur akan dikerjakan berdasarkan parameter formal dan variabel lokal.
Contoh 5 :
Progam dibawah ini digunakan untuk mencari nilai median dari sejumlah data yang diinputkan kemudian
diurutkan terlebih dahulu .
program lat5;
uses crt;
type
larik = array[1..100] of real;
var
vektor : larik;
n,i,bantu : integer;
m,rerata,jum : real;
procedure baca;
begin
clrscr;
write('masukkan banyak data = ');
readln(n);
writeln('masukkan datanya =');
bantu := 1;
for I := 1 to n do
begin
read(vektor[I]);
gotoxy(whereX+(I mod 8) * 8,whereY-1);
if I mod 8 = 0 then
writeln;
end;
end;
procedure cetak(X:larik;p:integer);
var
i : integer;
begin
writeln;
for I := 1 to P do
begin
write(X[I]:6:2);
if I mod 8 = 0 then
writeln;
end;
writeln;
end;
begin
jum := 0.0;
for i := 1 to n do
jum := jum + x[i];
rerata := jum / n;
end;
begin
clrscr;
baca;
clrscr;
writeln('data sebelum diurutkan =');
cetak(vektor,n);
writeln;
urut(vektor,n);
writeln('data urut =');
cetak(vektor,n);
rata(vektor,n);
writeln;
writeln('banyaknya data = ',n);
writeln('total data = ',jum:6:2);
writeln('nilai rata-rata = ',rerata:6:2);
medu(vektor,n);
writeln('nilai median = ',m:6:2);
readln;
readln
end.
Hasil run =
masukkan banyak data = 10
masukkan datanya =
53.55 34.67 43 23.33 90.11 53 54.54 65.03
44. 87 11.99
Tugas 2 mahasiswa :
Buat program yang dipergunakan untuk menghitung nilai simpangan baku dari sejmumlah data yang
dimasukkan, formula untuk simpangan baku (S) :
N
(Xi – X)2
S=
I=0
(N-1)
Type data record merupakan type data terstruktur yang mempunyai sejumlah elemen yang disebut medan
atau field yang masing-masing elemen bisa berbeda tipe datanya, tetapi merupakan rangkaian data berbagai
macam type yang kita pandang sebagai satu kesatuan. Type data record dapat didefinisikan sebagai
berikut :
Bentuk :
Type
pengenal = Record
medan1 : Type1;
medan2 : Type2;
...;
medann : Typen
End;
Var
NamaVarRecord : pengenal;
Keterangan :
Type, record, end : Kata baku yang harus ditulis seperti apa adanya
pengenal : Pengenal yang menunjukkan tipe data yang
akan dideklarasikan
Medan1 ....medann : Nama medan yang akan digunakan
Type1 … typen : Sembarang tipe data yang sudah dideklarasikan
sebelumnya
Contoh :
Misal akan digunakan data rekaman/record siswa yang mempunyai field atau medan nama, alamat, kelamin
dan klas, maka dideklarasikan seperti berikut :
Type siswa = record
Nama : string[25];
Alamat : string[25];
kelamin : (L,P);
klas : 1..6
end;
maka yang terjadi pada memori utama dapat direpresentasikan sebagai berikut :
Nama rekaman.namamedan
Misal :
Type siswa = record
Nama : string[25];
Alamat : string[25];
kelamin : (L,P);
klas : 1..6
end;
Var murid : siswa;
Kode_sex : 0..1;
With murid do
Begin
Readln (nama);
Readln (alamat);
Readln (klas);
Readln (kode_sex);
If kode_sex = 1 then
Kelamin := L
Else
Kelamin := P
End;
Contoh 6
program lat6;
uses crt;
type
rec_bar = record
kobar : string[5];
nabar : string[20];
jumbar : integer;
harsat : real;
tot: real;
end;
barang = array[1..100] of rec_bar;
var
data : barang;
i,n : integer;
total : real;
procedure masuk_data;
begin
clrscr;
write('masukkan jumlah barang = ');
readln(n);
clrscr;
writeln('No Kode Barang Nama Barang quantity Harga satuan');
for i := 1 to n do
begin
with data[i] do
begin
gotoxy(2,2+i);write(i);
gotoxy(10,2+i);readln(kobar);
gotoxy(25,2+i);readln(nabar);
gotoxy(40,2+i);readln(jumbar);
gotoxy(50,2+i);write('Rp. ');readln(harsat);
end;
end;
end;
procedure hitung;
begin
total := 0;
for i := 1 to n do
begin
with data[i] do
begin
tot := jumbar * harsat;
end;
total := total + data[i].tot;
end;
end;
procedure cetak_data;
begin
writeln('No Kode Barang Nama Barang quantity Harga satuan Total');
for i := 1 to n do
begin
with data[i] do
begin
gotoxy(2,2+i);write(i);
gotoxy(10,2+i);write(kobar);
gotoxy(25,2+i);write(nabar);
gotoxy(40,2+i);write(jumbar);
gotoxy(50,2+i);write('Rp. ',harsat:8:2);
gotoxy(65,2+i);write('Rp. ',tot:8:2);
end;
end;
writeln;writeln;
write(' Total keseluruhan =
',total:10:2);
end;
begin
masuk_data;
hitung;
clrscr;
cetak_data;
readln;
end.
Contoh 7 :
program lat7;
uses crt;
const
upah = 5000;
type
status = (tetap,honorer);
rec_peg = record
nip : string[8];
nama : string[25];
gaber : real;
stat_peg : string[10];
case stat:status of
tetap : (gapok : real;
jam_lembur : real);
honorer : (jam_kerja : real);
end;
var
pegawai : array[1..100] of rec_peg;
i,n : integer;
jawab : char;
procedure masuk_data;
begin
clrscr;
write ('Masukkan jumlah data = ');
readln(n);
clrscr;
writeln('No NIP Nama Pegawai Peg Tetap Jam kerja Gaji Pokok Jam
lembur');
for i := 1 to n do
begin
gotoxy(2,3+i);write(i);
with pegawai[i] do
begin
gotoxy(7,3+i);readln(nip);
gotoxy(17,3+i);readln(nama);
gotoxy(42,3+i);readln(jawab);
if (jawab = 'Y') or (jawab='y') then
begin
stat := tetap;
stat_peg := 'tetap';
end
else
begin
stat := honorer;
stat_peg := 'honorer';
end;
case stat of
tetap : Begin
gotoxy(60,3+i);readln(gapok);
gotoxy(71,3+i);readln(jam_lembur);
gaber := gapok + (jam_lembur * upah);
end;
honorer: begin
gotoxy(47,3+i);readln(jam_kerja);
gaber := jam_kerja * upah;
end;
end;
end;
end;
end;
procedure cetak_data;
begin
writeln('No NIP Nama Pegawai Status Jam ker Gaji Pokok lembur Gaji
Bersih');
for i := 1 to n do
begin
gotoxy(2,3+i);write(i);
with pegawai[i] do
begin
gotoxy(4,3+i);write(nip);
gotoxy(12,3+i);write(nama);
gotoxy(28,3+i);write(stat_peg);
if stat_peg = 'tetap' then
Begin
gotoxy(48,3+i);write(gapok:10:2);
gotoxy(60,3+i);write(jam_lembur:3:0);
gotoxy(65,3+i);write(gaber:10:2);
end
else
begin
gotoxy(41,3+i);write(jam_kerja:3:0);
gotoxy(67,3+i);write(gaber:10:2);
end;
end;
end;
end;
begin
masuk_data;
clrscr;
cetak_data;
readln;
end.
Tugas 3 mahasiswa :
Modifikasi contoh 7 untuk menghitung gaji karyawan dengan memberikan tambahan untuk status pegawai
tetap diperhitungkan tunjangan istri dan anak, untuk istri memperoleh tunjangan 0.5 % dari gaji pokok dan
tunjangan anak memperoleh tunjangan sebesar jumlah anak * (0.3 % dari gaji pokok)
MODUL 4
TIPE DATA POINTER
Sebuah nama perubah yang digunakan pada sebuah program adalah mewakili suatu nilai data yang
menunjukkan lokasi tertentu dalam memori komputer dimana data yang diwakili oleh nama perubah
tersebut disimpan
Pada saat program dikompilasi maka kompiler akan melihat pada bagian deklarasi perubah (bagian var)
untuk mengetahui nama-nama perubah apa saja yang akan digunakan dan sekaligus mengalokasikan dan
menyediakan tempat dalam memori untuk menyimpan nilai data tersebut.
Ada dua macam perubah, yaitu :
Perubah Statis (Static Variabel), yaitu suatu perubah dimana lokasi-lokasi di dalam memori sudah
ditentukan dan tidak bisa ubah selama program tersebut dieksekusi atau dapat dikatakan bahwa banyaknya
data yang bisa diolah adalah terbatas.
Pada perubah statis ini, isi pengingat pada lokasi tertentu (nilai perubah) adalah data sesungguhnya yang
akan kita olah.
Perubah Dinamis (biasa disebut dengan POINTER), yaitu suatu perubah yang akan dialokasikan hanya
pada saat diperlukan, yaitu setelah program dieksekusi. Pada saat dikompilasi, lokasi untuk perubah belum
ditentukan. Kompiler hanya akan mencatat bahwa suatu perubah akan diperlakukan sebagai perubah
dinamis.
Nilai perubah pada perubah dinamis adalah alamat lokasi lain yang menyimpan data yang akan diubah.
Berikut representasi dari perubah statis dan perubah Dinamis
A 2400 A 980
2200
Tipe data simpul yang dinyatakan pada tipe bisa sembarang tipe data, misal char, integer atau real, tetapi
biasanya berupa rekaman.
Contoh deklarasi :
Perubah p1 dan p2 merupakan tipe data pointer yang akan menempati lokasi tertentu dalam pengingat.
Kedua perubah masih masih belum menunjuk ke suatu simpul. Pointer yang belum menunjuk kesuatu
simpul dinyatakan sebagai nil.
Untuk mengalokasikan simpul dalam pengingat, digunakan statement NEW, dengan bentuk :
New (perubah)
A
B
bagian statis C
P1
P2
P2
P2
P1
Statemen new diatas bisa diberikan beberapa kali, hanya simpul terkakhir saja yang bisa diakses. Hal
tersebut dikarenakan setiap memberikan perintah NEW (P1) maka nilai P1 yang lama akan terhapus.
Jika diinginkan suatu perubah yang benar-benar dinamis, maka harus mampu mengakses sejumlah lokasi
tertentu hanya dengan menggunakan sebuah pointer awal.
P1
misal :
Type str30 = string[30];
Point = ^data;
Data = record
Nama : str30;
Alamat: str30;
Pekerjaan : str30;
Berikut : point;
End;
P1 ? ? ? P2 ? ? ?
Mengkopi pointer
P2 ? ? ?
P2P2 ? ? ?
Ini yang disebut dengan operasi mengkopi pointer, yang akan menyebabkan sebuah simpul akan ditunjuk
lebih dari satu pointer.
Ini yang disebut dengan mengkopi isi simpul, yang mengakibatkan dua atau lebih simpul yang ditunjuk oleh
pointer yang berbeda mempunyai isi yang sama.
Kesimpulan :
Jika dalam statemen pemberian tanda ^ tidak ditulis, disebut operasi mengkopi pointer, yang
mempunyai konsekuensi simpul yang semula ditunjuk oleh suatu pointer akan bisa terlepas dan
tidak dapat diakses lagi.
Jika dalam statemen pemberian tanda ^ ditulis, disebut operasi mengkopi isi simpul, yang
mempunyai konsekuensi isi dua simpul atau lebih akan menjadi sama.
Menghapus pointer
Untuk menhapus sebuah pointer digunakan statemen DISPOSE
Bentuk :
Dispose (perubah)
Contoh penggunaan tipe data pointer adalah pada senarai berantai atau lebih dikenal dengan istilah Linked
List
LINKED LIST
Lisked list adalah suatu daftar yang terdiri dari beberapa simpul dimana antara simpul yang satu dengan
simpul lainnya dikaitkan dengan sebuah pointer.
Setiap simpul pada linked list terdiri dari 2 bagian, bagian pertama disebut medan informasi, yang berisi
informasi yang akan disimpan dan diolah. Dan bagian kedua yang disebut dengan medan penyambung yang
berisi alamat simpul berikutnya.
Awal
A B C D
Pada gambar diatas, pointer awal menunjuk ke simpul pertama dari senarai. Medan penyambung (pointer)
dari suatu simpul yang tidak menunjuk simpul lain disebut dengan pointer kosong, yang nilainya dinyatakan
dengan nil.
Menambah simpul
Dianggap simpul baru yang akan ditambahkan selalu menempati posisi setelah simpul yang terakhir dari
senarai berantai.
A B C D F
Pointer pada simpul yang ditunjuk oleh simpul akhir dibuat sama dengan baru, dengan perintah
Akhir^.berikut := baru;
A B C D F
Kemudian pointer akhir dibuat sama dengan pointer baru, dengan perintah
Akhir := baru;
A B C D F
Menghapus simpul
Dalam menghapus simpul, harus diperhatikan satu hal, yaitu simpul yang bisa dihapus adalah simpul yang
berada sesudah simpul yang ditunjuk oleh oleh suatu pointer kecuali untuk simpul pertama
A B C D F
Jika senarai berantainya seperti diatas, maka simpul yang bisa dihapus adalah simpul yang berisi ‘A’ dan
yang berisi ‘F’
Untuk mengahpus simpul pertama, maka pointer bantu dibuat sama dengan pointer awal
Bantu := awal;
A B C D F
Kemudian pointer awal dipindah ke simpul yang ditunjuk oleh pointer bantu, dengan perintah
Awal := bantu^.berikut;
A B C D F
Kemudian simpul yang ditunjuk oleh oleh pointer bantu di hapus dengan perintah
Dispose(bantu)
Awal Akhir
B C D F
Contoh 8 :
program lat8;
uses crt;
type
simpul = ^rec_bar;
rec_bar = record
kobar : string[5];
nabar : string[20];
jumbar : integer;
harsat : real;
tot: real;
berikut : simpul;
end;
var
awal,akhir : simpul;
function simpul_baru:simpul;
var
dat : simpul;
begin
clrscr;
new(dat);
writeln('No Kode Barang Nama Barang quantity Harga satuan');
with dat^ do
begin
gotoxy(10,2);readln(kobar);
gotoxy(25,2);readln(nabar);
gotoxy(40,2);readln(jumbar);
gotoxy(50,2);write('Rp. ');readln(harsat);
tot := jumbar * harsat;
end;
simpul_baru := dat;
end;
procedure cetak_data;
var
bantu : simpul;
i : integer;
begin
i := 1;
bantu := awal;
if bantu = nil then
writeln('Senarai masih kosong')
else
while bantu <> nil do
begin
writeln('No Kode Barang Nama Barang quantity Harga satuan
Total');
with bantu^ do
begin
gotoxy(2,2+i);write(i);
gotoxy(10,2+i);write(kobar);
gotoxy(25,2+i);write(nabar);
gotoxy(40,2+i);write(jumbar);
gotoxy(50,2+i);write('Rp. ',harsat:8:2);
gotoxy(65,2+i);write('Rp. ',tot:8:2);
end;
inc(i);
end;
end;
begin
clrscr;
simpul_baru;
tambah(1);
clrscr;
cetak_data;
readln;
end.
Contoh 9:
program lat9;
uses crt;
type
simpul = ^rec_bar;
rec_bar = record
nim : string[5];
nama : string[25];
nil1,nil2,nil3:integer;
tot : integer;
rata: real;
berikut : simpul;
end;
var
awal,akhir,baru : simpul;
L_L :simpul;
i,n : integer;
pil : char;
begin
new(tampung);
clrscr;
writeln('masukkan data untuk simpul baru');
writeln;
writeln('No NIM Nama nilai 1 nilai 2 nilai 3 ');
with tampung^ do
begin
inc(i);
gotoxy(1,3+i);write(i);
gotoxy(5,3+i);readln(nim);
gotoxy(15,3+i);readln(nama);
gotoxy(40,3+i);readln(nil1);
gotoxy(50,3+i);readln(nil2);
gotoxy(59,3+i);readln(nil3);
tot := nil1 + nil2 + nil3;
rata := tot / 3;
end;
awal := tampung;
akhir := tampung;
akhir^.berikut:= nil;
L_L := tampung;
end;
procedure cetak_data;
var
tampung : simpul;
begin
clrscr;
writeln('Daftar simpul');
writeln;
if awal = nil then
begin
writeln('Simpul masih kosong');
writeln('tekan F1 untuk membuat simpul baru ');
delay(1000);
exit;
end
else
begin
writeln('No NIM Nama nilai 1 nilai 2 nilai 3 total
rata');
tampung := awal;
i := 0;
while (tampung<> nil) do
begin
inc(i);
gotoxy(1,3+i);write(i);
gotoxy(5,3+i);write(tampung^.nim);
gotoxy(15,3+i);write(tampung^.nama);
gotoxy(40,3+i);write(tampung^.nil1);
gotoxy(50,3+i);write(tampung^.nil2);
gotoxy(59,3+i);write(tampung^.nil3);
gotoxy(68,3+i);write(tampung^.tot);
gotoxy(75,3+i);write(tampung^.rata:6:2);
tampung := tampung^.berikut;
end;
repeat until keypressed;
end;
end;
begin
repeat
clrscr;
writeln(' M E N U ');
writeln;
writeln(' F1. Buat Simpul baru');
writeln(' F2. Tambahkan simpul');
writeln(' F3. Tampilkan Simpul');
writeln(' ESC Selesai');
writeln;
write(' Pilih Mana : ');
pil := readkey;
case pil of
#59 : simpul_baru(L_L);
#60 : tambah_simpul(L_L);
#61 : cetak_data;
end;
until pil = #27;
end.
Tugas mahasiswa :
Tugas ke 3 pada modul 3 kerjakan dengan menggunakan lingked list
MODUL 5
UNIT
Unit merupakan kumpulan dari prosedur dan fungsi (untuk berbagai deklarasi/definisi seperti variabel dan
tipe) yang dapat dikompilasi secara terpisah. Keuntungan dengan adanya unit, program (berupa fungsi dan
procedur) yang memakai fasilitas dalam unit akan dikompilasi lebih cepat, sebab bagian dari unit tidak ikut
dikompilasi lagi.
Struktur Unit
Unit terdiri dari tiga bagian, yaitu :
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.
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.
Bagian Inisialisasi
Bagian ini bisa terdiri kata tercadang END saja yang diakhiri dengan titik. Dan menyatakan unit tidak
mengandung kode inisialisasi.
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.
Contoh :
Bagian Interface
unit itung;
interfAce
uses crt;
function kali( A,B : REAL) : REAL;
FUNCTION TAMBAH ( A,B :REAL ) : REAL;
FUNCTION BAGI ( A,B : REAL ) : REAL;
FUNCTION PANGKAT ( A : REAL; VAR B : INTEGER ): REAL;
IMPLEMENTATION
FUNCTION KALI (A,B :REAL ): REAL ;
BEGIN
KALI := A*B;
END;
FUNCTION TAMBAH ( A,B : REAL ):REAL;
BEGIN
TAMBAH := A+B ;
END;
Kemudian compile program diatas dan arahkan hasil kompilasi ke disk, bukan ke memory. Selanjutnya unit
itung.TPU bisa dipergunakan pada program. Contoh program berikut menggunakan unit itung.TPU
USES CRT,ITUNG;
VAR
A,B,C : REAL;
Z : INTEGER;
CHOICE : CHAR;
PROCEDURE PLUS;
BEGIN
WRITELN('ANDA PILIH PENJUMLAHAN ..');
WRITE ('ANGKA :');READLN(A);
WRITE ('DITAMBAH : ');READLN(B);
C := TAMBAH (A,B);
WRITELN(A:0:2,'+',B:0:2,'=',C:0:2 );
END;
PROCEDURE MULTIPLE;
BEGIN
WRITELN('ANDA PILIH PERKALIAN ');
WRITE ('ANGKA = ');READLN (A);
WRITE ('DIKALI : ');READLN(B);
C := KALI(A,B);
WRITELN(A:0:2,'*',B:0:2,'=',C:0:2 );
END;
PROCEDURE DEVIDE;
BEGIN
WRITELN('ANDA PILIH PEMBAGIAN ');
WRITE ('ANGKA = ');READLN (A);
WRITE ('DIBAGI : ');READLN(B);
C:= BAGI(A,B);
WRITELN(A:0:2,'/',B:0:2,'=',C:0:2 );
END;
PROCEDURE SQUARE;
BEGIN
WRITELN('ANDA PILIH PANGKAT ');
WRITE ('ANGKA = ');READLN (A);
WRITE ('PANGKAT : ');READLN(Z);
C:= PANGKAT(A,Z);
WRITELN(A:0:2,'PANGKAT',B:0:2,'=',C:0:2 );
END;
BEGIN
CLRSCR;
WRITELN ('<< MENU MAKAN >>');
WRITELN (' F1 PENJUMLAHAN ');
WRITELN (' F2 PERKALIAN ');
Tugas 5 Mahasiswa :
Buat sebuah unit yang berisi kumpulan procedure dan function yang pernah anda buat mulai dari modul 1
sampai modul 4, kemudian buat contoh program yang menggunakan unit tersebut.