Senin, Januari 23, 2012

pascal

Declaration
Bagian ini meliputi deklarasi untuk label, const, type, var, procedure dan function.
4
Syarat terpenting dalam pembentukan suatu program adalah, bahwa setiap variabel,
type non-standard, label, procedure non-standard, serta function non-standard yang
dipakai didalamnya harus nyatakan (deklarasi) terlebih dahulu pada bagian deklarasi.
Setiap deklarasi tersebut harus bersifat unik (tidak boleh serupa satu sama yang lain).
Penulisan nama dalam deklarasi tersebut harus memenuhi syarat-syarat sebagai
berikut :
- panjang nama maximum 63 character, diawali dengan alphabet
- tidak ada special character kecuali tanda garis bawah ("_")
- tidak boleh serupa dengan reserved word (kata tercadang)
- tidak boleh serupa dengan indentifier lainnya.
Variabel Declaration
Setiap variabel yang digunakan dalam program harus didefinisikan terlebih dahulu
sebelum digunakan. Cara penulisan ini adalah :
Var
: ;
Statement
Bagian ini merupakan inti dari program. Seluruh perintah dan urutannya serta proses
Input/Output dalam program perlu disusun secara teratur oleh penyusun program.
Segala yang ada pada bagian uses maupun deklarasi merupakan pendukung terhadap
isi program.
Bagaimana membuat keterangan ?
Untuk membuat program anda menjadi mudah dibaca dan dimengerti, maka perlu
diberi keterangan yang akan diabaikan oleh kompiler. Untuk membuat keterangan
gunakan tanda kurawal { ini adalah keterangan }, atau (* ini adalah keterangan *).
Type data apa saja yang disediakan Turbo Pascal ?
Adapun type variable yang disediakan pada TURBO PASCAL :
1.Ordinal types
Type data yang mempunyai urutan pasti, dan masih terbagi menjadi
- Integer
Type variable yang beguna untuk pengolahan data yang bulat, type ini masih terbagi
atas berberapa menurut jangkauan data dan ukurannya :
Type Jangkuan Ukuran
Shortint -128..127 8 bit
Integer -32768..32767 16 bit
5
Longint -2147483648..2147483647 32 bit
Byte 0..255 8 bit
Word 0..65535 16 bit
- Char
Type variabel yang berguna untuk pengolahan character ASCII, type character ini
penulisannya ditandai dengan dua buah petik tunggal seperti : 'A', '3','*',#7 untuk
menyatakan ' harus ditulis ''''
- Boolean
Type varibale yang berguna untuk pengolahan hal yang hanya mempunyai dua
ketentuan yaitu benar(TRUE) dan salah(FALSE) saja.
2.Real types
Type variable yang beguna untuk pengolahan data yang tidak bulat, untuk type real
ini juga terbagi atas beberapa :
Type Jangkauan Ketelitian Ukuran
Real 2.9e-39..1.7e38 11-12 digit 6 bit
Single 1.5e-45..3.4e38 ³ 7-8 7-8 digit 4 bit
Double 5.0e-324..1.7e308 15-16 digit 8 bit
Extended 3.4e-4932..1.1e4932 19-20 digit 10 bit
Comp -9.2e18..9.2e18 19-20 digit 8 bit
Untuk pengolahan type variabel diatas di sediakan berbagai jenis operator antara lain
:
Operator Integer Type Real Type
+ Penjumlahan Penjumlahan
- Pengurangan Pengurangan
* Perkalian Perkalian
/ Pembagian Pembagian
DIV Hasil bagi
MOD Sisa Bagi
Operator Integer Type Boolean Type
NOT Bitwise Negation Logical Negation
AND Bitwise AND Logical AND
OR Bitwise inclusive OR Logical inclusive OR
XOR Bitwise exclusive OR Logical exclusive OR
SHL Bitwise shift-left
SHR Bitwise shift-right
Operator relasi yang mengembalikan hasil Boolean
Operator Fungsi
:= Menyatakan nilai
= Sama dengan
<> Tidak sama dengan
< Lebih kecil
> Lebih besar
<= Lebih kecil atau sama dengan
>= Lebih besar atau sama dengan
6
Bagaimana menampilkan tulisan ke layar ?
Pascal menyediakan perintah Write dan Writeln yang dapat anda gunakan untuk
menampilkan tulisan ke layar.
Dapatkah anda memberi contoh program yang menggunakan
variabel ?
{Deklarasi variabel}
var
UmurKu : Byte;
Keterangan : String;
(*Program anda*)
begin
UmurKu:=19;
Keterangan:='Hi, saya sedang belajar Pascal di PentaCOM';
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana kalau saya ingin membaca masukan dari pemakai ?
Perintah Readln dapat digunakan untuk membaca masukan dari pemakai dan
menyimpannya ke suatu variabel.
var
UmurKu : Byte;
Keterangan : String;
begin
Write('Berapa umur anda ? '); Readln(UmurKu);
Write('Komentar anda: '); Readln(Keterangan);
Writeln;
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana membatasi pencetakan tempat desimal untuk data
Real type ?
Untuk menentukan jumlah tempat sebelum desimal dan sesudah desimal anda dapat
menggunakan :x:y setelah variabel yang akan dibatasi pencetakan nilainya, dimana x
adalah jumlah tempat sebelum desimal dan y adalah jumlah tempat setelah desimal.
Silahkan coba koding berikut :
var
Pi : Real;
Begin
Pi := 22/7;
Writeln('Bilangan Pi adalah ', Pi);
Writeln('Bilangan Pi adalah ', Pi:2:3);
end.
7
Modul 2
Unit apa yang perlu saya cantumkan pada bagian uses, kalau saya ingin melakukan
pengaturan layar ?
Turbo Pascal menyediakan suatu unit CRT, yang berisi perintah-perintah pengaturan
layar seperti membersihkan layar, mengatur warna tulisan, warna background,
memindahkan posisi cursor, mode layar, dan membuat window
Ok, saya sudah tahu perintah Clrscr, apa perintah untuk mengatur warna tulisan ?
Pada prinsipnya ada dua cara untuk mengatur warna tulisan yang dicetak dengan
perintah Write dan Writeln, yang pertama adalah perintah :
TextColor(nomor warna);
Dan yang kedua adalah variabel internal dari unit CRT:
Textattr := nomor warna;
Hallo, anda belum memberitahukan kepada saya nomor warna yang dapat saya
gunakan !
Baiklah, berikut ini adalah nomor warna yang mewakili masing-masing warna: 0
(black), 1 (blue), 2 (green), 3 (cyan), 4 (red), 5 (magenta), 6 (brown), 7 (lightgray), 8
(darkgray), (9) lightblue, 10 (lightgreen), 11 (lightcyan), 12 (lightred), 13
(lightmagenta), 14 (yellow), 15 (White).
Saya pernah melihat tulisan warna berkedip-kedip, dapatkah hal tersebut
dilakukan ?
Anda dapat saja melakukan hal tersebut dengan menambahkan angka 128 pada nomor
warna yang anda inginkan, misalnya :
TextColor(4 + 128);
Writeln('Merah dan berkedip-kedip');
Atau :
TextColor(Red + Blink);
Writeln('Merah dan berkedip-kedip');
Pada prinsipnya anda dapat menggunakan konstanta dari masing-masing nomor warna
seperti black, blue, green, dll, untuk menggantikan pemakaian nomor.
Ok, saya sudah mengerti, bagaimana pula dengan warna latar belakang ?
Pengaturan warna latarbelakang dapat menggunakan perintah :
8
TextBackground(nomor warna);
Dalam hal ini nomor warna yang berlaku hanya 0 s/d 7.
Tadi anda ada menyinggung tentang memindahkan posisi cursor, apa gunanya dan
apa perintahnya ?
Pada lingkungan dos, posisi tulisan dilayar dicetak berdasarkan posisi cursor yang
sedang aktif, misalnya sekarang posisi cursor berada di kolom 10, baris 5, maka
perintah :
Writeln('Sedang belajar Pascal di PentaCOM');
Akan menampilkan tulisan tersebut mulai kolom 10 di baris 5.
Jadi misalnya anda ingin mencetak tulisan tersebut pada kolom 20, baris 13, maka
anda harus memindahkan cusor keposisi kolom 20, baris 13, diikuti dengan perintah
pencetakan tulisan tersebut, contoh :
GotoXY(20,13);
Writeln('Tulisan ini dicetak mulai kolom 20, di baris 13);
Bisakah saya mendapatkan nilai posisi cursor yang sedang aktif ?
Bisa, anda bisa menggunakan variabel internal unit CRT, yaitu WhereX, dan WhereY.
GotoXY(5,5);
Write('Turbo');
GotoXY(WhereX+10,3);
Write('Pascal');
Ngomong-ngomong, berapa sih jumlah kolom dan baris pada layar normal ?
Normalnya 80 kolom, 25 baris.
Saya pernah melihat tulisan layar komputer di bandara Polonia yang lebih besar
dari tulisan normal, bagaimana hal tersebut dapat dilakukan ?
Oh, ya. Hal tersebut dapat dilakukan dengan mengatur Mode layar dengan perintah :
TextMode(CO40);
Dan
TextMode(CO80);
Untuk menormalkannya.
Contoh :
Uses CRT;
begin
TextMode(CO40);
Writeln('A Real BIG Characters on screen !');
9
Readln;
TextMode(CO80);
Writeln('Back to normal');
Readln;
end.
He-he-he, saya sudah mengerti trik yang mereka gunakan.
Tunggu dulu, ada satu hal lagi yang belum diberitahu, yaitu membatasi dari
pencetakan dilayar berdasarkan koordinat kiri atas dan koordinat kanan bawah
dengan perintah :
Window(x1, y1, x2, y2);
Dimana x1, y1 adalah koordinat kiri atas dan x2, y2 adalah koordinat kanan bawah.
Contoh :
uses Crt;
begin
ClrScr;
WriteLn('Creating a window from 30,10 to 50,20');
Window(30,10,50,20);
WriteLn('We are now writing in this small window we just created, we'+
'can''t get outside it when writing long lines like this one');
Write('Press any key to clear the window');
ReadKey;
ClrScr;
Write('The window is cleared, press any key to restore to fullscreen');
ReadKey;
{Full Screen is 80x25}
Window(1,1,80,25);
Clrscr;
Writeln('Back in Full Screen');
end.
Ok, apakah anda sudah selesai ?
Belum, sebenarnya masih banyak perintah yang terdapat pada unit CRT, seperti :
Sound(frekuensi);
Delay(milidetik);
NoSound;
Apa pula fungsinya itu ?
Fungsi perintah Sound untuk membunyikan speaker komputer dengan frekuensi
tertentu.
Contoh :
Sound(500);
Tolong, bunyinya tidak berhenti, walaupun programnya sudah selesai !
He-he-he, anda tidak menggunakan perintah NoSound untuk menghentikan efek dari
perintah Sound.
Contoh :
Sound(500);
10
NoSound;
Kok sekarang speaker komputer tidak berbunyi sama sekali ?
Oh, ya, saya lupa menyisipkan delay diantara Sound dan NoSound.
Contoh :
Sound(500);
Delay(1000);
NoSound;
Sebagai programer pemula pascal, saya sering mendapatkan peringatan compiler
akan kesalahan Type Mismatch, dapatkah anda menjelaskan hal tersebut ?
Ok, masalah ini sering saya dengar dari orang yang baru belajar pascal. Memang
pascal adalah bahasa yang sangat ketat dalam variabel dan type data. Berikut ini saya
akan menerangkan konvensi perhitungan dan type data yang dihasilkan :
Konvensi Penjumlah (+), Pengurangan (-), dan Perkalian (*) :
integer dengan integer = integer
integer dengan real = real
real dengan real = real
Konvensi Pembagian (/) :
Selalu menghasilkan real.
Pembagian bulat dengan Div :
Menghasilkan Integer.
Latihan di Lab :
(*Hangman.pas*)
uses crt;
const
havetry=10;
s: array[0..18] of string=
('hello', 'mouse', 'hacher', 'programmer', 'killer', 'teacher', 'splotchier',
'butcher', 'computer', 'pascal', 'house', 'poor', 'children', 'museum',
'security', 'spillway', 'stupidity', 'corrigenda', 'freebooter');
var ch: char;
gue,b,nowwrd,trynow: byte;
s1,wrs,alr: string;
r: boolean;
win: integer;
begin
win:=0;
clrscr;
Writeln('A.Larkin Hangman ESC for exit');
writeln;
11
randomize;
repeat
writeln;
nowwrd:=random(18);
s1:=s[nowwrd];
gue:=0;
wrs:='';
alr:='';
trynow:=havetry;
for b:=1 to length(s[nowwrd]) do write('_');
repeat
gotoxy(20,wherey);
write('You have ',trynow,' tries ');
ch:=readkey;
r:=false;
if ch<>#0 then
repeat
b:=pos(ch,s1);
if (b<>0) and (s1[b]<>#0) then
begin
gotoxy(b,wherey);
write(s1[b]);
alr:=alr+ch;
s1[b]:=#0;
gue:=gue+1;
gotoxy(40,wherey);
write(' ');
r:=true;
end else
if (pos(ch,alr)<>0) and (r=false) then
begin
gotoxy(40,wherey);
write('Already tried!');
end else
if (b=0) and (r=false) then
begin
trynow:=trynow-1;
alr:=alr+ch;
wrs:=wrs+ch;
gotoxy(57,wherey);
write('Wrong: ',wrs);
gotoxy(40,wherey);
write(' ');
end;
until (b=0) or (trynow=0);
until (ch=#27) or (gue=length(s1)) or (trynow=0);
if (trynow=0) then
begin
win:=win-1;
delline;
gotoxy(1,wherey);
write(s[nowwrd]);
gotoxy(20,wherey);
write('You lost! Your scores is ',win);
end else
if (gue=length(s1)) then
begin
win:=win+1;
delline;
gotoxy(1,wherey);
12
write(s[nowwrd]);
gotoxy(20,wherey);
write('You win! Your scores is ',win);
end;
until ch=#27;
end.
Daftar Frekuensi
Nada Frekuensi
C 262
D 294
E 330
F 350
G 392
A 440
B 494
Modul 3
Setelah mencoba program Hangman, sesuatu pertanyaan yang timbul adalah
mengapa komputer dapat mengetahui huruf yang kita masukan ada dalam tulisan
atau tidak ?
Ok, hal tersebut dapat terjadi karena adanya keputusan yang terprogram, artinya
komputer dapat mengambil keputusan untuk berdasarkan aliran logika yang telah
ditentukan sebelumnya yang dikenal sebagai algoritma.
Bagaimana penulisan perintah pengambilan keputusan pada Pascal ?
Salah satu perintah struktur pengambilan keputusan adalah :
If condition Then statement;
Dimana condition adalah sesuatu yang bernilai True atau False, dan statement adalah
perintah yang akan dijalankan.
Dapatkah anda memberikan sebuah contoh pemakaian perintah If ?
Baiklah, misalnya kita akan membuat program menentukan pembayaran berdasarkan
berdasarkan jumlah belanja, jika diatas 100000 (seratus ribu) mendapatkan potongan
3%, maka programnya adalah sebagai berikut :
Uses Crt;
Var
Belanja : Real;
Begin
Clrscr;
Write(‘Jumlah belanja ? ‘); Readln(Belanja);
13
If Belanja > 100000 Then Belanja := Belanja * 0.97;
Writeln(‘Jumlah yang harus anda bayar ‘,Belanja:10:2);
Readln;
End.
Ok, saya mengerti bahwa pada prinsipnya Statement setelah Then akan dijalankan
kalau condition setelah If menghasilkan nilai True. Bagaimana kalau condition True
Statement1 dijalankan, dan sebaliknya Statement2 dijalankan ?
Untuk keputusan seperti ini, pascal menyediakan struktur pengambilan keputusan
berikut:
If condition Then Statement1 Else Statement2;
Atau lebih baik ditulis sebagai
If conditon Then
Statement1
Else
Statement2;
Langsung saya buatkan contoh :
Uses Crt;
Var
Bilangan : Integer;
Begin
Clrscr;
Write(‘Masukan Bilangan ? ‘); Readln(Bilangan);
If (Bilangan Mod 2) = 0 Then
Writeln (‘Genap’)
Else
Writeln (‘Ganjil’);
Readln;
End.
He-he-he, bagaimana kalau keputusannya lebih dari 2, misalnya 4 Statement yang
harus dijalankan berdasarkan masing-masing condition ?
Oh, hal itu bisa dilakukan dengan merangkai beberapa struktur If, misalnya :
If condition1 Then
Statement1
Else
If condition2 Then
Statement2
Else
If condition3 Then
Statement3
Else
Statement4;
14
Jadi pada prinsipnya adalah terdiri dari tiga struktur If.
Misalnya kita akan membuat nilai huruf dari angka dengan kriteria 80 keatas
mendapat A, 70 s/d 79 mendapat B, 60 s/d 69 mendapat C, 50 s/d 59 mendapat D,
dan dibawah 49 mendapat E, maka dapat ditulis menjadi :
if mark>=80 then
grade:='A'
else { 79 or below goes here }
if mark>=70 then
grade:='B'
else { 69 or below goes here }
if mark>=60 then
grade:='C'
else { 59 or below goes here }
if mark>=50 then
grade:='D'
else { 49 or below goes here }
grade:='E';
Wah panjang banget, adakah cara lain untuk melakukan hal tersebut ?
Selain struktur kendali If, pascal juga menyediakan suatu struktur Case, yang akan
menjalankan statement berdasarkan range tertentu, adapun syntaxnya adalah sebagai
berikut :
Case variabel Of
Range1 : Statement1;
Range2 : Statement2;
Range3 : Statement3;

Else StatementN;
End;
Saya akan menggulangi contoh diatas dengan struktur Case :
Case mark of
80..100: grade:='A';
70..79 : grade:='B';
60..69 : grade:='C';
50..59 : grade:='D';
Else grade:='E';
End;
Lebih sederhana bukan.
Opss, hampir lupa, bagaimana kalau statement yang harus dijalankan pada masingmasing
condition lebih dari 1 ?
Ya, benar, sering kita perlu menjalankan beberapa Statement pada masing-masing
condition, untuk keperluan tersebut kita dapat memblok perintah-perintah tersebut
dengan Begin … End;
Contoh :
15
If Belanja > 100000 Then
Begin
Belanja := Belanja * 0.97;
Writeln (‘Anda berhak mendapat potongan 3%’);
End;
Pertanyaan yang terakhir, bagaimana penulisan condition yang terdiri dari
beberapa logika ?
Pertanyaan yang tepat sekali, untuk condition yang terdiri dari beberapa logika dapat
anda gabungkan dengan operasi AND, OR. Misalnya kita akan mencari tahun kabisat.
In the Gregorian calendar, which is the calendar used by most modern countries, the
following rules decides which years are leap years:
1. Every year divisible by 4 is a leap year.
2. But every year divisible by 100 is NOT a leap year
3. Unless the the year is also divisible by 400, then it is still a leap year.
Maka penulisan programnya menjadi :
If ((tahun Mod 4) = 0) And Not (tahun Mod 100 = 0)) Or (tahun Mod 400) = 0 Then
Writeln (‘Tahun Kabisat !’)
Else
Writeln (‘Bukan Tahun Kabisat !’);

pascal

Declaration
Bagian ini meliputi deklarasi untuk label, const, type, var, procedure dan function.
4
Syarat terpenting dalam pembentukan suatu program adalah, bahwa setiap variabel,
type non-standard, label, procedure non-standard, serta function non-standard yang
dipakai didalamnya harus nyatakan (deklarasi) terlebih dahulu pada bagian deklarasi.
Setiap deklarasi tersebut harus bersifat unik (tidak boleh serupa satu sama yang lain).
Penulisan nama dalam deklarasi tersebut harus memenuhi syarat-syarat sebagai
berikut :
- panjang nama maximum 63 character, diawali dengan alphabet
- tidak ada special character kecuali tanda garis bawah ("_")
- tidak boleh serupa dengan reserved word (kata tercadang)
- tidak boleh serupa dengan indentifier lainnya.
Variabel Declaration
Setiap variabel yang digunakan dalam program harus didefinisikan terlebih dahulu
sebelum digunakan. Cara penulisan ini adalah :
Var
: ;
Statement
Bagian ini merupakan inti dari program. Seluruh perintah dan urutannya serta proses
Input/Output dalam program perlu disusun secara teratur oleh penyusun program.
Segala yang ada pada bagian uses maupun deklarasi merupakan pendukung terhadap
isi program.
Bagaimana membuat keterangan ?
Untuk membuat program anda menjadi mudah dibaca dan dimengerti, maka perlu
diberi keterangan yang akan diabaikan oleh kompiler. Untuk membuat keterangan
gunakan tanda kurawal { ini adalah keterangan }, atau (* ini adalah keterangan *).
Type data apa saja yang disediakan Turbo Pascal ?
Adapun type variable yang disediakan pada TURBO PASCAL :
1.Ordinal types
Type data yang mempunyai urutan pasti, dan masih terbagi menjadi
- Integer
Type variable yang beguna untuk pengolahan data yang bulat, type ini masih terbagi
atas berberapa menurut jangkauan data dan ukurannya :
Type Jangkuan Ukuran
Shortint -128..127 8 bit
Integer -32768..32767 16 bit
5
Longint -2147483648..2147483647 32 bit
Byte 0..255 8 bit
Word 0..65535 16 bit
- Char
Type variabel yang berguna untuk pengolahan character ASCII, type character ini
penulisannya ditandai dengan dua buah petik tunggal seperti : 'A', '3','*',#7 untuk
menyatakan ' harus ditulis ''''
- Boolean
Type varibale yang berguna untuk pengolahan hal yang hanya mempunyai dua
ketentuan yaitu benar(TRUE) dan salah(FALSE) saja.
2.Real types
Type variable yang beguna untuk pengolahan data yang tidak bulat, untuk type real
ini juga terbagi atas beberapa :
Type Jangkauan Ketelitian Ukuran
Real 2.9e-39..1.7e38 11-12 digit 6 bit
Single 1.5e-45..3.4e38 ³ 7-8 7-8 digit 4 bit
Double 5.0e-324..1.7e308 15-16 digit 8 bit
Extended 3.4e-4932..1.1e4932 19-20 digit 10 bit
Comp -9.2e18..9.2e18 19-20 digit 8 bit
Untuk pengolahan type variabel diatas di sediakan berbagai jenis operator antara lain
:
Operator Integer Type Real Type
+ Penjumlahan Penjumlahan
- Pengurangan Pengurangan
* Perkalian Perkalian
/ Pembagian Pembagian
DIV Hasil bagi
MOD Sisa Bagi
Operator Integer Type Boolean Type
NOT Bitwise Negation Logical Negation
AND Bitwise AND Logical AND
OR Bitwise inclusive OR Logical inclusive OR
XOR Bitwise exclusive OR Logical exclusive OR
SHL Bitwise shift-left
SHR Bitwise shift-right
Operator relasi yang mengembalikan hasil Boolean
Operator Fungsi
:= Menyatakan nilai
= Sama dengan
<> Tidak sama dengan
< Lebih kecil
> Lebih besar
<= Lebih kecil atau sama dengan
>= Lebih besar atau sama dengan
6
Bagaimana menampilkan tulisan ke layar ?
Pascal menyediakan perintah Write dan Writeln yang dapat anda gunakan untuk
menampilkan tulisan ke layar.
Dapatkah anda memberi contoh program yang menggunakan
variabel ?
{Deklarasi variabel}
var
UmurKu : Byte;
Keterangan : String;
(*Program anda*)
begin
UmurKu:=19;
Keterangan:='Hi, saya sedang belajar Pascal di PentaCOM';
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana kalau saya ingin membaca masukan dari pemakai ?
Perintah Readln dapat digunakan untuk membaca masukan dari pemakai dan
menyimpannya ke suatu variabel.
var
UmurKu : Byte;
Keterangan : String;
begin
Write('Berapa umur anda ? '); Readln(UmurKu);
Write('Komentar anda: '); Readln(Keterangan);
Writeln;
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana membatasi pencetakan tempat desimal untuk data
Real type ?
Untuk menentukan jumlah tempat sebelum desimal dan sesudah desimal anda dapat
menggunakan :x:y setelah variabel yang akan dibatasi pencetakan nilainya, dimana x
adalah jumlah tempat sebelum desimal dan y adalah jumlah tempat setelah desimal.
Silahkan coba koding berikut :
var
Pi : Real;
Begin
Pi := 22/7;
Writeln('Bilangan Pi adalah ', Pi);
Writeln('Bilangan Pi adalah ', Pi:2:3);
end.
7
Modul 2
Unit apa yang perlu saya cantumkan pada bagian uses, kalau saya ingin melakukan
pengaturan layar ?
Turbo Pascal menyediakan suatu unit CRT, yang berisi perintah-perintah pengaturan
layar seperti membersihkan layar, mengatur warna tulisan, warna background,
memindahkan posisi cursor, mode layar, dan membuat window
Ok, saya sudah tahu perintah Clrscr, apa perintah untuk mengatur warna tulisan ?
Pada prinsipnya ada dua cara untuk mengatur warna tulisan yang dicetak dengan
perintah Write dan Writeln, yang pertama adalah perintah :
TextColor(nomor warna);
Dan yang kedua adalah variabel internal dari unit CRT:
Textattr := nomor warna;
Hallo, anda belum memberitahukan kepada saya nomor warna yang dapat saya
gunakan !
Baiklah, berikut ini adalah nomor warna yang mewakili masing-masing warna: 0
(black), 1 (blue), 2 (green), 3 (cyan), 4 (red), 5 (magenta), 6 (brown), 7 (lightgray), 8
(darkgray), (9) lightblue, 10 (lightgreen), 11 (lightcyan), 12 (lightred), 13
(lightmagenta), 14 (yellow), 15 (White).
Saya pernah melihat tulisan warna berkedip-kedip, dapatkah hal tersebut
dilakukan ?
Anda dapat saja melakukan hal tersebut dengan menambahkan angka 128 pada nomor
warna yang anda inginkan, misalnya :
TextColor(4 + 128);
Writeln('Merah dan berkedip-kedip');
Atau :
TextColor(Red + Blink);
Writeln('Merah dan berkedip-kedip');
Pada prinsipnya anda dapat menggunakan konstanta dari masing-masing nomor warna
seperti black, blue, green, dll, untuk menggantikan pemakaian nomor.
Ok, saya sudah mengerti, bagaimana pula dengan warna latar belakang ?
Pengaturan warna latarbelakang dapat menggunakan perintah :
8
TextBackground(nomor warna);
Dalam hal ini nomor warna yang berlaku hanya 0 s/d 7.
Tadi anda ada menyinggung tentang memindahkan posisi cursor, apa gunanya dan
apa perintahnya ?
Pada lingkungan dos, posisi tulisan dilayar dicetak berdasarkan posisi cursor yang
sedang aktif, misalnya sekarang posisi cursor berada di kolom 10, baris 5, maka
perintah :
Writeln('Sedang belajar Pascal di PentaCOM');
Akan menampilkan tulisan tersebut mulai kolom 10 di baris 5.
Jadi misalnya anda ingin mencetak tulisan tersebut pada kolom 20, baris 13, maka
anda harus memindahkan cusor keposisi kolom 20, baris 13, diikuti dengan perintah
pencetakan tulisan tersebut, contoh :
GotoXY(20,13);
Writeln('Tulisan ini dicetak mulai kolom 20, di baris 13);
Bisakah saya mendapatkan nilai posisi cursor yang sedang aktif ?
Bisa, anda bisa menggunakan variabel internal unit CRT, yaitu WhereX, dan WhereY.
GotoXY(5,5);
Write('Turbo');
GotoXY(WhereX+10,3);
Write('Pascal');
Ngomong-ngomong, berapa sih jumlah kolom dan baris pada layar normal ?
Normalnya 80 kolom, 25 baris.
Saya pernah melihat tulisan layar komputer di bandara Polonia yang lebih besar
dari tulisan normal, bagaimana hal tersebut dapat dilakukan ?
Oh, ya. Hal tersebut dapat dilakukan dengan mengatur Mode layar dengan perintah :
TextMode(CO40);
Dan
TextMode(CO80);
Untuk menormalkannya.
Contoh :
Uses CRT;
begin
TextMode(CO40);
Writeln('A Real BIG Characters on screen !');
9
Readln;
TextMode(CO80);
Writeln('Back to normal');
Readln;
end.
He-he-he, saya sudah mengerti trik yang mereka gunakan.
Tunggu dulu, ada satu hal lagi yang belum diberitahu, yaitu membatasi dari
pencetakan dilayar berdasarkan koordinat kiri atas dan koordinat kanan bawah
dengan perintah :
Window(x1, y1, x2, y2);
Dimana x1, y1 adalah koordinat kiri atas dan x2, y2 adalah koordinat kanan bawah.
Contoh :
uses Crt;
begin
ClrScr;
WriteLn('Creating a window from 30,10 to 50,20');
Window(30,10,50,20);
WriteLn('We are now writing in this small window we just created, we'+
'can''t get outside it when writing long lines like this one');
Write('Press any key to clear the window');
ReadKey;
ClrScr;
Write('The window is cleared, press any key to restore to fullscreen');
ReadKey;
{Full Screen is 80x25}
Window(1,1,80,25);
Clrscr;
Writeln('Back in Full Screen');
end.
Ok, apakah anda sudah selesai ?
Belum, sebenarnya masih banyak perintah yang terdapat pada unit CRT, seperti :
Sound(frekuensi);
Delay(milidetik);
NoSound;
Apa pula fungsinya itu ?
Fungsi perintah Sound untuk membunyikan speaker komputer dengan frekuensi
tertentu.
Contoh :
Sound(500);
Tolong, bunyinya tidak berhenti, walaupun programnya sudah selesai !
He-he-he, anda tidak menggunakan perintah NoSound untuk menghentikan efek dari
perintah Sound.
Contoh :
Sound(500);
10
NoSound;
Kok sekarang speaker komputer tidak berbunyi sama sekali ?
Oh, ya, saya lupa menyisipkan delay diantara Sound dan NoSound.
Contoh :
Sound(500);
Delay(1000);
NoSound;
Sebagai programer pemula pascal, saya sering mendapatkan peringatan compiler
akan kesalahan Type Mismatch, dapatkah anda menjelaskan hal tersebut ?
Ok, masalah ini sering saya dengar dari orang yang baru belajar pascal. Memang
pascal adalah bahasa yang sangat ketat dalam variabel dan type data. Berikut ini saya
akan menerangkan konvensi perhitungan dan type data yang dihasilkan :
Konvensi Penjumlah (+), Pengurangan (-), dan Perkalian (*) :
integer dengan integer = integer
integer dengan real = real
real dengan real = real
Konvensi Pembagian (/) :
Selalu menghasilkan real.
Pembagian bulat dengan Div :
Menghasilkan Integer.
Latihan di Lab :
(*Hangman.pas*)
uses crt;
const
havetry=10;
s: array[0..18] of string=
('hello', 'mouse', 'hacher', 'programmer', 'killer', 'teacher', 'splotchier',
'butcher', 'computer', 'pascal', 'house', 'poor', 'children', 'museum',
'security', 'spillway', 'stupidity', 'corrigenda', 'freebooter');
var ch: char;
gue,b,nowwrd,trynow: byte;
s1,wrs,alr: string;
r: boolean;
win: integer;
begin
win:=0;
clrscr;
Writeln('A.Larkin Hangman ESC for exit');
writeln;
11
randomize;
repeat
writeln;
nowwrd:=random(18);
s1:=s[nowwrd];
gue:=0;
wrs:='';
alr:='';
trynow:=havetry;
for b:=1 to length(s[nowwrd]) do write('_');
repeat
gotoxy(20,wherey);
write('You have ',trynow,' tries ');
ch:=readkey;
r:=false;
if ch<>#0 then
repeat
b:=pos(ch,s1);
if (b<>0) and (s1[b]<>#0) then
begin
gotoxy(b,wherey);
write(s1[b]);
alr:=alr+ch;
s1[b]:=#0;
gue:=gue+1;
gotoxy(40,wherey);
write(' ');
r:=true;
end else
if (pos(ch,alr)<>0) and (r=false) then
begin
gotoxy(40,wherey);
write('Already tried!');
end else
if (b=0) and (r=false) then
begin
trynow:=trynow-1;
alr:=alr+ch;
wrs:=wrs+ch;
gotoxy(57,wherey);
write('Wrong: ',wrs);
gotoxy(40,wherey);
write(' ');
end;
until (b=0) or (trynow=0);
until (ch=#27) or (gue=length(s1)) or (trynow=0);
if (trynow=0) then
begin
win:=win-1;
delline;
gotoxy(1,wherey);
write(s[nowwrd]);
gotoxy(20,wherey);
write('You lost! Your scores is ',win);
end else
if (gue=length(s1)) then
begin
win:=win+1;
delline;
gotoxy(1,wherey);
12
write(s[nowwrd]);
gotoxy(20,wherey);
write('You win! Your scores is ',win);
end;
until ch=#27;
end.
Daftar Frekuensi
Nada Frekuensi
C 262
D 294
E 330
F 350
G 392
A 440
B 494
Modul 3
Setelah mencoba program Hangman, sesuatu pertanyaan yang timbul adalah
mengapa komputer dapat mengetahui huruf yang kita masukan ada dalam tulisan
atau tidak ?
Ok, hal tersebut dapat terjadi karena adanya keputusan yang terprogram, artinya
komputer dapat mengambil keputusan untuk berdasarkan aliran logika yang telah
ditentukan sebelumnya yang dikenal sebagai algoritma.
Bagaimana penulisan perintah pengambilan keputusan pada Pascal ?
Salah satu perintah struktur pengambilan keputusan adalah :
If condition Then statement;
Dimana condition adalah sesuatu yang bernilai True atau False, dan statement adalah
perintah yang akan dijalankan.
Dapatkah anda memberikan sebuah contoh pemakaian perintah If ?
Baiklah, misalnya kita akan membuat program menentukan pembayaran berdasarkan
berdasarkan jumlah belanja, jika diatas 100000 (seratus ribu) mendapatkan potongan
3%, maka programnya adalah sebagai berikut :
Uses Crt;
Var
Belanja : Real;
Begin
Clrscr;
Write(‘Jumlah belanja ? ‘); Readln(Belanja);
13
If Belanja > 100000 Then Belanja := Belanja * 0.97;
Writeln(‘Jumlah yang harus anda bayar ‘,Belanja:10:2);
Readln;
End.
Ok, saya mengerti bahwa pada prinsipnya Statement setelah Then akan dijalankan
kalau condition setelah If menghasilkan nilai True. Bagaimana kalau condition True
Statement1 dijalankan, dan sebaliknya Statement2 dijalankan ?
Untuk keputusan seperti ini, pascal menyediakan struktur pengambilan keputusan
berikut:
If condition Then Statement1 Else Statement2;
Atau lebih baik ditulis sebagai
If conditon Then
Statement1
Else
Statement2;
Langsung saya buatkan contoh :
Uses Crt;
Var
Bilangan : Integer;
Begin
Clrscr;
Write(‘Masukan Bilangan ? ‘); Readln(Bilangan);
If (Bilangan Mod 2) = 0 Then
Writeln (‘Genap’)
Else
Writeln (‘Ganjil’);
Readln;
End.
He-he-he, bagaimana kalau keputusannya lebih dari 2, misalnya 4 Statement yang
harus dijalankan berdasarkan masing-masing condition ?
Oh, hal itu bisa dilakukan dengan merangkai beberapa struktur If, misalnya :
If condition1 Then
Statement1
Else
If condition2 Then
Statement2
Else
If condition3 Then
Statement3
Else
Statement4;
14
Jadi pada prinsipnya adalah terdiri dari tiga struktur If.
Misalnya kita akan membuat nilai huruf dari angka dengan kriteria 80 keatas
mendapat A, 70 s/d 79 mendapat B, 60 s/d 69 mendapat C, 50 s/d 59 mendapat D,
dan dibawah 49 mendapat E, maka dapat ditulis menjadi :
if mark>=80 then
grade:='A'
else { 79 or below goes here }
if mark>=70 then
grade:='B'
else { 69 or below goes here }
if mark>=60 then
grade:='C'
else { 59 or below goes here }
if mark>=50 then
grade:='D'
else { 49 or below goes here }
grade:='E';
Wah panjang banget, adakah cara lain untuk melakukan hal tersebut ?
Selain struktur kendali If, pascal juga menyediakan suatu struktur Case, yang akan
menjalankan statement berdasarkan range tertentu, adapun syntaxnya adalah sebagai
berikut :
Case variabel Of
Range1 : Statement1;
Range2 : Statement2;
Range3 : Statement3;

Else StatementN;
End;
Saya akan menggulangi contoh diatas dengan struktur Case :
Case mark of
80..100: grade:='A';
70..79 : grade:='B';
60..69 : grade:='C';
50..59 : grade:='D';
Else grade:='E';
End;
Lebih sederhana bukan.
Opss, hampir lupa, bagaimana kalau statement yang harus dijalankan pada masingmasing
condition lebih dari 1 ?
Ya, benar, sering kita perlu menjalankan beberapa Statement pada masing-masing
condition, untuk keperluan tersebut kita dapat memblok perintah-perintah tersebut
dengan Begin … End;
Contoh :
15
If Belanja > 100000 Then
Begin
Belanja := Belanja * 0.97;
Writeln (‘Anda berhak mendapat potongan 3%’);
End;
Pertanyaan yang terakhir, bagaimana penulisan condition yang terdiri dari
beberapa logika ?
Pertanyaan yang tepat sekali, untuk condition yang terdiri dari beberapa logika dapat
anda gabungkan dengan operasi AND, OR. Misalnya kita akan mencari tahun kabisat.
In the Gregorian calendar, which is the calendar used by most modern countries, the
following rules decides which years are leap years:
1. Every year divisible by 4 is a leap year.
2. But every year divisible by 100 is NOT a leap year
3. Unless the the year is also divisible by 400, then it is still a leap year.
Maka penulisan programnya menjadi :
If ((tahun Mod 4) = 0) And Not (tahun Mod 100 = 0)) Or (tahun Mod 400) = 0 Then
Writeln (‘Tahun Kabisat !’)
Else
Writeln (‘Bukan Tahun Kabisat !’);