PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan...

28

Click here to load reader

Transcript of PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan...

Page 1: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL ITIPE ARRAY

(1 x pertemuan)

I. TUJUANMempelajari tipe terstruktur Array dimensi satu dan dimensi dua.

II. TEORI SINGKATArray merupakan tipe data terstruktur yang dapat menyimpan banyak data yang bertipe sama, dimana masing-masing elemen array dapat diakses melalui indek array.

Arrray Dimensi SatuAdalah array yang hanya memiliki satu tipe indek.Deklarasi variabel bertipe array dimensi :

Var NamaArray : Array{tipeIndek] of TypeArray;

NamaArray adalah nama variabel bertipe array dan TypeArray adalah tipenya. TypeArray dapat berupa Integer, real, char, string atau record. Sedangkan tipeIndek dari array merupakan tipe ordinal seperti char, byte, integer, atau enumerasi.Contoh deklarasi tipe array :

Nilai : Array [1 .. 100] of integer;

Contoh diatas berarti dilakukan pemesanan tempat dimemori sebanyak 100 elemen yang akan ditampung dalam variabel Nilai yang tiap-tiap elemen hanya dapat menampung data bertipe integer (bilangan bulat)Contoh Program :

Program Array_Dimensi_satu;uses Crt;Const max = 100;Var Nilai : Array[1..max] of integer; i, j : integer;Begin ClrScr; {Menciptakan angka random} Randomize; for i := 1 To Max do Nilai[i] := random(Max); j := 0; for i := 1 to max do Begin Write(i,' '); j := j + 1; if J >= 10 Then Begin Writeln; J := 0; End; End; ReadlnEnd.

Perhatikan output dari program tersebut dilayar komputer anda. Perhatikan hasilnya bahwa setiap kali anda menjalankan program maka angka yang ditampilkan akan selalu berubah.

Arrray Dimensi DuaAdalah array yang memiliki dua tipe indek.Deklarasi variabel bertipe array dimensi dua :

Var NamaArray : Array{tipeIndek1,tipeIndek2] of TypeArray;

Contoh program :Prog Matrik2Dimensi;Use Crt;var Matrik : Array[1..10,1..10] Of integer; Baris,Kolom : Integer;Begin ClsRcr; {-Memasukkan data matrik-}

1

Page 2: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

For Baris := 1 to 2 Do Begin For kolom := 1 to 2 Do Begin Write('Baris ',Baris,' Kolom ',Kolom,' : '); Readln(Matrik(Baris,Kolom)); End; End {--Menampilkan Hasil--} For Baris := 1 to 2 Do Begin For kolom := 1 to 2 Do Begin Write(Matrik(Baris,Kolom):5); End; End; ReadlnEnd.

Latihan SoalBuatlah algoritma, flowchart dan program untuk menghitung perkalian dua buah matrik.

2

Page 3: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL IIPROCEDURE DAN FUNGSI

(2x pertemuan)

I. TujuanMempelajari pemecahan program ke dalam modul-modul program dalam bentuk prosedur dan fungsi

II. Teori Singkat

a. PROCEDUREProcedure merupakan sub program yang berdiri sendiri yang dapat dipanggil dari program utama.

Deklarasi prosedur :PROCEDURE <Nama_prosedur> (<Daftar_parameter_formal>);<Bagian_deklarasi>Begin <Bagian _pernyataan>End;

Dalam prosedur atau fungsi dikenal adanya parameter. Parameter adalah suatu nilai atau variabel yang akan dilewatkan dalam prosedur atau fungsi. Pengiriman paramter dalam prosedur atau fungsi dibedakan menjadi 2 yaitu parameter nilai dan parameter referensi. Pelewatan parameter secara nilai dimaksudkan jika parameter yang dileatkan dimasudkan tidak unutk diubah oleh prosedur atau fungsi sekalipun perubahan telah terjadi di dalam prosedur atau fungsi tersebut. Sedangkan parameter referensi dimasudkan unutk mengubah nilai atau variabel sekeluarnya dari prosedur atau fungsi. Perbedaan cara pengiriman parameter didalam prosedur atau fungsi terletak pada deklarasi prosedur atau fungsinya. Contoh deklarasi prosedur dengan pengiriman parameter secara refensi :

Procedure Tukar(var x,y : real);

Untuk mengubah sifat pengiriman parameter secara nilai, tinggal diubah deklarasi prosedur dengan menghilangkan var dalam kepala prosedur sehingga menjadi :

Procedure Tukar(x,y : real);

Berikut contoh program pemakaian untuk menukarkan dua nilai memakai prosedure :Contoh :PROG3_01.PAS contoh program menukarkan data dengan prosedurprogram tukar_data;var a, b : real; {deklarasi variabel global}

procedure info;begin writeln('****************************'); writeln('** Program Tukar Data **'); writeln('** Dengan Procedure **'); writeln('** Oleh : **'); writeln('** Ki Joko Bodho **'); writeln('****************************');end;{Prosedur penukaran data}procedure tukar(var x,y : real);var tamp : real;begin tamp := x; x := y; y := tamp;end;{Program utama}Begin info; a := 12.33; b := 67.98; writeln('Sebelum memanggil prosedur Tukar'); writeln('a = ',a:7:2,' b = ',b:7:2); tukar(a,b); writeln('Setelah memanggil prosedur Tukar'); writeln('a = ',a:7:2,' b = ',b:7:2); readln;End.

Contoh diatas pengiriman parameter dilakukan secara referensi, cobalah program diatas diubah pengiriman parameter dalam prosedur secara nilai!

3

Page 4: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

b. FUNCTIONFungsi memiliki struktur yang hampir sama dengan procedure, bedanya fungsi memiliki tipe hasil sedangkan procedure tidak.

Deklarasi fungsi :FUNCTION <Nama_fungsi> (<Daftar_parameter>): tipe;<Bagian_deklarasi>Begin <Bagian _pernyataan>End;

Contoh :PROG2_02.PAS contoh program perkalian dengan fungsiprogram kali_data;var a, b : integer; {deklarasi variabel global}

procedure info;begin writeln('****************************'); writeln('** Program Tukar Data **'); writeln('** Dengan Procedure **'); writeln('** Oleh : **'); writeln('** Ki Joko Bodho **'); writeln('****************************');end;{Prosedur peerkalian data}function kali(x,y : integer):integer;begin kali := x * y;end;{Program utama}Begin info; a := 12; b := 67; writeln(a,' x ',b,' = ',kali(a,b)); writeln('12 x 13 = ',kali(12,13)); readln;End.

c. LATIHAN SOAL :(Program yang anda buat harus dipecah dalam prosedur dan fungsi!!!!!!)1. Buatlah program dengan menggunakan prosedur untuk membalik suatu angka

Misalnya :Masukkan angka : 12309Hasil pembalikan : 90321

2. Buatlah program dengan menggunakan fungsi untuk mencari jumlah dan rata-rata dari sejumlah data yang dimasukkan.

4

Page 5: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL IIIREKURSI

(1 x pertemuan)

I. TujuanMempelajari proses rekursi dalampenggunaan prosedur dan fungsi

II. Teori SingkatRekursi 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.Prog4_01.pasProgram rekursi;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; readlnend.

Perhatikan hasil dari eksekusi program diatas. Terlihat bahwa di dalam prosedur ulang terdapat baris perintah yang berfungsi untuk memanggil dirinya sendiri sebelum i = 10.Contoh program berikut merupakan contoh rekursi untuk perhitungan suatu nilai faktorial.Prog4_02.prgVar i : byte;function Faktorial(m:byte):longint;begin if m = 0 then faktorial := 1 else faktorial := m * Faktorial(m - 1)end;

begin for i := 1 to 8 do writeln(i:2,'! = ',Faktorial(i)); readlnend.

Perhatikan hasil tampilan dari program diatas, modifikasi program dengan bilangan yang akan difaktorialkan diinputkan dari keyboard, sehingga menghasilkan tampilan seperti berikut :

Masukkan anngka : 5Hasi faktorial :2 x 4 x 3 x 2 x 1 = 120

Contoh program berikut merupakan contoh rekursi untuk menghitungan bilangan fibonnaci Prog4_03.prgVar suku, nilai : integer;function fibo(n:integer):longint;begin if (n=1) or (n=2) then fibo:=1 else fibo := fibo(n-1)+fibo(n-2);end;

begin for suku := 1 to 10 do writeln(suku:3,fibo(suku):8); readlnend.

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

5

Page 6: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL IVRECORD

(2 x pertemuan)

I. TujuanMempelajari penggunaan tipe data terstruktur record pada pascal

II. Teori SingkatRecord 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; Banayk : integer; Harga : LongInt; End; Var Barang : RecBarang;

Cara Mengakses fieldBentuk :

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’

Contoh program :Program contoh_record;Type 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.

Record di dalam record.Mungkin saja sebuah record berisikan record saja. Sebagai contoh :Type RecTgl = RECORD Tgl, Bln, Thn : Integer; End; RecPegawai = RECORD Nmr : Integer;

6

Page 7: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

Program contoh_record;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'; 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.

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.

Pernyataan WITHUntuk menyederhanakan pernyataan seperti

DataPeg.TgLahir.TglPascal menyediakan pernyataan WITH, dengan bentuk :

WITH nama_record Do <pernyataan>

Pada bentuk ini field-field yang terletak pada pernyataan dapat disebutkan tanpa menyertakan lagi nama recordnyadan tanda titik. Untuk jelasnya pada contoh program pertama akan dimodifikasi dengan pernyataan WITH :

Latihan Soal :Buatlah algoritma, flowchart dan 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 LulusRata-rata >= 70 nilai huruf B keterangan LulusRata-rata >= 60 nilai huruf C keterangan LulusRata-rata >= 50 nilai huruf D keterangan Tidak LulusRata-rata < 50 nilai huruf E keterangan Tidak Lulus

7

Page 8: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

Contoh output program :

Jumlah Data : 2Data ke-1

N I M : 11010001N a m a : JonoNilai UTS : 50Nilai UAS : 50Nilai TUGAS : 50

Data ke-1N I M : 11010002N a m a : HariNilai UTS : 90Nilai UAS : 90Nilai TUGAS : 90

H A S I L P R O S E S

No NIM Nama Rata Huruf Keterangan1 11010002 Hari 90 A Lulus2 11010001 Jono 50 D Tidak Lulus

8

Page 9: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODULL VMEMBUAT UNIT

(1 x pertemuan)

I. TUJUANMempelajari pembuatan unit dengan mengunakan pascal

II. TEORI

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 UnitUnit terdiri dari tiga buah bagian :

Bagian Interface Bagian Implementation Bagian Inisialisasi

Struktur Sebuah Unit :UNIT nama_unit;

INTERFACEUSES 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 InterfaceBagian 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;

INTERFACEUSES CRT;

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

Bagian ImplementationBagian 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)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);VARTotal : integer;begin

9

Page 10: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

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

PROCEDURE Kurang(x, y : integer);VARTotal : integer;begin total := x - y; writeln(x,' - ',y,' = ',total);End;

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

BeginEnd.

Dari contoh-contoh pada bagian diatas anda ketikkan menjadi sebuah program dan beri nama TambKur.prg. 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.prg

uses tambkur;begin Hapuslayar; Tambah(2,3); Kurang(10,4); Tunda;end.

Perhatikan hasilnya dan pelajari !!!!!!!!!!!!!!!!!!!

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

10

Page 11: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL VIPOINTER

(2 x pertemuan)

I. TUJUANMempelajari tipe pointer dan penerapannya dalam program

II. TEORI Pengertian pointer (Santoso, 1992) 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 3. llustrasi perubah statis dan dinamis

Gambar diatas bisa dijelaskan sebagai berikut. Pada gambar 3.a. perubah A adalah perubah statis. Dalam hal ini 1000 adalah nilai data yang sesungguhnya dan disimpan pada perubah (lokasi) A. Pada gambar 3.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.

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.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 4. menunjukkan medan informasi pada simpul pointer P1 dan P2.Dari gambar 4. terlihat ada kemiripan dengan perubah statis tanpa larik.

11

A A 10

a b

1000 10 1000

Page 12: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

Gambar 4. ilustrasi medan informasi pada simpul pointer P I dan P2.

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;berikut : pegawai;

End;Var PI : pegawai;

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

Gambar 5. Ilustrasi simpul dengan medan informasi, medan penyambung dansenarai berantai

Gambar 5.a. menunjukkan suatu simpul dengan medan informasi berisi nama, alamat, peke~aan dan medan penyambung yang bertipe pointer. Garnbar 5.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 6. menunjukkan ilustrasi simpul dengan medan informasi, medan penyambung dan senarai berantai dari doubly-link-list.Gambar 6. a. menunjukkan suatu simpul dengan medan penyambung kiri, medan informasi berisi nama, alamat, pekedaan

dan medan penyambung kanan yang bertipe pointer. Gambar 6.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;

12

P1 P2

Medan informasi Medan informasi

Nama Alamat Pekerjaan

Nama Alamat Pekerjaan

P1

Medan Informasi Medan Penyambung a

P2

b

Nama Alamat Pekerjaan

? ? ? ? ? ? ? ? ?

Page 13: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

Gambar 6. Ilustrasi simpul dengan medan penyambung kiri, medan informasi,medan penyambung kanan dan senarai berantai

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. Baru2. Tambah:

a. Awal (depan)b. Tengahc. Akhir

3. Hapus:a. Awal (depan)b. Tengahc. 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.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;

13

P1

Medan Penyambung kiri Medan Informasi Medan Penyambung Kanan a

P2

b

Nama Alamat Pekerjaan

? ? ?

? ? ?

? ? ?

Page 14: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

1. 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 8. berikul ini:

Gambar 8. Contoh senarai berantai tunggal (single link list)

Dari gambar 8. diatas dapat dijelaskan sebagai berikut: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 baruSimpul baru dapat ditambahkan pada senarai berantai dengan perintahperintah:

Readln(elemen);new(baru);baru^.info := elemen;baru^.berikut := nil;awal := baru;akhir := baru;

b. Tambah simpulUntuk 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:1. 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;

2. Tambah di depanSama 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

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

3. Penambahan di tengahSama 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:

14

Awal

A B C D E

Page 15: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

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.Gambar 12. menunjukkan ilustrasi penyisipan simpul baru di tengah, jika penunjuk bantu berhenti pada suatu simpul, programnya adalah sebagai berikut:

Baru^.berikut:=bantu^.berikut; Bantu^.berikut := baru;

Perintah diatas jangan dibalik.

c. Hapus simpulSeperti operasi pada penambahan simpul, operasi menghapus simpul juga bisa dibagi menjadi: 1. hapus simpul pertarna.2. hapus simpul akhir3. hapus simpul di tengah pada senarai berantai. 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.

Bustrasi penghapusan simpul:1. Menghapus simpul di awal

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

Gambar 13. llustrasi penghapusan simpul di awal

Program penghapusan simpul di awal senarai dapat ditulis sebagai

berikut:

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

2. Menghapus simpul di tengahGambar 14. dibawah menunjukkan flustrasi 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 akhirMenghapus simpul di akhir senarai dapat dilakukan dengan program berikut Oika memenuffi if hapus = akhir):

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

Contob program:{ contoh program pointer} program tambah_hapus_pointer; type Simpul = ^Data; Data = record info : char; berikut : Simpul; end;var Elemen : char;

15

Hapus Awal

Akhir

A B C D

Page 16: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

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; 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 else {menghapus tengah atau terakhir} 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}

16

Page 17: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

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

Soal:1. 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.

17

Page 18: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

MODUL VIIGRAFIK DAN SUARA

(1 x pertemuan)

I. TUJUANMempelajari pembuatan program untuk membangkitkan suara dan mode grafik

II. TEORI

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

Program Suara;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 Piano;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 Bunyi := False End; If Bunyi Then Begin Sound(frek); Delay(200); NoSound; End; Until Tombol = Escape;End.

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

18

Page 19: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

Mengaktifkan Mode GrafikUntuk 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);

Conoth program untuk membentuk lingkaran :

program grap;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.

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

Contoh program :program Frekw;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.

19

Page 20: PRAKTIKUM I · Web viewMempelajari pembuatan unit dengan mengunakan pascal II. TEORI Unit merupakan group dari prosedur atau fungsi (untuk berbagai deklarasi/definisi seperti variabel

GetPixel(x, y); memberi kode warna pixel yang berada pada koordinat x kolom yangMoveTo(x, y); meletakkan penunjuk sekarang ke kolom x baris yangMoveRel(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 sekarangGetY menghasilkan posisi baris dari penunjuk sekarangLineTo(x,y); Menggambar dari posisi penunjuk sekarang ke koordinat (x, y). setelah dibuat penunjuk sekarang ada di koordinat (x,y).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 sekarangContoh program :

program rumah;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.

Soal :Buatlah tampilan gambar grafik dengan bentuk :

20