7. proses pengurutan array B 8. mencetak array B
9. proses penggabungan (merging) 1O. cetak array C (hasil merging)) end.
Penggabungan/merging array
6
Modul Praktikum Alogaritma II Penggabungan/Merging Array
Saran : akan lebih baik jika dibuat juga prosedur pengurutan (dengan algoritma apa saja : Bubble atau Selection atau Insertion), sehingga pada proses pengurutan masing-masing array A dan B tinggal panggil prosedur pengurutan tersebut.
Algoritma Merging:
Langkah 0 : Baca kedua vektor yang akan dimerge, vektor A dan vektor B, banyaknya elemen pada kedua vektor, Ca dan Cb. Lakukan proses pengurutan secara urut naik pada kedua vektor ini.
Langkah 1 : (Menentukan subskrib awalan)
Tentukan: I = 1, J = 1, dan Cc = 0 Langkah 2 : (Proses merging berlangsung)
Kerjakan langkah 3 dan 4 sampai (I > Ca) atau ( J > Cb) Langkah 3 : Tentukan : Cc = Cc + 1.
Langkah 4 : Test apakah : A[I] < B [J] ?
Jika ya, tentukan : C[Cc] = A[I], dan I= I + 1.
Jika tidak, tentukan : C[Cc] = B[j], dan J = J +1.
Langkah 5 : Test apakah I > Ca ?
Jika ya, berarti semua elemen pada vektor pertama sudah diproses semua, kerjakan langkah 6.
Jika tidak, berarti semua elemen pada vektor kedua sudah diproses semua, kerjakan langkah 7.
Langkah 6 : Untuk K = J sampai Cb, Tentukan : Cc = Cc + 1, dan C[Cc] = B[k], Dan melompat kelangkah 8.
Langkah 7 : Untuk K = I sampai Cb, tentukan : Cc = Cc + 1, dan C[Cc] = A[k].
Langkah 8 : Selesai.
Contoh Program :
PROGRAM MERGING_ARRAY;
uses crt;
var i,j,k,m,n,y,Temp : integer;
A,B,C : array[1. .100] of integer;
Procedure Cetak_array(A:array of integer; x:integer);
var i : integer;
begin
write(’ Hasilnya : ‘);
for i:= 0 to x-1 do write(A[i], ’ ‘);
end;
procedure sisip(var A : array of integer; x:integer);
var i,j,temp : integer;
begin
for i := 1 to x-1 do begin
temp := A[i]; j := i;
while (temp < A[j-1]) and (j > 0) do j := j — 1;
for k := i downto j do A[k] := A[k-1];
A[j] := temp;
end;
end;
procedure Gabung(A,B array of integer; m,n : integer;
var C : array of integer; var x : integer);
var i, j, k, y : integer;
begin
i := 0; j := 0; k := 0;
while (i <= m) and (j <= n) do begin
if A[i] < B[j) then
Modul Praktikum Alogaritma II Penggabungan/Merging Array
C[k]:= A[i];
i := i + 1;
end else
begin
C[k] := B[j];
j := j + 1;
end;
k := k + 1;
write(’i=’,i,’ j=’,j,’ k=’,k,’ ‘);
cetak_array(C,k-1);
writeln;
end;
if i > m then begin
for y := k-1 to m+n do begin
C[y] := B[j];
j := j + 1;
end;
end else
if j > n then begin
for y := k-1 to m+n do begin
C[y] := A[i];
i := i + 1;
end;
end;
write(’Setelah penggabungan : ‘); cetak_array(C,y);
x := y;
end;
begin clrscr;
randomize;
writeln(’ M E R G I N G’);
write(’Banyaknya elemen array pertama : ‘);
readln(m);
write(’Banyaknya elemen array kedua : ‘);
readln(n);
for i := 1 to m do
A[i] := random(100);
for i := 1 to n do B[i] := random(100);
writeln( ‘Sebelum Penggabungan : ‘);
sisip(A,m);
write(’ Array pertama : ‘);
cetak_array(A,m); writeln;
sisip(B,n);
write(’ Array kedua : ‘);
cetak_array(B,n); writeln;
writeln(’Proses Penggabungan : ‘);
Gabung(A,B,m,n,C,y);
writeln;
write(’Setelah penggabungan : ‘);
cetak_array(C,y);
readln;
end.
Metoda MergeSort
Metoda MergeSort atau yang sering disebut juga dengan metoda MergeSort Dua Arah (Two-way MergeSort). Metoda ini memanfaatkan keteraturan yang diperoleh dari hasil merging dua buah vektor.
Vektor masukan dianggap yang mempunyai elemen dianggap sebagai N buah vektor yang masing-masing terdiri dari sebuah vektor. Untuk setiap pasang vektor kita lakukan proses
Modul Praktikum Alogaritma II
merging sehingga akan kitaperoleh N/2 vektor yang masing-masing terdiri dari 2 elemen ( jika ganjil, akan terdapat sebuah vektor dengan 1 elemen). Kemudian dilakukan merging kembali untuk setiap pasang vektor, sehingga kita peroleh N/4 buah vektor. Langkah ini kita teruskan sampai kita memperoleh sebuah vektor yang sudah dalam keadaan urut.
Ilustrasi
15 12 45 56 13 10 43 34 56 65
15 12 45 56 13 10 43 34 56 65
12 15 45 56 10 13 34 43 56 65
12 15 45 56 10 13 34 43
56 65
34
15 43
13 12
10 45 56 56 65
45
43 56 56 65
34 15 13 12 10
Dengan tipe data record, dapat dikumpulkan beberapa item data yang masing-masing dengan tipe data berbeda-beda. Masing-masing item data itu disebut field. Jadi record terdiri dari kumpulan field yang dapat berbeda tipe. Biasanya record berisi beberapa field untuk sebuah subyek tertentu.
Deklarasi Record :
Type nama_record = Record
field1;
field2;
….
fieldn;
end;
Contoh:
Type Mhs= Record
NPM : integer [12];
Nama: string[25];
Alamat: string[50];
End;
Var Mahasiswa: Mhs;
Var Mahasiswa: Record
NPM : integer [12];
Nama: string[25];
Alamat: string[50];
End;
Cara pemanggilannya:
Mahasiswa.NPM Mahasiswa.Nama Mahasiswa.Alamat
Statement with digunakan untuk mempersingkat penulisan record sehingga tidak perlu menuliskan lagi nama recordnya.
recorD
7
Modul Praktikum Alogaritma II Record Contoh Program Type Data Record.
Type Hasil = Record
JariJari : real;
Keliling : real;
Luas : real;
End;
Var Lingkaran : Hasil;
Begin
With Lingkaran Do Begin
Write (‘Jari-Jari lingkaran? ‘); readln (JariJari);
Keliling := 2*PI*JariJari;
Luas := PI * sqr(JariJari);
Writeln;
Writeln (‘Keliling Lingkaran = ‘, Keliling:7:2);
Writeln(‘Luas Lingkaran = ‘, Luas:7:2);
End;
End;
Contoh mengurutkan data mahasiswa berdasarkan NPM dengan Ascending (Mengurut Naik).
Type
DataMhs = Record
NPM : Integer;
Nama : String[20];
IP : Real;
End;
Var
JumlahMhs, I, J : Byte;
Mahasiswa : Array [1..50] of DataMhs;
Temp : DataMhs;
Begin
{masukkan data mahasiswa}
Write (‘Jumlah Mahasiswa ? ‘); Readln(JumlahMhs);
For I := 1 to JumlahMhs Do
Write (‘Nama Mahasiswa ke ‘, I:2,’ ? ‘); Readln (Nama);
Write (‘IP Mahasiswa ke ‘, I:2, ‘ ? ‘); Readln (IP);
End;
End;
{Mengurutkan data berdasarkan NPM mahasiswa dengan Bubble Sort}
For I:= 1 to JumlahMhs-1 Do For J:= 1 to JumlahMhs-I do
If Mahasiswa[J].NPM > Mahasiswa[J+1].NPM then Begin
Temp := Mahasiswa[J];
Mahasiswa [J] := Mahasiswa [J+1];
Mahasiswa [J+1] := Temp;
End;
{menampilkan hasil}
Writeln;
Writeln(‘---‘);
Writeln(‘ NPM Nama Mahasiswa IP ‘);
Writeln(‘---‘);
For I := 1 to JumlahMhs Do Begin
With Mahasiswa[I] Do
Writeln (NPM:5, Nama:20, IP:11:2);
End;
Writeln(‘---‘);
End.
Contoh Tipe Data Record dengan Tipe Data Record Lainnya.
Type
TglLhr = Record Hari : 1..31;
Bulan : 1..12;
Tahun : Word;
Modul Praktikum Alogaritma II End;
Almt = Record
Jalan : String[35];
Kota : String [25];
End;
Mhs = Record
Nama: String[25];
Alamat : Almt;
TglLahir : TglLhr;
End;
Var
DataMhs : Mhs;
Begin
{masukkan data Mahasiswa}
DataMhs.Nama := ‘Intan’;
DataMhs.Alamat.Jalan := ‘Muara 2’;
DataMhs.Alamat.Kota := ‘Jakarta’;
DataMhs.TglLahir.Hari := ‘19’;
DataMhs.TglLahir.Bulan := ‘11’;
DataMhs.TglLahir.Tahun := ‘198X’;
{menampilkan hasil}
With DataMhs Do Begin
Writeln (‘Nama Mahasiswa = ‘, Nama);
With Alamat Do Begin
Writeln (‘Alamat = ‘, Jalan);
Writeln (‘ ‘, Kota);
End;
With TglLahir Do Begin
Writeln (‘Tanggal Lahir = ‘,Hari:2, ‘ -‘, Bulan:2, ‘ -‘, Tahun:4);
End;
End;
End.
Bila data yang perlu disimpan mempunyai volume yang cukup besar, maka penggunaan variable atau larik sudah tidak tepat lagi, karena variable dan larik menggunakan memory internal computer yang bersifat terbatas dan volatile (hilang jika aliran listrik terputus). Oleh karena itu File digunakan untuk menyimpan data bervolume yang besar dengan menyimpannya di eksternal memory yang relative punya kapasitas yang besar dan bersifat nonvolatile (data tidak hilang jika aliran listrik putus, permanen).
Prosedur dan Fungsi Standar Assign
Assign digunakan untuk menghubungkan nama dari eksternal file ke dalam suatu file variable dengan sintaks:
Assign (f, name : string);
Ket: f adalah file variable
Name adalah eksternal file yang akan digunakan.
Contoh: Assign(Rekam, ‘A:Data.DAT’);
Assign (Cetak, ‘LPT1’);
Rewrite
Rewrite digunakan untuk membuka file yang baru atau yang belum pernah ada di disk dengan sintaks:
Rewrite (f[:file; recsize : word]);
Ket:
f adalah file variable yang sudah dihubungkan dengan eksternal file menggunakan prosedur standar Assign. Recsize adalah ukuran dari record yang digunakan.
Contoh:
Assign (Rekam, ‘A: GAJI.DAT’);
Rewrite(Rekam);
Rewrite akan menghapus isi yang sebelumnya sudah ada di file.