• Tidak ada hasil yang ditemukan

PROGRAM STUDI SISTEM KOMPUTER

N/A
N/A
Protected

Academic year: 2021

Membagikan "PROGRAM STUDI SISTEM KOMPUTER"

Copied!
56
0
0

Teks penuh

(1)

BAHAN AJAR

ALGORITMA DAN PEMROGRAMAN II

(PAI 112)

OLEH :

DODON YENDRI, M.KOM

PROGRAM STUDI SISTEM KOMPUTER

FAKULTAS TEKNOLOGI INFORMASI

UNIVERSITAS ANDALAS

(2)

Dosen : Dodon Yendri, M.Kom Page 1

SORTING (PENGURUTAN)

Adalah suatu proses untuk menyusun sekelompok data dari data yang tidak urut menjadi data terurut berdasarkan kriteria tertentu. Ada 2 jenis pengurutan, yakni :

a. Ascending ; adalah pengurutan dari kecil ke besar.

Misalnya : 0,1,2,3, dst. Atau A, B, C, D, E, dst. b. Descending ; adalah pengurutan dari besar ke kecil

Misalnya : 100,90, 80, 70 , dst., atau Z,Y, X, W, dst.

Ada banyak metoda/cara proses pengurutan, diantaranya : a. Bubble Sort / Exchange Sort / Metode Gelembung b. Selection Sort

c. Insert Sort d. Quick Sort, dll

Bubble Sort

Adalah proses pengurutan dengan membandingkan 2 buah data yang bersebelahan dengan berulang kali. Banyaknya proses pembandingan tergantung pada jumlah datanya.

Contoh : Misalkan ada sekumpulan data tersimpan dalam sebuah VektorA dengan nilai sebagai berikut :

Urutkan data-data tersebut secara Ascending !.

7 3 10 2 9 1 6 2

(3)

Dosen : Dodon Yendri, M.Kom Page 2

Karena ada 8 data yang akan dibanding, maka proses membandingkan 2 data yang bersebelahan (dari pasangan pertama sampai ke tujuh) akan dilakukan sebanyak 7 kali

Adapun proses tersebut adalah :

Langkah Pertama : i = 1 2 3 4 5 6 7 8 Swap 7 3 10 2 9 1 6 2 s=1 3 7 10 2 9 1 6 2 3 7 10 2 9 1 6 2 s=1 3 7 2 10 9 1 6 2 s=1 3 7 2 9 10 1 6 2 s=1 3 7 2 9 1 10 6 2 s=1 3 7 2 9 1 6 10 2 s=1 3 7 2 9 1 6 2 10 Langkah Kedua : i = 1 2 3 4 5 6 7 8 Swap 3 7 2 9 1 6 2 10 s=1 3 7 2 9 1 6 2 10 s=1 3 2 7 9 1 6 2 10 3 2 7 9 1 6 2 10 s=1 3 2 7 1 9 6 2 10 s=1 3 2 7 1 6 9 2 10 s=1 3 2 7 1 6 2 9 10 s=1 3 2 7 1 6 2 9 10

(4)

Dosen : Dodon Yendri, M.Kom Page 3

Dan begitu seterusnya sampai seluruh data tersebut terurut dari yang terkecil sampai terbesar.

Algoritma Tukar Data For I <- 1 to N do

For J <- 1 to N-1 do

If VektorB[J] > VektorB[J+1] Then Min <- VektorB[J] VektorB[J] <-VektorB[J+1] VektorB[J+1] <- Min EndIf EndFor EndFor

(5)

Dosen : Dodon Yendri, M.Kom Page 4 Program Pascalnya :

program bubble_sort; uses crt;

var VektorB : array[1..8] of integer; i,j,min : integer; begin clrscr; writeln('Mengisi Array'); writeln;writeln; i:=1; while i<=8 do begin

write('Iputkan Bilangan Vektor B[',i,'] : ');readln(VektorB[i]); i:=i+1; end; (* Urut data *) for i:=1 to 8 do begin for j:=1 to 7 do begin

if VektorB[J] > VektorB[J+1] then begin Min:=VektorB[j]; VektorB[j] := VektorB[J+1]; VektorB[J+1]:=Min; end; end; end; writeln;writeln; writeln('Hasil Pengurutan '); writeln;writeln; for i:=1 to 8 do begin write(VektorB[i]:7); end;

repeat until keypressed; end.

(6)

Dosen : Dodon Yendri, M.Kom Page 5 Selection Sort

Adalah suatu metoda pengurutan data dengan langkah-langkah : 1. Cari data terkecil/terbesar yang dimulai dari data pertama

sampai data terakhir dan kemudian tukarkan letaknya dengan data pertama.

2. Cari data terkecil/terbesar yang dimulai dari data ke-dua sampai data terakhir dan kemudian tukarkan letaknya dengan data ke -2.

3. Cari data terkecil/terbesar yang dimulai dari data ke-tiga sampai data terakhir dan kemudian tukarkan letaknya dengan data ke -3.

4. Dan begitu seterusnya sampai data habis.

Contoh :

Diketahui sekumpulan data telah tersimpan dalam Vektor A dengan data-data berikut :

15 20 13 19 10 5 11 12

Urutkan data tersebut secara Ascending. Buat langkah, algoritma dan Pascalnya !

Proses dan Langkah :

i = 1 2 3 4 5 6 7 8 Swap 15 20 13 19 10 5 11 12 Langkah 1. 5 20 13 19 10 15 11 12 s=1 Langkah 2. 5 10 13 19 20 15 11 12 s=1 Langkah 3. 5 10 11 19 20 15 13 12 s=1 Langkah 4. 5 10 11 12 20 15 13 19 s=1 Langkah 5. 5 10 11 12 13 15 20 19 s=1

(7)

Dosen : Dodon Yendri, M.Kom Page 6

Langkah 6. 5 10 11 12 13 15 20 19

Langkah 7. 5 10 11 12 13 15 19 20 s=1

Algoritma Tukar Data :

For I <-1 to N do For J <-1 to N do

If VektorA[J] < Min Then Min <- VektorA[J] Lok <- J; EndIf EndFor VektorA[lok]:=VektorA[I]; VektorA[I]:=min; EndFor Program Pascalnya : program selection_sort; uses crt;

var VektorA : array[1..10] of integer; i,j : integer; min,max,lok : integer; begin clrscr; writeln('Mengisi Array'); writeln;writeln; i:=1; while i<=10 do begin

write('Iputkan Bilangan Vektor A[',i,'] : ');readln(VektorA[i]); i:=i+1; end; (* cari data *) writeln;writeln; Write('Hasil Analisis ');

(8)

Dosen : Dodon Yendri, M.Kom Page 7 writeln;writeln; for I:=1 to 10 do begin min:=1000; for J:=I to 10 do begin

if VektorA[j] < Min then begin Min:=vektorA[j]; lok:=j; end; end; VektorA[lok]:=VektorA[i]; VektorA[i]:=min; end; for I:=1 to 10 do begin write(VektorA[i]:5); end; writeln;writeln;

repeat until keypressed; end.

SEARCHING

(PENCARIAN DATA)

Adalah suatu proses untuk mencari data dari sekelompok data yang tersimpan dalam larik.

Ada beberapa metoda searching/pencarian data, antara lain : 1. Sequential Search

2. Binary Search

Ad. 1. Sequential Search

Proses pada sequential search ini dilakukan dengan cara membandingkan data yang akan dicari secara berurutan dari data pertama ke data berikutnya hingga didapatkan data yang diinginkan atau data yang dibaca habis dibaca. Untuk mencari data pada metoda ini, data tidak perlu diurutkan terlebih dahulu.

(9)

Dosen : Dodon Yendri, M.Kom Page 8 Misal :

Diketahui sebuah Larik dalam Vektor A dengan 10 indeks sebagai berikut :

Buatlah Flowchart dan program Pascalnya untuk mengisi dan mencari data tertentu didalam Vektor tersebut.

Algortima :

0. Baca Vektor, misalnya VektorA dengan N elemen 1. Inputkan Data yang akan di Cari

2. Inisialisasi :

Ada = false 3. (Proses pencarian)

Untuk I = 1 sampai N kerjakan langkah 4 4. Test apakah Cari = VektorA[I]

jika ya berarti ketemu, tentukan : Ada = true Posisi = I I = N I=I+1 Jika tidak I=I+1

Ulangi langkah 3 5. Cek Hasil Pencarian :

 Jika Ketemu, tampilkan pesan “Data yang dicari ditemukan” pada lokasi ke I

 Jika tidak tampilkan pesan “Data yang dicari tidak ditemukan” 6. Selesai

14 45 22 15 5 30 20 12 9

(10)

Dosen : Dodon Yendri, M.Kom Page 9 Flowchart VektorA =1..10 Cari=0 Ketemu=False start Readln Cari I=1 I<=10 Y Cari=VektorA[I] Ketemu=True I=10 I=I+1 Y T Y T T stop Ketemu ? Ketemu ! pada lokasi I Tidak Ketemu !

(11)

Dosen : Dodon Yendri, M.Kom Page 10

Program Pascalnya :

program cari_data_dlm_array; uses crt;

var VektorA : array[1..9] of integer; ketemu : boolean; x : char; i,cari : integer; lokasi : integer; begin clrscr; writeln('Mengisi Array'); writeln;writeln; i:=1; while i<=9 do begin

write('Iputkan Bilangan Vektor A[',i,'] : ');readln(VektorA[i]);

i:=i+1; end;

(* cari data *) writeln;writeln;

Write('Data yang akan dicari ? : ');readln(cari); writeln;writeln; ketemu:=false; i:=1; while i<=9 do begin if cari=VektorA[i] then begin ketemu:=true; lokasi:=i; i:=9; i:=i+1 end else i:=i+1; end; if ketemu then

writeln('Data ditemukan ! pada indeks ke ',lokasi) else

writeln('Data tidak ditemukan !'); repeat until keypressed;

(12)

Dosen : Dodon Yendri, M.Kom Page 11 Ad. 2. Binary Search

Adalah proses mencari data dalam sekumpulan data yang sudah tersimpan secara terurut.

Langkah-langkah :

1. Data yang akan dicari langsung dibandingkan dengan data yang berada pada posisi tengah dalam deretan verktor

2. Jika data yang dicari sama dengan data yang berada di posisi tengah vektor, maka pencarian data berhenti (selesai).

3. Jika data yang dicari tidak sama dengan data yang berada pada posisi tengah vektor, tetapi lebih kecil dari data yang ada diposis tersebut, maka komputer akan mengabaikan data dalam vektor yang dimulai dari posisi tengah ke data paling kahir. Dan proses selanjutnya adalah mencari data tersebut ke bagian tengak Vektor yang masih ada. Demikian juga dilakukan jika data yang dicari lebih besar dari data yang berada pada posisi tengah Vektor.

Contoh :

Misalkan akan dicari data 2 pada Vektor berikut ini : 1 2 3 5 8 9 10 15 Algoritma :

0. Baca VektorA dengan N elemen 1. Baca Data yang akan di Cari 2. Inisialisasi :

Ada = false Atas = N Bawah = 1

3. Kerjakan langkah 4 dan 5 selama Atas >= Bawah 4. Tentukan Batas sub vektor

(13)

Dosen : Dodon Yendri, M.Kom Page 12 5. Test nilai Cari terhadap VektorA[tengah]

Jika Cari < VektorA[tengah] (* ada di sub vektor 1 *) Atas = Tengah – 1

Jika Cari > VektorA[tengah] (* ada di sub vektor 2 *) Bawah = Tengah + 1

Jika Cari = VektorA[tengah] (* ketemu *) Ada = true

Posisi = Tengah Bawah = Atas + 1 6. Cek Hasil Pencarian :

 Jika Ketemu, tampilkan pesan “Data yang dicari ditemukan” pada lokasi ke I

 Jika tidak tampilkan pesan “Data yang dicari tidak ditemukan” 7. Selesai

Tugas Saudara :

Buat Flowchart dan Program Pascalnya ! Program Pascalnya

program binary_search; uses crt;

var VektorA : array[1..100] of integer;

i,tengah,cari,n : Integer;

atas, bawah : integer;

posisi : integer; ketemu : boolean; begin clrscr; writeln('Mengisi Array'); writeln;writeln;

write('Jumlah N data : ');readln(N); i:=1;

writeln; writeln; while i<=N do begin

write('Iputkan Bilangan Vektor A[',i,'] : '); readln(VektorA[i]);

(14)

Dosen : Dodon Yendri, M.Kom Page 13 end; (* cari data *) writeln;writeln; ketemu := false; atas := N; bawah := 1;

write('Data yang akan dicari :');readln(Cari); while atas >= bawah do

begin

tengah := (atas + bawah) div 2; if Cari < VektorA[tengah] then atas := tengah -1

else if Cari > VektorA[Tengah] then bawah := tengah +1 else begin ketemu := true; posisi := tengah; bawah := Atas + 1; end; end; if ketemu then

write('data di temukan pada posisi ke ',posisi:5) else

write('data tidak ketemu'); repeat until keypressed;

end.

PEMROGRAMAN MODULAR

Seringkali dalam membuat program si pemrogram perlu memecah masalah menjadi beberapa upa-masalah yang lebih kecil. Tiap upa-masalah kadangkala cukup independence dari program utama sehingga programnya dapat dirancang tanpa mempertimbangkan konteks tempat ia digunakan. Program dengan upa-masalah disebut Modul. Modul dapat dirancang oleh pemrogram selain dari orang yang mengembangkan program utama. Modul yang sudah ditulis dan dapat dipasang ke program lain yang membutuhkannya. Teknik pemrograman seperti ini dinamakan Pemrograman Modular. Beberapa bahasa pemrograman menamakan modul dengan sebutan rutin (routine), prosedur (procedure) atau fungsi (function).

(15)

Dosen : Dodon Yendri, M.Kom Page 14 Dalam teknik pemrograman modular, tiap modul mempunyai fungsi yang “khas” dan harus diberi nama. Dengan teknik ini modul yang sering digunakan berulang kali cukup ditulis satu kali saja dan pelaksanaan aksi didalam modul cukup dilakukan dengan memanggil nama modul tersebut dari bagian manapun didalam program utama atau dari modul lainnya. Ketika modul dipanggil, pelaksanaan program sekarang “berpindah” kedalam modul. Selanjutnya aksi didalam modul dilaksanakan secara beruntun sampai akhir modul tercapai. Setelah aksi didalam modul selesai dilaksanakan, pelaksanaan program kembali berpindah ke program pemanggil untuk melaksanakan aksi berikutnya.

Berikut adalah mekanisme penggunaan modul :

Program Utama

MODUL1

MODUL2

A1 A2 A3 CALL MODUL1 A4 A5 CALL MODUL2 A6 A7 A8 CALL MODUL1 A9 End. M11 M12 M13 . . End; M21 M22 M23 M24 . . End;

(16)

Dosen : Dodon Yendri, M.Kom Page 15 Keterangan Jalannya Program :

Pelaksanaan program dimulai dari program utama. Aksi A1, A2 dan A3 dilaksanakan secara beruntun. Setelah aksi A3, Call Modul1(artinya MODUL1 dipanggil). Pelaksanaan program sekarang berpindah ke MODUL1. Aksi didalam Modul1 yaitu M11,M12 dan M13 dilaksanakan secara beruntun sampai instruksi terakhir (end). Setelah seluruh aksi didalam MODUL1 dilaksanakan program kembali berpindah ke program utama. Aksi yang terdapat setelah pemanggilan MODUL1 dilaksanakan, yaitu Aksi A4 dan A5. Setelah aksi A5, Call Modul2 ( artinya MODUL2 dipanggil) dan aksi-aksi dalam MODUL2 (M21,M22,M23, M24) dilaksanakan secara beruntun sampai terakhir (end). Setelah itu aksi kembali ke program Utama yakni mengerjakan Aksi A6,A7 dan A8. Kemudian MODUL1 dipanggil kembali dan aksi dalam MODUL1 dilaksanakan lagi secara berurutan dan kemudian kembali lagi ke Program Utama (Aksi A9) dan program selesai.

Ada 2 jenis modul, yakni : 1. Fungsi

2. Prosedur 1. Fungsi

Fungsi adalah modul program yang mengembalikan (return) sebuah nilai. Dalam matematika anda tentu sudah mengenal fungsi sbb:

f(x) = x2 + 3x – 5

Dari contoh diatas f adalah nama fungsi. Sedangkan x adalah parameter fungsi yang bersangkutan. Dengan memberikan harga parameter, nilai fungsinya dapat dihitung sbb:

Contoh :

X=2  f(2) = 22 + 3(2) – 5 = 5

Jadi, kita katakan fungsi f mengembalikan nilai 5 setelah pemberian parameter x=2.

(17)

Dosen : Dodon Yendri, M.Kom Page 16 Deklarasi Fungsi :

Function Namafungsi(parameter masukan)tipe hasil

Parameter yang didefinisikan pada bagian judul fungsi dinamakan

Parameter Formal. Parameter formal boleh tidak ada (kosong). Kalau ada harus berupa nama peubah/variabel.

Semua nama yang didefinisikan dalam fungsi (tidak termasuk nama parameter formal) didefinisikan dalam kamus lokal.

Fungsi dipanggil dengan menyebutkan nama fungsi beserta parameternya (kalau ada)

Pemanggilan Fungsi :

Namafungsi(parameter)

Nama parameter yang disertakan pada waktu pemanggilan disebut dengan

Parameter Aktual. Parameter aktual dapat berupa tetapan, nama tetapan

atau nama peubah asalkan sudah terdefinisi tipe dan harganya. Pada waktu pemanggilan, terjadi korespondensi satu-satu antara parameter aktual dengan parameter formal.

Ada beberapa hal yang perlu diperhatikan dalam pemanggilan fungsi, yakni :

1. Jumlah parameter aktual harus sama dengan jumlah parameter formal 2.Tipe parameter aktual harus sama dengan tipe parameter formal 3. Urutan parameter aktual harus sama dengan urutan parameter formal 4.Nama parameter aktual tidak boleh sama dengan nama parameter

formal

(18)

Dosen : Dodon Yendri, M.Kom Page 17 (* Contoh Fungsi-1 *)

program genapganjil; uses crt;

var bilangan : integer;

function genap(bil : integer) : boolean; begin

genap:=(bil mod 2=0); end;

begin

write('Ketikkan sembarang Bilangan : ');readln(bilangan); if genap(bilangan) then

writeln('Bilangan Genap') else

writeln('Bilangan Ganjil'); repeat until keypressed; end.

(* --- akhir program fungsi-1--- *)

(* Contoh Fungsi-2 *) Program Fak;

uses crt;

var F : integer;

Function Factorial(N:Integer): integer; begin if N=0 then Factorial:=1 else Factorial := N * Factorial(N-1); end; begin clrscr;

write('Berapa Faktorial : ');readln(f); writeln(F,' Faktorial = ',factorial(f)); repeat until keypressed;

(19)

Dosen : Dodon Yendri, M.Kom Page 18 end.

(*---akhir fungsi 2 ---*) Hasil Program :

(* Contoh Program Fungsi-3 *) program ApangkatN;

uses CRT; Var A : integer; N : integer; Result : real;

Function a_pangkat_npositif( X, Y : Integer) : Real; var hasil : real;

I : Integer; begin

hasil :=1; if Y > 0 then

for I:=1 to Y do Hasil :=hasil * X; a_pangkat_npositif :=Hasil;

end;

procedure pangkat(var r : real; S,T : integer); begin if T < 0 then begin T := -T; R :=1/a_pangkat_npositif(S,T); end else R := a_pangkat_npositif(S,T); end; (* main program *)

(20)

Dosen : Dodon Yendri, M.Kom Page 19 begin

clrscr;

write('Inputkan harga A : ');readln(A); write('Inputkan harga N : ');readln(N); result:=0;

pangkat(result,A,N);

write(' Hasil ',A:3,' pangkat ',N:3, ' adalah = ',result:8:2); repeat until keypressed;

end.

(*---akhir fungsi 2 ---*)

2. Prosedur

Adalah program yang berisi rangkaian aksi dan menghasilkan “efek netto” yang terdefinisi. Karena ada efek yang akan ditimbulkan maka pada setiap prosedur harus didefinisikan keadaan awal dan keadaan akhir setelah rangkaian aksi dilaksanakan.

Suatu prosedur harus diberi nama yang unik dan disertai dengan daftar parameter (kalau ada). Parameter formal dibedakan atas 3 jenis :

1. Parameter input 2. Parameter output

3. Parameter input/output

Parameter Input adalah parameter yang berlaku sebagai penampung masukan

Parameter Output adalah parameter yang berlaku sebagai keluaran

Parameter Input/Output adalah parameter masukan dan keluaran

(21)

Dosen : Dodon Yendri, M.Kom Page 20 Pemanggilan Prosedur

Contoh :

(*program tanpa parameter *) program luassegi3_1;

uses crt;

var alas,tinggi,luas : real; procedure luassegi3; begin luas:=0.5*alas*tinggi; end; begin clrscr;

write('Harga Alas : ');readln(alas); write('Harga Tinggi : ');readln(tinggi); luassegi3;

writeln('Luas Segitiga = ',luas:8:2); repeat until keypressed;

end.

(*--- akhir program luassegi3_1--- *);

(*program dengan parameter *) program luassg3_2;

uses crt;

var alas,tinggi,luas : real;

Procedure NamaProsedur(parameter formal)

(22)

Dosen : Dodon Yendri, M.Kom Page 21 procedure luassegi3(a,t : real; var L : real);

begin L:=0.5*a*t; end; (*main program *) begin clrscr;

write('Harga Alas : ');readln(alas); write('Harga Tinggi : ');readln(tinggi); luassegi3(alas,tinggi,luas);

writeln('Luas Segitiga = ',luas:8:2); repeat until keypressed;

end.

(*--- akhir program luassg3_2 ---*); (*program dengan parameter *)

program tukar1_1; uses crt;

var A,B : Integer;

procedure tukarAB(var X,Y : integer); var Z : integer; begin Z := X; X := Y; Y := Z; end; begin clrscr; write('Input A : ');readln(A); write('Input B : ');readln(B); TukarAB(a,b); writeln; writeln('Hasil Pertukaran '); writeln('Nilai A = ',A); writeln('Nilai B = ',B); repeat until keypressed; end.

(23)

Dosen : Dodon Yendri, M.Kom Page 22 (*program tanpa parameter *)

program tukar1_2; uses crt;

var A,B : Integer; procedure tukarAB; var z : integer; begin Z := x; X := Y; Y := Z; end; begin clrscr; write('Input A : ');readln(A); write('Input B : ');readln(B); TukarAB; writeln; writeln('Hasil Pertukaran '); writeln('Nilai A = ',A); writeln('Nilai B = ',B); repeat until keypressed; end.

(* --- akhir program tukar1_2--- *);

PR :

1. Menentukan berapa bilangan terbesar dari 2 buah Angka yang diinputkan dari keyboard.

2. Untuk menentukan apakah suatu tahun merupakan tahun kabisat dari tahun yang diinputkan.

((tahun mod 4 = 0) and (thn mod 100 <>0 )) or (thn mod 400 = 0)

3. Menampilkan tabel yang berisi nilai-nilai x dan F(x) di dalam selang [10,15] dengan x = 0,2 seperti contoh berikut ini. F(x)=2x2 + 5x - 8

(24)

Dosen : Dodon Yendri, M.Kom Page 23 REKURSIF

• Rekursif merupakan alat/cara untuk memecahkan masalah dalam suatu fungsi atau procedure yang memanggil dirinya sendiri.

• Definisi menurut Niclaus Wirth :

“ An object is said be recursive if it partially consist or is defines in terms of itself”

• Perhitungan matematika ( contoh fungsi factorial dan bilangan Fibonacci)

Beberapa Contoh : Faktorial

• Fungsi factorial dari bilangan bulat positif n didefinisikan sebagai berikut: n!= n.(n-1)! , jika n>1 n!= 1 , jika n=0, 1 • contoh : 3!= 3. 2! 3!= 3. 2. 1! 3!= 3. 2. 1 3!= 6

(25)

Dosen : Dodon Yendri, M.Kom Page 24 Bilangan Fibonacci

• Fungsi lain yang dapat diubah ke bentuk rekursif adalah perhitungan Fibonacci. Bilangan Fibonacci dapat didefinisikan sebagai berikut:

fn = fn-1 + fn-2 untuk n > 2 f1 = 1

f2 = 1

Berikut ini adalah barisan bilangan Fibonacci mulai dari n=1 sampai n=9

(26)

Dosen : Dodon Yendri, M.Kom Page 25

Algoritma Fibonacci yang dipakai

Function Fibonacci(input n:integer)

integer Deklarasi Lokal {tidak ada} Deskripsi If (n=1) or (n=2)Then Fibonacci:=1 Else Fibonacci:= Fibonacci(n-1)+Fibonacci(n-2); Contoh :

Untuk ukuran n= 4, proses perhitungan Fibonacci dapat dilakukan sebagai berikut:

f4 = f3+f2

f4 = (f2+f1) + f2 f4 = (1+1) +1 f4 = 3

Latihan :

1. Buat program untuk menghitung deret S = 1+2+3+4+5+...+n menggunakan function rekursi

2. Buat program untuk menghitung deret S = 2+4+6+8+10+...+2n menggunakan function rekursi

(27)

Dosen : Dodon Yendri, M.Kom Page 26

No.1 deret S=1+2+3+4+5+…+n

Function S(input n:integer)

integer Deklarasi Lokal {tidak ada} Deskripsi If (n=1) Then return (1) Else return (n + S(n-1)) Endif No.2 deret S=2+4+6+8+10+…+2n

Function S(input n:integer)

integer Deklarasi Lokal {tidak ada} Deskripsi If (n=1) Then return (2) Else return (2*n + S(n-1)) Endif

(28)

Dosen : Dodon Yendri, M.Kom Page 27 REKURSI versus ITERASI

Dalam beberapa hal, rekursi kurang efesien dibandingkan dengan proses iterasi.

Perhatikan fungsi Fibonacci.

Pada proses fibonacci terdapat beberapa pemanggilan fungsi fibonacci yang berulang-ulang. Sebagai contoh Fibonacci(6) memerlukan pemanggilan Fibonacci(5) dan fibonacci(4), dimana fibonacci(5) memerlukan pemanggilan fibonacci(4) dan fibonacci(3), dan begitu seterunya.

Berikut adalah program menghitung Fibonacci dengan Iterasi

uses crt;

var n : integer;

function fibonaci(n : integer) : integer; var f, akhir, bantu, i : integer;

begin i := 1; f:=1; akhir :=0; if (n=1) then f:=0; while i <> N do begin bantu := F; I := I+1; F := F + Akhir; Akhir := Bantu; end; fibonaci := F; end; begin

(29)

Dosen : Dodon Yendri, M.Kom Page 28 writeln('Berapa n : ');readln(n);

writeln('Fibonaci N=',n,' adalah : ',fibonaci(n):5); repeat until keypressed;

end.

PERMUTASI

Salah satu contoh pemakian Rekursi adalah Permutasi. Contoh : jika kita mempunyai 3 buah karakter A, B dan C maka semua permutasi yang mungkin dari ketiga karakter ini adalah :

ABC BAC CAB ACB BCA CBA

Secara umum, banyaknya permutasi dari N buah karakter adalah N faktorial. Contoh diatas N = 3, maka banyaknya permutasi adalah

3!=6.

Proses penyusunan permutasi adalah :

1. Cetak elemen ke 1, dan cetak permutasi elemen ke 2 sampai ke N (permutasi dengan N-1 elemen)

2. Cetak elemen ke 2, dan cetak permutasi elemen ke 3 sampai ke N (permutasi dengan N-1 elemen)

3. Cetak elemen ke 3, dan cetak permutasi elemen ke 4 sampai ke N (permutasi dengan N-1 elemen)

4. Dan seterusnya sampai langkah terakhir adalah cetak elemen ke N, dan cetak permutasi elemen ke (N-1) (permutasi N-1) elemen)

Proses diatas diulang terus sampai dicetak permutasi dengan 1 elemen. Dari N = 3 diatas, maka prosesnya adalah :

(30)

Dosen : Dodon Yendri, M.Kom Page 29 • Cetak ‘A’ dan cetak permutasi (‘B’ ‘C’)

• Cetak ‘B’ dan cetak permutasi (‘A’ ‘C’)

• Cetak ‘C’ dan cetak permutasi (‘A’ ‘B’)

Program Lengkap Permutasi adalah :

program susun_permutasi; uses crt;

const max = 5;

type larik =array[1..max] of char; var

a : larik; (* larik yang akan dipermutasikan *) c_permutasi, (* jumlah permutasi *)

c_elemen, (* cacah karakter *) i : integer; (* perubah kendali *) lagi : char; (* perubah kendali *)

procedure permutasi (var b : integer; a : larik; k,n : integer); var i : integer; temp : char; begin if k=n then begin

b := succ(b); {membaca karakter berikut} write('permutasi ke ',b:2, ' : ');

for i:=1 to n do write(a[i]:3); writeln; end else for i:= k to n do begin temp := a[i];

(31)

Dosen : Dodon Yendri, M.Kom Page 30 a[i] := a[k]; a[k] := temp; permutasi(b,a, k+1, n); end; end; begin repeat clrscr;

writeln(' banyaknya karakter yang akan dipermutasikan '); repeat

gotoxy(50,1);readln(c_elemen); until c_elemen <= max;

(* menyusun karakter yang akan dipermutasikan *) for i := 1 to c_elemen do

a[i] := chr(i+64); clrscr;

writeln('penyusunan permutasi untuk ',c_elemen,' karakter'); writeln('---');

writeln;

(*proses mencari permutasi *) c_permutasi :=0;

permutasi(c_permutasi, a,1,c_elemen);

(* mencetak hasil *) writeln;

writeln('banyaknya permutasi : ',c_permutasi:3); writeln;

write('akan coba lagi (y/t) : ');readln(lagi) until not (lagi in ['y','y']);

(32)

Dosen : Dodon Yendri, M.Kom Page 31 PROGRAM FILE DATA/ARSIP

Suatu file terdiri dari suku-suku atau data bertipe sama. Tipe data ini dapat berbentuk type data sederhana atau tipe data berstruktur. Masing-masing suku pada file akan terkait dengan adanya pointer. Akhir dari suatu file diberi tanda EOF (End-Of-File). Berikut ini adalah beberapa contoh deklarasi contoh file :

Type Catatan = record; Nama : string[15]; Bp : string[13]; End;

Larik = array[1..10] of integer;

Var Peserta : file of catatan; {file variable} Data : file of larik; {file variable } A : catatan; {data variable}

Untuk mendeklarasikan file harus dilakukan pada blok file. Pada deklarasi tersebut harus dipilih file variabel dan type dari file. Pada contoh diatas, peserta merupakan file variable dari suku-suku data yang bertype catatan. Sedangkan Data adalah file variabel dari suku-suku file bersuku-suku larik. A adalah data variable dari record Catatan. Untuk keperluan operasi penggarapan file, ada beberapa statement yang diperlukan antara lain :

ASSIGN(File-Variable, File-Name)

REWRITE(File-Variable)

RESET(File-Variable)

(33)

Dosen : Dodon Yendri, M.Kom Page 32

READ(File-Variable, Data-Variable)

CLOSE(File-Variable) ASSIGN

Perintah ASSIGN digunakan untuk menghubungkan antara File-Variable dengan Data-Variable.Setelah file berhubungan, maka barulah kita dapat melakukan penulisan/pembacaan terhadap file. Contoh pemakaian Assign :

Assign(Peserta,’Data.dat’); atau ASSIGN(Peserta,’A:Data.Dat’);

REWRITE

REWRITE diperlukan jika kita ingin menuliskan data baru kedalam

File-Variable. Perintah ini dilakukan setelah perintah ASSIGN. Contoh :

ASSIGN(Peserta,’A:Data.dat’); REWRITE(Peserta);

RESET

Digunakan apabila kita ingin membaca data dari file data. Perintah ini juga dituliskan setelah statement ASSIGN.

Contoh :

ASSIGN(Peserta,’A:Data.dat’); RESET(Peserta);

(34)

Dosen : Dodon Yendri, M.Kom Page 33 WRITE

Perintah ini akan menuliskan Data-Variable kedalam File-Variabel.

Type file variable harus sama dengan data variable. Contoh : READLN(A.Nama); Readln(A.BP); WRITE(Peserta,A); READ

Digunakan untuk membaca data yang ada pada Variabel-File dan dimasukkan kedalam Variabel-data.

Contoh :

READ(Peserta,A) CLOSE

Perintah ASSIGN digunakan untuk menghubungkan File-variable

dengan File-Data. Ini juga berarti kita membuka suatu file. Setelah file dibuka dan digunkan harus ditutup kembali supaya data yang ada didalamnya tersimpan dengan aman.

Untuk menutup file yang telah digunakan perintah CLOSE. Perintah ini tidak berarti pemutusan hubungan antara File-Variable dengan

Data-Variabel.

Secara garis besar tatacara urutan penggunaan perintah tersebut adalah :

(35)

Dosen : Dodon Yendri, M.Kom Page 34  Jika ingin menuliskan data kedalam file/menyimpan, maka

perintahnya sbb: ASSIGN(File-Variable, File-Name); REWRITE(File-Variable); WRITE(File-Variabel,Data-Variable); CLOSE(File-Variable);

 Jika ingin membaca data dari file, maka urutan perintahnya adalah : ASSIGN(File-Variable, File-Name); RESET(File-Variable); READ(File-Variable) CLOSE(File-Variable); Contoh Program : 1. Program File1; uses crt;

Var Nilai : file of Integer; { File variable } A, B : Integer; { Data variable }

I : Integer; Procedure Simpan; Begin Assign(Nilai,'Data.dat'); Rewrite(Nilai); clrscr;

writeln('Menginput dan Menyimpan Nilai'); writeln;

writeln;

For I:=1 to 5 do Begin

(36)

Dosen : Dodon Yendri, M.Kom Page 35

Write('Input Nilai ke-',i,' : ');readln(A); Write(Nilai,A); End; Close(Nilai) End; Procedure Baca; Begin Assign(Nilai,'Data.dat'); Reset(Nilai); writeln;writeln;

writeln('Nilai yang disimpan'); writeln;writeln; For I:=1 to 5 do Begin Read(nilai,B); Writeln(B); End; Close(Nilai); writeln;

writeln('Tekan sembarang tombol ..!'); Repeat until keypressed;

End;

Begin (* menu utama *) Simpan;

Baca; End.

(37)

Dosen : Dodon Yendri, M.Kom Page 36

Contoh Program 2.

Program file2; Uses crt;

Type DataMhs = record Nobp : string[5]; Nama : string[20]; Nilai : real;

end;

ArsipMhs = file of DataMhs;

var RekMhs : DataMhs; {rekaman} Mhs : ArsipMhs; {arsip}

Procedure Input; var lagi : char; Begin Assign(Mhs,'Mhs.Dat'); Rewrite(Mhs); repeat File Variabel Data-variabel

(38)

Dosen : Dodon Yendri, M.Kom Page 37 clrscr;

writeln(' *** Iput Data Mahasiswa ***'); writeln('---'); writeln; write('NoBP : ');readln(RekMhs.nobp); write('Nama : ');readln(Rekmhs.nama); write('Nilai : ');readln(RekMhs.nilai); write(Mhs,RekMhs); writeln;

write('Ada Mhs lagi (Y/T) : ');readln(lagi); writeln;

until not (lagi in ['Y','y']); end; procedure Cetak; var no : integer; begin Assign(Mhs,'Mhs.Dat'); Reset(Mhs);

writeln('*** Daftar Nilai Mahasiswa ***'); writeln('---');

writeln('No No.Bp Nama Nilai '); writeln('---'); no := 1;

while not eof(Mhs) do begin read(Mhs,RekMhs); writeln(no:3,RekMhs.nobp:8,RekMhs.nama:25,RekMhs.Nilai:6:2); no := no + 1; End; writeln('---');

(39)

Dosen : Dodon Yendri, M.Kom Page 38 repeat until keypressed;

Close(Mhs) End;

begin (* main program *) input;

cetak; end.

BEBERAPA FUNGSI TAMBAHAN PENANGANAN FILE

1. Kompiler Directive; adalah fungsi yang digunakan untuk membaca dan mencek apakah input file ada atau tidak. Misalnya : {$I-} {$I+} untuk pengecekan digunakan fungsi : IOResult :=0 file sudah ada

IoResult <> 0  file belum ada

2. Filesize(variable file) digunakan untuk menentukan jumlah record didalam file database

Contoh :

JmlRecord :=filesize(filebar); {menetukan jumlah record dalam database}

For I :=1 to JmlRecord do { membaca dari record pertama sampai habis}

Bisa diganti dengan :

(40)

Dosen : Dodon Yendri, M.Kom Page 39

3. Seek(variable file, N-1)

digunakan untuk mencari record dalam file. N-1 adalah record saat ini.

Misalnya :

Seek(filebar, i-1) Read(filebar,recbar);

Seek(filebar,filesize(filebar)) menempatkan pointer pada posisi terakhir untuk ditulis

Contoh Program :

program menu_barang; uses crt;

type rec = record

kobar : string[4]; nabar : string[20]; satuan : string[15]; harga : longint; stock : integer; end;

var filebar : file of rec; {variable file} recbar : rec; {variable data} lagi,jawab,pilih : char; filetakada,selesai : boolean; jumlahrecord : longint; ketemu : boolean; procedure entri_barang; begin assign(filebar,'barang.dat'); {$i-} reset(filebar);

(41)

Dosen : Dodon Yendri, M.Kom Page 40

if ioresult <> 0 then rewrite(filebar); {$i+} seek(filebar,filesize(filebar)); lagi:='y'; while upcase(lagi)='y' do with recbar do begin clrscr;

writeln('memasukkan data barang'); writeln('---');

writeln;

write('kode barang : ');readln(kobar); write('nama barang : ');readln(nabar); write('satuan barang : ');readln(satuan); write('harga barang : ');readln(harga); write('stock : ');readln(stock); write(filebar,recbar);

write('ada lagi (y/t) : ');readln(lagi); end;

close(filebar); end;

procedure tampil_barang; var kobarcari : string[4]; i : integer; begin assign(filebar,'barang.dat'); {$i-} reset(filebar); {$i+} jumlahrecord :=filesize(filebar); lagi:='y'; while upcase(lagi)='y' do begin

(42)

Dosen : Dodon Yendri, M.Kom Page 41

clrscr;

ketemu :=false;

writeln('menampilkan barang tertentu'); writeln('---');

writeln;

write('kode barang : ');readln(kobarcari); for i := 1 to jumlahrecord do

begin

seek(filebar,i-1); read(filebar,recbar);

if recbar.kobar = kobarcari then begin

ketemu :=true;

writeln('nama barang : ',recbar.nabar); writeln('satuan barang : ',recbar.satuan); writeln('harga barang : ',recbar.harga); writeln('stock : ',recbar.stock); writeln;

end; end;

if not ketemu then

writeln('tidak ada kode barang tersebut !!!'); write('ada lagi yang dicari (y/t) : ');readln(lagi);

end;

close(filebar); end;

procedure koreksi_barang; var kobarcari : string[4]; i : integer; begin assign(filebar,'barang.dat'); {$i-} reset(filebar); {$i+}

(43)

Dosen : Dodon Yendri, M.Kom Page 42 jumlahrecord :=filesize(filebar); lagi:='y'; while upcase(lagi)='y' do begin clrscr; ketemu :=false;

writeln('menampilkan barang tertentu'); writeln('---');

writeln;

write('kode barang : ');readln(kobarcari); writeln;

for i := 1 to jumlahrecord do begin

seek(filebar,i-1); read(filebar,recbar);

if recbar.kobar = kobarcari then begin

with recbar do begin

ketemu :=true;

writeln('nama barang : ',nabar); write('koreksinya : ');readln(nabar); writeln('satuan barang : ',satuan); write('koreksinya : ');readln(satuan); writeln('harga barang : ',harga); write('koreksinya : ');readln(harga); writeln('stock : ',stock); write('koreksinya : ');readln(stock); writeln; end; end; seek(filebar,i-1); write(filebar,recbar);

(44)

Dosen : Dodon Yendri, M.Kom Page 43

end;

if not ketemu then

writeln('tidak ada kode barang tersebut !!!'); write('ada lagi yang dicari (y/t) : ');readln(lagi);

end;

close(filebar); end;

procedure tampil_semua; var nilaibrg : longint; totnilbrg : longint; totharsat : longint; totstock : integer; i : integer; begin assign(filebar,'barang.dat'); {$i-} reset(filebar); {$i+}

if ioresult=0 then filetakada:=false; clrscr;

writeln('daftar persediaan barang di gudang'); writeln('pt.xyz padang');

writeln;

writeln('---');

writeln('no kode nama satuan harga stock nilai ');

writeln('urt. brg barang barang barang barang barang ');

writeln('---');

(45)

Dosen : Dodon Yendri, M.Kom Page 44

totnilbrg :=0; totharsat :=0; totstock :=0; for i:=1 to jumlahrecord do

with recbar do begin read(filebar,recbar); nilaibrg:=harga*stock; writeln(i:3,kobar:5,nabar:20,satuan:10,harga:9,stock:10,nilaibrg:12) ; totstock := totstock+stock; totnilbrg := totnilbrg+nilaibrg; totharsat := totharsat+harga end; writeln('---'); writeln(' total : ',totharsat:12,totstock:10,totnilbrg:12); writeln('---');

writeln('tekan sembarang konci... !'); repeat until keypressed;

close(filebar); end;

begin {* main program *} repeat

clrscr;

writeln('******* menu utama barang ********'); writeln;

writeln('1. menambah data barang');

writeln('2. menampilkan barang tertentu'); writeln('3. me-koreksi data barang');

writeln('4. menampilkan semua barang'); writeln('5. selesai');

(46)

Dosen : Dodon Yendri, M.Kom Page 45

write('pilihan anda [1..5] : ');readln(pilih); case pilih of '1' : entri_barang; '2' : tampil_barang; '3' : koreksi_barang; '4' : tampil_semua; end; until pilih = '5'; end.

(47)

Dosen : Dodon Yendri, M.Kom Page 46 STUDI KASUS

Menyalin Arsip, Konsolidasi, Merging, Updating File Data dan Spliting

A. Menyalin Arsip

Rekaman di dalam suatu arsip adakalanya perlu disalin (copy) ke arsip yang lain. Penyalinan dapat dilakukan terhadap seluruh rekaman atau hanya rekaman tertentu saja. Berikut adalah algoritma menyalin seamluruh rekaman dari arsip Mhs1 ke Arsip Mhs2.

File Mhs1 File Mhs2

NIM Nama Alamat NIM Nama Alamat

70001 Adi Alamat 70001 Adi Alamat

70003 Budi Indarung 70003 Budi Indarung

70004 Susi Siteba 70004 Susi Siteba

70006 Anti Andalas 70006 Anti Andalas

70008 Doni Sawahan 70008 Doni Sawahan

Salin Arsip

{Menyalin seluruh arsip Mhs1 ke arsip Mhs2} {Kondisi awal : Arsip Mhs2 mungkin kosong }

{Kondisi akhir : Arsip Mhs2 berisi salinan seluruh rekaman dari arsip Mhs1}

Deklarasi

RekMhs : DataMhs

Algoritma;

Open(Mhs1, 1) {Buka arsip Mhs1 untuk pembacaan }

(48)

Dosen : Dodon Yendri, M.Kom Page 47

While (not(EOF(Mhs1)) do

Fread(Mhs1, RekMhs) {baca rekaman dari arsip Mhs1 }

Fwrite(Mhs2, RekMhs) {salin RekMhs ke arsip Mhs2 }

Enwhile

{ EOF (Mhs1)}

Close(Mhs1) Close(Mhs2)

B. Konsolidasi

adalah pengelompokan data dengan kunci yang sama yang harus diproses sebagai satu kesatuan.

Contoh Kasus :

Diketahui sebuah Arsip Nilai Mahasiswa, satu mahasiswa dapat mempunyai beberapa buah nilai (karena dalam satu semester mengambil beberapa matakuliah, dan tiap mahasiswa bisa berbeda matakuliah). Buatlah Algoritma untuk menghitung nilai rata-rata tiap mahasiswa, dan membuat daftar nilai yang lebih sederhana, yaitu menuliskan NIM dan nilai rata-rata tiap mahasiswa.

File Nilai File Hasil Konsolidasi

NIM Kode Nilai NIM Rata-rata

70001 MK1 50 70001 65 70001 MK2 80 70002 69 70001 MK3 60 70003 80 70001 MK4 70 70004 53 70002 MK1 55 70002 MK2 75

(49)

Dosen : Dodon Yendri, M.Kom Page 48 70002 MK3 65 70002 MK4 86 70002 MK5 64 70003 MK1 77 70003 MK2 83 70004 MK1 45 70004 MK2 54 70004 MK3 60 Konsolidasi

{Kondisi awal : ArsipMhs sudah berisi NIM dan nilai}

{Kondisi akhir : Record sudah dikelompokkan berdasarkan NIM yang sama, dengan nilainya adalah nilai rata-rata}

Deklarasi

Type DataMhs : Record < NIM : integer Nilai : real >

ArsipMhs1, ArsipMhs2 : seqFile of DataMhs Mhs : DataMhs

CurrentNim, JumNil, nMK : integer Rata : real

Function Mark(Input Mhs : DataMhs)  Boolean Deskripsi

Open(ArsipMhs1,1) Open(ArsipMhs2,2) Fread(ArsipMhs1, Mhs) If (Mark(Mhs) = true) then

(50)

Dosen : Dodon Yendri, M.Kom Page 49

Output(‘Arsip kosong…’) Else

While (Mark(Mhs) = false) do JumNil  0

nMK  1

currentNIM  Mhs.NIM {record1 dari ArsipMhs1} Repeat

JumNil  JumNil + Mhs.Nilai nMK  nMK + 1

Fread(ArsipMhs1,Mhs) Until (currentNIM <> Mhs.NIM) Rata  JumNil/nMK

Fwrite(ArsipMhs2, <currentNIM, Rata>) Output(currentNIM,Rata) Endwhile EndIf Close(ArsipMhs1) Close(ArsipMhs2) C. Merging

Merging adalah penggabungan dua buah file yang tipe recordnya sama. Untuk melakukan merging ada dua cara, yakni

Penggabungan dua buah arsip dengan cara penyambungan dan

Penggabungan dua buah arsip terurut. Cara yang paling sederhana adalah data file kedua ditambahkan setelah record terakhir file pertama, sehingga membentuk file baru (penggabungan dua buah arsip dengan cara penyambungan).

(51)

Dosen : Dodon Yendri, M.Kom Page 50

Contoh :

File ArsipMhs1 File ArsipMhs2 File ArsipMhs3

NIM Nama NIM Nama NIM Nama

70001 Adi 70002 Yudi 70001 Adi

70003 Budi 70009 Eka 70003 Budi

70004 Susi 70010 Bima 70004 Susi

70006 Anti 70006 Anti 70008 Doni 70008 Doni 70002 Yudi 70009 Eka 70010 Bima Merging Sambung

{Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan ArsipMhs2, menjadi sebuah arsip baru yaitu ArsipMhs3,

dengan cara semua record arsip kedua disambungkan setelah record terakhir arsip pertama}

{Kondisi awal : arsip pertama dan kedua sudah berisi data}

{Kondisi akhir : arsip'ketiga berisi hasil sambungan kedua arsip} Deklarasi

Type DataMhs : Record <NIM : Integer, Nama: String>

ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs : DataMhs

Function Mark(Input Mhs : DataMhs)  Boolean Deskripsi

Open(ArsipMhs1, 1) Open(ArsipMhs2, 1)

(52)

Dosen : Dodon Yendri, M.Kom Page 51

Open(ArsipMhs3, 2) FRead(ArsipMhs1, Mhs)

While (Mark(Mhs) = false) Do FWrite(ArsipMhs3, Mhs) FRead(ArsipMhs1, Mhs) EndWhile

FRead(ArsipMhs2, Mhs)

While (Mark(Mhs) = false) Do FWrite(ArsipMhs3, Mhs) FRead(ArsipMhs2, Mhs) EndWhile FWrite(ArsipMhs3, <99999, 'xxxxx', 99.9>) Close(ArsipMhsl) Close(ArsipMhs2) Close(ArsipMhs3) Merging Urut

{Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan ArsipMhs2yang sudah terurut, menjadi sebuah arsip baru yaitu ArsipMhs3 yang juga terurut}

{Kondisi awal : arsip pertama dan kedua sudah berisi data} {Kondisi akhir : arsip ketiga berisi hasil merging kedua arsip} Deklarasi

Type DataMhs : Record <NIM : Integer, Nama: String>

ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs 1, Mhs2 : DataMhs

(53)

Dosen : Dodon Yendri, M.Kom Page 52

Function Mark(Input Mhs : DataMhs)  Boolean Algoritma Open(ArsipMhsl, 1) Open(ArsipMhs2, 1) Open(ArsipMhs3, 2) FRead(ArsipMhs1, Mhs1) FRead(ArsipMhs2, Mhs2)

While (Mark(Mhsl) = false) Or (Mark(Mhs2) = false) Do If (Mhsl.NIM <= Mhs2.NIM) Then

FWrite(ArsipMhs3, Mhs1) FRead(ArsipMhsl, Mhsl) Else FWrite(ArsipMhs3, Mhs2) FRead(ArsipMhs2, Mhs2) Endif

EndWhile {Mark(Mhs 1) = true dan Mark(Mhs2) = true} FWrite(ArsipMhs3, <99999, 'xxxxx', 99.9>)

Close(ArsipMhs1) Close(ArsipMhs2) Close(ArsipMhs3)

D. Updating

Updating adalah proses editing harga suatu record (field key tidak diedit) pada file master dengan data dari file transaksi. Berikut ini adalah algoritma umum untuk meremajakan record pada file master (bersifat beruntun, nilai field keynya terurut naik tetapi bisa tidak unik). Artinya bahwa suatu record pada file master dapat mengalami satu atau beberapa kali peremajaan.

(54)

Dosen : Dodon Yendri, M.Kom Page 53

Contoh :

Peremajaan File Saldo tabungan pada Bank, dengan perjanjian jika nilai uang pada file update berharga negatif, berari pengambilan, tetapi jika nilai uang pada File Update berharga positif, berarti transaksi penabungan.

File Master File Transaksi File New Master NoRek Saldo NoRek Saldo NoRek Saldo

001 100000 001 +5000 001 103000 003 150000 001 -2000 003 150000 004 175000 002 +1000 004 176000 006 180000 004 -1500 006 185500 007 210000 004 +10000 007 207000 008 112000 004 -7500 008 112000 009 135000 006 +10500 009 135000 010 210000 006 -5000 010 210000 999 0 007 -3000 999 0 999 0 Updating

{Mengubah salah satu isi field dari file master berdasarkan data dari file transaksi lalu simpan hasil editing ke file new master}

{Kondisi awal : suatu variabel sudah bemilai isi dari field key pada posisi record yg akan diubah, field key sudah terurut naik}

{kondisi akhir : file new master sudah berisi data dari hasil editing file master berdasarkan file transaksi1}

Deklarasi

Type DataSaldo : Record < NoRek : Integer, Saldo : Longint >

Master, Transaksi, NewMaster : SeqFile of DataSaldo Nasabah1,Nasabah2 : DataSaldo

(55)

Dosen : Dodon Yendri, M.Kom Page 54

NewSaldo : Longint

FunctionMark(InputNasabah : DataSaldo)  Boolean Algoritma Open(Master, 1) Open(Transaksi, 1) Open(NewMaster, 2) FRead(Master, Nasabah1) FRead(Transaksi, Nasabah2)

While (Mark(Nasabahl) = false) Do

While (Nasabah2.NoRek < Nasabahl.NoRek) and (Mark(Nasabah2) = false) Do

FRead(Transaksi, Nasabah2) {skip record dari file trans}

EndWhile

If (Nasabah2.NoRek = Nasabahl.NoRek) Then

NewSaldo  Nasabah 1.Saldo {yg akan diedit}

While (Nasabah2.NoRek = Nasabahl.NoRek) and (Mark(Nasabah2) = false) Do

NewSaldo NewSaldo+ Nasabah2.Saldo FRead(Transaksi, Nasabah2)

EndWhile

FWrite(NewMaster, <Nasabahl.NoRek, NewSaldo>) Else FWrite(NewMaster, Nasabahl) . Endif FRead(Master, Nasabah1) EndWhile FWrite(NewMaster, <999, 0>) Close(Master) Close(Transaksi) Close(NewMaster)

(56)

Dosen : Dodon Yendri, M.Kom Page 55 E. Spliting

Spliting adalah pemecahan sebuah file menjadi dua atau lebih file baru. Algoritmanya tergantung dari kriteria pemecahannya.

Contoh :

Memisahakan file nilai suatu matakuliah suatu kelas berdasarkan yang lulus dan yang tidak lulus.

NIM Nilai NIM Nilai

- 80 - 80 - 42 - 60 - 60 - 56 - 56 - 55 - 55 - 71 - 71 - 65 38 99999 0 65 40 NIM Nilai 54 - 42 99999 0 - 38 - 40 - 54 99999 0 PENUTUP SOAL-SOAL

Implementasikan algoritma konsolidasi, merging, updating dan spliting dengan bahasa pemrograman Pascal.

Referensi

Garis besar

Dokumen terkait

Kecepatan pelayanan yang diartikan sebagai kecepatan pengguna layanan mendapatkan layanan yang dibutuhkan merupakan unsur yang oleh masyarakat kabupaten Bandung

Berdasarkan hasil pengujian yang dilakukan pada sistem deteksi dan klasifikasi pola tinggi dan berat badan melalui citra digital ini, didapatkan kesimpulan sebagai

Prosedur program manfaat purnakarya pada DPSG yaitu setiap karyawan yang telah berusia 18 (delapan belas) tahun atau telah menikah dan telah terdaftar pada dana

Berdasarkan kabar dari langit dan karakter kualitas air hujan tadi, air hujan sangat bermanfaat bagi manusia, baik secara langsung dengan memanfaatkannya untuk

Hal ini berarti auditor yang dapat mengimplementasikan due professional care yang terefleksikan oleh sikap skeptisme dan keyakinan yang memadai dalam pekerjaan

dilihat pada Tabel 4.2 bahwa ekstrak lengkuas konsentrasi 10% berpengaruh terhadap penurunan jumlah bakteri ikan patin, angka kuman diperoleh hasil 2,01 x 10 3 koloni/g

17 Pada block diagram ini, high period yang berasal dari block diagram otomatis/manual rudder menjadi parameter high period untuk membangkitkan sinyal PWM yang

Obyek dalam penelitian ini adalah PT Sumber Indah Plastik Semarang, yang berlokasi di Jl. Arteri kendal baru Km.19 Kabupaten Kendal, Semarang. Data yang digunakan dalam penelitian