Pemrograman Pascal T_T

_Setiap program Pascal berisi sebuah header dan block. Header dimulai dengan kata Program dan diikuti beberapa informasi tambahan. Bagian program ini hanya terdiri (biasanya) 1 baris saja.

Block terdiri atas dua bagian yaitu bagian deklarasi dan bagian statemen. Bagian deklarasi berisi deklarasi item-item yang digunakan dalam program sedang bagian statemen berisi statemen yang akan dikerjakan oleh program. Susunan program Pascal tersebut dapat digambarkan sbb:

1. Header

2. Block

a. Deklarasi
Label
Konstanta
Definisi type
Variabel
Procedure dan Function

b. Statemen

Contoh program dengan Pascal

program lingkaran; // header
var luas, radius : real; // deklarasi variabel
begin
writeln(‘Radius lingkaran=’); // statemen
readln(radius); // statemen
luas := 3.14 * radius * radius; // statemen
writeln(‘Luas lingkaran=’, luas); // statemen
end.

Pembahasan Soal bebek

Soal ini sepintas nampaknya rumit sekali tetapi dengan menganalisanya terlebih dahulu maka anda akan menemukan soal yang jauh lebih sederhana.

Pertama kita bahas dahulu submasalah pengurutan bebek satu varietas, i.e.”jika ada n bilangan acak yang masing-masing unik, berapa banyak pemindahan minimum yang perlu dilakukan untuk mengurutkannya”.

Ide dari pemecahan masalah ini adalah: mencari berapa banyak di antara bilangan-bilangan itu yang sudah dalam pengurutan. Ada sejumlah cara pengurutan, oleh pada setiap bilangan kita hitung suatu indeks keterurutan (IK) yang didefinisikan sbb.

IK suatu bilangan adalah adalah jumlah bilangan disebelah kirinya yang lebih kecil darinya namun berada dalam keterurutan termasuk bilangan itu sendiri.

Perhatikan bilangan-bilangan ini: 1, 3, 2, 7, 4, 6, 5

Indeks-indeks keterurutan diperoleh sbb (dituliskan di dalam tanda kurung),
1(1), 3(2), 2(2), 7(3), 4(3), 6(4), 5(4)

Berapa banyak bilangan yang tidak dalam keterurutan adalah banyaknya bilangan dikurangi oleh IK maksimum. Untuk contoh tersebut maka IK maksimum adalah 4 dan ada 7 bilangan sehingga jumlah pemindahan (yang dilakukan pada bilangan yang tidak berada dalam urutan tersebut) adalah 7 -4 = 3.

Sekarang jika kita lakukan pada bilangan-bilangan ini: 1, 2, 3, 4, 5, 6, 7 Maka diperoleh
1(1), 2(2), 3(3), 4(4), 5(5), 6(6), 7(7) dan jumlah pemindahan adalah = 7 – 7 = 0.

Kita coba lagi pada bilangan-bilangan ini: 7, 6, 5, 4, 3, 2, 1 Maka diperoleh 7(1), 6(1), 5(1), 4(1), 3(1), 2(1), 1(1)
dan jumlah pemindahan adalah = 7 – 1 = 6.

Beruntunglah soal ini tidak meminta cara-cara pemindahannya karena untuk contoh di atas akan terdapat banyak kemungkinan yang dapat dilakukan untuk 3 kali pemindahan tesebut. Itu terlihat dari adanya indeks yang sama seperti bilangan 3 dan 2, bisa 2 maupun 3 yang dipindahkan.

Ok, jadi bagaimana algoritmanya? Saat menghitung IK untuk X[j] kita cukupmenemukan bilangan yang lebih kecil darinya dengan IK terbesar, misalnya X[k], dan menghitung IK[j] := IK[k] + 1

  for j := 1 to N do begin     IKtmp := 0;     for k := 1 to j-1 do         if (X[k] < X[j] and IK[k] > IKtmp) then             IKtmp := IK[k];     IK[j] = IKtmp + 1; end;

Sekarang bagaimana dengan varietas lebih dari satu? Gampang, karena soal membatasi jumlah varietas hanya 4 maka pertama kita permutasikan urutan varietas, lalu memberi tambahan bobot sesuai dengan urutan varietasnya. Misalnya untuk urutan varietas v1, v2, v3, v4 maka bobot setiap bebek dari v2 di tambah 100, dari v3 di tambah 200, di v4 di tambah 300 (mengapa kelipatan 100? Karena bobot maksimum bebek 100!). Kemudian untuk satu permutasi dilakukan penghitungan IK sepertinya hanya satu varietas saja.

Untuk jumlahvarietas = 4 maka terdapat 24 permutasi, berati pula ada 24 kali penghitungan IK dan masing-masing diperoleh jumlah pemindahan yang perlu dilakukan. Dari ke 24 jumlah pemindahan untuk masing-masing permutasi diambil jumlah yang paling minimum.

Lalu, bagaimanakah melakukan permutasi? Silahkan membaca lagi bahan PJJ yang lalu….

Pembahasan Soal Kartu

Soal ini dibuat bukan untuk level IOI karena batasan data masih memungkinkan cara-cara konvensional tanpa perlu adanya trick-trick canggih. Singkatnya, solusinya dapat dibuat secara naif dan sederhana sbb.

Pertama anda memerlukan suatu array untuk menyimpan urutan kartu-kartu tsb dan kita sebut array X, yang berindeks 0, 1, 2, …, N-1. Untuk memudahkan algoritma maka kita nomori ulang setiap kartu dengan mengurangi 1 pada setiap angka. Jadi X[i] array mula-mula berisi kartu i.

Jika jumlah baris adalah k dimana k=N/3, deal demi deal isi array akan mengalami pemindahan isi sbb. Kartu yang ada di X[0] tetap pada x[0],
kartu di X[1] pindah ke X[k],
kartu di X[2] pindah ke X[2k],
kartu di X[3] pindah ke X[1],
kartu di X[4] pindah ke X[k+1],
kartu di X[5] pindah ke X[2k+1],
kartu di X[6] pindah ke X[2],
kartu di X[7] pindah ke X[k+2]
… dst

sehingga secara umum
kartu di X[j] akan pindah ke X[(j mod 3) * k + j div 3].

Dalam implementasinya tentu saja operasinya dilakukan pada array yang berbeda sbb.

      for j := 0 to N-1 do          Y[(j mod 3) * k + j div 3] := X[j];     X := Y;       

Pada setiap deal nomor kolom dimana kartu yang diambil tsb berada disebutkan, yaitu kolom c, dan kartu-kartu pada kolom c tsb ditandai. Untuk penandaannya ada yang menggunakan flag boolean, yaitu dengan menandai false kartu-kartu yang tidak berada di kolom c (inisialisasi semua true). Kartu-kartu i dengan flag[i] =true semakin lama semakin sedikit dan akhirnya tersisa kartu yang mungkin.

Cara tersebut memerlukan iterasi sebanyak jumlah kartu. Cara lain yang lebih efisien adalah menggunakan counter. Sebelum deal-deal dilakukan, setiap count[j] diinisialisasi 0. Ketika masukan adalah kolom c (c =1, 2, atau 3) maka counter dari setiap kartu pada kolom tsb bertambah 1. Dalam Pascal:

                      for i := 0 to k-1 do                 inc(count[X[(c-1)+i*3]]);

yang hanya melakukan N/3 iterasi saja. Cara ini akan semakin lebih efisien jika dalam soal jumlah kolom besar.

Untuk soal standart IOI, biasanya ukuran data di paskan ke ukuran maksimum memori yang bisa digunakan sehingga cara-cara naif seperti ini masih perlu diefisienkan lagi.

Misalnya operasi deal kartu hanya dilakukan pada array X saja. Misalnya kita mulai dari X[1] dipindahkan ke X[k], X[k] dipindahkan ke X[(k mod 3)*k + k div 3], dst.

Jika jumlah deal adalah ITER maka kartu-kartu yang mungkin adalah kartu-kartu j dengan COUNT[j] = ITER.

        first := true;     for j := 0 to N-1 do begin         if (COUNT[j] = ITER) begin             if not first then begin                  write(' ');                   first := false             end;             write(j+1)  {penomoran kartu dikembalikan ke urutan dari 1, 2, …}         end

Pembahasan Soal Lacak

Soal ini merupakan graph traversal BFS (Breadth Firsh Search) Khusus untuk masalah ini BFS dapat diimplementasikan tanpa menggunakan queue untuk menyimpan pencabangannya (breadthnya).

Idenya, dari suatu titik dan arah, kita mendapatkan sejumlah titik berikutnya sebagai breadth dalam BFS. Karena ukuran matrix 50×50 maka untuk kasus terburuk akan ada 49×49=2401 titik dalam breadth. Karena searching space sangat terbatas maka breadth tidak akan mengalami “peledakan”.

Jadi kita menggunakan array breadth yang setiap elemennya menyimpan koordinat titik pencabangan. Dalam inisialisasi array hanya berisi satu titik yaitu posisi awal mobil.

Dalam setiap sinyal arah yang dibaca maka dari setiap titik dalam array breadth ini kita temukan kembali semua kemungkinan titik berikutnya di dalam peta dan menandainya. Setelah hal tersebut dilakukan untuk semua titik dalam breadth maka titik-titik pada peta yang telah ditandai dicatat ke dalam array breadth.

Hal tersebut dilakukan untuk setiap masukah yang dibaca dan setelah masukan arah terakhir maka tanda-tanda pada peta menyatakan semupa kemungkinan posisi mobil terakhir.

Dalam implementasinya kita perlu definisikan type posisi berikut.

  type      posisi = record r, c: integer end;

Breadth adalah array dari elemen bertype posisi ini.

Selanjutnya kita perlu prosedur untuk memindahkan posisi bertanda “*” ke dalam array breadth.

      nb := 0;     for i := 1 to nrow do         for j := 1 to ncol do             if peta[i,j] = '*' then begin                 inc(nb);                 breadth[nb].r := i;                  breadth[nb].c := j;                 peta[i,j] := '.'; { clearkan posisi tsb}             end;

Lalu untuk setiap titik breadth[b] dilakukan penandaan kembali posisi selanjutnya sesuai dengan arah yang diberikan. Misalnya untuk arah EAST maka

  posNext := breadth[b]; inc(posNext.c); while Jalan(posNext) do begin     peta[posNext.r,posNext.c] := '*';     inc(posNext.c); end;

Untuk arah NORTH maka lakukan dengan

  posNext := breadth[b]; dec(posNext.r); while Jalan(posNext) do begin     peta[posNext.r,posNext.c] := '*';     dec(posNext.r); end;

Untuk arah-arah lain diserahkan pada anda untuk melengkapi. Juga anda seharusnya dapat membuat fungsi Jalan(posNext) untuk memeriksa apakah pada posisi tersebut adalah jalan atau bukan.

  function Jalan(posNext: posisi): boolean; begin     ....     { kalau keluar peta maka false }     { kalau tembok maka false }     { kalau tidak maka true }     .... end;

Setelah semua titik pada breadth diproses maka breadh dikosongkan kembali dan diisi oleh titik-titik pada peta yang bertanda “*” kembali (dengan memanggil procedure di paling atas).

Setelah arah masukan terakhir maka peta langsung dituliskan sebagai keluaran.gampang khan???

Sebagai contoh, perhatikan peta masukan berikut ini

  .......... .X.X..XXX. .X..X..... .X..X..... ....X..... *......XX. ..........

breadth hanya berisi 1 titik, yaitu (6.1). Jika kemudian masukan arah adalah EAST maka breadth kemudian akan berisi titik-titik di samping kanan tanda bintang yaitu posisi-posisi kosong sampai ketemu tembok. Sekarang peta menjadi sbb.

  .......... .X.X..XXX. .X..X..... .X..X..... ....X..... .******XX. ..........

breadth hanya berisi 6 titik, yaitu (6.2), (6,3),…,(6,7). Jika kemudian masukan adalah NORTH maka hal seperti di atas dilakukan ke arah atas untuk masing-masing tanda bintang. Dan peta menjadi sbb.

  ..*..*.... .X*X.*XXX. .X**X**... .X**X**... .***X**... .......XX. ..........

Jika kemudian masukan adalah WEST maka hal seperti di atas dilakukan ke arah atas untuk masing-masing tanda bintang. Dan peta menjadi sbb.

  *****..... .X.X*.XXX. .X*.X*.... .X*.X*.... ***.X*.... .......XX. ..........

Jika kemudian masukan adalah NORTH maka hal seperti di atas dilakukan ke arah atas untuk masing-masing tanda bintang. Dan peta menjadi sbb.

  *.*.**.... *X*X.*XXX. *X*.X*.... *X*.X*.... ....X..... .......XX. ..........

Jika kemudian masukan adalah WEST maka hal seperti di atas dilakukan ke arah atas untuk masing-masing tanda bintang. Dan peta menjadi sbb.

  *****..... .X.X*.XXX. .X..X..... .X..X..... ....X..... .......XX. ..........

Jika kemudian masukan adalah NORTH maka hal seperti di atas dilakukan ke arah atas untuk masing-masing tanda bintang. Dan peta menjadi sbb.

  ....*..... .X.X..XXX. .X..X..... .X..X..... ....X..... .......XX. ..........

Jika sinyal masukan sudah habis maka tanda-tanda bintang menyatakan semua kemungkinan mobil itu berada saat ini.

Tipe Data menunjukkan suatu nilai yang dpat digunakan oleh sutu variable yang bersangkutan.
Tipe Data dalam Pascal :
1. Tipe Data Sederhana, terdiri dari :
a. Tipe data standar :
integer : merupakan tipe data berupa bilangan bulat
real : merupakan jenis bilangan pecahan
char : merupakan karakter yg ditulis diantara tanda petik tunggal. Ex : ‘A’, ‘a’, ‘5′ dll
string : merupakan urut-urutan dari karakter yang terletak di antara tanda petik tunggal.
boolean : merupakan tipe data logika, yang berisi dua kemungkinan nilai: TRUE atau FALSE .
b. Tipe data didefinisikan pemakai
2. Tipe Data Terstruktur, terdiri dari :
a. Array
b. Record
c. File
d. Set
3. Tipe Data PointerOperator
Tanda operasi (operator) di dalam bahasa Pascal di kelompokkan dalam :
1. Assignment operator (operator pengerjaan) menggunakan simbol titik dua diikuti oleh tanda sama dengan (:=). Contoh –> A:=B;

2. Binary operator digunakan untuk mengoperasikan dua buah operand yang berbentuk konstanta ataupun variable. Operator ini digunakan untuk operasi arithmatika yang berhubungan dgn nilai tipe data Integer dan Real. Operasi yang dilakukan adalah : Pertambahan (+), Pengurangan (-), Perkalian (*), Pembagian Bulat (DIV), Pembagian Real (/) dan Modulus atau Sisa Pembagian (MOD)

3. Unary operator, operator ini menggunakan sebuah operand saja dapat berupa unary minus dan unary plus. Contoh : +2.5, a+(+b) dll

4. Bitwise operator digunakan untuk operasi bit per bit pada nilai integer.
Operator yang digunakan (NOT, AND, OR, XOR, Shl, Shr

Pertemuan 2

March 9, 2007

Dasar Program Pascal

Unsur-unsur Pemrograman
a. Mendapatkan data dengan membaca data dari default input (key board, file atau sumber data lainnya).
b. Menyimpan data ke dalam memori dengan struktur data yang sesuai,
c. Memproses data dengan instruksi yang tepat.
d. Menyajikan atau mengirimkan hasil olahan data ke default output (monitor, file atau tujuan lainnya).

Nama yang dipergunakan du dalam program Pascal disebut dengan pengenal atau Identifier. Identifier digunakan untuk nama: Program, Sub-program (procedure dan function), nama: Variable, Constant, Type, Label.
Nama-nama ini digunakan untuk pemakaian dan pemanggilan dalam program. Ketentuan penulisan identifier
a. Nama identifier harus dimulai dengan karakter huruf alfabet: a sampai z, A sampai Z atau karakter ‘_’ (underscore – garis bawah)
b. Karakter berikutnya boleh karakter numerik (0 .. 9) atau kombinasi alphanumerik (huruf-numerik).
c. Panjang nama, pada berbagai versi Pascal umumnya antara 32 – 63.
d. Tidak boleh menggunakan karakter istimewa: + – * / | \ = < > [ ] . , ; : ( ) ^ @ { } $ # ~ ! % & ` ” ‘ dan ? Contoh penulisan:
Penulisan yang benar: NamaMahasiswa, Gaji_Karyawan, PX4, dll.
Penulisan yang salah: 3X, A & B, C Z dll.

Variable adalah identifier yang berisi data yang dapat berubah-ubah nilainya di dalam program. Deklarasi Variable adalah :
a. Memberikan nama variabel sebagai identitas pengenal
b. Menentukan tipe data variabel
Contoh deklarasi variabel: var X : integer;
R : real;
C : char;
T : boolean;
Konstanta adalah identifier yang berisi data yang nilainya tidak berubah di dalam program.
Deklarasi Konstanta adalah:
a. Memberikan nama konstanta sebagai identitas pengenal
b. Menentukan nilai konstanta
Contoh deklarasi konstanta: conts MaxSize = 100; {integer}
ExitC = ‘Q’; {char}

Reserved Words atau kata-kata cadangan pada Pascal adalah kata-kata yang sudah didefinisikan oleh Pascal yang mempunyai maksdu tertentu.Suatu Unit adalah kumpulan dari konstanta, tipe-tipe data, variabel, prosedur dan fungsi-fungsi. Unit standar pada Pascal yang bisa langsung digunakan adalah System, Crt, Printer Dos dan Graph. Untuk menggunakan suatu unit, maka kita harus meletakkan clausa atau anak kalimat Uses di awal blok program, diikuti oleh daftar nama unit yang digunakan. Pada materi ini yang akan dibahas adalah unit Crt. Unit ini digunakan untuk memanipulasi layar teks (windowing, peletakan cursor di layar, Color pada teks, kode extended keyboard dan lain sebagainya.

Beberapa Statemen Turbo Pascal

Statemen adalah perintah untuk pengerjaan program pascal.
Statemen terletak di bagian deklarasi statemen dengan diawali oleh kata cadangan BEGIN dan diakhiri dengan kata cadangan END. Akhir dari setiap statemen diakhiri dengan titik koma [;].
Statemen statemen dalam bahasa Pascal terdiri dari pernyataan yang berupa fungsi dan prosedur yang telah disediakan sebagai perintah standar Turbo Pascal.

1. Statemen-statemen yang digunakan untuk input/output.

# Read/Readln [prosedur].

Perintah ini digunakan untuk memasukkan [input] data lewat keyboard ke

dalam suatu variabel.

Sintaks: Read/Readln(x); (ingat, selalu diakhiri dengan titik koma [;])

Keterangan : x = variabel.

Read = pada statemen ini posisi kursor tidak

pindah ke baris selanjutnya.

Readln = pada statemen ini posisi kursor akan

pindah ke baris selanjutnya setelah di

input.

# Write/Writeln [prosedur].

Digunakan untuk menampilkan isi dari suatu nilai variable di

layar.

Sintaks: Write/Writeln(x);

Keterangan : x = variabel.

Write/Writeln= statement ini digunakan untuk mencetak variable ke dalam monitor

2. Statemen-statemen yang digunakan untuk pengaturan letak layar.

# ClrScr [prosedur].

Perintah ini digunakan untuk membersihkan layar.

sintaks: ClrScr; 􀃆[Clear screen]

Pertemuan 1

March 9, 2007

Pengenalan Pascal

Sejarah Pascal
Pascal merupakan pengembangan dari bahasa ALGOL 60, bahasa pemrograman untuk sains komputasi. Tahun 1960, beberapa ahli komputer bekerja untuk mengembangkan bahasa ALGOL, salah satunya adalah Dr. Niklaus Wirth dari Swiss Federal Institute of Technology (ETH-Zurich), yang merupakan anggota grup yang membuat ALGOL. Tahun 1971, dia menerbitkan suatu spesifikasi untuk highly-structured language (bahasa tinggi yang terstruktur) yang menyerupai ALGOL. Dia menamainya dengan PASCAL (dari nama Blaise Pascal, ahli matematika&philosophi terkenal abad 17 dari Perancis). Pascal bersifat data oriented, yaitu programmer diberi keleluasaan untuk mendefinisikan data sendiri. Pascal juga merupakan teaching language (banyak dipakai untuk pengajaran tentang konsep pemrograman). Kelebihan yang lain adalah penulisan kode Pascal yang luwes, tidak seperti misalnya FORTRAN, yang memerlukan programmer untuk menulis kode dengan format tertentu.
Struktur Pascal
1. Bagian Judul Program
2. Blok Program

a. Bagian Deklarasi
– Deklarasi tipe data (TYPE)
– Deklarasi variabel (VAR)
– Deklarasi konstanta (CONST)
– Deklarasi label (LABEL)
– Deklarasi sub-program (PROCEDURE dan FUNCTION)
b. Bagian Program Utama Perintah-perintah atau Pernyataan
Struktur Program Pascal Paling Sederhana
begin
statement-statement;
end.

Ada kalanya Anda ingin mengulangi pernyataan yang sama lebih dari satu kali. Sebagai contoh misalkan Anda ingin mencetak kalimat STTI RESPATI sebanyak 10 kali, maka pernyataan yang yang mungkin Anda tulis seperti berikut ini :
Kode Program Keterangan
Begin
Writeln(‘STTI RESPATI STTI RESPATI ‘+
‘STTI RESPATI STTI RESPATI’+
‘STTI RESPATI STTI RESPATI’+
‘STTI RESPATI STTI RESPATI’+
‘STTI RESPATI STTI RESPATI’);
End. Awal program
Cetak string STTI RESPATI 10 x

Akhir program

Atau
Kode Program Keterangan
Begin
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
Writeln(‘STTI RESPATI’);
End. Awal program
Cetak STTI RESPATI 1x

Cetak STTI RESPATI 10x
Akhir program

Misalkan Anda disuruh mencetak kata STTI RESPATI sebanyak 1000x, Apa yang mesti Anda lakukan ? Apakah mengetik kata STTI RESPATI sebanyak 1000x ? Masalah di atas dapat diatasi dengan menggunakan pernyataan perulangan (loop) : FOR, WHILE atau REPEAT yang telah disediakan Pascal.

1. Pernyataan FOR
Pernyataan perulangan For digunakan untuk mengulangi dengan lompat-lompat satu. Lompatan bisa ke positip (nilai naik satu) ataupun negatip (nilai turun satu).
a. Pernyataan FOR Menaik
B.U : For := NilaiAwal To NilaiAkhir Do

Ket : For : kata cadang
Pengenal : pengenal yang telah dideklarasikan di bagian Var dan harus bertipe Integer (integer, byte, shortInt, word ataupun Longint)
Nilai Awal : Nilai Awal perulangan. Nilai awal dapat dalam bentuk ekspresi asal bernilai Integer. Bila Nilai Awal lebih besar dari Nilai Akhir maka pernyataan tidak akan dikerjakan.
Nilai Akhir : Nilai Akhir perulangan. Nilai akhir dapat dalam bentuk ekspresi asal bernilai Integer.
Pernyataan : Pernyataan yang akan diulang. Bila pernyataan lebih dari satu baris, maka pernyataan harus diawali kata cadang begin dan diakhiri kata cadang end.

Kasus I. Dari permasalahan sebelumnya, maka untuk mecetak STTI RESPATI sebanyak 10x dapat kita gunakan pernyataan FOR positip seperti kode berikut ini:
Kode Program Keterangan
Program CetakSTTI10x;
Uses Crt;
Var
L : Byte;
Begin
Clrscr;
For L:= 1 To 10 Do
Writeln(‘STTI RESPATI’);
Readln;
End. Judul program
Deklarasi unit crt
Deklarasi variabel

Awal program
Bersihkan layar output
Ulangi L mulai dari 1 s/d 10
Cetak STTI RESPATI
Tunggu penekanan tombol Enter
Akhir program

b. Pernyataan For Menurun
B.U : For := NilaiAwal DownTo NilaiAkhir Do

Ket : For : kata cadang
Pengenal : pengenal yang telah dideklarasikan di bagian Var dan harus bertipe Integer (integer, byte, shortInt, word ataupun LongInt)
Nilai Awal : Nilai Awal perulangan. Nilai awal dapat dalam bentuk ekspresi asal bernilai Integer. Bila Nilai Awal lebih kecil dari Nilai Akhir maka pernyataan tidak akan dikerjakan.
Nilai Akhir : Nilai Akhir perulangan. Nilai akhir dapat dalam bentuk ekspresi asal bernilai Integer.
Pernyataan : Pernyataan yang akan diulang. Bila pernyataan lebih dari satu baris, maka pernyataan harus diawali kata cadang begin dan diakhiri kata cadang end.

Kasus II. Dari permasalahan sebelumnya, maka untuk mecetak STTI RESPATI sebanyak 10x dapat kita gunakan pernyataan FOR negatip seperti kode berikut ini:
Kode Program Keterangan
Program CetakSTTI10x;
Uses Crt;
Type
Cacah = 1..10;
Var
L : Cacah;
Begin
Clrscr;
For L:= 10 DownTo 1 Do
Writeln(‘STTI RESPATI’);
Readln;
End. Judul program
Deklarasi unit crt
Deklarasi tipe

Deklarasi variabel

Awal program
Bersihkan layar output
Ulangi L mulai dari 10 s/d 1
Cetak STTI RESPATI
Tunggu penekanan tombol Enter
Akhir program

Kasus III. Anda disuruh memasukkan suatu Angka. Angka yang Anda masukkan menyatakan banyaknya karakter * yang akan dicetak.
Kode Program Keterangan
Program Cetak*;
Uses Crt;
Label
Ulangi;
Var
Cacah,L : LongInt;
Jawab : Char;
Begin
Ulangi:
Clrscr;
Write(‘Banyak karakter * yang dicetak : ‘);
Readln(Cacah);
For L:=1 To Cacah Do
Writeln(L,’*’);
Writeln;
Write(‘Cetak karakter Lagi : ‘);
Readln(Jawab);
IF Upcase(Jawab)=’Y’ Then Goto Ulangi;
End. Judul program
Deklarasi unit crt
Deklarasi label

Deklarasi variabel

Awal program
Label ulangi
Bershihkan layar output
Input Cacah

Ulangi mulai dari 1 s/d Cacah

Cetak baris baru

Input Jawab
Jika Jawab = Y locat ke label Ulangi
Akhir program

Kasus IV. Tabel di bawah ini adalah data penduduk pulau XXX mulai tahun 2000 s/d 2005.
Tahun Jumlah Penduduk
2000
2001
2002
2003
2004
2005 200000
230000
240000
250000
300000
350000

Anda disuruh untuk membuat diagram batang horizontal seperti gambar di bawah ini :

JUMLAH PENDUDUK PULAU XXX
THN. 2000 s/d 2005

Tahun
2000 : ░░░░░░░░░░░░░░░░░░░░
2001 : ░░░░░░░░░░░░░░░░░░░░░░░
2002 : ░░░░░░░░░░░░░░░░░░░░░░░░
2003 : ░░░░░░░░░░░░░░░░░░░░░░░░░
2004 : ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2005 : ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

Ket : ░ 10000 Jiwa

Langkah – Langkah penyelesaian kasus di atas dapat seperti berikut ini :
1. Mulai
2. I = 2000
3. Tentukan JlhPenduduk. Mis JlhPenduduk= 200000
4. Skala = JlhPenduduk Div 10000
5. For I:= 1 To Skala Do
Cetak ░
6. I = I +1
7. Jika I := NilaiAwal To NilaiAkhir Do
For :=NilaiAkhir DownTo NilaiAwal Do

2. For := NilaiAwal To NilaiAkhir Do
Begin
For :=NilaiAkhir DownTo NilaiAwal Do
Begin

End;

:= NilaiAwal To NilaiAkhir Do
Begin
For :=NilaiAkhir DownTo NilaiAwal Do
Begin

For := NilaiAwal To Nilai Akhir Do

End;

Do

Ket :
: ekspresi yang menghasilkan nilai boolean (true/false)
: pernyataan yang akan dikerjakan bila kondisi bernilai benar. Bila pernyataan lebih dari 1 baris, maka pernyataan tersebut harus diapit kata cadang begin dan end.

Kasus VI. Menampilkan bilangan genap atau ganjil dari 1 s/d 100.
Kode Program Keterangan
Program GenapGanjil;
Uses Crt;
Const
Ganjil =’Bilangan Ganjil 1 s/d 100’;
Genap=’Bilangan Genap 1 s/d 100’;
Var
I : Byte;
Jawab : Char;
Begin
Clrscr;
Jawab=’’;
While Not (Jawab In [‘P’,’p’,’L’,’l’]) Do
Begin
Write(‘Tampilkan Bilangan Gena[p]/Ganji[l] ? ’);
Readln(Jawab);
End;
If Upcase(Jawab)=’P’ Then
Begin
Writeln(Genap);
I:=1;
While I 0) Then
Write(I:5)
Inc(I);
End;
End;
End; Judul program
Deklarasi unit
Deklarasi konstanta

Deklarasi variabel

Awal program
Bersihkan layar output
Jawab = ‘’
Bila tidak Jawab bernilai P p L l maka
Awal blok while
Cetak string
Input jawab
Akhir blok while
Jika jawab diubah menjadi huruf besar nilainya P maka
Awal blok P
Cetak konstanta genap
I =1
Bila I Do
While Do
While Do

Ket :
: ekspresi yang menghasilkan nilai boolean (true/false)
: pernyataan yang akan dikerjakan bila kondisi bernilai benar. Bila pernyataan lebih dari 1 baris, maka pernyataan tersebut harus diapit kata cadang begin dan end.

Seperti nested for , maka dengan pernyataan while juga Pascal memungkinkan kita membuat nested while (while di dalam while). Penggunaan while di dalam while tergantung dari permasalahan yang dijumpai. Hal mendasar yang penting diingat bahwa while yang terdalam akan dikerjakan terlebih dahulu sampai selesai.

Kasus VII. Selama Anda tidak menekan suatu tombol, tampilkalah teks berjalan STTI RESPATI YOGYAKARTA Jurusan Sistem Informasi Dari Kanan Layar Ke Kiri Layar Output.
Kode Program Keterangan
Program TeksJalan;
Uses Crt;
Const
Teks =’STTI RESPATI Yogyakarta Jurusan Sistem Informasi’;
Selesai =’Tekan Sembarang Tombol –> Keluar’;
Var
I : 0..79;
J,PjgTeks : Byte;
Sem : String[100];
Begin
TextBackGround(Blue);
clrscr;
TextColor(white);
GotoXY(80-Length(Selesai),24);
write(Selesai);
PjgTeks:=Length(Teks);
While Not KeyPressed Do
Begin
J:=1; I:=79;
While Not KeyPressed Do
Begin
IF J

Until

Kasus VIII. Tentukanlah jumlah deret berikut ini :

Kode Program Keterangan
Program Deret1;
Uses crt;
Var
I : Byte;
Jlh : Real;
Begin
Clrscr;
Write(‘Masukkan N : ‘);
Readln(N);
I:=1;
Jlh:=0;
Repeat
Jlh:=Jlh+1/I;
Inc(I);
Until (I>N)
Writeln(‘Jumlah Deret Adalah : ‘,Jlh:8:4);
ReadKey;
End. Judul program
Deklarasi unit
Deklarasi variabel

Awal program
Bersihkan layar output
Cetak string
Masukkan nilai N
I =1
Jlh = 0
Ulangi
Jlh = jlh + 1/I
I = I + 1
Sampai nilai I > N
Cetak Jlh
Tunggu penekanan sembarang tombol
Akhir program

b. Repeat Di Dalam Repeat (Nested Repeat)
B. U : Repeat

Repeat

Until

Until

4. Gabungan For, While atau Repeat
Bentuk-bentuk penggabungan pernyataan For, While maupun Repeat harus mengikuti aturan dasar pada bahasan sebelumnya. Dengan demikian bila terdapat pernyataan For di dalam While maka harus jelas akhir dari pernyataan For tersebut. Berikut ini beberapa bentuk penggabungan pernyataan For, While maupun Repeat.
1. For := NAW To NAK Do
Begin
While Do
Begin

Repeat

Until
End;
End;

2. While Do
Begin
While Do
Begin
For := NAK DownTo NAW Do
Begin

Repeat

Until
End;
End;
End;

5. Beberapa Prosedur Yang Berkaitan Dengan Pernyataan Perulangan
keluar dari pernyataan perulangan tempat prosedur break berada
àa. Break
Pada keadaan normal, semua perulangan akan dikerjakan dari awal sampai akhir. Namun, bila suatu saat kita menginginkan mengakiri perulangan tersebut dapat digunakan prosedur break. Selain dari pada prosedur break ini sebenarnya kita juga dapat menggunakan pernyataan goto, tetapi penggunaan pernyataan ini tidak dianjurkan
Kode Program Keterangan
Program KeluarPaksa;
Uses crt;
Var
K,l : Byte;
Begin
For k:= 1 To 5 Do
Begin
For l:= 1 to k Do
Begin
If l = 3 then break;
Write(‘*’);
End;
Writeln;
End;
End. Judul program
Pengarah kompiler
Deklarasi variabel

Awal program
Ulangi k dari 1 s/d 5
Awal blok perulangan k
ulangi l dari 1 s/d k
Awal blok perulangan l
Jika l = 3 maka keluar dari blok perulangan l
cetak karakter * tanpa ganti baris
ganti baris
akhir blok perulangan l
akhir blok perulangan k
akhir program

kembali ke kondisi pernyataan berulangan tempat prosedur continue beradaàb. Continue
Kode Program Keterangan
Program KembaliKeKondisi;
Uses crt;
Var
K : Byte;
Begin
For k:= 1 To 100 Do
Begin
If (k mod 2 = 0) then continue;
Writeln(i:5);
End;
End. Judul program
Pengarah kompiler
Deklarasi variabel

Awal program
Ulangi k dari 1 s/d 100
Awal blok perulangan k
Jika K dibagi 2 sisa baginnya 0 (bil. Genap) maka kembali ke for k
Cetak I dengan lebar tempat 5 karakter
Akhir blok perulangan l
akhir program
Tugas

1. Buatlah program untuk menentukan deret fibonacci berikut ini :
1 1 2 3 5 8 13 21 …
2. Tentukanlah jumlah deret berikut ini dimana N = 100

3. Buatlah program dengan memanfaatkan perulangan untuk menampilkan sekilas info tentang STTI RESPATI Yogyakarta Jurusan Sistem Informasi. Program harus memberikan informasi yang jelas serta tampilan animasi yang baik. Program akan berhenti bila pengguna menekan tombol karakter B (Berhenti). Dan bila tidak ada tombol ditekan selama 5 detik maka program aktif kembali

Pada umumnya kode program akan dikerjakan mulai dari pernyataan ke 1 s/d pernyataan ke n. Namun dalam beberapa hal kode program akan dikerjakan bila syarat yang kita maksudkan terpenuhi.
Kode Program Umum Kode Program Bersyarat
Begin
Pernyataan 1
Pernyataan 2
Pernyataan 3
……
Pernyataan N
End. Begin
Pernyataan 1
IF Then Pernyataan 1
Pernyataan 2
……
Pernyataan N
End.

Untuk membentuk pernyataan bersyarat di kode program Pascal dapat digunakan pernyataan IF ataupun CASE.

1. Pernyataan Bersyarat IF
Statement bersyarat IF digunakan bila Anda ingin setiap syarat yang Anda tentukan diperiksa oleh compiler. Di dalam IF bisa juga terdapat IF yang lainnya, yang disebut IF bersarang (nested IF).

1.1. IF Then
Syarat digunakan untuk menentukan ekspresi yang Anda nyatakan.
àKet : Hasil dari ekspresi harus bernilai Boolean (True atau False). Di dalam ekspresi dapat digunakan operator relasional, logika, bitwise, pointer dan aritmatika.
Pernyataan yang akan dieksekusi. Bila pernyataan yang akan dieksekusi
à lebih dari satu baris, maka Anda harus mengawali pernyataan tersebut dengan kata cadang begin dan diakhiri kata cadang end.

Kasus I. Misalkan syarat kelulusan seorang mahasiswa bila IPK>2.5. Berikut ini adalah kode program untuk menentukan kelulusan mahasiswa tersebut.
Kode Program Keterangan
Program Kelulusan;
Var
Nim : String[9];
IPK : Real;
Begin
Write(‘Nim : ‘);readln(nim);
Write(‘IPK : ‘);readln(IPK);
IF (IPK>2.5) Then writeln (‘Lulus’);
End. Judul program
Deklarasi variabel

Awal program
Input Nim
Input IPK
Jika IPK > 2.5 maka akan menghasillan TRUE (Benar). Bila TRUE maka dicetak kata Lulus, jika tidak maka kata lulus tidak dicetak.
Program OK;
Begin
IF True Then
Begin
Writeln(‘Ok’);
Writeln(‘Trims’);
End.
End. Judul program
Awal program
Karena true maka
Mulai
Cetak OK
Cetak Trims
Selesai
Akhir program

1.2. IF Then Else
Syarat digunakan untuk menentukan ekspresi yang Anda nyatakan.
àKet : Hasil dari ekspresi harus bernilai Boolean (True atau False). Di dalam ekspresi dapat digunakan operator relasional, logika, bitwise, pointer.
Pernyataan yang akan dieksekusi. Bila pernyataan yang akan dieksekusi
à lebih dari satu baris, maka Anda harus mengawali pernyataan tersebut dengan kata cadang begin dan diakhiri kata cadang end.

Kasus II. Berikut ini adalah rumus untuk menentukan nilai akhir mata kuliah yang diampu seorang mahasiswa :
NA = (NT*30 + NM * 30 + NS * 40)/100
Selanjutnya nilai akhir mahasiswa tersebut dikonversi ke nilai huruf seperti berikut ini :
NA > 85, NH = A
75 85) Then
NH:=’A’
Else IF (NA>75) and (NA65) and (NA55) and (NA : ’);readln(Lagi);
If Upcase(Lagi)=’Y’ Then
Goto Ulangi;
End. Judul program
Deklarasi unit crt
Deklarasi tipe

Deklarasi konstanta

Deklarasi label

Dekalarasi variabel

Awal program
Label ulang

Hitung nilai akhir
Jika NA > 85 maka NH adalah A

Jika NA > 75 dan NA 65 dan NA 55 dan NA Then
IF Then

Else

IF Then
IF Then

Else

Else

IF Then
IF Then

Else IF Then

Else IF Then

Else

Else IF Then

Else IF Then

Else

Kasus III. Misalkan kita ingin mencari bilangan terbesar diantara tiga buah bilangan (A,B,C). Dengan menggunakan pernyataan IF, maka kode programnya dapat seperti berikut ini:
Kode Program Keterangan
{Tgl Dibuat 15 Oktober 2005}
Var
A,B,C : Real;
Begin
Write(‘Nilai A : ‘);readln(A);
Write(‘Nilai B : ‘);readln(B);
Write(‘Nilai C : ‘);readln(C);
IF (A>B) Then
IF (A>C) Then
Writeln (A:6:2,’Terbesar’)
Else
Writeln (C:6:2,’Terbesar’);
Else IF (B>C)
Writeln(B:6:2,’ Terbesar’)
Else
Writeln(C:6:2,’ Terbesar’)
Readln;
End. Komentar
Deklarasi variabel

Awal program
Input A
Input B
Input C
Jika A > B maka
Jika A > C maka
A Terbesar
Jika A C maka
Cetak B Terbesar
Jika B Of : End.
Case Of
Syarat1 : Pernyataan1
Syarat2 : Pernyataan2
Syarat3 : Pernyataan3
………
SyaratN : PernyataanN
End.
Ekspresi harus bertipe ordinal (Integer (Integer,
àKet : Ekspresi ShorInt, Byte, LongInt, Word), char, set, enumerated, subrange). Operator, fungsi maupun prosedur dapat Anda gunakan pada ekspresi asalkan bertipe ordinal.
nilai dari ekspresi yang memenuhi. Nilai dapat dalam bentuk
àSyarat subrange, terbilang, set. Bila nilai ataupun himpunan nilai lebih dari satu maka antara nilai harus dipisahkan oleh koma.
Bila pernyataan lebih dari satu, maka awal pernyataan
àPernyatan tersebut harus didahului kata cadan begin dan diakhiri kata cadang end.

Kasus IV. Misalkan kita ingin membuat program pascal menentukan kelulusan mahasiswa. Syaratlulus bila Jumlah SKS yang telah ditempuh lebih besar daripada 120, bila tidak maka mahasiswa tersebut tidak lulus.
Kode Program Keterangan
Program Nilai;
Uses Crt;
Type
RangeSKS = 0..160;
Const
Sekolah=’STTI RESPATI’;
Jurusan =’Jurusan Sistem Informasi’;
Label
Ulangi;
Var
Nim : String[9];
Ket : String[12];
JlhSks : RangeSks;
Lagi : Char;
Begin
Ulangi :
Clrscr;
Write(Sekolah);
Write(Jurusan);writeln;
Write(‘Nim Mahasiswa : ‘);readln(Nim);
Write(‘SKS telah ditempuh : ‘);readln(JlhSks);
Case JlhSks Of
120..160 : Ket :=’Lulus’
0..120 : Ket :=’Tidak Lulus’;
End;
Writeln(‘Mahasiswa Dinyatakan : ‘,Ket);
Writeln;
Write(‘Coba Lagi : ’);readln(Lagi);
If Upcase(Lagi)=’Y’ Then
Goto Ulangi;
End. Judul program
Deklarasi unit crt
Deklarasi tipe

Deklarasi konstanta

Deklarasi label

Deklarasi variabel

Awal program
Label Ulangi
Bersihkan layar output

Bila JlhSks adalah
120 s/d 160 maka Ket = Lulus
0 s/d 120 maka Ket= Tidak Lulus
Akhir Case
Cetak Ket
Cetak baris kosong
Input Lagi
Jika Lagi = Y maka
lompat ke label Ulangi
Akhir program

Kasus V. Sebuah Toserba menawarkan berbagi barang dagangan, mulai dari baju, celana, tas, peralatan rumah tangga, peralatan kantor. Untuk menarik pelanggan, manajemen perusahaan menetapkan kebijakan potongan harga sebagai berikut :
Total Harga Potongan
>5000000 15%
3 jt s/d 5 jt 10%
1 jt s/d 3 jt 5%
Di bawah 1 jt 0%
Anda disuruh untuk membuat program pascal untuk menentukan jumlah harga yang harus dibayar tiap pelanggan berdasarkan total belanjanya.
Program Nilai;
Uses Crt;
Const
NamaToko=’TOSERBA ISTIMEWA;
Alamat =’Jln. Kaliurang;
Label
Ulangi;
Var
KdPelanggan : String[9];
Ket : String[12];
Lagi : Char;
TotalHarga, Disc,JumlahBayar : Real;
Begin
Ulangi :
Clrscr;
Write(NamaToko);
Write(Alamat);writeln;
Write(‘Kode Pelanggan : ‘);readln(kdpelanggan);
Write(‘Total Harga : ‘);readln(TotalHarga);
Case TotalHarga Of
5000001..15000000 : Disc:=0.15;
3000001..5000000 : Disc:=0.1;
1000001..3000000 : Disc:=0.05;
0..1000000 : Dics:=0;
TotalBayar:=TotalHarga -TotalHarga*Disc;
Writeln(‘Total Bayar : ‘,TotalBayar:12:4);
Writeln;
Write(‘Coba Lagi : ’);readln(Lagi);
If Upcase(Lagi)=’Y’ Then
Goto Ulangi;
End. Judul program
Deklarasi unit crt
Deklarasi konstanta

Deklarasi label

Deklarasi variabel

Awal program
Label ualngi
Bersihkan layar output

Bila TotalHarga adalah
5000001 s/d 15000000 maka Disc=0.15;
3000001 s/d 5000000 maka Disc=0.1;
1000001 s/d 3000000 maka Disc=0.05;
0 s/d 1000000 maka Dics=0;
Hitung TotalBayar
Cetak TotalBayar
Cetak baris baru
Input lagi
Jika lagi =Y maka
Lompat ke label ulangi
Akhir program

2.2. Case Of : Else End.
Case Of
Syarat1 : Pernyataan1
Syarat2 : Pernyataan2
Syarat3 : Pernyataan3
……
SyaratN : PernyataanN

Else
PernyataanN+1
End.

Kode program berikut ini adalah masih menggunakan kasus V, hanya untuk kondisi yang terakhir digunakan pernyataan ELSE.
Program Nilai;
Uses Crt;
Const
NamaToko=’TOSERBA ISTIMEWA;
Alamat =’Jln. Kaliurang;
Label
Ulangi;
Var
KdPelanggan : String[9];
Ket : String[12];
Lagi : Char;
TotalHarga, Disc,JumlahBayar : Real;
Begin
Ulangi :
Clrscr;
Write(NamaToko);
Write(Alamat);writeln;
Write(‘Kode Pelanggan : ‘);readln(kdpelanggan);
Write(‘Total Harga : ‘);readln(TotalHarga);
Case TotalHarga Of
5000001..15000000 : Disc:=0.15;
3000001..5000000 : Disc:=0.1;
1000001..3000000 : Disc:=0.05;
Else
Dics:=0;
TotalBayar:=TotalHarga -TotalHarga*Disc;
Writeln(‘Total Bayar : ‘,TotalBayar:12:4);
Writeln;
Write(‘Coba Lagi : ’);readln(Lagi);
If Upcase(Lagi)=’Y’ Then
Goto Ulangi;
End. Judul program
Deklarasi unit crt
Deklarasi konstanta

Deklarasi label

Deklarasi variabel

Awal program
Label ualngi
Bersihkan layar output

Bila TotalHarga adalah
5000001 s/d 15000000 maka Disc=0.15;
3000001 s/d 5000000 maka Disc=0.1;
1000001 s/d 3000000 maka Disc=0.05;
Kondisi di atas tidak terpenuhi maka
Dics=0;
Hitung TotalBayar
Cetak TotalBayar
Cetak baris baru
Input lagi
Jika lagi =Y maka
Lompat ke label ulangi
Akhir program

2.3. Case Bersarang (Nested Case)
Case Of
Syarat1 : Case Of
Syarat1 : Pernyataan1
Syarat2 : Pernyataan2
Syarat3 : Pernyataan3
……
SyaratN : PernyataanM
Else
PernyataanM+1
End;
Syarat2 : Pernyataan2
Syarat3 : Pernyataan3
……
SyaratN : PernyataanN
Else
PernyataanN+1
End.

Kasus VII. Tentukan banyaknya alphabet, huruf hidup (vokal), huruf mati(konsonan), spasi, enter, karakter spesial dari suatu kalimat yang Anda masukkan dari keyboard.

Kode Program Keterangan
{Sekolah : STTI Respati
Tgl : 15 Oktober 2005}
Program StatistikKarakter;
Uses Crt;
Type
PjngKalimat = Sting[200];
Label
Ulangi, Cetak;
Var
JlhHuruf, JlhVokal,JlhKonsonan, JlhSpasi,
JlhEnter, JlhSpesial,JlhLain : Byte;
Karakter : Char;
Panjang : Byte;
Begin
Clrscr;
Writeln(‘Ketik # untuk Keluar’);
Ulangi :
Read(Karakter);
Case Karakter Of
‘A’..’Z’,’a’..’z’ : Case Upcase(Karakter) OF
‘A’,’E’,’I’,’O’,’U’ : Inc(JlhVokal)
Else
Inc(JlhKonsonan);
End; {Akhir Case}
#32 : Inc(JlhSpasi);
#13 : Inc(JlhEnter);
‘~’,’!’,’@’,’#’,$’,’%’,’^’,’&’,’*’,’(‘,’)’,’_’,’+’,
‘|’,’{‘,’}’,’:’,’”’,’’,’?’ : Inc(JlhSpesial)
Else
Inc(JlhLain);
End; {Akhir Case}
Inc(JlhKarakter);
IF karakter =’#’ Then Goto Cetak;
Goto Ulangi;
Cetak:
Write(‘Jumlah Karakter : ‘,JlhKarakter);
Write(‘Jumlah Vokal : ‘,JlhVokal);
Write(‘Jumlah Konsonan :’,JlhKonsonan);
Write(‘Jumlah Spasi :’,JlhSpasi);
Write(‘Jumlah Enter :’,JlhEnter);
Readln;
End. Komenter

Judul program
Deklarasi unit crt
Deklarasi tipe

Deklarasi label

Deklarasi variabel

Awal program

Label Ulangi
Baca karakter
Bila Karakter adalah
Alphabet maka
Bila alphabet huruf hidup maka Inc(JlhVokal)
Bila alphabet konsonan maka Inc(jlhKonsonan)

Spasi maka Inc(jlhSpasi)
Enter maka Inc(JlhEnter)
Spesial maka Inc(Spesial)

Jika kondisi di atas tidak terpenuhi maka
Inc(JlhLain)

Inc(JlhKarakter) sama dengan Jlhkarakter:=JlhKarakter+1;
Jika karakter # maka loncat ke cetak
Jika tidak loncat ke Ulangi
Label cetak
Cetak JlhKarakter
Cetak JlhVokal
Cetak JlhKonsonan
Cetak JlhSpasi
Cetak JlhEnter
Tunggu penekanan tombol enter
Akhir program

Kasus VIII. Menggerakakan karakter * di layar output dengan tombol panah atas, bawah, kiri, kanan, home dan end.

Kode Program Keterangan
{Program Menggerakakan Karakter * Dengan :
Panah Atas : Satu Baris Ke Atas
Panah Bawah : Satu Baris Ke Bawah
Panah Kiri : Satu Karakter Ke Kiri
Panah Kanan : Satu Karakter Ke Kanan
Oleh : Betra Ginting
Sekolah : STTI Respati Yogyakarta
Tanggal : 15 Oktober 2005}.

Program Gerak;
Uses Crt;
Label
Ulangi;
Const
PA=#72;
PB=#80;
PKi=#75;
PKa=#77;
Awal=#71;
Akhir=#79;

var
Tombol,Kar : Char;
Brs,Klm : Byte;
Begin
TextBackGround(Green);
clrscr;
{Buat Window Status}
TextBackGround(White);
TextColor(Red);
Window(1,25,80,25);
Clrscr;
write(’Tombol : Panah Atas, Bawah, Kiri, Kanan, Home dan End | Q->Exit’);
{Lettakkan Karakter Di Tengah-Tengah Layar}
TextBackGround(Blue);
TextColor(Yellow);
Window(1,1,80,24);
Clrscr;
Klm:= 80 Div 2;
Brs:= 25 Div 2;
gotoxy(Klm,Brs);write(’*’);
Ulangi:
Kar:=ReadKey;
IF Upcase(Kar)=’Q’ Then Exit;
Case Kar OF
#0 :Begin
Kar:=ReadKey;
Case Kar OF
PA : Begin
GoToXy(Klm,Brs);Delline;
Dec(Brs);
IF Brs24 Then Brs:=1;
GotoXy(Klm,Brs);write(’*’);
End;
PKi : Begin
GoToXy(Klm,Brs);Delline;
Dec(Klm);
IF Klm80 Then Klm:=1;
GotoXy(Klm,Brs);write(’*’);
End;
Awal : Begin
GoToXy(Klm,Brs);Delline;
Klm:=1;
GotoXy(Klm,Brs);write(’*’);
End;
Akhir : Begin
GoToXy(Klm,Brs);Delline;
Klm:=80;
GotoXy(Klm,Brs);write(’*’);
End;
End;
End;
End;
Goto Ulangi;
End. Komentar

Judul program
Deklarasi unit crt
Deklarasi label

Deklarasi konstanta
#72 kode ASCII extended untuk panah atas
#80 kode ASCII extended untuk panah bawah
#75 kode ASCII extended untuk panah kiri
#77 kode ASCII extended untuk panah kanan
#71 kode ASCII extended untuk home
#79 kode ASCII extended untuk end

Deklarasi variabel

Awal program
Warna layar belakang hijau
Bersihkan layar output

Buat window
Bersihkan window

Buat window
Bersihkan layar
Klm = 80 div 2 = 40
Brs = 25 div 2 = 12
Cetak karakter * di tengah-tengah layar
Label ulangi
Baca Satu Karakter Tetapi Karakter Tidak Ditampilkan
Jika tombol terbaca Q maka program berhenti
Bila tombol adalah
Extended Code (Kode Kunci Perluasan) maka
Ambil karakter kedua
Bila kode scan (scan kode) adalah
Panah atas
hapus karakter di posisi klm,baris
Brs:=Brs-1
Jika baris 24 maka baris = 1
Cetak karakter di kolom,baris baru

Panah kiri
hapus karakter di posisi klm,baris
klm:=klm-1
Jika klm 80 maka klm = 1
Cetak karakter di kolom,baris baru

Home
hapus karakter di posisi klm,baris
klm:=1
Cetak karakter di klm,baris baru

End
hapus karakter di posisi klm,baris
klm:=80
Cetak karakter di klm,baris baru

Loncat ke label Ulangi
Akhir program

Anda juga dapat menggabung pernyataan IF dengan pernyataan CASE, asalkan pernyataan-pernyataan yang dibentuk tidak bertentangan dengan aturan yang telah ada. Gabungan pernyataan IF dan CASE dapat saja berbentuk seperti di bawah ini :

IF Then
Case of
Nilai1 :
Nilai2 :
…………………………
NilaiN :
End;
Else IF Then
Case of
Nilai :
Nilai2 :
…………………………
NilaiO :
Else
PernyataanO+1
End
Else

TUGAS :
1. Buatlah program untuk menggerakkan karakter * mengelilingi layar monitor Anda mulai dari sudut kiri atas, kemudian ke kanan, kebawah dan kembali ke kiri atas. Bila anda menekan tombol Spasi menandakan stop, C lanjut dan Q keluar dari program.

2. Buatlah program untuk menggerakkan teks :
§ STTI RESPATI YOGYAKARTA dari kiri kenanan
§ JURUSAN SISTEM INFORMASI dari kanan ke kiri
§ SEMESTER III dari kiri kekanan
§ 2005/2006 dari kanan ke kiri
Secara bersamaan.

Extended code (Kode Kunci Perluasan) adalah kode yang dibangkitkan oleh sebuah atau lebih kunci. Kode diawali oleh karakter Null (#0) dan karakter kedua adalah scan kode dari karakter tersebut. Berikut ini adalah daftar beberapa kode kunci perluasan:
Kode Fungsi
15
16-25
30-38
44-50
59-68
71
72
73
75
77
79
80
81
82
83 Shift-Tab
Alt+ [Q,W,E,R,T,Y,U,I,O,P]
Alt + [A,S,D,F,G,H,J,K.L
Alt + [Z,X,C,V,B,N,M]
F1,F2,F3,F4,F5,F6,F7,F8,F9,F10
Home
Panah Atas
PgUp
Panah Kiri
Panah Kanan
End
Panah Bawah
PgDn
Ins
Del

3.1. Ciri Program Komputer
Umumnya setiap program komputer memiliki ciri-ciri berikut ini :
• dijalankan secara berurutan (sequence) dari atas ke bawah (awal dan akhir)
• memiliki pernyataan bersyarat (IF …. Then, IF .. Then .. Else…, Case… OF) dan
• memiliki pernyataan berulangan (For… Do, While….Do, Repeat … Until)

Untuk membentuk ke tiga syarat tersebut program memiliki tahap-tahap :
• Input
• Proses
• Output
Sistem Kerja Komputer Sistem Kerja Program

Anda perhatikan kembali modul I hal 1, diagram alir (flow chart) menjumlahkan dua buah bilangan seperti gambar di bawah ini :

Program Menjumlahkan(A,B);
Var
A, B : Integer;
Begin
A:=5;
B:=15;
C:=A+B;
Writeln(C);
End.

3.1. Kode Program dan Flow Chart Menjumlahkan Dua Buah Bilangan Integer
3.2. Deklarasi
Di modul II kita telah mempelajari pengenal (identifier). Mengapa kita mesti menggunakan pengenal ? Karena program Pascal mewajibkan kita mendeklarasikan pengenal sebelum digunakan. Pengenal dideklarasikan (dinyatakan) dibagian mana saja ? Pengenal dapat kita nyatakan di ketiga blok program pascal, yaitu : bagian judul, deklarasi, dan pernyataan.
Baiklah, untuk lebih memahami kapan harus mendeklarasikan suatu pengenal kita ambil contoh menghitung nilai akhir seorang mahasiswa, yang mana nilai akhir dinyatakan dengan rumus:
NA = ((3*NT+3*NM+4*NS)/100), dimana NA : Nilai Akhir
NT : Nilai Tugas
NM : Nilai Mid
NS : Nilai Semester
Menurut Anda, kira-kira apa yang harus kita inputkan untuk mendapatkan nilai akhir seorang mahasiswa ? Ya, jawaban yang pasti adalah Nilai Akhir, Nilai Tugas dan Nilai Mid. Dan Anda mungkin bertanya lagi apakah Nama, Nim, Alamat, Nama Orang Tua, Asal SMA, E-Mail dari mahasiswa tersebut tidak perlu diinput ? Bisa saja. Data-data pendukung tersebut bisa saja digunakan, tergantung dari informasi yang ingin kita sampaikan kepada pengguna/pembaca program kita. Misalkan untuk kasus di atas data nim ataupun ditambah Nilai Tugas, Nilai Mid, Nilai Semester dan Nilai Akhir mungkin sudah cukup. Kemudian apakah data Nilai Akhir tidak perlu diinput ? Tidak. Bila Nilai Akhir Anda input, maka sebenarnya fungsi komputer untuk membantu mempercepat pengolahan data tidak Anda manfaatkan denga benar. Lagi pula berdasarkan rumus, bahwa Nilai akhir merupakan perhitungan dari ketiga nilai input. Untuk itu, kita gunakan komputer untuk melakukan perhitungan tersebut. Namun yang jelas walaupun Nilai akhir tidak diinput, jika dia digunakan sebagai penampung hasil perhitungan, maka Nilai Akhir tersebut juga harus dideklarasikan.

3.2.1. Deklarasi Variabel
Data yang Anda inputkan mungkin puluhan, ratusan bahkan ribuah mahasiswa dengan menggunakan program yang sama. Karena tiap data mahasiswa selalu berubah, maka pengenal untuk data mahasiswa tersebut harus Anda deklarasikan di bagian Var (Variabel).
Deklarasi Variabel diletakkan setelah judul program. Bila terdapat pernyataan Uses maka deklarasi variabel juga diletakkan setelah deklarasi Uses (unit). Selain dari pada kedua aturan sebelumnya deklarasi variabel dapat Anda ubah-ubah posisinya dengan deklarasi constata, type, label, prosedur dan fungsi.
Berikut ini adalah kode program menghitung nilai akhir mahasiswa yang pengenalnya kita deklarasikan di bagian var (variabel) karena nilai pengenal tersebut akan berubah-ubah selama program berjalan (run).
Cara menyatakan pengenal di bagian Var adalah sebagai berikut : bila pengenal lebih dari satu maka antar pengenal harus dipisahkan oleh koma diikuti, kemudian diikuti karakter titik dua, tipe data dan harus diakhiri dengan karakter titik koma.
Kode Program Keterangan
{Program Hitung Nilai Akhir
Nama File : ProgNA
Oleh : Betra Ginting
Nim : 08133245
Tgl : 13 Oktober 2005
Sekolah : STTI Respati}

Program HitungNilaiAkhir;
Var
Nim : String[9];
Nama : String[25];
NT, NM, NS, NA : Real;
Begin
Write(‘Nim : ‘);readln(Nim);
Write(‘Nama : ‘);readln(Nama);
Write(‘Nilai Tugas : ‘);readln(NT);
Write(‘Nilai Mid : ‘);readln(NT);
Write(‘Nilai Semester : ‘);readln(NT);
NA:=((3*NT+3*NM*4*NS)/100);
Writeln(‘Nilai Akhir : ‘,NA);
End. Setiap karakter diantara kurung kurawal buka dan kurung kurawal tutup dianggap komentar. Komentar tidak diterjemahkan oleh penterjemah (compiler) pascal.

Judul program
Deklarasi variabel
Nim dengan tipe string dan panjang max.9 karakter
Nama dengan tipe string dan pajang max 25
NT, NM, NS, NA bertipe real (bilangan desimal)

Masukkan data Nim
Masukkan data Nama
Masukkan nilai Tugas
Masukkan nilai Mid
Masukkan nilai Tugas
Hitung Nilai Akhir
Cetak nilai akhir.

Gambar 3.2. Kode Program Menentukan Nilai Akhir-1

Di atas telah kita nyatakan bahwa, apakah perlu memasukkan data Nim dan Nama dala kode program ? Coba kita deklarasi Nim dan nama beserta input datanya di blok pernyataan, maka kode program sebelumnya akan terlihat seperti di bawah ini :

Kode Program
Keterangan
{Program Hitung Nilai Akhir
Nama File : ProgNA
Oleh : Betra Ginting
Nim : 081332445
Tgl : 13 Oktober 2005
Sekolah : STTI Respati}

Program HitungNilaiAkhir;
Var
NT, NM, NS, NA : Real;
Begin
Write(‘Nilai Tugas : ‘);readln(NT);
Write(‘Nilai Mid : ‘);readln(NT);
Write(‘Nilai Semester : ‘);readln(NT);
NA:=((3*NT+3*NM*4*NS)/100);
Writeln(‘Nilai Akhir : ‘,NA);
End. Setiap karakter diantara kurung kurawal buka dan kurung kurawal tutup dianggap komentar. Komentar tidak diterjemahkan oleh penterjemah (compiler) pascal.

Judul program
Deklarasi variabel
NT, NM, NS, NA bertipe real (bilangan desimal)

Masukkan nilai Tugas
Masukkan nilai Mid
Masukkan nilai Tugas
Hitung Nilai Akhir
Cetak nilai akhir.

Gambar 3.3. Kode Program Menentukan Nilai Akhir-2

Dimana letak perbedaan antara Gambar 3.3 dan Gambar 3.3 yang Anda perolah ? Kode program mana yang lebih jelas memberikan informasi ? Apakah kita juga perlu memasukan data orang tua, asal SMA ?
Bagaimana kalau nilai tugas tidak diinput ? Bila Nilai Akhir diinput apakah ada masalah ?
Bila nilai tugas tidak diinput tentu saja program yang kita buat salah, karena nilai tugas perlu diinput untuk tiap orang mahasiswa. Bila nilai akhir diinput tentu saja tidak masalah, tetapi program Anda tentu tidak efektif, karena Anda telah menyia-nyiakan kemanfaatan dari komputer, yakni : pengolahan data.

3.2.2. Deklarasi Konstanta
Bila suatu saat Anda ingin agar pengenal yang Anda deklarasikan tidak berubah-ubah selama program dijalankan (run), maka pengenal tersebut lebih baik Anda deklarasikan di bagian Const (konstanta). Kita ambil contoh nilai π (phi) = 3.14. Misalkan kita ingin menghitung keliling dan luas suatu lingkaran, maka rumus yang digunakan adalah :
K = 2πr
L = π r2, dimana K : Keliling lingkaran
L : Luas Lingkaran
π : nilai phi = 3.14 r
r : jari-jari lingkaran

Menurut Anda apa yang mesti kita input ? mungki saja jawaban Anda adalah phi dan jari-jari. Jawaban tersebut memang masuk akal, tetapi karena nilai phi telah kita ketahui adalah nilai konstata (tetap), maka nilai phi tersebut tidak perlu lagi kita input sewaktu program berjalan (run). Dengan demikian phi kita nyatakan di deklarasikan Const (konstata).
Deklarasi Const Anda deklarasikan setelah judul program bila tidak terdapat deklarasi Uses. Bila terdapat deklarasi Uses, maka deklarasi Const harus Anda lettakkan setelah dekalarasi Uses. Setelah kedua aturan urutan deklarasi yang lainnya (variabel, type, prosedur, fungsi, label) tidak menjadi permasalahan.
Bila dalam deklarasi variabel pengenal lebih dari satu dapat memiliki tipe yang sama, maka dalam deklarasi konstata diwajibkan bahwa hanya satu pengenal mewakili satu nilai. Nilai yang diwakili konstata dapat dalam bentuk ekspresi karena ekspresi menghasilkan nilai.
Deklarasi konstanta ditandai dengan kata cadang Const diikuti oleh pengenalnya kemudian tanda sama dengan dan nilai ataupun ekspresi. Berikut ini adalah kode program untuk menghitung keliling dan luas dari lingkaran.

Kode Program Keterangan
Program HitungKelilingDanLuasLingkaran;
Uses crt;
Const
Phi = 3.14;
Var
Jari2,K,L : Real;
Begin
Clrscr;
Write(‘Jari – Jari Lingkaran : ‘);readln(Jari2);
K:=2*phi*Jari2;
L:=phi*Jari2*Jari;
Writeln(‘Keliling Lingkaran : ‘,K);
Writeln(‘Luas Lingkaran : ‘,L);
Readln;
End. Judul program
Deklarasi unit crt (chatode ray tube)
Deklarasi konstata phi = 3.14

Deklarasi variabel

Mulai
Prosedur Clrscr yang terdapat di dalam unit Crt. Fungsinya untuk membersihkan output. di layar.
Masukkan nilai jari-jari
Hitung keliling
Hitung luas
Cetak keliling lingkaran
Cetak luas lingkaran
Readlan adalah suatu prosedur. Prosedur ini terdapat di dalam unit system. Fungsinya adalah menunggu penekanan tombol Enter.
Akhir
Gambar 3.4. Kode Program Menghitung Keliling dan Luas Lingkaran

3.2.3. Deklarasi Label
Aturan nomor satu dari ciri program adalah bahwa urutan program harus dari atas ke bawah, namun dalam keadaan tertentu ciri tersebut dapat kita langgar (mis: untuk kasus keluar dari perulangan terdalam dalam suatu perulangan dalam perulangan / nested loop).
Pada saat masa awal berkembangnya pemrograman tingkat tinggi sekitar tahun 1970 (seperti : Basic, Cobol, Fortran) masih banyak menggunakan statement goto (loncat) ke suatu nomor statement yang lainnya. Lompatan ke suatu nomor tidak dibatasi. Karena keleluasaan ini dalam perawatannya banyak memakan waktu karena untuk penganalisaannya membutuhkan ketelitian. Coba Anda perhatikan statement berikut ini :

Kode Program Qbasic Output Keterangan
5 print “Mulai”
10 A = 5
15 B = 10
20 Goto 35
25 print C,“Selesai”
30 End
35 C = A + B
40 Goto 25 5
10
15
35

25

30 Cetak mulai
Nilai A = 5
Nilai B = 10
Lompat ke baris 35
Hitung nilai C = A+B (C = 5 + 10, C = 15)
Lompat ke baris 25
Cetak C dan string Selesai
Selesai

Gambar 3.5. Kode Program Label Dengan QBasic (Quick Basic)

Hal seperti di atas juga bisa kita lakukan di program Pascal, tetapi dengan syarat nomor lompatan (label) harus kita deklarasikan terlebih dahulu setelah kata Label diikuti oleh pengenal label. Pengenal label dapat dalam pengenal diawali huruf ataupun angka (pengecualian ini hanya berlaku untuk pengenal label). Angka yang dapat Anda tentukan bagi pengenal angka maksimum dapat terdiri dari 4 digit (9999).
Deklarasi Label harus dideklarasikan setelah deklarasi setelah judul program bila Ada atau setelah dekalrasi Uses (unit) diikuti oleh pengenal. Bila pengenal label lebih dari satu, maka antara pengenal tersebut harus ada tanda koma. Label tidak memiliki tipe.
Bila setelah judul program atau deklarasi unit antara label dengan deklarasinya lainnya (var, fungsi, prosedur, constanta, type) dapat Anda tukar-tukar.
Kode program dengan Qbasic di atas akan kita ubah ke program Pascal, seperti di bawah ini.

Kode Program Keterangan
Program Lompat2;
Uses Crt;
Label
Awal,Akhir,35,25;
Var
A, B : Integer;
Begin
Clrscr;
Awal :
writeln(‘Mulai’);
A:=5;
B:=10;
Goto 35;
25 :
Writeln(C,’Selesai’);
Exit;
35 :
C:=A+B;
Goto 25;
End. Judul Program
Deklarasi Unit Crt
Dekalrasi Label

Deklarasi Variabel

Mulai
Prosedur Clrscr yang terdapat di dalam unit Crt. Fungsinya untuk membersihkan output. di layar.
Label Awal
Cetak string mulai
Nilai A = 5
Nilai B = 10
Loncat Ke Label 35
C= A+ B (C = 5 + 10, C = 15)
Loncat ke Label 25
Cetak C (15) dan string Selesai
Exit adalah prosedur yang fungsinya untuk keluar dari blok program terdalam (begin .. end atau prosedur atau fungsi)

Gambar 3.6. Kode Program Contoh Deklarasi Label

Apa kesimpulan Anda tentang program 3.6. ? Coba Anda bandingkan dengan kode program 3.1. !. Kesimpulan Anda …?

3.2.4. Deklarasi Type
Pascal mengizinkan Anda untuk membuat tipe data yang baru. Untuk melakukan hal tersebut dapat Anda lakukan di bagian deklarasi Type. Tipe baru yang Anda nyatakan di bagian Type, selanjutnya suatu pengenal dengan tipe baru tersebut dapat Anda nyatakan di bagian konstanta, variabel, prosedur, dan fungsi.
Kode Program Dengan Deklarasi Type Keterangan
Program InputUmur;
Type
BatasUmur = 1..125;
Var
Umur : BatasUmur;
Begin
Write(‘Masukkan Umur Anda : ‘);
Readln(umur);
End. Judul program
Deklarasi Type denga nama pengenal BatasUmur dan batasan nilai yang dapat dimuatnya 0 s/d 125
Deklarasi variabel dengan nama pengenal Umur dengan tipe data BatasUmur, berarti pengenal Umur dapat menampung data antara 0 s/d 125.
Kode Program Dengan Deklarasi Variabel Keterangan
Program InputUmur;
Var
Umur : ShortInt;
Begin
Write(‘Masukkan Umur Anda : ‘);
Readln(umur);
End. Judul program
Deklarasi variabel Umur dengan tipe shorInt. Tipe ShortInt dapat menampung data antara -127 s/d +128. Anda perhatikan bahwa pengenal umur dapat menerima bilangan negatif, sedangkan seperti kita ketahui umur seseorang haruslah lebih besar dari 1. Memang kode program ini tidak salah hanya saja kurang tepat.
Kode Program Deklarasi Type Keterangan
Type
Rumah = (Mewah, Menengah, RS, RSS);
Phiku = 3.14;
Nilai = 0..100;
Const
Phi = Phiku;
Var
JenisRumah : Rumah;
NilaiUjian : Nilai;
Begin
Writeln(Ord(Menengah));
Writeln(Phiku);
NilaiUjian := 70;
Writeln(NilaiUjian);
End. Deklarasi Type
Tipe data terbilang (enumerated)
Tipe data bilangan desimal (real)
Tipe dengan jenis data subjangkauan (subrange)
Kode Program Deklarasi Type Keterangan
Type
Mahasiswa = Record
Nim : String[9];
Nama : String[25];
IPK : Real;
End;
Var
DafMahasiswa : Mahasiswa;
Begin
Mahasiswa.Nim:=’08122456’;
Mahasiswa.Nama:=’Esron Barus’;
Mahasiswa.IPK:=2.75;
Writeln(Mahasiswa.Nim,Mahasiswa.Nama,
Mahasiswa.IPK);
Readln;
End. Deklarasi Type
Tipe data rekord
Field nim dengan tipe string
Field nama dengan tipe string
Field ipk dengan tipe real

Deklarasi variabel DafMahasiswa dengan tipe Mahasiswa.

Data field record dimasukkan dengan mengetikkan terlebih dahulu pengenal record diikuti titik dan field.

Gambar 3.7. Beberapa Contoh Penggunaan Deklarasi Type

3.2.5. Deklarasi Prosedur
Clrscr (Clear Screen) adalah salah satu controh prosedur yang telah disediakan oleh Pascal (built in), yang gunakan untuk memebersihkan output di layar dan meletakkan posisi kursor di absis (X) 0 dan ordinat (Y) 0. Prosedur clrscr; merupakan salah satu contoh prosedur yang tidak memiliki parameter (nilai yang dilewatkan ke prosedur tersebut), namun adakalanya bahwa prosedur memiliki parameter (nilai yang mesti dinyatakan pada saat pemanggilan prosedur tersebut).
Prosedur dapat anda deklarasikan setelah judul program ataupun setelah deklarasi unit. Deklarasi prosedur diawali kata cadang procedure diikuti oleh pengenal prosedur bila tidak Ada parameter maka setelah pengenal Anda cukup menambang karakter titik koma. Bila parameter dibutuhkan maka setelah pengenal prosedur Anda harus memulainya dengan kurung buka dan dikuti parameter beserta tipenya dan diakhiri dengan kurung tutup. Setelah deklarasi judul prosedur berikutnya pernyataan yang Anda tulis di harus diantara begin dan end, layaknya seperti blok pernyataan. Di dalam prosedur dapat juga anda dekalrasikan prosedur, yang disebut dengan prosedur tersarang (nested procedure).

Berikut adalah contoh prosedur tanpa parameter.
Contoh prosedur tanpa parameter Keterangan
Program CetakUcapan;
Uses crt;
Procedure Cetak;
Begin
Writeln(‘=========================’);
Writeln(‘Selamat Datang di STTI Respati’);
Writeln(‘=========================’);
End;
Begin
Clrscr;
Cetak;
Cetak;
Cetak;
Cetak;
End. Judul program
Deklarasi unit CRT
Deklarasi prosedur tanpa parameter
Awal prosedur
Cetak string
Cetak string
Cetak string
Akhir prosedur
Awal program utama
Bersihkan layar
Panggil prosedur cetak
Panggil prosedur cetak
Panggil prosedur cetak
Panggil prosedur cetak
Akhir program utama
Contoh prosedur tanpa parameter Keterangan
Program JumlahBilAB;
Uses crt;
Var
C : Real;
Procedure InputAB(Var A,B : Real);
Begin
Write(‘Nilai A ‘);readln(A);
Write(‘Nilai B ‘);readln(B);
End.

Prosedur JumlahAB(A,B : Real);
Begin
C:=A+B;
End.

Var
A,B : Real;
Begin
Clrscr;
InputAB(A,B);
Jumlah(A,B);
Writeln(A,’ + ‘,B,’ = ‘,C);
Readln;
End. Judul program
Deklarasi unit CRT
Deklarasi variabel global. Deklarasi global adalah deklarasi yang diletakkan di atas deklarasi yang lainnya dan pengenal dengan variabel global akan dikenal oleh seluruh statement di bawahnya.
Deklarasi prosedur InputAB berparameter A,B dengan tipe real
Awal prosedur
Input A
Input B
Akhir prosedur

Deklarasi prosedur JumlahAB berparameter A,B dengan tipe real
Awal prosedur
Hitung C=A+B
Akhir prosedur

Deklerasi variabel yang akan dikenal di seluruh blok setelah pendeklarasiannya.
Awal program utama
Bersihkan layar
Panggil prosedur InputAB dengan parmeter A,B
Panggil prosedur JumlahAB dengan paramter A,B
Cetak pengenal A,B, dan C
Tungguk penekanan tombol enter
Akhir program utama
Gambar 3.8. Beberapa Contoh Penggunaan Deklarasi Prosedur

3.2.6. Deklarasi Fungsi
Contoh fungsi seperti : Sin, Cos, Length, dan lain-lain. Fungsi-fungsi tersebut telah didefenisikan oleh program Pascal, karena itu kita tinggal pakai saja. Ciri umum suatu fungsi adalah memiliki nilai keluaran. Nilai keluaran daripada fungsi langsung diberikan kenama fungsi . Pendeklarasian fungsi sama dengan dekalrasi prosedur hanya saja didahulu dengan kata cadang Function diikuti parameter (bila ada) dan diikuti titik dua dan tipe keluaran dari fungsi tersebut. Perhatikan contoh fungsi sederhana berikut ini :
Contoh fungsi tanpa parameter Keterangan
Program Jawab;

Funtion BS : Boolean;
Begin
BS:=True;
End.

Var
Jawaban : Boolean;
Begin
Jawaban:=BS;
IF Jawaban Then
Writeln(‘Anda Benar’);
End. Judul program

Deklarasi fungsi dengan nama pengenal BS tanpa parameter dan hasil keluaran fungsi adalah Boolean (TRUE atau FALSE).
Awal fungsi
Nama fungsi diberi nilai TRUE
Akhir fungsi

Deklarasi variabel Jawaban dengan tipe Boolean

Awal program utama
Pengenal jawaban memanggil fungsi BS
Jika jawaban TRUE maka cetak string Anda Benar

Akhir program
Gambar 3.9. Beberapa Contoh Penggunaan Deklarasi Fungsi

3.2.6. Deklarasi Unit
Unit merupakan kumpulan dari konstata, tipe data, variabel-variabel, prosedur-prosedur dan fungsi-fungsi. Sebelumnya kita telah menggunakan unit CRT dibagian deklarasi Uses Crt. Sebenarnya terdapat 9 unit standard yang disediakan oleh Turbo Pascal pada saat Anda merancang program. Unit-unit tersebut adalah :
§ Crt
§ Dos
§ Graph
§ Graph3
§ Overlay
§ Printer
§ System
§ Turbo3
§ WinDos

Unit CRT
Unit CRT dapat digunakan untuk mengontrol mode layar, kode keyboard diperluas (extended keyboard codes), warna, window dan suara.
CRT hanya dapat digunakan dalam program yang berjalan di sistem operasi IBM PC, AT, PS/2s, dan yang sesuai (compatible).
Berikut ini adalah beberapa controh prosedur dan fungsi pada unit crt :
Nama Fungsi/Prosedur Keterangan
AssignCrt Proc Menghubungkan suatu file text dengan layar CRT
ClrEol Proc Menghapus semua karakter mulai dari posisi kursor
ClrScr Proc Menghapus layar dan mengembalikan kursor ke posis 0,0 (kiri atas)
Delay Proc Menunggu waktu yang ditentukan dalam millisecond (1/1000 detik).
DelLine Proc Menghapus baris tempat kursor berada.
GotoXY Proc Memindahkan kursor ke posisi X,Y di layar
HighVideo Proc Memiliki karakter berintensitas tinggi.
InsLine Proc Menyisipkan baris kosong pada posisi kursor
KeyPressed Func Menentukan apakan suatu tombol telah ditekan di keyboard.
LowVideo . Proc Memiliki karakter berintensitas rendah
NormVideo Proc Memilih attribut awal teks mulai dari posisi kursor
NoSound Proc Menonaktifkan speaker internal komputer.
ReadKey Func Membaca satu karakter dari keyboard.
Sound Proc Memulai speakter internal komputer
TextBackground Proc Memilih warna latar belakang
TextColor Proc Memilih warna huruf
TextMode Proc Memilih mode teks
WhereX Func Mengembalikan koordinat X dari posis kursor yang aktif
WhereY Proc Mengembalikan koordinat Y dari posisi kursor yang aktif
Window Proc Membuat suatu window teks di layar

Unit DOS
Unit Dos digunakan untuk implementasi sistem operasi dan prosedur/funsi penanganan file.
Beberapa controh Unit DOS
Nama Prosedur/Fungsi Keterangan
GetDate Proc menghasilan tanggal yang aktif dari sistem operasi..
GetFTime Proc menghasilkan waktu dan tanggal file terakhir kali ditulisi.
GetTime Proc menghasilkan waktu yang aktif dari sistem operasi
PackTime Proc mengubah record DateTime kedalam 4 byte yang digunakan oleh prosedur SetFTime
SetDate Proc menentukan tanggal yang aktif dari sistem operasi
SetFTime Proc menentukan tanggal dan waktu file yang terakhir ditulisi
SetTime Proc menentukan waktu yang aktif dari sistem operasi
UnpackTime Proc menubah 4 byte yang dihasilkan prosedur GetFTime, FindFirst, FindNext kedalam rekord DateTime

Graph : unit untuk penanganan grafik
Graph3 : unit untuk penyesuaian dengan Turbo Pascal V.3
Overlay : unit untuk penanganan overlay
Printer : unit untuk penangan pencetakan
System : unit untuk penangan sistem
Turbo3 : unit untuk penyesuaian dengan Turbo Pascal v.3
WinDos : unit untuk penanganan sistem windows dan dos

Berikut ini adalah beberapa controh penggunaan unit.
Kode Program Keterangan
Program UnitCrtDos;
Uses Crt,Dos; Judul program
Deklarasi unit menggunakan unit Crt dan Dos
Program UnitCrtDosGraph;
Uses Crt,Dos,Graph; Judul program
Deklarasi unit menggunakan unit Crt, Dos dan Graph.
Gambar 3.10. Beberapa Contoh Penggunaan Deklarasi Unit

3.3. Ekspresi (Expressions)
Ekspresi adalah suatu pernyataan yang menghasilkan suatu nilai. Berikut ini adalah beberapa contoh ekspresi.
Ekspresi Keterangan
JlhBeli : Byte; Deklarasi JlhBeli tipe Byte dengan nilai antara 0 s/d +255
Total:=125; pengenal Total bernilai 125
Rata_Rata:=Jumlah(X)/N Pengenal rata-rata memanggil fungsi jumlah dan membanginya dengan nilai N
A=5+5*10/5 Pengenal A melakukan perkalian 5*10, membaginya dengan 5 dan menambah dengan 5 = 15.

Anda perhatikan ekspresi berikut ini :
X = 2 + 5;

Ket :
X merupakan pengenal yang akan menampung penjumlahan angka 2 dan 5.
Angka 2 disebut operand satu
Angka 5 dsebut operand dua
Symbol + disebut operator

Bila anda perhatikan bahwa operator tambah (+) menggunakan dua buah operand. Operator yang menggunakan dua buah operand disebut operator binary, sedangkan operator yang menggunakan satu buah operand disebut unary. Dan bila operator menggunakan dua tiga operand disebut ternary, dst.

X = +5

3.4. Pernyataan (Statement)
Pernyataan adalah himpunan dari symbol-symbol yang memiliki suatu pengertian bagi penterjemah komputer (compiler). Symbol-symbol dapat berupa satu karakter ataupun lebih dari satu karakter. Symbol satu karakter bisa saja berupa operator unary (+, -), himpunan dari karakter-karakter dapat membentuk reserved word (begin, end, var), himpunan dari karakter-karakter dapat ekspresi (JlhBeli*Harga).

3.4.1. Pernyataan Sederhana
Pernyataan sederhana adalah pernyataan yang hanya berisikan satu baris kode program. Antara pernyataan satu dengan pernyataan lainnya dipisahkan dengan tanda titik koma.

Kode Program Keterangan
Program Menjumlahkan(A,B);
Uses crt;
Var
A, B : Integer;
Begin
Clrscr;
A:=5;
B:=15;
C:=A+B;
Writeln(C);
End. Satu pernyataan dipisahkan oleh titik koma
Satu pernyataan
Satu pernyataan

Awal program
Satu pernyataan
Satu pernyataan
Satu pernyataan
Satu pernyataan
Satu pernyataan
Akhir program
Gambar 3.11. Contoh Penggunaan Pernyataan Sederhana

3.4.2. Pernyataan Majemuk
Pernyataan majemuk adalah pernyataan yang lebih dari satu pernyataan. Pernyataan majemuk dapat ditandai dari :
1. semua pernyataan diantara begin dan end
2. pernyataan if
3. pernyataan perulangan

Kode Program Keterangan
Program Menjumlahkan(A,B);
Uses crt;
Var
A, B : Integer;
Begin
Clrscr;
A:=5;
B:=15;
C:=A+B;
Writeln(C);
End. Satu pernyataan dipisahkan oleh titik koma
Satu pernyataan
Satu pernyataan

Awal program

Akhir program
Program Kelulusan;
Var
Nim : String[9];
IPK : Real;
JlhSks : Byte;
Begin
Write(‘Nim : ‘);readln(Nim);
Write(‘IPK : ‘);readln(IPK);
Write(‘JlhSKS : ‘);readln(JlhSks);
If IPK > 2.5 and JlhSks>120 Then
Writeln(‘Anda Lulus’)
Else
Writeln(‘Anda Tidak Lulus’);
End.

Var
I : integer;
Begin
For i:= 1 to 10 Do
Writeln(1,’* ‘,I,’ = ‘,1*i);
End.

Begin
While not KeyPressed Do
Writeln(‘Press A Key’);
End.

Var
I : Integer;
Begin
I:=I;
Repeat
Writeln(‘Aku’);
Writeln(‘Suka’);
Writeln(‘Kamu’);Inc(I,1);
Until I>10;
End.

Gambar 3.12. Beberapa Contoh Penggunaan Pernyataan Majemuk
3.5. Input dan Output
3.5.1. Input Data
3.5.1.1. Readln
Sampai saat ini setiap kali kita memasukkan suatu data anda menggunakan statement Readln. Readln merupakan prosedur yang terdapat di dalam unit system. Unit system secara otomatis ditambahkan oleh penterjemah pascal pada saat Anda mengcompile program pascal Anda (tidak seperti unit Crt yang harus Anda deklarasikan) dan Anda tidak diperkenankanuntuk mendeklarasikannya ulang di deklarasi unit.
Berikut ini adalah beberapa bentuk dari prosedur readln yang sampai saat ini telah pernah kita gunakan.
menunggu penekanan tombol enter
àreadln;
menerima input data yang akan disimpan di pengenal X dan menunggu penekanan tombol enter untuk lanjut.
àreadln(x);
menerima input yang akan disimpan di pengenal
à• readln(a,b,c,d) a,b,c,d. Bila pengenal di readln lebih dari 1 maka antara nilai pengenal harus dipisahkan oleh (spasi = ASCII 32, tab = ASCI = 8, Enter = Ascii 13 dan 10)
Berikut ini contoh penggunaan prosedur readln.

Kode program Keterangan
Begin
Readln;
End. Menunggu penekanan tombol enter
Begin
Readln;readln;
Readln;readln;
End. Menggunggu penekanan tombol enter empat kali
Var
A,B,C : real;
Begin
Readln(A,B);
Writeln(A*B);
End.
Deklarasi variabel

Awal
Karena pengenal lebih dari satu, maka pada saat penginputan data antara pengenal harus ada spasi putih.
Cetak A kali B
Selesai
Gambar 3.13. Beberapa Contoh Penggunaan Prosedur Readln

3.5.1.2. Read
Pernyataan read juga berfungsi untuk membaca suatu input data dari keyboard. Beda Antara statement Read dan Readln adalah dengan statemen Readln berarti setelah pembacaan kursor gantri baris (Readln, Read = Baca, Ln = Line New), sedangkan dengan pernyataan readl kursor tidak ganti bari setelah membaca suatu input. Namun, dalam aplikasi program kedua statemen ini tidak akan jauh berbeda dan dapat dikatakan sama walaupun dari nama kedua prosedur berbeda.
Berikut ini contoh penggunaan prosedur readln.
Kode program Keterangan
Begin
Read;
End. Tidak menunggu penekanan tombol enter
Begin
Read;read;
Read;read;
End. Tidak menunggu penekanan tombol enter
Var
A,B,C : real;
Begin
Read(A,B,C);
Writeln(A*B/C);
End. Deklarasi variabel

Awal
Karena pengenal lebih dari satu, maka pada saat penginputan data antara pengenal harus ada spasi putih.
Cetak A kali B dibagi C
Selesai
Gambar 3.14. Beberapa Contoh Penggunaan Prosedur Read

3.5.1.3. Readkey
Readkey adalah fungsi. Readkey berfungsi untuk membaca satu karakter dari keyboard. Hasil pengembalian fungsi adalah suatu karakter atau suatu extended scan code. Karakter hasil tidak ditampilkan di layar.

uses Crt;
var
C: Char;
begin
Writeln(’Please press a key’);
C := Readkey;
Writeln(’ You pressed ‘, C, ‘, whose ASCII value is ‘, Ord(C), ‘.’);
end.
Deklarasi Unit Crt
Deklarasi variabel

Awal
Cetak Please press a key
Karakter yang ditekan disimpan di variabel C
Cetak karakter yang ditekan dan kedudukannya di tabel ASCII
Akhir
Gambar 3.15. Beberapa Contoh Penggunaan Fungsi Readkey

3.5.1.4. KeyPressed
KeyPressed adalah fungsi. Keypressed fungsinya menentukan apakah suatu tombol sudah ditekan (True) atau belum (False). Tombol yang ditekan dapat dibaca dari fungsi Readkey.

uses Crt;
begin
repeat
Write(’STTI RESPATI’);
until KeyPressed;
end. Deklarasi unit crt
Awal
Ulangi
Cetak STTI RESPATI
Hingga ada tombol Ditekan
Akhir
Gambar 3.16. Contoh Penggunaan Fungsi KeyPressed

3.5.2. Output
Setiap program tentu memiliki output (keluaran). Output program dapat berupa hasil tampilan di layar ataupun cetakan ke printer. Untuk menata tampilan output Anda juga harus mempertimbangan dari pihak pemakai (user), Apakah output yang Anda buat telah sesuai dengan informasi yang dibutuhkan oleh pemakai program Anda ? Bila tidak berarti Anda harus menata kembali tampilan output program Anda.

3.5.2.1. Output di layar
Output dilayar digunakan untuk menentukan tata letak hasil tampilan program di layar monitor. Coba Anda perhatikan output program berikut ini :
Kode Program Output di Layar Keterangan
Begin
Writeln(‘Selamat Datang’);
Writeln(‘Di STTI Respati’);
End. Awal program
Cetak Selamat Datang di layar kemudian kursor turun
Cetak Di STTI Respati di layar kemudian kursor turun
Akhir program
Kode Program Format Output di layar Keterangan
Begin
Writeln(5:5);
Writeln(5/10:4:2);
End. Awal program
Cetak angka 5 dengan luas posisi 5 karakter
Cetak hasil 5/10 dengan luas posisi seluruhnya 4 dan dua dibelakang koma.

Format Integer : Pengenal:N
Perhatikan kembali kode program berikut ini
Kode Program Keterangan Output
begin
Writeln(5)
End. Luas posisi hanya 1 karakter 5

begin
Writeln(5:5);
End. 5

Var A,B : Integer;
Begin
A:=1000;
B:=5;
Writeln(A*B:6);
End.

Luas posisi A*B enam karakter 5 0 0 0

Format Desimal: Pengenal:N:M

Kode Program Keterangan Output
begin
Writeln(5/1)
End. Luas posisi 17 digit 5 . 0 0 0 0 0 0 0 0 0 0 E + 0 0

begin
Writeln(5/1:8);
End. Luas posisi 8 digit 5 . 0 E + 0 0

begin
Writeln(-5/1:8);
End. Luas posisi 8 digit – 5 . 0 E + 0 0

Begin
Writeln(-5/1:8:2) Luas posisi 8 digit dan 2 di belakang desimal – 5 . 0 0

Begin
Writeln(100:8.4);
End. Luas posisi 8 digit dan 2 di belakang desimal 8 . 0 0 0 0

3.5.2.2. Output Di Printer
Untuk mencetak output ke printer, Anda harus menggunakan deklarasi unit printer. Selanjutnya pada pernyataan yang ingin dicetak anda harus mendahuluinya dengan mengetikkan lst diikuti tanda koma dan daftar ekspresi.
Kode Program Output di Printer Keterangan
Uses Printer;
Begin
Writeln(lst,’Selamat Datang’);
Writeln(lst,’Di STTI Respati’);
End. Gunakan unit printer bila ingin mencetak ke printer
Awal program
Cetak diawali kata lst (list) dipisahkan koma dan diikuti ekspresi

Akhir program
Kode program output di layar dan printer Keterangan
Program LayarDanPrinter;
Uses Crt,Printer;
Var
A, B, C : Integer;
Begin
Clrscr;
Write(‘Nilai A : ‘);readln(A);
Write(‘Nilai B : ‘);readln(B);
C:=A+B;
Writeln(lst,A,’ + ‘,B,’ = ‘,C);
End. Judul program
Deklarasi unit crt dan printer
Deklarasi variabel

Awal program
Bersihkan layar
Input nilai A
Input nilai B
Hitung C = A + B
Cetak ke printer A + B = C
Akhir program

Tugas :
1. PT. ABC yang bergerak di bidang garmen memiliki aturan tersendiri dalam penggajian karyawannya. Gaji diberikan berdasarkan gaji pokok + gaji lembur. Gaji pokok ditentukan berdasarkan lama kerja pegawai bersangkutan, sedangkan gaji lembur ditentukan berdasarkan besarnya jam lembur * 10000. Manajemen menetapkan aturan gaji pokok pegawai berdasarkan lama kerja seperti tabel berikut:
Lama Kerja GP
> 15 Thn Rp. 2.500.000
10>LK LK 2, maka didapat 2 akar real yang berbeda
D = 2, maka didapat 2 akar real yang sama
D

2.1. Pengantar
Dalam Modul I Anda telah mencoba membuat program Pascal pertama Anda. Mungkin Anda bertanya ‘Mengapa harus mengetik program Pascal seperti itu ? Adakah cara lain? Apa hak dan kewajiban yang mesti dilakukan dalam membuat program Pascal ?.” Mungkin masih banyak pertanyaan lainnya yang muncul di benak kita.
Seperti kita ketahui, program Pascal diciptakan oleh Prof. Niclaus Wirth, yang dibuatnya pada tahun 1971. Dia menciptakannya untuk tujuan pembelajaran dengan berbagi tata cara permainan (aturan-aturan : syntax, semantic dan struktur program). Aturan dan struktur tersebut dibuatnya secara terstruktur. Kemudian, pada tahun 1983, perusahaan Borland Internasional merevisi laporan pascal standard yang dibuat Prof. Nicalus Wirth dan Jansen yang diberi nama Borland Turbo Pascal 1.0. Aturan dan struktur tersebut terus dikembangkan perusahaan Borland hingga akhirnya pada tahun 1993 dikeluarkannya Borland Turbo Pascal 7.0. Kita dapat bayangkan, perkembangan aturan-aturan dan struktur program pascal selama 10 tahun, meskipun banyak perubahan secara umum konteksnya sama. Aturan-aturan dan struktur tersebutlah yang mesti kita kuasai, agar kita dapat membuat program pascal yang baik. Satu hal penting yang diperhatikan bahwa turbo pascal prinsipnya upward competible (program jalan bila versi yang lebih rendah dijalankan pada versi yang lebih tinggi).
Seorang guru bahasa Inggris berkata kepada muridnya “Menguasai 16 tenses adalah salah satu cara menguasai bahasa Inggris”. Benarkah demikian ? “Menguasai struktur dan aturan program pascal adalah salah satu cara menguasai bahasa Pascal”. Kalau salah satu cara sudah kita Bila 16
Jkuasai, pasti ada cara lainnya untuk lebih menguasainya. tenses telah kita hapal, tentu kita tinggal mempraktekkannya. Analoginya, bila aturan dan struktur program pascal telah kita kuasai, dengan mempraktekkanya akan lebih menguasainya. Jadi dapat kita simpulkan kunci memahami pemograman Pascal adalah baca teorinya dan langsung mempraktekkannya di depan komputer.
2.2. Struktur Program Pascal
Baiklah kita buka kembali program pascal Pertama kita, yang isinya seperti terlihat seperti di bawah ini. Nomor baris sengaja ditambah untuk lebih memudahkan pembahasan.

Gambar 2.1. Contoh Program Pascal

Kalau Anda perhatikan yang ditebali adalah keywords artinya kata – kata yang telah ditetapkan sedemikian rupa (dalam keadaan default/standard penampilannya di layar editor berwarna putih). Keywords tidak dapat dijadikan sebagai pengenal (identifier).

Program Pascal paling sederhana
Mungkin Anda bertanya ‘Bagaimana sih program pascal yang paling sederhana? ?’. Coba anda ketikkan program berikut ini di layar editor Pascal. Program Pascal yang paling sederhana seperti gambar berikut :

Gambar 2.2. Program Pascal Paling Sederhana

Bila kita menekan tombol F9 (Compile) dan selanjutnya Ctrl + F9 (Run), program tersebut di atas tidak akan menghasilkan apa-apa. Alasannya kita tidak menyuruh Pascal melakukan apa-apa. Kita hanya mengikuti aturannya saja.
Struktur program pascal terdiri atas tiga blok, yaitu : judul (heading), deklarasi (declaration) dan utama (body) seperti terlihat pada gambar 1.1

Gambar 2.3. Struktur Program Pascal
2.2. Elemen-Elemen Pembentuk Program Pascal
1. Karakter
Bila kita perhatikan bahwa elemen dasar dari pembentuk program Pascal adalah karakter. Karakter-karakter yang dapat kita gunakan adalah karakter-karakter yang berada dalam tabel ASCII (American Standard Code For Information Interchange).
Karakter-karakter dalam tabel ASCII dapat berupa :
1. Huruf A..Z , a..z
2. Anga 0..9
3. Simbol Khusus (@ # $ ^ * ( ) – + [ ] , . ; / \)
4. Spasi
5. Karakter kontrol (karakter dengan nilai ASCII di bawah 32, misalnya Tab dan Backspace)
6. Karakter ASCII tidak standar pada PC (karakter dengan nilai ASCII antara 128 hingga 255)

2. String
String merupakan rangkaian daripada karakter-karakter. Karakter-karakter yang dirangkai harus termuat di tabel ASCII. Penggunaan string harus diawali oleh tanda kutip tunggal dan diakhiri oleh tanda kutip tunggal. Bila Anda ingin memasukkan suatu kutip tunggal di dalam suatu string maka di dalam string tersebut harus termuat duabuah kutip tunggal. Maksimum string yang dapat Anda masukkan dalam suatu pengenal adalah 255 karakter. Bila lebih dari 255 karakter maka karakter ke 256 dan seterusnya akan diabaikan. Tiap karakter string memiliki index di string tersebut, sehingga bila kita tulis Nama[2], maka kita mengambil indeks yang ke dua dari Nama.
Berikut ini adalah contoh-contoh penggunaan string dalam program.

Suatu string juga bisa dirangkai dengan kontrol karakter. Kontrol karakter ini ditandai dengan lambang # diikuti oleh nomor kode ASCIInya. Berikut ini adalah contoh pemakaiannya.

Anda perhatikan bahwa kontrol karakter #13 merupakan carriage return (mengembalikan posisi kursor ke awal) sedangkan #10 adalah line-feed (Membuat baris baru). Dengan demikian hasil akhir program di atas adalah :

3. Bilangan
Bentuk bilangan yang dapat Anda masukkan dalam suatu program bisa dalam bentuk desimal, oktal maupun heksadesimal. Coba Anda perhatikan contoh berikut ini:
Symbol Bilangan Contoh
+ atau – Desimal 10
$ Heksadesimal $A

Selain daripada itu untuk bilangan berpangkat mis : 2*105 dapat Anda tuliskan di program 2E+05 atau 2E05. Berikut adalah contoh-contoh lainnya.

Contoh Keterangan
+5 Bilangan integer positip 5
5 Bilangan integer positip 5
-5 Bilangan integer negatip 5
5000 Bilangan integer 5000
5E03 Bilangan integer 5000
0.2E-06 Bilangan integer 2*10-5
1E6 Bilangan integer 2*106
$F Bilangan integer positip 15
-$F Bilangan integer negatip 15

4. Reserved Words (kata tercadang)
Pada gambar 2.3. Anda perhatikan kata yang ditulis tebal, seperti : program, uses, const, var, begin, end. Kata-kata ini merupakan kata-kata kunci (keywords). Bagi bahasa Pascal keyword-keyword ini keberadaannya mesti dijaga (tidak bisa diubah-ubah) sehingga disebut sebagai kata tercadang (reserved words).
Tabel 2.1. mendaftar kata-kata tercadang yang dapat Anda gunakan pada saat membentuk program Pascal.

Tabel 2.1. Daftar Kata-Kata Tercadang
and
asm
array
begin
case
const
constructor
destructor
div
do
downto
else
end Exports
file
for
function
goto
if
implementation
in
inherited
inline
interface
label
library mod
nil
not
object
of
or
packed
procedure
program
record
repeat
set
shl shr
string
then
to
type
unit
until
uses
var
while
with
xor

Penggunaan dari reserved word ini di dalam program Pascal telah ditentukan aturannya, sehingga aturan-aturan tersebutlah yang akan kita bahas di keseluruhan buku ini.

5. Pengenal (Identifier)
Pada program 2.1. kata Program_Kenalan_Pascal merupakan contoh pengenal. Selain pada nama program, pengenal juga dapat Anda gunakan untuk mendefenisikan suatu konstanta, variabel, prosedur, fungsi, unit, dan lain-lain. Berikut ini contoh suatu program yang banyak menggunakan pengenal .

Gambar 2.4. Penulisan Pengenal (Identifier) Dalam Kode Program Pascal
Dari contoh kode program di atas, dapat dikatakan bahwa pengenal digunakan diseluruh blok program pascal. Adapun Syarat-syarat pemberian nama suatu pengenal adalah :
7. karakter pertama harus dimulai oleh alphabet (A..Z atau z..z) atau garis bawah ( _ )
8. setelah alphabet atau garis bahwa nama pengenal dapat diikuti oleh alphabet, garis bawah
9. pengenal tidak boleh memuat karakter-karakter khusus : @ # $ ^ * ( ) – + [ ] , . ; / \
10. pengenal tidak boleh memuat spasi
11. maksimum panjang nama pengenal 63 karakter. Bila nama pengenal lebih dari 63 karakter, maka karakter 64 dan seterusnya tidak dipertimbangkan.
12. Bila pengenal lebih dari satu kata, usahakan tiap kata huruf besar. Dan usahakan nama pengenal mewakili nilai yang dikandungnya.
Contoh-contoh pengenal
Pengenal Keterangan
1Celcius Salah, karena pengenal diawali angka
Fah renheit Salah, karena pengenal memuat spasi
DerajatReamur Benar, pengenal dua kata usahakan tiap kata huruf besar
S32 Benar
_NilaiA Benar
%Bunga Salah, karena memuat karakter khusus %

Pascal merupakan case – insensitive, maksudnya bahwa program pascal tidak membedakan penulisan huruf besar maupun huruf kecil. Dengan demikian penulisan kata program, Program, PROGRAM, ataupun PrOgRam sama saja. Aturan ini berlaku bagi seluruh elemen-elemen program Pascal. Satu hal yang perlu diingkat pada saat penulisan kode program bahwa suatu saat kode program yang Anda buat akan dibaca orang lain, untuk itu usahakan penulisannya sebaik mungkin.
Kedua kode program berikut hasilnya sama. Tetapi, dalam hal gaya (style) penulisan kodenya jauh berbeda.

Gambar 2.5. Gaya (Style) Penulisan Program Pascal
6. Tipe Data
Pada gambar 2.4 baris 3 Anda perhatikan kata Integer. Kata Integer menunjukkan bahwa variabel A dan B bertipe Integer. Bila suatu pengenal bertipe Integer maka jangkauan nilainya harus antara -32768 s/d +32767. Selain dari tipe Integer masih banyak terdapat tipe-tipe data lainnya dalam pascal seperti : byte, shortint, longint, record, set, dan lain-lain.

Gambar 2.6. Tipe Data di Turbo Pascal 7.0
a. Tipe data sederhana
Tipe data sederhana adalah tipe data yang bila suatu pengenal didefenisikan dengan tipe data ini, maka pengenal teresebut hanya dapat berisi satu data.
Tipe data sederhana terbagi atas 2, yaitu :
1. tipe data ordinal
Tipe data ordinal merupakan tipe data yang urutan nilai dapat diketahui secara jelas. Misalkan tipe data Shortint dengan jangkauan nilai antara -128 .. 127 berarti nilai pengenal yang dideklarasikan dengan tipe shortint nilainya harus : -128, -127, -126, …, 127. Tiga fungsi yang biasanya dapat dipaka pada setiap tipe data ordinal adalah ORD (ordinal), PRED (Predecessor), SUCC (Successor).
Contoh : ORD (‘A’) = 65, artinya urutan huruf A di tabel ASCII
PRED(‘Z’) = Y, artinya urutan sebelum huruf Z di tabel ASCII
SUCC(‘X’) = Y, artinya urutan sesudah huruf X di tabel ASCII
i. Tipe Data Integer
Tipe data integer adalah tipe data yang hanya menampung bilangan bulat.
Tipe data Jangkauan Ukuran Di Memory
Shortint -128..127 8 bit (1 byte)
Byte 0.255 8 bit (1 byte)
Integer -32768..32767 16 bit (2 byte)
Longint -2147483648..2147483647 32 bit (4 byte)
Word 0..65635 16 bit (2 byte)

.

Dalam pendeklarasian Tipe juga Anda telah mempertimbangkan kemungkinan jangkauan terbesar dari suatu pengenal. Coba Anda perhatikan kode program berikut:

Deklarasi variabel Umur dengan tipe Longint kuranglah tepat. Kita tahu tipe longint dapat menampung data antara -2147483648..2147483647, sedangkan umur yang Anda masukkan tidak akan pernah sebesar jangkauan maksimum tipe data longint tersebut. Hal tersebut memang tidak salah, . Dari satu sisi dengan tipe longint AndaJhanya KurangTepat. menggunakan memory 4 byte, sedangkan dengan tipe Byte Anda cukup memakai 1 byte memory. Bila Hal tersebut Anda lakukan sampai puluhan atau bahkan ratusan kali dalam suatu program yang komplek, dengan cepat Jmemory Anda akan habis terpakai dengan sia-sia.
ii. Tipe Boolean
Tipe data boolean adalah tipe data yang hanya memiliki nilai TRUE atau FALSE. Keempat tipe data boolean di bawah ini dapat Anda gunakan sesuai dengan sistem yang Anda gunakan. Misalkan kalau sistem operasi Anda tidak mendukung operasi 32 bit, maka Anda tidak dapat menggunakan tipe data LongBool. Tetapi bila sistem operasi Anda bekerja di 32 bit dan Anda memakai tipe data boolean 8 bit (Boolean), hal tersebut tidak masalah.

Tipe data Ukuran Di Memory
Boolean 8 bit (1 byte)
WordBool 16 bit (2 byte)
LongBool 32 bit (4 byte)
ByteBool 8 bit (1 byte)

iii. Tipe Enumerated
Tipe enumerated merupakan tipe data yang didefenisikan sendiri di bagian deklarasi type dan selanjutnya dapat dipakai dibagian program dibawah deklarasinya.

iv. Tipe SubRange
Tipe subrange sama seperti tipe enumerated yang juga didefenisikan di bagian deklarasi type dan selanjutnya dapat dipakai di bagian program di bawah deklarasinya.

2. Tipe data real
Untuk menampung data yang bukan bilangan bulat, kita dapat menggunakan tipe data Real. Tipe data Real juga termasuk tipe data sederhana tetapi tidak termasuk tipe data ordinal. Mengapa ? Karena tipe data real tidak dapat disebutkan secara pasti urutan dari nilainya. Kita ambil contoh 50.2, 50,21, 50,211, 50,211 dan seterusnya sampai tidak terhingga.

Tipe data Jangkauan Digit di Belakang Koma Ukuran Di Memory
Real 2.9e-39..1.7e38 11-12 48 bit (6 byte)
Single .5e-45..3.4e38 7-8 32 bit (4 byte)
Double 5.0e-324..1.7e308 15-16 64 bit (8 byte)
Extend 3.4e-4932..1.1e4932 19-20 80 bit (10 byte)
Comp -9.2e18..9.2e18 19-20 64 bit (8 byte)

7. Operator
Kasus. Misalkan kita ingin menjumlahkan dua buah bilangan bulat : A dan B. Misalkan A bernilai 5 dan B bernilai 6. Untuk menjumlahkan bilangan A dan B kita melakukannya dengan menulis A+B. A+B disebut ungkapan ataupun ekspresi, tanda + operator, A dan B disebut operand. Karena operator + menggunakan dua buah operand, maka operator + sering disebut juga operator biner (binary operator). Bila kasus 1 kita tulis di program pascal, bentuknya dapat seperti berikut :

Gambar 2.7. Program menjumlahkan dua buah bilangan

Termasuk operator apakah operator + ?. Berikut ini akan diuraikan jenis-jenis operator dalam Pascal.

a.Operator pengerjaan (assignment operator)
Bila Anda perhatikan gambar 2.4. baris 6 dan 7. terdapat ekspresi (ungkapan) sebagai berikut :
3. A:=5
4. B:=6
Tanda := disebut operator pengerjaan. Maksud dari ekspresi A:=5 adalah masukkan bilangan 5 ke pengenal A. Pengenal A dideklarasikan di bagian var, maka pengenal A disebut juga variabel A.

b. Operator aritmatika
Operator aritmatika merupakan operator yang digunakan untuk melakukan penjumlahan, pengurangan, perkalian, dan pembagian.

Operator
Tipe Data Hasil
+ (Penjumlahan) Integer + Integer
Integer + Real
Real + Real Integer
Real
Real
– (Pengurangan) Integer – Integer
Integer – Real
Real – Integer
Real – Real Integer
Salah
Benar
Real
* (Perkalian) Integer * Integer
Integer * Real
Real * Real Integer
Real
Real
/ (Pembagian) Integer / Integer
Integer / Real
Real / Real Real
Real
Real
Div (Pembagian Bulat) Integer Div Integer Integer
Mod (Sisa Bagi) Integer Mod Integer Integer

c.Operator relasional
Kasus. Misalkan anda disuruh membuat program menentukan pelamar lulus masuk PNS atau tidak. Syarat masuk PNS harus berumur minimal 17 tahun. Berarti tahun sekarang dikurangi tahun lahir peserta harus lebih besar atau sama dengan 17 tahun. Bila hal ini dipenuhi maka Dia berhak masuk PNS dan bila tidak dipenuhi dia tidak berhak masuk PNS. Bagaimana caranya kita menyatakan hal tersebut di program Pascal? Coba Anda perhatikan kode program Pascal berikut ini:

Gambar 2.8. Contoh Program Penggunaan Operator Relasional

Pernyataan if Umur >= 7 Then merupakan suatu pernyataan bersyarakat. Pernyataan tersebut dapat kita terjemahkan ‘jika umur lebih besar atau sama dengan 17 maka’. Ekspresi Umur>=17 menggunakan operator >=. Operator >= inilah yang disebut dengan operator relasional. Dari pernyataan tersebut juga kita lihat operator >= menggunakan dua buah operand maka operator tersebut juga operator biner.

Operator Tipe Data Hasil
= (sama dengan) Kedua operand harus bertipe sama True/False
(Lebih besar dari) Kedua operand harus bertipe sama True/False
= (Lebih besar dari atau sama dengan) Kedua operand harus bertipe sama True/False

d.Operator Bitwise
Kasus. Berapakah hasil bila angka 65 di OR kan dengan angka 32. Untuk menyelesaikan kasus tersebut, terlebih dahulu kita mesti mengetahui representasi dari angka-angka di memory. Suatu angka di memory direpresentasikan dengan bit-bit.
Operator bitwise merupakan operator yang berhubungan dengan bit-bit dari suatu pengenal yang bertipe integer. Perlu Anda ketahui bahwa representasi dari suatu tipe integer menggunakan susunan 16 bit. Coba Anda perhatikan gambar berikut :
Most Significant Bit (Bit paling berpengaruh) Less Significant Bit (bit paling kecil pengaruhnya)

15
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20

Misalkan kita ambil contoh representasi angka 65 dalam bit-bit.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1

0000000001000001(2) = 1* 20 + 0*21 + 0 * 22 + 0 * 23 + 0 * 24 + 0 * 25 + 1 * 26
= 1 + 0 + 0 + 0 + 0 + 0 + 64
= 65

Representasi Angka 32 dalam bit-bit
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

Bila Angka 65 kita OR kan dengan angka 32, maka hasilnya

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 1
0
0
0
0
0
1

OR
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
Hasil
0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1

Hasil :
0000000001100001(2) = 1* 20 + 0*21 + 0 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26
= 1 + 0 + 0 + 0 + 0 + 32 + 64
= 97
Pembandingan bit-bit dari suatu angka berdasarkan pada tabel berikut ini :

Tabel Bitwise OR
Bit A Bit B Bit A Or B
1 1 1
1 0 1
0 1 1
0 0 1
Tabel Bitwise AND
Bit A Bit B Bit A And B
1 1 1
1 0 0
0 1 0
0 0 0

Tabel Bitwise XOR
Bit A Bit B Bit A Xor B
1 1 0
1 0 1
0 1 1
0 0 0

Tabel Bitwise Not
Bit A Not A
1 0
0 1

Bila kasus di atas kita terapkan di program Pascal, bentuknya dapat seperti berikut ini :

Gambar 2.7. Program Operasi Bit Dengan Operator OR

Selain operator OR, AND dan XOR, untuk operasi Bit pascal juga menyediakan operator pergeseran bit, yaitu : SHR (Shift Right/Geser Kekanan) dengan operator >> dan SHL (Shift Left/Geser Kekiri) dengan operator 2.0. Misalkan kita ambil contoh dengan data mahasiswa berikut:
No Cek Syarat Keterangan
1 Nama Eri Rianto Sembiring Bisa Wisuda
Jurusan Teknik Informatika
KKN Ya TRUE
IPK 2,5 TRUE
2 Nama Ahmad Belum Bisa Wisuda
Jurusan Komputer Akuntansi
KKN Tidak FALSE
IPK 2,1 TRUE
3 Nama Julian Belum Bisa Wisuda
Jurusan Sistem Informasi
KKN Ya TRUE
IPK 1,9 FALSE
4 Nama Aprillia Belum Bisa Wisuda
Jurusan Sistem Informasi
KKN Tidak FALSE
IPK 1,5 FALSE

Dari Kasus, kedua syarat harus dipenuhi. Dengan demikian, operator logika yang tepat digunakan adalah AND. Berdasarkan tabel operator logika AND di atas, maka pernyataan akan benar bila seluruh kondisi bernilai benar (seperti contoh no.1). Bila salah satu saja kondisi salah, maka pernyataan salah. Berikut adalah cara menuliskan kasus tersebut kedalam kode program Pascal.

Gambar 2.10. Penggunaan Operator Logika AND

f. Operator Set (Himpunan)
Set merupakan himpunan dari karakter-karakter yang termuat dalam tabel ASCII. Himpunan karakter yang termuat dalam tabel ASCII sebanyak 256, dengan demikian banyaknya anggota himpunan dari suatu set adalah 256.
Berikut operator-operator yang dapat diberikan pada saat melakukan operasi terhadap data set.
Operator Keterangan
In Menyeleleksi keanggotaan set
+ Menggabungkan dua buah set
– Mengurangkan dua buah set
* Perkalian dua buah set
= Superset (super himpunan dari)
= Kesamaan himpunan
Ketitdaksamaan himpunan

Operasi Set di Pascal sama dengan operasi himpunan di matematika. Berikut adalah diagram Ven yang menggambarkan hubungan dua buah himpunan, yaitu A dan B. Himpunan A adalah himpunan 5 bilangan prima pertama. Himpunan B adalah himpunan bilangan bulat positip dari 0 s/d 9. Bila kedua himpunan tersebut kita tulis dengan cara mendaftar, maka hasilnya seperti berikut ini :

A = {2,3,7,11,13}
B = {0,1,2,3,4,5,6,7,8,9}

Dalam Matematika terdapat operasi himpunan seperti : penggabungan, irisan dan pengurangan.
Dari gambar di atas, operasi-operasi tersebut dapat dituliskan :
A U B = {0,1,2,3,4,5,6,7,8,9,11,13}
A ∩ B = {2,3,7}
A – B = {0,1,4,5,6,8,9}
B – A = {11,13}
Bila operasi-operasi himpunan tersebut kita tulis dalam kode program Pascal bentuknya dapat seperti berikut:

Gambar 2.11. Program Operasi Set (Himpunan) Pada Program Pascal

operator set IN digunakan untuk menguji keanggotaan dari suatu Set. Misalkan kita ingin menguji suatu tombol keyboard yang kita ketikkan apakah Angka atau tidak, maka bentuknya dapat seperti kode berikut.

Gambar 2.12. Program Keanggotaan Set Dengan Operator IN

g. Operator Alamat
Operator pointer merupakan operator yang digunakan untuk mengakses alamat dan isi dari suatu pengenal pointer. Operator yang berhubungan dengan pointer adalah:
Operator Keterangan
@ Alamat dari suatu pengenal pointer di memory
^ Isi dari pengenal pointer
= Kesamaan alamat
Ketidak samaan alamat
– Pengurangan alamat
+ Penjumlahan alamat

Misalkan Anda ingin mengetahui alamat variabel pekerjaan yang bertipe pointer di memory, berikut ini adalah kode programnya.

Gambar 2.13. Program Mendapatkan Alamat Suatu Variabel di Memory

h. Operator String
Untuk menggabungkan dua atau lebih string digunakan operator + (tambah). Anda perhatikan kode program berikut ini:

Urutan Pengerjaan Operator
Bila dalam kode program Pascal Anda terdapat banyak operator, maka Pascal telah mengatur prioritas pengerjaan suatu statement. Coba Anda perhatikan kode program berikut ini :

Berapakah hasil dari program di atas ? Coba kita perhatikan statement-statement program di atas.
A=5;
B =6;
C = A+ B * 10
C = 5 + 6 * 10
C = 5 + 60
C = 56
Ternyata operator + dikerjakan terakhir oleh Pascal. Bagaimana halnya seandainya kita menginginkan agar operator + tersebut dikerjakan terlebih dahulu daripada operator *. Caranya adalah dengan menutup ekspresi A + B dengan tanda kurung, sehingga kode program Pascalnya dapat seperti berikut ini.

Coba Anda jalankan kembali program ini. Berapakah hasilnya ? Bila hasilnya adalah 110, maka urutan pengerjaan dari ekspresi di atas telah benar.

Berikut ini adalah prioritas pengerjaan operator-operator dalam Pascal bila tidak dilakukan perubahan di dalam program.

Operator Prioritas
@ Not ^ 1
* / and Div Mod 2
= > >=



Soal-soal lainnya: [Multipal [Kartu ] [Bebek ] [Lacak ] [Paste ]


LABIRIN

Harry Potter sedang terjebak dalam suatu labirin (labirynth) bawah tanah yang berisi bom waktu. Dalam labirin terdapat sejumlah ruangan dengan koridor-koridor yang menghubungkannya. Setiap koridor hanya menghubungkan tepat dua ruangan yang berbeda dan setiap pasang ruangan oleh satu koridor atau tidak sama sekali. Ruang-ruang itu bisa berada dalam salah satu dari dua status: terkunci atau tak terkunci. Seseorang tidak bisa masuk ke dalam ruang yang tekunci, tapi ia bisa keluar dari ruangan yang terkunci itu. Sementara seseorang bisa keluar masuk ruang tak terkunci.

Di beberapa ruang terdapat tombol yang apabila ditekan akan mengubah status sejumlah ruang. Misalnya, ruang yang terkunci menjadi tidak terkunci dan sebaliknya ruang yang tak terkunci menjadi terkunci. Tentu saja jika Harry Potter berada di dalam ruangan yang memiliki tombol, ia tidak harus menekannya. Ia baru menekan manakala ia memerlukannya.

Salah satu ruang terdapat tangga untuk naik ke atas. Tuliskan suatu program dengan nama LABIRIN.PAS yang dapat membantu Harry Potter yang berada dalam salah satu ruang menemukan ruang yang berisi tangga naik ke atas itu termasuk tombol-tombol mana yang harus ditekan. Karena dikejar waktu program harus menemukan jumlah koridor yang harus dilalui Harry Potter, yang mungkin disertai dengan menekan tombol-tombol di ruangan tertentu ia sempat berada.

Masukan berisi deskripsi ruangan serta koridor-koridor dalam labirin tersebut, ruangan saat awal Harry Potter berada, dan daftar sejumlah tombol serta masing-masing ruangan yang statusnya berubah jika tombol tersebut ditekan.

Format Masukan

Masukan adalah file teks bernama LABIRIN.IN dengan format sebagai berikut. Baris pertama dari file masukan berisi dua integer yaitu N, yang menyatakan jumlah total kamar (1 ≤ N ≤ 100), dan S, yang menyatakan jumlah tombol (jumlah kamar yang berisikan tombol) (1 ≤ S ≤ 8). Tombol-tombol terlekat pad kamar-kamar bernomor 1 sampai S.

N baris berikutnya berisi deskripsi setiap kamar. Nomor kamar i pada baris ke (i+1). Pada setiap baris tersebut jika dimulai dengan 0 menandakan bahwa pada mulanya kamar tbs tak terkunci atau jika dimulai dengan 1 menandakan pada mulanya kamar ybs terkunci. Setelah spasi terdapat bilangan integer K, yang menyatakan jumlah kamar yang berhubungan dengan kamar ybs melalui koridor-koridor. Masih dalam baris yang sama, setelah satu spasi setelah terdapat K bilangan yang menyatakan nomor-nomor kamar tsb dengan penulisan yang dipisahkan spasi.

Dalam S baris berikutnya terdapat tombol-tombol, dari kamar pertama hingga kamar ke S.

Setiap dari baris-baris tsb dimulai dengan bilangan integer L, yang menyatakan jumlah kamar yang akan berubah jika tombol ditekan. Setelah spasi, berikutnya adalah L integer yang masing-masing menyatakan nomor-nomor kamar ybs yang masng-masing terpisahkan satu spasi.

Baris terakhir berisi dua bilangan A dan B; A adalah nomor kamar Harry Potter saat ini berada dan B nomor kamar yang berisi tangga naik ke atas.

Format Keluaran

Keluaran adalah file LABIRIN.OUT yang hanya berisi satu bilangan integer yang menyatakan jumlah minimal koridor yang harus dilalui untuk mencapai ruangan bertangga.

Note: Setiap data test dijamin selalu memiliki solusi, artinya dari ruang A selalu ada jalan untuk mencapai ruang B.

Contoh

LABIRIN.IN

4 1

0 1 3

1 2 3 4

0 2 1 2

0 1 2

1 2

3 4

LABIRIN.OUT

4

LABIRIN.IN

5 2

0 2 2 5

1 2 1 3

0 2 2 4

1 2 3 5

0 2 1 4

2 2 4

2 3 4

5 3

LABIRIN.OUT

3

LABIRIN.IN

6 2

0 2 6 5

1 2 4 6

0 1 4

1 3 2 5 3

0 3 1 4 6

0 3 1 5 2

3 2 5 3

1 4

6 3

LABIRIN.OUT

8



Soal-soal lainnya: [Multipal [Kartu ] [Bebek ] [Lacak ] [Labirin ]


MEMPROSES DOKUMEN

Suatu dokumen yang berisikan N baris teks diproses dengan promroses teks. Baris pertama dokumen berisi bilangan 1, baris kedua berisi bilangan 2 dan seterusnya hingga baris ke N yang berisi bilangan N.

Tepatnya telah dilakukan M kali operasi ‘cut and paste’ pada dokumen tersebut. Operasi ‘cut and paste’ dilakukan pada beberapa baris yang berturut-turut; ‘cut’ menghapus barisan teks yang telah dipilih dari dokumen dan ‘paste’ menyisipkan barisan teks yang terhapus itu ke suatu bagian da dalam dokumen.

Tuliskan suatu program PASTE.PAS yang jika diberikan sederetan operasi ‘cut and paste’ dapat menentukan isi dari sepuluh baris pertama dari dokument akhir setelah semua operasi dilakukan.

Format Masukan

File masukan bernama PASTE.IN yang isinya mengikuti format sebagai berikut.

1. Baris pertama berisi bilangan integer N, yang menyatakan jumlah baris dalam dokumen (10 ≤ N ≤ 100,000) dan bilangan integer K, yang menyatakan jumlah operasi ‘cut and paste’ yang dilakukan pada dokumen (1 ≤ K ≤ 1000), kedua bilangan terpisahkan spasi.

2. Dalam K baris berikutnya berisikan informasi mengenai masing-masing operasi ‘cut and paste’ mengikuti urutan eksekusinya.

3. Setiap baris berisi bilangan integer A, B and C, 1 ≤ ABN, 0 ≤ CN-(BA+1), berurutan dipisahkan oleh satu spasi. Bilangan A dan B menyatakan baris pertama dan terakhir dari teks yang dipilih untuk operasi, dan bilangan C menyatakan baris yang mana SETELAH ITU akan disisipkan baris-baris yang telah dihapuskan sebelumnya. Jika sama dengan 0 maka teks yang dihapuskan disisipkan sebelum baris pertama dokumen.

Format Keluaran

File keluaran bernama PASTE.OUT. File keluaran harus berisi 10 baris yang berisi 10 baris pertama dari isi dokumen setelah operasi terakhir.

Contoh

MELACAK MOBIL HILANG

Di suatu kota, seorang pencuri mobil diduga telah mencuri mobil Prof Linglung lalu mengendarainya ke suatu tempat di kota itu juga. Sang Pencuri tidak menyadari ternyata Prof Linglung telah suatu memasang alat pengaman dalam mobil itu yang selalu memancarkan informasi tertentu mengenai mobil tersebut saat mobil itu bergerak.

Sayangnya alat tersebut bukan sejenis alat modern yang dapat memancarkan informasi koodinat keberadaannya, melainkan suatu alat yang hanya mendeteksi ke arah mana mobil itu menghadap menurut empat arah mata angin: utara, selatan, barat, dan timur, dan memancarkannya. Alat hanya memancarkan satu kali saja sebelum terjadi terjadi perubahan berikutnya.

Kebetulan jalan-jalan di kota itu selalu vertikal atau horisontal dengan simpangan-simpangan pada posisi bilangan bulat. Data yang terekam terakhir oleh Prof Lingkung dari mobil itu adalah posisi mobil diparkir terakhir sebelum hilang (kita sebut pada posisis awal), kemudian sejak itu terekam sederetan sinyal-sinyal arah hadap mobil tersebut hingga kemudian berhenti entah di mana. Prof Linglung kaget sehingga ia menjadi benar-benar linglung karena rupanya mobil itu menyimpan banyak kenangan baginya.

Tuliskan suatu program dengan nama LACAK.PAS untuk membantu si profesor guna melacak mobil tersebut menggunakan peta jalan-jalan di kota tersebut, posisi awal serta sederetan data arah hadap dari mobil ketika ia bergerak. Program harus dapat menemukan semua kemungkinan mobil berada saat ini.

Peta dari kota tersebut berupa matriks yang berisikan bagian jalan (dapat dilalui kendaraan) dan bagian yang tidak dapat dilalui kendaraan (misalnya bangunan, sungai, dsb). Pada setiap koordinat bilangan bulatnya (elemen matriks) tanda titik (‘.’) menyatakan bagian yang dapat dilalui mobil, tanda ‘X’ menyatakan bagian yang tidak dapat dilalui mobil. Posisi awal mobil adalah bagian yang dapat dilalui tapi ditandai dengan karakter ‘*’ (tentu suatu mobil dapat melalui kembali posisi awal ini).

Pada setiap arah gerakan dipastikan alat pada mobil akan memancarkan sinyal tepat satu kali (mungkin pemicu alat untuk mengirimkan sinyal ada pada sistem setir mobil). Juga pada suatu arah dipastikan mobil bergerak melalui satu atau lebih titik koordinat peta.

Format Masukan

Masukan adalah file teks bernama LACAK.IN yang berisi data dalam format sebagai berikut.

1. Baris pertama dari file masukan berisi dua bilangan integer R dan C, 1 ≤ R ≤ 50, 1 ≤ C ≤ 50, yang dipisahkan oleh suatu karakter spasi, masing-masing menyatakan baris dan kolom dari peta kota tersebut.

2. Pada setiap dari R baris berikutnya terdapat deretan C buah karakter: ‘X’, ‘.’ atau ‘*’ yang menjelaskan bagian-bagian dari peta seperti pada penjelasan di atas.

3. Setelah itu, pada baris ke (R+2) tedapat bilangan integer N, 1 ≤ N ≤ 1000, yang menyatakan banyaknya sinyal arah mobil yang terekam.

4. Masing-masing dari N baris berikutnya berisi string-string NORTH, SOUTH, WEST dan EAST, yang menyatakan arah gerakan mobil.

5. Tidak ada dua sinyal berurutan yang sama.

Format Keluaran

Keluaran adalah file teks dengan nama LACAK.OUT. Keluaran berisi peta dari kota tersebut dalam R baris sebagaimana dalam file masukan, namun dengan sejumlah krakter ‘*’ yang menandai kemungkinan mobil itu berhenti. Jika titik semula bertanda ‘*’ dan akhirnya tidak bertanda ‘*’ haruslah menjadi bertanda ‘.’.

Contoh


LACAK.IN

3 4

….

*..X

X.X.

2

EAST

NORTH

LACAK.OUT

.**.

…X

X.X.

LACAK.IN

4 5

…..

.X…

…*X

X.X..

3

NORTH

WEST

SOUTH

LACAK.OUT

…..

*X*..

*.*.X

X.X..

LACAK.IN

10 9

……..X

X..XX..X.

.X.XX.X..

…XX….

…XX….

.XXX..XX.

…….X.

..XXX.X..

X.X….X.

*…..X..

4

EAST

NORTH

EAST

SOUTH

LACAK.OUT

……..X

X..XX.*X.

.X.XX.X..

…XX….

…XX.***

.XXX..XX*

…….X*

..XXX*X.*

X.X..*.X*

….**X.*



Soal-soal lainnya: [Multipal [Bebek ] [Lacak ] [Paste ] [Labirin ]


MENEBAK KARTU

Badu dan Amat bermain suatu permainan kartu yang cukup mengasyikan. Badu memiliki N kartu (N bilangan kelipatan tiga, N=3K) masing-masing kartu bertuliskan angka 1 sampai dengan N. Setiap kartu ditulisi nomor yang sama pada kedua sisinya dan tidak ada dua kartu yang bernomor sama.

Peraturan permainannya adalah sebagai berikut.

1. Saat permainan dimulai kartu-kartu tersusun dalam tumpukan secara terurut (dari teratas: 1, 2, … N).

2. Mula-mula Amat memilih satu angka dari antara himpunan {1, 2, ../…, N} untuk ditebak oleh Badu.

3. Kemudian Badu meletakkan kartu-kartu dimeja di dalam K baris dan tiga kolom dimulai dari yang paling atas menempati baruis pertama dari kolom kiri ke arah kanan, kemudian baris kedua dari kiri ke kanan, dan seterusnya hingga kartu terakhir di baris terakhir pada posisi paling kanan.

4. Amat kemudian menyatakan kepada Badu nomor kolom dimana berada bilangan yang ia pilih.

5. Badu kemudian mengambil kartu dari kolom pertama dengan pengambilan dilakukan dari baris pertama, kedua, dan seterusnya, kemudian mengambil kartu-kartu kolom kedua dengan cara yang sama dan akhirnya kolom ketiga juga dengan cara yang sama.

6. Badu kemudian meletakkan kembali ke atas meja dengan urutan seperti sebelumnya tanpa pengocokan kartu.

7. Dengan urutan kartu yang baru Setiap kali Badu meletakkan seluruh kartu ke atas meja, Amat menyebutkan pada kolom keberapa yang berisikan bilangan yang ia pilih.

8. Demikian Badu meletakkan kartu ke atas meja dan Amat menyebutkan nomor kolom berturut-turut sampai Badu bisa menebak berapa angka yang diambil Amat atau D peletakkan telah dilakukan (D berapa kali maksimum Amat boleh menjawab).

Misalnya untuk N = 12 Amat memilih 11. Mula-mula kartu-kartu terurut sebagai 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 dan jika diletakkan akan tersusun sebagai berikut diikuti oleh susunan 3 peletakan berikutnya:

1

2

3

4

5

6

7

8

9

10

11

12

Jawab Amat: 2

1

4

7

10

2

5

8

11

3

6

9

12

Jawab Amat: 2

1

10

8

6

4

2

11

9

7

5

3

12

Jawab Amat: 1

1

6

11

5

10

4

9

3

8

2

7

12

Jawab Amat: 3


Untuk contoh di atas Badu sebenarnya dapat menjawab pada jawaban ketiga karena saat jawaban pertama maka kemungkinannya adalah: 2, 5, 8, dan 11, dan jawaban kedua kemungkinannya tingal 2 dan 11. Dan jawaban ketiga memastikan bahwa Amat mengambil bilangan 11. Namun secara umum dalam permainan ini berapa kali Amat menjawab dibatasi hingga D kali menjawab. Dengan demikian, sampai jawaban Amat ke D bisa terjadi dalam permainan ini masih terdapat sejumlah kemungkinan, barulah kemudian Badu terpaksa untuk menebak dari sekian kemungkinan tsb.

Tuliskan suatu program dengan nama KARTU.PAS yang dapat membantu Badu untuk mengetahui bilangan apa yang dipilih Amat berdasarkan setiap jawaban Amat tsb. Jika masih terdapat lebih dari satu kemungkinan maka program harus menyebutkan semua kemungkinan tersebut untuk dipilih Badu sebagai tebakan atas bilangan pilihan Amat yang terurut membesar.

Format Masukkan

Masukan dibaca dari file teks KARTU.IN dengan format sebagai berikut.

1. Baris pertam berisi integer N, 3 ≤ N ≤ 999, yang menyatakan jumlah kartu (N kelipatan 3 dari bilangan integer K).

2. Baris kedua berisi bilangan integer D, 1 ≤ D ≤ 10, yaitu jumlah berapa kali Amat menyebutkan nomor kolom ybs.

3. Dalam D baris selanjutnya berisikan angka-angka 1, 2, atau 3 yang menyatakan nomor kolom yang disebutkan Amat pada setiap peletakan.

Format Keluaran

Keluran dituliskan dalam file teks KARTU.OUT. Keluaran hanya berisikan satu baris. Jika terdapat lebih dari satu kemungkinan maka bilangan-bilangan tsb dituliskan membesar dan tetap dalam satu baris serta dipisahkan satu spasi.

Contoh


KARTU.IN

6

1

2

KARTU.OUT

2 5

KARTU.IN

12

2

3

1

KARTU.OUT

6

KARTU.IN

18

2

1

3

KARTU.OUT

7 16



Soal-soal lainnya: [Multipal [Kartu ] [Lacak ] [Paste ] [Labirin ]


MENGATUR BEBEK

Pak Dengklek berternak bebek. Ia memiliki sejumlah varietas (jenis) bebek yang ia ternakan. Jumlah bebek setiap varietas persis sama. Suatu hari Pak Dengklek hendak pergi mengangon para bebek. Bebek-bebek jika diangon suka berjalan membentuk barisan panjang satu-satu. Para bebek baru mau berjalan kalau barisan mereka sudah berada dalam pengurutan yang benar. Karena selama ini Pak Dengklek terlalu memanja para bebek itu, mereka menjadi malas untuk mengatur diri sendiri dan mereka menunggu diatur oleh Pak Dengklek. Pak Dengklek mengatur urutan barisan dengan mengangkat dan menyisipkan bebek-bebek pada urutan yang seharusnya.

Para bebek mempunyai aturan pengurutan barisan yang unik. Bebek-bebek dari varietas yang sama selalu berada dalam satu berderetan dan tidak mau terpisahkan, jadi selalu ingin berurutan. Dalam setiap varietasnya, bebek-bebek berbaris dari yang terkecil ke yang terbesar. Urutan antara varietas dalam barisan tidaklah penting. Berhubung hari sudah siang, Pak Dengklek harus mengatur bebek-bebek sesegera mungkin sehingga ia perlu urutan pemindahan sesedikit mungkin. Satu kali pemindahan adalah menarik mengangkat satu bebek (otomatis bebek-bebek di belakangnya maju mengisi ruang yang ditinggalkan) dan menyisipan di tempat baru (otomatis bebek-bebek di belakangnya mundur memberi ruang untuk ditempati).

Tuliskan program BEBEK.PAS yang dapat menemukan jumlah langkah pemindahan minimal untuk mengurutkan para bebek (ingat sebelumnya para bebek sudah berbaris yang mungkin belum terurut).

Format Masukan

Masukan adalah file bernama BEBEK.IN. Baris pertama berisi dua integer C dan N yang dipisahkan oleh satu spasi. C adalah jumlah varietas bebek (1 ≤ C ≤ 4), dan N adalah jumlah bebek dari setiap varietas (1 ≤ N ≤ 100).

Setiap dari C*N baris berikutnya terdapat pasangan dua bilangan integer X dan Y, 1 ≤ XC, 1 ≤ YN, yang dipisahkan oleh satu spasi. X menyatakan nomor varietas dan Y menyatakan ukuran badan bebek. Urutan baris sesuai dengan urutan bebek dalam barisan mula-mula.

Tidak ada dua bebek dari varietas yang sama memiliki ukuran badan yang sama (dua baris memiliki data X dan Y yang sama).

Format Keluaran

Keluaran adalah file BEBEK.OUT. Keluaran hanya berisi satu bilangan yang menyatakan jumlah paling sedikit pemindahan bebek untuk menyusun para bebek sesuai dengan urutan yang dikehendaki sehingga mereka mau berjalan.

Contoh-contoh

BEBEK.IN

2 2

2 1

1 2

1 1

2 2

BEBEK.OUT

2

BEBEK.IN

4 1

2 1

3 1

1 1

4 1

BEBEK.OUT

0

BEBEK.IN

3 2

3 2

2 2

1 1

3 1

2 1

1 2

BEBEK.OUT

2



Soal-soal lainnya: [Bebek ] [Kartu ] [Lacak ] [Paste ] [Labirin ]


MULTIPALINDROM

Palindrom adalah kata yang dapat dibaca sama saja baik dari kiri ke kanan ataupun dari kanan ke kiri. Suatu palindrom sedikitnya berisi satu huruf. Misalnya, “malam”, “a” dan “ada” masing-masing adalah palindrom. Sebaliknya, setiap kata bukan merupakan palindrom dapat dianggap sebagai deretan sejumlah palindrom. Dengan kata lain, kata tersebut dapat dipecah-pecahkan ke dalam sejumlah palindrom. Jadi, setiap kata pada dasarnya dapat dipandang sebagai multipalindrom yang tersusun atas n palindrom, dengan n > 0. Untuk setiap kata terdapat sejumlah kemungkinan harga n. Dengan definisi itu maka setiap palindrom adalah multipalindrom dengan jumlah minimal n = 1. Misalnya, kata “minimisasi” terdiri atas sedikitnya 2 palindrom yaitu “minim”-“isasi” (Red: ralat dari versi sebelumnya).

Buatlah suatu program dengan nama MULTIPAL.PAS yang akan menghitung jumlah palindrom minimal dari suatu kata yang diberikan.

Format Masukan

File masukan adalah MULTIPAL.IN yang hanya berisi kata untuk dipecah-pecah ke dalam sejumlah palindrom. Karakter-karakter untuk membentuk kata adalah huruf kecil (a–z). Panjang dari kata tidak akan lebih dari 100 huruf.

Format Masukan

Keluaran dituliskan dalam file MULTIPAL.OUT yang menyebutkan jumlah terkecil palindrom yang dapat dibuat.

Contoh-contoh

MULTIPAL.IN

anaban

MULTIPAL.OUT

2

MULTIPAL.IN

abaccbcb

MULTIPAL.OUT

3

MULTIPAL.IN

anavolimilana

MULTIPAL.OUT

5

Penjelasan Contoh:

#1

a naban

#2

aba cc bcb

#3

ana v o limil ana




 

Leave a comment

No comments yet.

Comments RSS TrackBack Identifier URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

  • Blog Stats

    • 78,706 hits