• Tidak ada hasil yang ditemukan

MODUL PRAKTIKUM PRAKTEK ALGORITMA DAN PEMROGRAMAN II

N/A
N/A
Protected

Academic year: 2021

Membagikan "MODUL PRAKTIKUM PRAKTEK ALGORITMA DAN PEMROGRAMAN II"

Copied!
39
0
0

Teks penuh

(1)

MODUL PRAKTIKUM

(2)

Modul Praktikum

Algoritma dan Pemrograman II

1 MODUL I ARRAY DIMENSI I (1 x pertemuan) I. TUJUAN

- Mempelajari tipe terstruktur Array dimensi satu.

II. TEORI SINGKAT

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. Array dapat dideklarasikan pada bagian deklarasi type atau bagian deklarasi Var.

Bentuk 1 :

Var NamaArray : Array[TypeIndex] Of TypeLarik; Bentuk 2 :

Type NamaType = Array[TypeIndex] Of Type Larik; Var NamaVarArray : NamaType;

NamaLarik : Nama Variable bertype Array.

Type Larik : Type datanya. Type larik dapat berupa integer, real, char, string atau record. TypeIndex : data bertype ordinal seperti char, byte, integer atau enumerated. Type Index

dapat berupa NamaType atau Sub Range Langsung. Contoh deklarasi :

Type Daftar_nilai : array [1..5] of integer; Var Nilai : daftar_nilai;

Atau dapat ditulis pada bagian var saja : Var Nilai : array [1..5] of integer; Dari deklarasi diatas mempunyai arti :

Variable array yang bernama Nilai mempunyai 5 buah elemen (dengan indeks 1 sampai 5) dan masingmasing elemen bertipe integer. Dari deklarasi Array diatas dapat direpresentasikan didalam memori sebagai berikut :

Tiap kotak disebut dengan elemen array, berfungsi seperti halnya variable, dapat diisi dengan sebuah data dari type tertentu sesuai yang dideklarasikan. Tiap kotak mempunyai „nomor‟ / „alamat‟ yang disebut dengan index yang berfungsi untuk memberi identitas kotak tersebut.

(3)

Modul Praktikum

Algoritma dan Pemrograman II

2 Cara mengakses elemen array dimensi satu

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, contoh : Write (nilai[1]). Untuk mempersingkat program dipergunakan perintah berikut : For I := 1 to 5 do Begin Writeln(nilai[I]); End; III. PRAKTEK Program pas11; 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;

(4)

Modul Praktikum

Algoritma dan Pemrograman II

3 rata := jum / max_test;

{mencetak}

writeln ('Total nilai = ',jum);

writeln ('Rata-rata nilai = ',rata:5:2); readln;

end.

Program pas12; 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. Tugas :

Buat program dengan output :

(5)

Modul Praktikum

Algoritma dan Pemrograman II

4 MODUL II ARRAY DIMENSI II (1 x pertemuan) I. TUJUAN

- Mempelajari tipe terstruktur Array dimensi dua.

II. TEORI SINGKAT

Array berdimensi dua mempunyai bentuk table yang menpunyai 2 indeks, baris dan kolom. Format deklarasi array dimensi dua dapat 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; Cara mengakses elemen array dimensi dua

Untuk mengakses elemen pada array dimensi 2 bisa disebutkan nama array diikuti dengan indeks baris dan indeks kolomnya.

Nama array [indeks_baris, indeks_kolom] Untuk memberi nilai ke array, bisa dengan dua cara Dengan operator penugasan (:=)

Nilai_mhs[4, 1] := 80;

Berarti memberikan nilai 80 langsung kedalam elemen array baris ke 4 kolom ke 1.

Dengan pernyataan masukan (read/readln) Read (Nilai_mhs [4, 1]);

Berarti memberikan nilai kedalam elemen array baris ke 4 kolom ke 1 melalui keyboard. Banyaknya perintah yang diberikan dengan statemen diatas sesuai dengan banyaknya elemen array, yaitu jumlah baris dikalikan jumlah kolomnya. Untuk mempersingkat perintah bias dipergunakan perintah perulangan, untuk deklarasi diatas bias dipergunakan perintah berikut :

For I := 1 to 100 do Begin For J := 1 to 3 do begin Readln(Nilai_mhs[I,J); End; End;

(6)

Modul Praktikum

Algoritma dan Pemrograman II

5 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 bias dipergunakan perintah berikut :

For I := 1 to 100 do Begin For J := 1 to 3 do begin Writeln(Nilai_mhs[I,J); End; End;

Dengan variable I mewakili baris dan variable J mewakili kolom.

III. PRAKTEK

Program pas21; 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);

(7)

Modul Praktikum

Algoritma dan Pemrograman II

6 end; readln; end. Tugas :

Buat program dengan output :

No Nama Test1 Test2 Test3 Total Rerata Huruf

Total = test1+ test 2 + test3 Rata = total / 3

Jika rata >= 80 maka nilai huruf = A Jika rata >= 70 maka nilai huruf = B Jika rata >= 60 maka nilai huruf = C Jika rata >= 50 maka nilai huruf = D Jika rata < 50 maka nilai huruf = E

(8)

Modul Praktikum

Algoritma dan Pemrograman II

7 MODUL III PROCEDURE (1 x pertemuan) I. TUJUAN

- Mempelajari pemecahan program ke dalam modul-modul program dalam bentuk prosedur.

II. TEORI SINGKAT

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.

A. Procedure Input / Output

Write, writeln : sudah dibahas Read, Readln : sudah dibahas

B. Procedure Operasi String

Delete(x,i,n) : Membuangn buah character mulai dari i dari string x. Insert(s1,s2,i) : Menyisipkan string s1 dalam string s2 di posisi i. Str(n:w:d,s) : Merubah Numerik lebar w decimal d dalam string s. Val(s,n,c) : Merubah s string menjadi numeric dalam n.

FillChar(x,n,ch) : Mengisi variable x dengan character ch sebanyak n.

C. Procedure Lain-lain

Clrscr : Hapus layar.

ClrEol : Hapus baris mulai posisi cursor.

DelLine : Menghapus 1 baris di posisi cursor dan menggeser naik tampilan-tampilan di bawahnya.

InsLine : Menyisipi sebuah baris pada posisi cursor. Gotoxy(x,y) : Memposisikan cursor pada baris y, kolom x.

Delay(n) : Menunda proses n integer yang menunjukkan lama tunda. Halt : Menghentikan eksekusi program.

Sound(f) : Menghasilkan nada suara dengan frequensi f. NoSound : Mematikan nada.

TextColor(x) : Memesan warna tulisan dengan konstanta warna x. x dapat berupa angka 0, 1, 2, … atau Black, Red, White, …

TextBackGround(x) : Memesan warna latar belakang dengan konstanta warna x.

Untuk procedure dan fungsi standard yang sudah disediakan oleh pascal semuanya terdapat pada unit-unit yang harus disertakan pemakaiannya pada USES (pada kepala program).

D. Menciptakan Procedure

Berapa hal yang harus diperhatikan dalam penggunaan prosedur, antara lain :  Deklarasi prosedur terletak pada bagian deklarasi program.

(9)

Modul Praktikum

Algoritma dan Pemrograman II

8  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

Struktur prosedur hampir sama dengan struktur program pascal, yaitu : Bagian kepala prosedur

Procedure nama_prosedur (dafatar parameter formal); Bagian deklarasi

Digunakan untuk mendeklarasikan semua variabel lokal yang digunakan dalam prosedur.

Bagian pernyataan.

Digunakan untuk menuliskan semua statemen, yang diawali dengan begin dan diakhiri dengan end diikuti tanda titik koma (;).

Begin

(statement) end.

Pemanggilan prosedur dilakukan dengan cara menyebutkan nama prosedurnya diikuti dengan parameter (parameter aktual) jika memakai parameter formal pada saat mendeklarasikan.

III. PRAKTEK

Program pas31; 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;

(10)

Modul Praktikum

Algoritma dan Pemrograman II

9 begin writeln; for I := 1 to P do begin write(X[I]:6:2); if I mod 8 = 0 then writeln; end; writeln; end;

procedure urut (var X : larik; P:integer); var i,j,lokasi : integer;

bantu : real; begin for i := 1 to p-1 do begin lokasi := i; for j := i+1 to p do if x[lokasi] > x[j] then lokasi := j; bantu := x[i]; x[i] := x[lokasi]; x[lokasi] := bantu; end; end;

procedure medu(var x : larik; n :integer); begin if (n mod 2 = 0) then m := (x[n div 2] + x[(n div 2) +1])/2 else m := x[(n+1)div 2]; end;

procedure rata (x:larik; n :integer);

var i : integer;

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;

(11)

Modul Praktikum

Algoritma dan Pemrograman II

10 MODUL IV FUNCTION (1 x pertemuan) I. TUJUAN

- Mempelajari pemecahan program ke dalam modul-modul program dalam bentuk fungsi.

II. TEORI SINGKAT

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 x e , 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.

A.Menciptakan Fungsi

Fungsi merupakan sebuah subprogram yang apabila dipanggil akan menghasilkan sebuah nilai. Ciri-ciri suatu fungsi :

(12)

Modul Praktikum

Algoritma dan Pemrograman II

11 1. Fungsi hanya memberikan sebuah hasil

2. Nama fungsi selain digunakan untuk memanggil fungsi tersebut, juga dianggap sebagai suatu variable sehingga bias digunakan sebagai bagian dari ungkapan.

3. Dalam fungsi tidak digunakan parameter variable, semua parameter dianggap sebagai parameter nilai.

4. Semua parameter digunakan sebagai masukan pada fungsi tersebut dengan keluarannya nama fungsi yang bertindak sebagai satu variable.

Deklarasi fungsi :

Function pengenal [(daftar parameter formal)]: tipe;

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 :

Pengenal(daftar parameter aktual);

Pengenal adalah nama fungsi yang akan dipanggil. Beberapa hal penting yang perlu

diperhatikan berkaitan dengan pemakaian fungsi, adalah :

1. Tipe hasil fungsi harus bertipe sederhana (integer, real, boolean, char atau string), karena fungsi hanya bisa mengembalikan nilai bertipe sederhana.

2. Jika fungsi tidak memiliki daftar parameter formal, maka tanda kurung buka “(“ dan kurung tutup “)” tidak ditulis.

Fungsi didefinisikan didalam blok program pemanggil (setelah kata tercadang var)

III. PRAKTEK

program pas41; uses crt;

var pil,i,k,j : integer; tinggi : array[1..100] of real; mahasiswa : array[1..100] of string; function menu(var pilih:integer):integer;

begin clrscr; gotoxy(20,5);writeln('**********************************'); gotoxy(20,6);writeln(' M E N U'); gotoxy(20,7);writeln('**********************************'); gotoxy(20,8);writeln;

gotoxy(20,9);writeln(' 1. Tambah Data'); gotoxy(20,10);writeln(' 2. Urutkan Data'); gotoxy(20,11);writeln(' 3. Tampilkan Data'); gotoxy(20,12);writeln(' 4. Hapus Data'); gotoxy(20,13);writeln(' 5. Edit Data'); gotoxy(20,14);writeln(' 6. Statistik'); gotoxy(20,15);writeln(' 0. Keluar'); gotoxy(20,16);writeln('**********************************'); gotoxy(20,18);writeln('**********************************'); gotoxy(20,17);write('Pilihan = ');readln(pilih); end; function tambah:string; begin clrscr;

(13)

Modul Praktikum

Algoritma dan Pemrograman II

12 writeln('******************');

writeln(' Tambah Data');

writeln('******************'); writeln;

write('Banyak data yg ditambahkan = ');readln(j); for i:=1 to j do

begin

k:=k+1;

writeln('---'); writeln(' Data ke-',k); writeln('---');

write('Nama Mahasiswa : ');readln(mahasiswa[k]); write('Tinggi Badan : ');readln(tinggi[k]);

end; end;

function urutkan:integer; var pil2,x,y : integer;

temp2: string; temp : real; begin

clrscr;

writeln('******************'); writeln(' Urutkan Data');

writeln('******************'); writeln;

if k=0 then begin

write('Data masih kosong, ENTER untuk ke MENU'); readln;

end else

begin

writeln('Urutan berdasarkan :'); writeln('1. Nama Mahasiswa'); writeln('2. Tinggi Badan'); write('Pilihan = ');readln(pil2); if (pil2=1) then begin for i:=1 to k-1 do for j:=i+1 to k do begin if length(mahasiswa[i])>length(mahasiswa[j]) then x:=length(mahasiswa[i]) else x:=length(mahasiswa[j]); for y:=1 to x do begin if ((mahasiswa[i,y])>(mahasiswa[j,y])) then begin temp:=tinggi[i]; temp2:=mahasiswa[i]; tinggi[i]:=tinggi[j]; mahasiswa[i]:=mahasiswa[j]; tinggi[j]:=temp;

(14)

Modul Praktikum

Algoritma dan Pemrograman II

13 mahasiswa[j]:=temp2; y:=x; end else if ((mahasiswa[i,y])<(mahasiswa[j,y])) then y:=x; end; end;

write('Data telah terurutkan, ENTER untuk ke MENU');readln;

end

else if (pil2=2) then begin for i:=1 to k-1 do for j:=i+1 to k do begin if tinggi[i]>tinggi[j] then begin temp:=tinggi[i]; temp2:=mahasiswa[i]; tinggi[i]:=tinggi[j]; mahasiswa[i]:=mahasiswa[j]; tinggi[j]:=temp; mahasiswa[j]:=temp2; end; end;

write('Data telah terurutkan, ENTER untuk ke MENU');readln;

end else

begin

write('Data GAGAL diurutkan, ENTER untuk ke MENU');readln;

end; end;

end;

function tampilkan(pos: byte; teks : string):string; begin clrscr; writeln('******************'); gotoxy(pos,2);writeln(teks); writeln('******************'); writeln; writeln('Terdapat ',k,' data '); for i:=1 to k do begin writeln('---'); writeln(' Data ke-',i); writeln('---');

writeln('Nama Mahasiswa : ',mahasiswa[i]); writeln('Tinggi Badan : ',tinggi[i]:0:2,' cm'); writeln;

end; writeln;

write('ENTER untuk melanjutkan');readln; end;

(15)

Modul Praktikum

Algoritma dan Pemrograman II

14 function editkan:string;

var bil : integer; begin

tampilkan(5,'Edit Data'); if (k>0) then

begin

write('Data yang di edit urutan ke-');readln(bil); if (bil>0) and (bil<=k) then

begin

writeln('---'); writeln(' Data ke-',bil); writeln('---');

writeln('Nama Mahasiswa : ',mahasiswa[bil]); writeln('Tinggi Badan : ',tinggi[bil]:0:2); writeln('[::] Edit Data [::]');

write('Nama Mahasiswa : ');readln(mahasiswa[bil]); write('Tinggi Badan : ');readln(tinggi[bil]);

writeln;

write('Data telah diubah, ENTER untuk ke MENU'); readln;

end else

begin

writeln;

write('No Data tidak tepat, ENTER untuk ke MENU');readln;

end; end;

end;

function hapuskan:string; var bil,i : integer;

begin

tampilkan(5,'Hapus Data'); if (k>0) then

begin

write('Data yang di hapus urutan ke-');readln(bil); if (bil>0) and (bil<=k) then

begin for i:=bil to k-1 do begin tinggi[i]:=tinggi[i+1]; mahasiswa[i]:=mahasiswa[i+1]; end; k:=k-1; writeln;

write('Data telah dihapus, ENTER untuk ke MENU'); readln;

end else

begin

writeln;

write('No Data tidak tepat, ENTER untuk ke MENU');readln;

end; end;

end;

function statistik:string; var i,j : integer;

(16)

Modul Praktikum

Algoritma dan Pemrograman II

15 temp,jum : real; temp2 : string; begin clrscr; writeln('******************'); writeln(' Statistik Data');

writeln('******************'); if (k>0) then

begin

jum:=0; writeln;

writeln('Banyak data yang ada = ',k); for i:=1 to k-1 do begin for j:=i+1 to k do begin if tinggi[i]>tinggi[j] then begin temp:=tinggi[i]; temp2:=mahasiswa[i]; tinggi[i]:=tinggi[j]; mahasiswa[i]:=mahasiswa[j]; tinggi[j]:=temp; mahasiswa[j]:=temp2; end; end; jum:=jum+tinggi[i]; end;

writeln('Rata-rata tinggi mahasiswa = ',((jum+tinggi[k])/k):0:2);

writeln('Mahasiswa yang memiliki tinggi badan terrendah = ',mahasiswa[1],' (',tinggi[1]:0:2,')');

writeln('Mahasiswa yang memiliki tinggi badan tertinggi = ',mahasiswa[k],' (',tinggi[k]:0:2,')'); writeln;

end else

begin

writeln;

write('Data masih kosong, '); end;

write('ENTER untuk ke MENU');readln; end; { program utama } begin repeat menu(pil); case pil of 0 : exit; 1 : tambah; 2 : urutkan; 3 : tampilkan(3,'Tampilkan Data'); 4 : hapuskan; 5 : editkan; 6 : statistik; else

gotoxy(20,19);write('Pilihan salah, ENTER untuk ke MENU');readln; end;

until pil=0; end.

(17)

Modul Praktikum

Algoritma dan Pemrograman II

16 MODUL V REKURSIF (1 x pertemuan) I. TUJUAN

- Mempelajari proses rekursi dalam penggunaan prosedur dan fungsi

II. TEORI SINGKAT

Rekursi adalah suatu prosedur atau fungsi yang dapat memanggil dirinya sendiri. Contoh dari rekursi adalah proses menghitung faktorial dan proses menghitung bilangan fibonacci. Program berikut menunjukkan contoh penggunaan rekursi yang identik dengan suatu perulangan. Program 51; var i : integer; procedure ulang; begin

writeln(i,'. Tulisan ini akan tercetak 10 kali'); if i < 10 then begin i := i + 1; ulang; end; end; begin i := 1; ulang; readln end.

Perhatikan hasil dari eksekusi program diatas. Terlihat bahwa di dalam prosedur ulang terdapat baris perintah yang berfungsi untuk memanggil dirinya sendiri sebelum i =10.

III. PRAKTEK

Dibawah ini program untuk mengetahui nilai pemangkatan bilangan : program pas52;

uses crt; var x : real;

n : integer;

Function pkt(x :real; n : integer):real; var t : real; m : integer; Begin m:=abs(n); if (x<>0) and (n=0) then pkt:=1 else if n >0 then pkt:=x*pkt(x,n-1) else if (n < 0) then pkt := 1/(x*pkt(x,m-1)); end; begin clrscr;

(18)

Modul Praktikum

Algoritma dan Pemrograman II

17 write('Bilangan pangkat : ');readln(n);

writeln(x:5:2,' Pangkat ',n,' = ',pkt(x,n):8:3); readln;

end.

Contoh dibawah ini merupakan program untuk mencari bilangan fibo : program pas53;

uses crt;

var x:array[1..100] of integer; i,n:integer; lagi:char; function fibo(n:integer):integer; begin if (n = 1) or (n=2) then fibo:=1 else fibo:=fibo(n-1)+fibo(n-2); end; begin repeat clrscr;

write('Suku deret Fibonacci keberapa :');readln(n); writeln('Suku ke ', n,' =', fibo(n));

write('Lagi ...[Y/T]');lagi:=upcase(readkey); writeln(lagi);

until lagi <> 'Y'; end.

Tugas :

Ubahlah ketiga contoh program diatas tanpa menggunakan rekursi, tetapi menghasilkan output yang sama.

(19)

Modul Praktikum

Algoritma dan Pemrograman II

18 MODUL VI RECORD (1 x pertemuan) I. TUJUAN

- Mempelajari penggunaan tipe data terstruktur record pada pascal

II. TEORI SINGKAT

Record merupakan tipe berstruktur yang memiliki beberapa komponen atau elemen dengan masing-masing elemen boleh memiliki tipe data yang berlainan. Bentuk deklarasi variabel record : RECORD Daftar_field_1 : tipe_1; Daftar_field_2 : tipe_2; Daftar_field_n : tipe_n; END;

Masing-masing elemen dari record disebut dengan field. Masing-masign field dapat berupa tipe apa saja termasuk array. Contoh deklarasi :

Type RecBarang = RECORD Nama : string; Banyak : integer; Harga : LongInt; End;

Var Barang : RecBarang;

Cara Mengakses field

Bentuk : Variabel.field Contoh :

Barang.Nama;

Berarti field nama dari variabel record benama barang. Contoh lain :

Barang.Nama := „Sabun Mandi‟;

Field Nama pada record Barang diisi string „Sabun Mandi‟ Pernyataan WITH

Untuk menyederhanakan pernyataan seperti DataPeg.TgLahir.Tgl

Pascal menyediakan pernyataan WITH, dengan bentuk : WITH nama_record Do

<pernyataan>

III. PRAKTEK

Program pas61; Type

(20)

Modul Praktikum

Algoritma dan Pemrograman II

19 Recbarang = RECORD Nama_B : string[8]; Jumlah : Integer; Harga_b : LongInt; End; Var Barang : Recbarang; Begin

{Memasukan data ke dalam record barang} Barang.Nama_b := 'Baju koko';

Barang.Jumlah := 10;

Barang.Harga_b := 200000; {Menampilkan isi field record}

Writeln('Nama Barang : ',Barang.Nama_b); Writeln('Jumlah Barang : ',Barang.Jumlah); Writeln('Harga Barang : ',Barang.Harga_b); End. Program pas62; Type RecTgl = RECORD Tgl, Bln,Thn : Integer; End; RecPegawai = RECORD Nmr : Integer; Nama : String[35]; TgLahir : RecTgl; Gaji : LongInt; End; Var DataPeg : RecPegawai; Begin

{Mengisikan nilai terhadap field-field} DataPeg.Nmr := 123;

DataPeg.Nama := 'Joko Bodho'; DataPeg.TgLahir.Tgl := 13; DataPeg.TgLahir.Bln := 10; DataPeg.TgLahir.Thn := 1975; {menampilkan isi field}

Writeln('Nomor : ',DataPeg.Nmr); Writeln('Nama : ',DataPeg.Nama);

Writeln('Tanggal Lahir : ',DataPeg.TgLahir.Tgl,

'/',DataPeg.TgLahir.Bln,'/',DataPeg.TgLahir.Thn); readln; End. Program pas63; Type Recbarang = RECORD Nama_B : string[10]; Jumlah : Integer; Harga_b : LongInt; End;

Var Barang : Recbarang; Begin

{Memasukan data ke dalam record barang} Barang.Nama_b := 'Baju koko';

(21)

Modul Praktikum

Algoritma dan Pemrograman II

20 Barang.Jumlah := 10;

Barang.Harga_b := 200000; {Menampilkan isi field record} WITH Barang Do

begin

Writeln('Nama Barang : ',Nama_b);

Writeln('Jumlah Barang : ',Jumlah);

Writeln('Harga Barang : ',Harga_b);

End;

readln; End. Tugas :

Buatlah progam untuk memasukkan sejumlah data nilai mahasiswa dalam bentuk record. Data yang dimasukkan adalah Nim, Nama, Nilai UTS, Nilai UAS, Nilai Tugas. Setelah semua data dimasukkan, semua data ditampilkan dalam bentuk tabel yang diurutkan secara descending berdasarkan nilai rata-rata tiap mahasiswa, kemudian konversi nilai rata-rata ke dalam nilai angka dengan aturan.

Rata-rata >= 80 nilai huruf A keterangan Lulus Rata-rata >= 70 nilai huruf B keterangan Lulus Rata-rata >= 60 nilai huruf C keterangan Lulus Rata-rata >= 50 nilai huruf D keterangan Tidak Lulus Rata-rata < 50 nilai huruf E keterangan Tidak Lulus Contoh output program :

Jumlah Data : 2 Data ke-1 N I M : 11010001 N a m a : Jono Nilai UTS : 50 Nilai UAS : 50 Nilai TUGAS : 50 Data ke-1 N I M : 11010002 N a m a : Hari Nilai UTS : 90 Nilai UAS : 90 Nilai TUGAS : 90 H A S I L P R O S E S

No NIM Nama Rata Huruf Keterangan

1 11010002 Jana 90 A Lulus

(22)

Modul Praktikum

Algoritma dan Pemrograman II

21 MODUL VII UNIT (1 x pertemuan) I. TUJUAN

- Mempelajari pembuatan unit dengan mengunakan pascal

II. TEORI SINGKAT

Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel dan tipe) yang dpat dikompilasi terpisah terhadap program turbo pascal. Keuntungan dengan adanya unit, program yang memakai fasilitas dalam unit akan dikompilasi lebih cepat, sebab bagian dari unit tidak ikut dikompilasi lagi.

Struktur Unit

Unit terdiri dari tiga buah bagian :  Bagian Interface

 Bagian Implementation  Bagian Inisialisasi Struktur Sebuah Unit :

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.

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.

UNIT TambKur; INTERFACE USES CRT;

PROCEDURE Tambah(x, y : integer); PROCEDURE Kurang(x, y : integer); PROCEDURE Hapuslayar;

PROCEDURE TUNDA; 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)

(23)

Modul Praktikum

Algoritma dan Pemrograman II

22 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.

IMPLEMENTATION PROCEDURE HAPUSLAYAR; Begin ClrScr; End; PROCEDURE Tunda; Begin Readln; End;

PROCEDURE Tambah(x, y : integer); VAR

Total : integer; begin

total := x + y;

writeln(x,' + ',y,' = ',total);

End;

PROCEDURE Kurang(x, y : integer); VAR

Total : integer; begin

total := x - y;

writeln(x,' - ',y,' = ',total);

End;

Bagian Inisialisasi

Bagian ini bisa terdiri kata tercadang END saja yang diakhiri dengan titik. Dan menyatakan unit tidak mengandung kode inisialisasi.

Begin End.

Dari contoh contoh pada bagian diatas anda ketikkan menjadi sebuah program dan beri nama TambKur Kemudian Compile program diatas dengan menekan tobol Alt+F9 atau dari menu Compile pilih Compile. Jika program anda tidak mengandung kesalahan maka anda akan mendapatkan sebuah file baru dengan nama TambKur.tpu. yaitu file TPU yang anda bisa sisipkan pada program utama anda dengan menggunakan perintah Uses.

Ketikkan program dibawah ini kemudian simpan dengan nama Test uses tambkur;

var n,m : integer; begin

Hapuslayar;

Write(‘Masukan Nilai 1 : ’); readln(n); Write(‘Masukan Nilai 2 : ’); readln(m);

Tambah(n,m);

Kurang(n,m);

Tunda;

(24)

Modul Praktikum

Algoritma dan Pemrograman II

23

III. PRAKTEK

Salin berikut ini : unit cekpas; interface

function CekSandi(Kata, Password: string): Boolean; implementation

function CekSandi(Kata, Password: string): Boolean; begin if Kata=Password then CekSandi := True Else CekSandi := False; end; end.

Kemudian simpan program tersebut di atas dengan nama yang sama dengan nama unitnya. Untuk pemanggilan unit di ketikkan setelah kata kunci Uses. Kompilasi unit tersebut di atas (ingat, selalu kompilasi unit ke pengingat tambahan (compile to disk)). Kemudian setelah dikompilasi, salin program berikut ini :

program pas71; uses crt, cekpas; var Kata_sandi : string; begin Clrscr; repeat

Write('Masukkan Password Anda !! : '); Readln(Kata_sandi);

until CekSandi (Kata_sandi, 'praktikan'); Writeln;

Write('Password Anda Benar !!'); Readln;

end.

Jalankan program tersebut dan amati hasilnya. Program tersebut menggunakan unit cekpas dan unit cekpas itu harus sudah terkompilasi pada berkas. Bila dijalankan, pernyataan-pernyataan antara repeat dengan until pada program tersebut akan diulang terus hingga kata sandi yang diketikkan adalah 'praktikan' dan CekSandi bernilai True. Tugas :

Buatlah sebuah program pascal yang memanfaatkan fasilitas unit untuk menghitung jumlah huruf hidup dan huruf mati dari suatu string yang diinputkan dari keyboard.

(25)

Modul Praktikum

Algoritma dan Pemrograman II

24 MODUL VIII POINTER ( 2 x pertemuan) I. TUJUAN

- Mempelajari tipe pointer dan penerapannya dalam program

II. TEORI SINGKAT

Pointer adalah suatu tipe data yang dapat digunakan untuk mengalokasikan dan mendealokasikan (mengambil / mengurangi) pengingat secara dinamis, yaitu sesuai dengan kebutuhan pada saat suatu program dieksekusi.

Data bertipe pointer merupakan suatu fasilitas yang dimiliki pernrograrnan bahasa Pascal untuk mengatasi tipe data yang bersifat statis, misaInya data bertipe larik yang penyimpanannya dalam pengingat terbatas, data yang tersimpan dalam perubah tidak boleh melebihi pesanan yang telah dideklarasikan. Gambar 3. menunjukkan ilustrasi perubah statis dan dinamis.

Gambar diatas bisa dijelaskan sebagai berikut. Pada gambar a perubah A adalah perubah statis. Dalam hal ini 1000 adalah nilai data yang sesungguhnya dan disimpan pada perubah (lokasi) A. Pada gambar b perubah A adalah perubah dinamis. Nilai perubah ini misalnya adalah 10. Nilai ini bukan nilai data yang sesungguhnya, tetapi lokasi dimana data yang sesunggulmya berada. Jadi dalam hal ini nilai data yang sesungguhnya tersimpan pada lokasi 10.

Dari ilustrasi di atas bisa dilihat bahwa nilai perubah dinamis akan digunakan untuk menunjuk ke lokasi lain yang befisi data sesungguhnya yang akan diproses. Karena alasan inilah perubah dinamis lebih dikenal dengan sebutan pointer yang artinya kira-kira menunjuk ke sesuatu.

Dalam perubah dinamis, nilai data yang ditunjuk oleh suatu pointer biasanya disebut sebagai simpul/node.

A. Struktur Data.

Struktur data yang dimaksud disini adalah struktur data yang digunakan dalam data bertipe pointer. Data bertipe pointer ditandai dengan meletakkan tanda ^ didepan nama simpul pada deklarasinya. Simpul bisa dideklarasikan sebagai sebuah record yang berisi field-field data yang bertipe selain pointer dan field-field yang bertipe pointer.

a b A 1000 A 10 10 1000

(26)

Modul Praktikum

Algoritma dan Pemrograman II

25 Field bertipe pointer dalam sebuah record bisa satu buah (untuk single link list), bisa dua buah (untuk double link list) dan sebagainya. Single link list hanya bisa menunjuk ke satu arah, sedang double link list bisa menunjuk ke dua arah. Dalam pemrograman bahasa Pascal, struktur data bertipe pointer yang bersifat dinamis berbeda dengan tipe data lainnya yang besifat statis. Bentuk umum deklarasi pointer adalah sebagai berikut:

Type pengenal = ^simpul; simpul = tipe;

dengan pengenal: nama pengenal yang menyatakan data bertipe pointer. Simpul : nama simpul.

Tipe : tipe dari simpul.

Tanda ^ didepan nama simpul harus ditulis apa adanya dan menunjukkan bahwa pengenal adalah suatu tipe data pointer. Tipe data simpul yang dinyatakan dalam tipe bisa berupa sembarang tipe data, misainya char, integer, real, rekaman (record) dan sebagainya.

Contoh:

Type patkiang = string [301;

pegawai=.^simpul; simpul = record Nama : panjang; Alamat : panjang; pekerjaan: patkiang; End; Var P1,P2: pegawai;

Deklarasi pada contoh diatas sifat kedinamisannya masih tersamar, karena jika dfinginkan sejumlah simpul aktif dalam pengingat, maka kita perlu menyediakan sejumlah pointer yang sesuai. Dengan demikian seolah-olah tidak ada perbedaan yang nyata antara perubah statis dengan dinamis. Gambar diatas menunjukkan medan informasi pada simpul pointer P1 dan P2. Dari gambar diatas terlihat ada kemiripan dengan perubah statis tanpa larik.

Jika benar-benar diinginkan mempunyai perubah yang bersifat dinamis, harus ditarnbalikan satu medan lagi dalarn rekaman yang mampu menunjuk simpul lain, yang disebut dengan medan penyambung dengan tipenya sama dengan tipe pointer awal (P1). Deklarasinya struktur data untuk single-link-list dapat diubah menjadi:

Type panjang = string[30];

pegawai= 'I simpul; simpul = record Nama : panjIang; Alamat : panjang; Pekerjaan : panjang; P1 P2

Medan informasi Medan informasi

(27)

Modul Praktikum

Algoritma dan Pemrograman II

26 berikut : pegawai;

End;

Var PI : pegawai;

Gambar dibawah ini menunjukkan ilustrasi simpul dengan medan informasi, medan penyambung dan senarai berantai dari single-link-list.

Gambar a menunjukkan suatu simpul dengan medan informasi berisi nama, alamat, pekerjaan dan medan penyambung yang bertipe pointer. Gambar b menunjukkan senarai berantai yang dapat dibentuk dari deklarasi diatas, ada kemiripan dengan data yang bertipe larik.

Demikian pula untuk deklarasi struktur data doubly-link-list dapat diubah menjadi:

Type panjang = string [301;

pegawai= Simpul; simpul = record Nama : panjang; Alamat : panjang; pekerjaan : panjang; kiri,kanan : pegawai; End; Var P1 : pegawai;

Gambar dibawah ini menunjukkan ilustrasi simpul dengan medan informasi, medan penyambung dan senarai berantai dari doubly-link-list.

Gambar a menunjukkan suatu simpul dengan medan penyambung kiri, medan informasi berisi nama, alamat, pekedaan dan medan penyambung kanan yang bertipe pointer. Gambar b menunjukkan senarai berantai yang dapat dibentuk dari deklarasi struktur data doubly-link-list.

Kegunaan.

Kegunaan yang utarna dari data bertipe pointer adalah untuk mengatasi kekurangan yang terdapat pada data yang bertipe larik. Misalnya ada deklarasi sebagai berikut (dalam bahasa Pascal): var Tabel : array [ 1.. 100, 1.. 50] of integer;

P1

Medan Informasi Medan Penyambung (a)

P2

(b) Nama Alamat Pekerjaan

(28)

Modul Praktikum

Algoritma dan Pemrograman II

27 Perubah tabel di atas hanya mampu untuk menyimpan data sebanyak 5000 buah data, tidak boleh lebih, proses akan terhenti jika perubah tabel digunakan lebih dari 5000 buah data. Sebaliknya, pengingat/penyimpan mengalami banyak kekosongan jika perubah tabel hanya sedikit yang digunakan, misalnya yang digunakan hanya 10 buah data, maka sisanya sebanyak 4990 pengingat dibiarkan kosong.

Penggunaan data bertipe pointer adalah untuk mengolah data yang banyaknya tidak bisa dipastikan sebelumnya, bisa lebih dari 5000 buah data atau kurang dari 10 buah data.

Pengingat yang digunakan data yang bertipe pointer bisa sebanyak-banyaknya tergantung dari kemampuan pengingat komputer yang digunakan dan tidak ada pengingat yang dibiarkan kosong jika jumlah data yang diolah hanya sedikit.

Teknik.

Teknik pengoperasian pointer secara umum dibagi kedalam kelompok-kelompok sebagai berikut: 1.Baru 2.Tambah: a. Awal (depan) b. Tengah c. Akhir 3.Hapus: a. Awal (depan) b. Tengah c. Akhir

Ketiga teknik pengoperasian pointer diatas diberlakukan untuk ilustrasi-ilustrasi: 1. Senarai berantai tunggal tanpa kepala, yaitu kumpulan komponen yang

disusun secara berurutan dengan bantuan pointer. Masing-masing komponen dinamakan dengan simpul (node).

2. Senarai berantai tunggal bekepala, yaitu senarai berantai yang diawali sebuah simpul sebagai kepala dengan bantuan pointer menyambung ke sekumpulan simpul yang disusun secara berurutan.

P1

Medan Penyambung kiri Medan Informasi Medan Penyambung Kanan

(a)

P2

(b)

Nama Alamat Pekerjaan

(29)

Modul Praktikum

Algoritma dan Pemrograman II

28 3. Senarai berantai tunggal berkepala dan memutar, yaitu sama seperti no. 2.

Diatas, tetapi simpul terakhir menyambung kembali ke simpul kepala. 4. Senarai berantai ganda bekepala, yaitu senarai berantai yang diawali sebuah

simpul sebagai kepala dengan bantuan pointer menyambung kiri tidak menunjuk ke simpul yang lain (nil) dan pointer penyambung kanan menunjuk ke sekumpulan simpul yang disusun secara berurutan. Pointer penyambung kiri dari simpul yang ditunjuk pointer penyambung kanan simpul kepala kembali menunjuk ke simpul sebelumnya. Pointer penyambung kanan simpul terakhir tidak menunjuk ke simpul yang lain (nil).

5. Senarai berantai ganda berkepala dan memutar, yaitu sama seperti no. 4. diatas, tetapi pointer penyambung kiri simpul kepala menunjuk ke simpul terakhir dan pointer menyambung kanan simpul terakhir menunjuk ke simpul kepala, jadi tidak ada pointer yang bernilai nil.

Selain ketiga teknik pengoperasian pointer diatas, ditambah lagi teknik menukar posisi simpul yang sering diterapkan pada pengurutan data (sortir) dan teknik penelusuran yang sering diterapkan pada pohon (tree).

Contoh-contoh dasar operasi pointer:

Apabila dideklarasikan tipe pointer sebagai berikut: type simpul = Data;

Data = record Nama : string; alamat : string; berikut : simpul; end; var T1J2 : simpul;

B. Senarai berantai (linked list)

Pada penjelasan tentang pointer diatas telah dijelaskan bahwa senarai berantai bersifat dinamis yang dapat mengatasi kekurangan yang terdapat pada data bertipe larik yang bersifat statis.

Penyajian Senarai berantai:

Penyambung pada setiap simpul digunakan untuk menunjuk kesimpul lain, jika pointer (penunjuk) bemilai nill, berarti suatu simpul tidak menunjuk ke simpul lain. Contoh senarai berantai dapat dilihat pada gambar dibawah ini:

Dari diatas dapat dijelaskan sebagai berikut: Awal

(30)

Modul Praktikum

Algoritma dan Pemrograman II

29 Pointer awal menunjuk simpul pertama yang berisi info A, dari medan penunjuk simpul pertama menunjuk simpul kedua yang berisi info B dan seterusnya hingga akhirnya simpul terakhir tidak menunjuk ke simpul yang lain lagi (nil).

Operasi pada senarai berantai:

1. Operasi pointer pada senarai berantai tunggal

Sebelum membicarakan operasi pointer pada senarai berantai tunggal (single link list) yang diberlakukan untuk semua operasi-operasi data bertipe pointer terlebih dahulu disampaikan deklarasi umum sebagai berikut:

type Simpul = ^Data;

Data = record info : char; berikut : simpul; end; var elemen : char;

awal, akhir, haru : Simpul;

a. Simpul baru

Simpul baru dapat ditambahkan pada senarai berantai dengan perintahperintah: Readln(elemen); new(baru); baru^.info := elemen; baru^.berikut := nil; awal := baru; akhir := baru; b. Tambah simpul

Untuk sernua proses penambahan baris pertama dan kedua dari program simpul baru diatas selalu digunakan. Penambahan Simpul pada senarai berantai tunggal dibagi kedalam beberapa cara, yaitu:

Tambah di belakang:

Untuk menambah di akhir senarai, terlebih dahulu ditinjau apakah senarai sudah ada atau belum, jika belum ada (awal := nil), maka program simpul baru diatas bisa digunakan, jika sudah ada (berarti simpul yang ditunjuk pointer akhir sudah ada), maka program berikut ini dikedakan (gambaran urutan hasilnya dapat dilihat pada garnbar 10:

Akhir^.berikut := baru; akhir := baru;

akhir^.berikut:=nil;

Tambah di depan

Sama seperti tambah simpul di belakang, terlebih dahulu tinjau apakah senarai sudah ada atau belum, jika belum lakukan perintah yang sama dengan tambah dibelakang, jika sudah ada lakukan perintah berikut

(31)

Modul Praktikum

Algoritma dan Pemrograman II

30 awal:=baru;

Penambahan di tengah

Sama dengan operasi penambahan simpul di belakang dan di depan, operasi penambahan simpul ditengah diawali dengan membuat simpul baru, mengkopi nilai elemen ke info pada simpul, meninjau apakah senarai sudah ada atau belum.

Jika pada operasi penambahan di belakang atau di depan dengan cepat ditemukan posisi peletakan simpul (karena awal dan akhir simpul sudah diketahui), tetapi pada penambahan simpul di tengah harus dicari dahulu posisi peletakan simpul baru tersebut.

Untuk proses pencarian ini dibutuhkan pointer bantuan (pada deklarasi Var ditambahkan. nama pointer, misaInya bantu yang bertipe pointer) yang berfungsi untuk penunjuk simpul pada posisi schelum (didepan) simpul baru disisipkan. Berikut ini adalah program untuk meletakkan posisi bantu:

bantu := awal;

while elemen > bantu^.berikut^.info do bantu := bantu^.berikut;

Program diatas mengandung pengertian bahwa selama nilai elemen lebih besar dari nilai info pada simpul setelah simpul yang ditunjuk oleh bantu maka pointer bantu menunjuk simpul berikutnya. Jika penunjuk bantu berhenti pada suatu simpul, programnya adalah sebagai berikut:

Baru^.berikut:=bantu^.berikut;

Bantu^.berikut := baru;

Perintah diatas jangan dibalik.

c. Hapus simpul

Seperti operasi pada penambahan simpul, operasi menghapus simpul juga bisa dibagi menjadi:

1. hapus simpul pertarna. 2. hapus simpul akhir 3. hapus simpul di tengah

Untuk operasi penghapusan simpul nilai elemen tidak perlu di kopikan ke variabel simpul (untuk deklarasi diatas, variabelnya adalah info), karena hanya berfungsi untuk pembanding. Kemudian untuk operasi penghapusan simpul ini, selain pointer awal dan akhir dibutuhkan beberapa pointer bantuan untuk menunjuk pointeryang akan dihapus dan pointer pencari posisi simpul.

Yang terpenting dalam menghapus simpul adalah usahakan bahwa senarai jangan sampai terputus terutama, pada saat menghapus simpul ditengah.

(32)

Modul Praktikum

Algoritma dan Pemrograman II

31

Ilustrasi penghapusan simpul:

1. Menghapus simpul di awal

Gambar dibawah mengilustrasikan penghapusan simpul yang terdapat di awal senarai, yang pada mulanya pointer awal menunjuk ke simpul terdepan dari senarai berantai.

Program penghapusan simpul di awal senarai dapat ditulis sebagai berikut:

hapus:= awal;

awal:=hapus^.berikut; {gambarl3} dispose (hapus);

2. Menghapus simpul di tengah

Penghapusan simpul yang terdapat di tengah senarai berantai, apabila lokasi simpul yang akan dihapus sudah diketemukan (setelah simpul yang ditunjuk oleh pointer bantu), maka program penghapusan tersebut adalah sebagai berikut:

hapus:=bantu^.berikut;

bantu^.berikut:=hapus^.berikut; dispose (hapus);

3. Menghapus simpul di akhir

Menghapus simpul di akhir senarai dapat dilakukan dengan program berikut Oika memenuffi if hapus = akhir):

akhir := bantu; akhir^.berikut:= nil; dispose(hapus);

III. PRAKTEK

program tambah_hapus_pointer; type Simpul = ^Data;

Data = record info : char; berikut : Simpul; end; var Elemen : char; Awal,Akhir,Baru : Simpul;

procedure inisialisasi(var awal,akhir: Simpul); begin

awal := nil; akhir := nil; end;

procedure tambah_belakang(var awal,akhir : Simpul;elemen : char); var

baru: Simpul;

Hapus Awal Akhir

(33)

Modul Praktikum

Algoritma dan Pemrograman II

32 begin

new(baru);

baru^.info=elemen; if awal = nil then awal := baru else akhir^.betikut := baru; akhir := baru; akhir^.berikut := nil; end;

procedure tambah_depan(var awal,akhir : Simpul;elemen : char); var

baru : Simpul; begin

new(baru);

baru^.info := elemen; if awal = nil then akhir := baru else

baru^.berikut := awal; awal := baru;

end;

procedure tambah_tengah(var awal,akhir : Simpul;elemen : char); var

baru,bantu : Simpul; begin

new(haru);

baru^.info := elemen; if awal = nil then begin awal:=baru; akhir:=baru; end else begin

{ mencari lokasi yang sesuai } bantu:=awal;

while elemen > bantu^.berikut^.info do bantu:=bantu^. berikut;

{menyisipkan simpul baru} baru^.berikut:=bantu^. berikut; bantu^. berikut:=baru;

end; end;

procedure hapus_simpul (var awal,akhir : simpul;elemen : char); var

bantu,hapus : simpul; begin

if awal=nil then { senarai masih kosong} writeln(‘Senarai masih kosong’)

else

if awal^.info = elemen then {simpul pertama dihapus} begin

hapus:=awal;

awal:=hapus^.berikut; dispose(hapus); end

(34)

Modul Praktikum

Algoritma dan Pemrograman II

33 begin

bantu:=awal; {mencari simpul yang akan dihapus}

while (elemen <> bantu^.berikut^.info) and (hantu^. berikut<>nil) do bantu:=bantu^.berikut;

hapus:=bantu^.berikut;

if hapus<>nil then {simpul yang akan dihapus ketemu} begin

if hapus <> akhir then {simpul tengah dihapus} bantu^.berikut:=hapus^.berikut

else {simpul terakkir dihapus} begin akhir:=bantu; akhir^. berikut:=nil; end; dispose(hapus); end else

{ simpul yang akan dihapus tidak ketemu }

writeln(Simpul yang akan dihapus tidak ketemu'); readln; end; end; procedure baca_tambah; var menu : integer; begin repeat clrscr;

gotoxy (10,5);write(‘Masukkan karakter : ‘);readln(elemen); gotoxy (10,7);write('1. Tambah depan);

gotoxy (10,8);write('2. Tambah tengah'); gotoxy (10,9);write('3. Tambah akhir'); gotoxy (10,10);write('4. Selesai);

gotoxy (10,12); write('Pilihan : ');readln(menu); case menu of 1 : tambah_depan(awal,akhir,elemen); 2 : tambah_tengah(awal,akhir,elemen); 3 : tambah_belakang(awal,akhir,elemen); end; until menu = 4; end; procedure baca_hapus; begin clrscr;

gotoxy (10,11); write('Masukkan karakter : ');readln(elemen); hapus_simpul (awal,akhir,elemen);

end;

procedure cetak(var awal : simpul); var bantu : simpul; begin bantu := awal; repeat write(bantu^.info:2,'); bantu:=bantu^. berikut; until bantu = nil;

(35)

Modul Praktikum

Algoritma dan Pemrograman II

34 readln; end; { program utama } begin repeat clrscr;

gotoxy (10,5); write('1. Tambah'); gotoxy (10,6); write(‘2. Cetak’); gotoxy (10,7); write(‘3. Hapus’); gotoxy (10,8); wiite('4. Selesai);

gotoxy (10,10); write('Pilihan : ');readin(pil); case pil of '1' : baca_tambah; '2’ : cetak(awal); ‘3’ : baca_hapus; end; until Pil =’4’; end. Tugas :

Buatlah program antrian untuk pembehan karcis Bioskop, setiap ada tambahan pembeli diletakkan di akhir antrian, pembeli yang selesai dilayani dihapus dari antrian (hapus di depan) dan bagi pembeli yang batal (keluar dad antrian) segera dihapus.

(36)

Modul Praktikum

Algoritma dan Pemrograman II

35 MODUL IX

GRAFIK DAN SUARA (1 x pertemuan)

I. TUJUAN

- Mempelajari pembuatan program untuk membangkitkan suara dan mode grafik

II. TEORI SINGKAT

A. SUARA

Bunyi speaker dapat dibangkitkan dengan menggunakan prosedur Sound. PROCEDURE Sound(frek:Word);

Frek menyatakan frekuensi bunyi dalam herzt. Bunyi yang dihasilkan hanya dapat dihentikan dengan prosedur NoSound. Lama suara diatur dengan delay.

B. MODE GRAFIK

Pada mode grafik memungkinkan kita menggambar apapun, karena elemen terkecil penyusun grafik adalah titik (pixsel).

Mengaktifkan Mode Grafik

Untuk memilih mode grafik anda harus melakukan inisialisasi terlebih dahulu terhadap sistem grafik. Hal ini dilakukan dengan memanggil prosedur bernama Initgraph.

Bentuk deklarasi :

PROCEDURE InitGraph(Var DriverGrafik : Integer; Var ModeGrafik : Integer;

PathDriver : String); Contoh program untuk membentuk lingkaran :

GraphResult dipakai untuk memeriksa keberhasilan mode grafik anda.

CloseGraph dipakai untuk menutup mode grafik ke mode teks.

GetMaxX memberi nilai bertipe integer yang menyatakan nomor kolom terbesar

pada mode grafik sekarang.

GetMaxY memberi nilai bertipe integer yang menyatakan nomor baris terbesar

pada mode grafik sekarang.

PutPixel(x, y, w); menggambar sebuah titik pada baris yang, kolom x dan warna w

GetPixel(x, y);  memberi kode warna pixel yang berada pada koordinat x kolom

yang

MoveTo(x, y); meletakkan penunjuk sekarang ke kolom x baris yang

MoveRel(dx, dy);  meletakkan penunjuk sekarang ke kolom x+dx, baris yang+dy

dengan (x,y) adalah posisi semula dari penunjuk sekarang.

GetX menghasilkan posisi kolom dari penunjuk sekarang

GetY  menghasilkan posisi baris dari penunjuk sekarang

LineTo(x,y);  Menggambar dari posisi penunjuk sekarang ke koordinat (x, y).

(37)

Modul Praktikum

Algoritma dan Pemrograman II

36

LineRel(dx,dy)  Menggambar dari posisi penunjuk sekarang ke koordinat (x+dx,

y+dy)., dengan (x,y) adalah posisi semula dari penunjuk sekarang . setelah dibuat penunjuk sekarang ada di koordinat (x+dx,y+dy).

Line  dipakai untuk menggambar garis tetapi tidak mengubah penunjuk sekarang.

Setcolor(x) memberikan warna x pada palete sekarang

III. PRAKTEK A. Suara Program pas91; Uses Crt,graph3; Begin Repeat

Sound(1000); {frekuensi pertama} Delay(200); {tunda sebentar} Sound(400); {frekuensi kedua} Delay(200); {tunda sebentar} Until Keypressed;

NoSound; {menghentikan suara} End. Program pas92; Uses Crt, Graph3; Const Escape=#27; Var Tombol : Char; Frek : Word; Bunyi : Boolean; Begin ClrScr;

GotoXY(30,07);Write(' SIMULASI PIANO '); GotoXY(30,09);Write('==================='); GotoXY(30,10);Write('| W E T Y U |'); GotoXY(30,11);Write('| A S F G H J K |'); GotoXY(30,12);Write('==================='); Repeat Tombol := ReadKey; Tombol := UpCase(Tombol); Bunyi := True; Case Tombol Of 'A' : Frek := 131; 'W' : Frek := 191; 'S' : Frek := 147; 'E' : Frek := 156; 'F' : Frek := 175; 'T' : Frek := 185; 'G' : Frek := 196; 'Y' : Frek := 208; 'H' : Frek := 220; 'U' : Frek := 233; 'J' : Frek := 247; 'K' : Frek := 262; Else

(38)

Modul Praktikum

Algoritma dan Pemrograman II

37 Bunyi := False End; If Bunyi Then Begin Sound(frek); Delay(200); NoSound; End;

Until Tombol = Escape; End.

B. Grafik

program pas93; uses graph; var

DriverGrafis, ModeGrafis : integer; Begin

DriverGrafis := Detect;

InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\'); If GraphResult <>GrOk then

Begin

Writeln(‘Mode grafik tidak berhasil’); Halt(1); {Berhenti}

End;

Circle(GetMaxX div 2, GetMaxY div 2, GetMaxY div 4); Readln; Closegraph; End. program pas94; uses graph; var DriverGrafis,ModeGrafis : integer; FrekDasar,FrekMod,Amp,Sudut,SumbuX : integer; Tinggi : real; Begin DriverGrafis := Detect; InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\'); If GraphResult <>GrOk then

Begin

Writeln('Mode grafik tidak berhasil'); Halt(1); {Berhenti}

End;

FrekDasar := 3; FrekMod:= 10;

Amp := GetmaxX div 4; SumbuX := GetMaxY div 2; For Sudut := 1 To GetMaxX do Begin

Tinggi := Amp * (Sin(FrekDasar * PI * Sudut/180)) * (Sin(FrekDasar * PI * Sudut/180));

PutPixel(Sudut, SumbuX - Round(Tinggi), GetMaxColor); End;

Readln; Closegraph; End.

(39)

Modul Praktikum

Algoritma dan Pemrograman II

38 uses graph; var DriverGrafis,ModeGrafis : integer; FrekDasar,FrekMod,Amp,Sudut,SumbuX : integer; Tinggi : real; Begin DriverGrafis := Detect; InitGraph(DriverGrafis,ModeGrafis,'c:\tp\bgi\'); If GraphResult <>GrOk then

Begin

Writeln('Mode grafik tidak berhasil'); Halt(1); {Berhenti} End; SetColor(4); Line(320, 100, 200, 200); Line(320, 100, 440, 200); SetColor(7); Line(250, 300, 250, 160); Line(390, 300, 390, 160); SetColor(6); Line(150, 300, 490, 300); Readln; Closegraph; End. Tugas :

Gambar

Gambar  diatas  bisa  dijelaskan  sebagai  berikut.  Pada  gambar  a  perubah  A  adalah  perubah statis
Gambar dibawah ini menunjukkan ilustrasi simpul dengan medan informasi, medan  penyambung dan senarai berantai dari single-link-list

Referensi

Dokumen terkait

Gagal ginjal kronis atau penyakit renal tahap akhir (ESRD) merupakan gangguan fungsi renal yang progresif dan irreversible dimana kemampuan tubuh gagal untuk mempertahankan

Hasil uji aktivitas analgesik menunjukkan bahwa metil 2-asetoksibenzoat memiliki aktivitas analgesik dengan potensi efek analgesik yang tidak berbeda dengan asam

Satuan Kerja Perangkat Daerah (SKPD) Kabupaten Belitung Timur berkewajiban untuk menyusun rencana strategis yang memuat visi, misi, tujuan, strategi, kebijakan, program,

(1) Selain Surat Persetujuan sebagaimana dimaksud dalam Pasal7, setiap Pejabat Negara, Pegawai, PTT atau Pihak Lain di lingkungan Badan Pertanahan Nasional Republik

Ilmu pengetahuan dan teknologi (IPTEK) adalah suatu hal yang sangat penting dalam kehidupan manusia, dengan tidak adanya IPTEK pekerjaan manusia akan sulit

Sesuai dengan Undang-Undang Nomor 25 Tahun 2004 tentang Sistem Perencanaan Pembangunan Nasional, dan Undang-Undang Nomor 32 Tahun 2004 tentang Pemerintah Daerah

(93,33%)  Keberadaan tenaga profesional bidang kehutanan (sarjana kehutanan, tenaga teknis menengah kehutanan dan tenaga teknis yang telah memiliki sertifikat sesuai

Dari pembahasan tersebut dapat dipahami bahwa teknik sinematik berupa tipe pengambilan gambar dan pencahayaan (lighting) yang dipilih dan digunakan dalam film ini