39
MODUL PRAKTIKUM PRAKTEK ALGORITMA DAN PEMROGRAMAN II

modul algoritma dan pemrograman 2.pdf

Embed Size (px)

Citation preview

  • MODUL PRAKTIKUM

    PRAKTEK ALGORITMA DAN PEMROGRAMAN II

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

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

  • 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 :

    No Nama Test1 Test2 Test3

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

    Dengan variable I mewakili baris dan variable J mewakili kolom.

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

  • 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

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

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

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

    end.

  • 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 :

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

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

  • Modul Praktikum Algoritma dan Pemrograman II

    13

    mahasiswa[j]:=temp2;

    y:=x;

    end

    else if

    ((mahasiswa[i,y])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;

  • 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 (bil0) then

    begin

    write('Data yang di hapus urutan ke-');readln(bil);

    if (bil>0) and (bil

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

  • 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 (x0) 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;

    write('Bilangan yang dipangkatkan : ');readln(x);

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

  • 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

    III. PRAKTEK

    Program pas61;

    Type

  • 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';

  • 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

    2 11010001 Jono 50 D Tidak Lulus

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

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

    end.

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

  • 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

  • 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

    Nama Alamat Pekerjaan Nama Alamat Pekerjaan

  • 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

    ? ? ? ? ? ? ? ? ?

  • 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

    ? ? ? ? ? ? ? ? ?

  • 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

    A B C D E

  • 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

    baru^.berikut:= awal;

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

  • 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

    A B C D

  • 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

    else {menghapus tengah atau terakhir}

  • Modul Praktikum Algoritma dan Pemrograman II

    33

    begin

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

    while (elemen bantu^.berikut^.info) and (hantu^. berikutnil) do

    bantu:=bantu^.berikut;

    hapus:=bantu^.berikut;

    if hapusnil 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;

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

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

    setelah dibuat penunjuk sekarang ada di koordinat (x,y).

  • 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

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

    program pas95;

  • 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 :

    Buatlah tampilan gambar grafik dengan bentuk :