• Tidak ada hasil yang ditemukan

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.

FiLe teks

Dokumen terkait