Anda di halaman 1dari 12

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 12345678 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

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

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.

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 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 '); 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; en

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. Misal : Diketahui sebuah Larik dalam Vektor A dengan 10 indeks sebagai berikut : 14 1 45 2 22 3 15 4 5 5 30 6 20 7 12 8 9 9

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 : y Jika Ketemu, tampilkan pesan Data yang dicari ditemukan pada lokasi ke I y Jika tidak tampilkan pesan Data yang dicari tidak ditemukan 6. Selesai

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 YT Y T T stop Ketemu Ketemu ! pada lokasi I Tidak Ketemu !

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; end.

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 Tengah = (atas + bawah) div 2 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 : y Jika Ketemu, tampilkan pesan Data yang dicari ditemukan pada lokasi ke I y Jika tidak tampilkan pesan Data yang dicari tidak ditemukan 7. Selesai

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]); i:=i+1; 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 perlumemecah masalah menjadi beberapa upa-masalah yang lebihkecil. 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). 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 memamnggil 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

Keterangan Jalannya Program : Pelaksanaan program dimulai dari program utama. Aksi A1, A2 dan A3 dilaksanakan secara beruntun. Setelah aksi A3, CallModul1(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. 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; 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 lagike Program Utama (Aksi A9) dan program selesai. Ada 2 jenis modul, yakni : 1. Prosedur 2. Fungsi 1. 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 aksidilaksanakan. 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 Deklarasi Prosedur Pemanggilan Prosedur uses crt; Contoh : var alas,tinggi,luas : real; (*program tanpa parameter *) procedure luassegi3; program luassgi3_1; 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); Procedure NamaProsedur(parameter formal) NamaProsedur(parameter aktual) repeat until keypressed; end. (*program dengan parameter *) program luassg3_2; uses crt; var alas,tinggi,luas : real; 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. (*program dengan parameter *) program tukar_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. (*program tanpa parameter *) program tukar_1; 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.

2. 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. 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 Contoh : (* Contoh Fungsi-1 *) 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; end. Hasil Program : (* Contoh Program Fungsi-2 *) 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 *) 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.

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) 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

Function Factorial(input N:Integer) integer; begin if (N=0) or (N=1) then Factorial:=1 else Factorial := N * Factorial(N-1); end; Pada baris 3 dari fungsi diatas, nilai n dicek sama dengan 0 atau 1, jika ya, maka fungsi mengembalikan nilai 1 {baris 4}, jika tidak, fungsi mengembalikan nilai n * Faktorial (n -1) {baris 6} disinilah letak proses rekursif itu, perhatikan fungsi factorial ini memanggil dirinya sendiri tetapi dengan parameter (n-1) 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 1 1 2 3 5 8 13 21 34 Algoritma fibonachi 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); Untuk ukuran n= 4, proses perhitungan Fibonacci dapat dilakukan sebagai berikut: f4 = f3+f2 f4 = (f2+f1) + f2 f4 = (1+1) +1 f4 = 3 program deret Function S(input n:integer) Deklarasi Lokal {tidak ada} Deskripsi If (n=1) Then return (l) Else return (n + S(n-1)) Endif Deret 2 4 6 8 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

integer

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.

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 writeln('Berapa n : ');readln(n); writeln('Fibonaci N=',n,' adalah : ',fibonaci(n):5); repeat until keypressed; end.

Permutasi Slah 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 : 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]; 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']); end.