MODUL PASCAL

Penggunaan Turbo Pascal
Dari modus prompt DOS, hal yang dilakukan sbb:
 A:\> turbo

Menu dalam Pascal :
a. File  (Alt-F)
    Load / Pick    : untuk mengambil  program yang sudah ada  di disk kerja.
    New      : untuk membuat program baru.
    Save       : untuk menyimpan program.
    Write to      : untuk merekam program ke suatu file.
    Directory      : untuk menampilkan directory.
    Change dir    : untuk mengganti direktory yang aktif.
    OS Shell      : untuk menjalankan perintah-printah DOS
    Quit       : mengakhiri turbo  Pascal dan  kembali  keprompt DOS


b. Edit (Alt-E)
          Digunakan untuk keperluan memperbaiki program.

c. Run  (Alt-R) 
          Digunakan   untuk  menjalankan  program  yang   ada   dijendela edit.

d. Compile (Alt-C)
          Digunakan untuk mengkompilasi program.
          Destination Memory (disimpan di memory).
          Destination Disk (disimpan di disk dengan ext .EXE).

e. Options  (Alt-O)
          Digunakan  untuk  mengatur/menentukan kembali bagaimana  F1-help,  F2-Save
F3-new file,  F4-import data, F9-expand, F10-co ntract dan  Esc-exit integrated environment
bekerja.

f. Debug dan Break/Watch (Alt-D & Alt-B)
          Digunakan untuk melacak program.mengaktifkan Debug & Break/Watch.

**Cat :  tekan Esc untuk meninggalkan menu.
 

Struktur Program Pascal
Secara  ringkas, struktur suatu prog ram Pascal  dapat  terdiri dari :
1.   Judul Program
2.   Tubuh Program
Tubuh program dibagi menjadi dua bagian utama :
         a. Bagian deklarasi
              - deklarasi label
              - deklarasi konstanta
              - deklarasi tipe
              - deklarasi variabel/perubah
              - deklarasi prosedur
              - deklarasi fungsi
         b. Bagian Pernyataan/Terproses

Cat : baris-baris  komentar   untuk     memperjelas   program    diletakkan     diantara     tanda (*
dan *)  atau  { dan } . 

1. Judul program
Judul  program  ini digunakan untuk memb eri nama  program  dan sifatnya  
optional.  Jika  ditulis harus terletak pada awal  dari program  dan  diakhiri   dengan titik
koma (;).
Contoh penulisan judul program :
PROGRAM latihan;
PROGRAM latihan(input,output);
PROGRAM lat_1;
PROGRAM lat_satu(output);

2. Bagian Pernyataan/Terproses
Bagian   ini  adalah bagian yang akan terproses dan   terdapat dalam    suatu  blok  yang 
diawali  dengan  BEGIN  dan   di akhiri dengan    END    (penulisan   END diikuti   dengan 
tanda  titik).
Bagian   ini   berisi   pernyataan /   statamen    yang  merupakan instruksi  program. 
Setiap statemen diakhiri dengan tanda titik koma (;).
Bentuk umumnya adalah sbb :
                               BEGIN
                                    ...
                                    statemen;
                                    ...
                               END.

3. Bagian deklarasi
Bagian   ini   menjelaskan / memperkenalkan secara rinci semua data   yang akan 
digunakan pada suatu program. Dalam penulisannya tidak boleh  sama  dengan kata-kata
cadangan (reserved words)  dan selalu diakhiri dengan titik koma (;).

Deklarasi label
Deklarasi  label   digunakan   Jika   pada  penulisan  program akan menggunakan 
statemen GOTO (untuk meloncat ke suatu statement tertentu).
Contoh :
                 PROGRAM cetak;
                         LABEL satu,akhir;
                         BEGIN
                              WRITELN('STMIK');
                              GOTO SATU;
                              WRITELN('BINA');
                              satu:
                              WRITELN('GUNADARMA');
                              GOTO akhir;
                              WRITELN('SARANA');
                              akhir:
                         END.

Bila program di atas dijalankan, output sbb :
                   STMIK
                   GUNADARMA

Deklarasi konstanta
Deklarasi   ini  digunakan  untuk   mengidentifikasikan   data yang   nilainya 
sudah ditentukan dan pasti, tidak  dapat  dirubah dalam program.

Contoh :
                    PROGRAM CETAK_2(OUTPUT);
                         CONST a = 50;  (* selalu menggunakan tanda = *)
                               b = 'INDONESIA Merdeka';
                         BEGIN
                              WRITELN(a,' TAHUN ');
                              WRITELN(b);
                         END.

Bila program dijalankan, output sbb :
                   50 tahun
                   INDONESIA Merdeka

Deklarasi tipe
Deklarasi ini digunakan  untuk  menyebutkan   tipe  setiap  data yang   akan 
digunakan pada program Pascal. Tipe  data   menentukan jangkauan  nilai yang mungkin
dari data yang digunakan
Contoh :
               PROGRAM SATU;
               TYPE bulat  = INTEGER;  { selalu  menggunakan = }
                          hasil,pecahan = REAL;
                          ket           = STRING[20];
               BEGIN
                          pecahan := 2.52;
                          bulat := 2;
                          hasil := pecahan + bulat;
                          ket := 'hasil penjumlahan = ';
               WRITE(ket,hasil:4:2);
               END.
Output program, sbb :  hasil penjumlahan = 4.52

Deklarasi variabel/perubah
Deklarasi   ini  berisi data-data yang bisa  berubah-ubah   nilainya   di  dalam program. 
Deklarasi variabel harus di  letakkan setelah  deklarasi  tipe  (jika ada). 
Contoh :
                         VAR satu : INTEGER;
                                  dua  : INTEGER;
                                  a    : REAL;
                                  b    : REAL;          { selalu menggunakan : }
                         BEGIN
                                  satu := 5;
                                  dua := 4;
                                  a := 2.3;
                                  b := 5+4*2.3;        { hasil real }
                         WRITE('hasil = ',b:4:1);
                         END.

Output program :   hasil = 14.2

Program diatas  bisa ditulis sbb :
                         VAR satu,dua : INTEGER;
                                  a,b      : REAL;
                BEGIN
                              ...
                              statement;
                              ...
                         END.

Contoh jika terdapat deklarasi tipe :
                         TYPE 
bilangan = integer;
                         VAR 
satu,dua,a   : bilangan;
                                     b              : real;
                         BEGIN
                              ...
                              statement;
                              ...
                         END.

Deklarasi prosedur dan Fungsi 
Program   dapat  dibagi menjadi  beberapa   bagian/subprogram, yang    terdiri
dari satu program utama dan satu /  lebih  program bagian  (bisa  berupa  prosedur / 
fungsi).  Deklarasi   prosedure/ fungsi terletak pada subprogram yang menggunakannya.

Tipe Data
Tipe  Data dapat terletak pada deklarasi variabel maupun  padadeklarasi tipe.
Pascal menyediakan beberapa macam tipe data,  yang terdiri dari :
1. Tipe data sederhana/skalar, terdiri dari :
                      1.1. Tipe data standar/predefinisi
                         1.1.1. bulat (integer)
                         1.1.2. real
                         1.1.3. karakter
                         1.1.4. string
                         1.1.5. logika (boolean)
                      1.2. Tipe data didefinisikan pemakai :
                         1.2.1. subjangkauan (subrange)
                         1.2.2. terbilang (enumerated)
2. Tipe data terstruktur, terdiri dari :
                      2.1. larik (array)
                      2.2. rekaman (record)
                      2.3. berkas (file)
                      2.4. himpunan (set)
3. Tipe data penunjuk (pointer)

1.1. Tipe data standar
1.1.1. Tipe data integer
Tipe   integer   adalah bilangan yang tidak  mempunyai   titik desimal/bilangan  pecahan. 
Integer terdiri  dari  beberapa  tipe, yaitu :
- byte,      dengan jangkauan nilai           0..255
- shortint, dengan jangkauan nilai        -128..127
- integer,  dengan jangkauan nilai      -32768..32767
- word,     dengan jangkauan nilai           0..65535
- longint,  dengan jangkauan nilai -2147483648..2147483647

Operator yang dapat digunakan pada data tipe integer :
 +,   penjumlahan
 -,   pengurangan
 *,   perkalian
 div,   pembagian
 mod,  sisa pembagian

Contoh :
             VAR a,b,jumlah1,jumlah2 : INTEGER;
             BEGIN
                  jumlah1:=10;
                  jumlah2:=3;
                  a:=jumlah1 DIV jumlah2;
                  b:=jumlah1 MOD jumlah2;
                  WRITELN('HASIL A = ',a);
                  WRITELN('HASIL B =',b);
             END.
hasil program :    hasil a = 3
                            hasil b = 1

1.1.2. Tipe data real
Tipe  real  adalah  bilangan  yang  meng andung pecahan, palingsedikit  harus ada satu
digit  sebelum dan sesudah titik  desimal.
Operator yang dapat digunakan pada data  tipe real adalah :
 +   penjumlahan
 -   pengurangan
 *   perkalian
 /   pembagian

Contoh :
                      VAR nilai1,nilai2,hasil : REAL;
                      BEGIN
                           nilai1 := 2.52;
                           nilai2 := 3.2;
                           hasil := nilai1 + nilai2;
                           WRITE('HASIL PENJUMLAHAN = ',hasil:4:2);
                      END.
             Output program, sbb :   hasil penjumlahan = 5.72

1.1.3. Tipe data karakter
Nilai    data   karakter   berupa   sebuah   karakter     yang ditulis diantara tanda  petik
tunggal,  misalnya :  'A', 'b', '@', dan sebagainya. Karakter yang dapat diterima oleh
komputer :
             huruf besar/kecil   : A,B,C,...,Z / a,b,...,z
             digit               : 1,2,3,...,9
             operator aritmatika : * / + -
             tanda baca          : , . ; : ? !
             simbol khusus       : $  @  {  } ( ) [ ] % #
             spasi

Contoh :
             VAR nilai : CHAR;
             BEGIN
                  nilai :='A';
                  WRITELN('NILAI TERBAIK = ',nilai);
             END.
             hasilnya :  nilai terbaik = A

1.1.4. Tipe data string
Nilai  data   string   adalah   satu   atau    lebih   karakteryang   terletak  diantara  tanda
petik tunggal, misal :  'GUNADARMA'.   Bila     panjang   dari suatu  string  di  dalam 
deklarasi variabel tidak disebutkan, maka dianggap panjangnya 255 karakter.

Contoh :
             VAR kata1 : STRING[5];
                 kata2 : STING[9];
                 kata : CHAR;
             BEGIN
                  kata1 :='STMIK';
                  kata2 :='GUNADARMA';
                  kata :=' ';                  { karakter berupa spasi }
                  WRITELN(kata1,kata,kata2);
             END.
             hasil :   STMIK GUNADARMA

1.1.5. Tipe data boolean
Data tipe boolean mempunyai dua nilai, yaitu True dan False.
Contoh :
             VAR
                benar : BOOLEAN;
             BEGIN
                  benar := TRUE;
                  WRITELN('benar = ',benar);
             END.
             hasil :   benar = TRUE

1.2. Tipe data Terdefinisi
1.2.1 Tipe data subjangkauan
Tipe   data  ini  adalah  tipe  data   yang   dapat    didefinisikan  sendiri oleh pemakai. Nilai
data pada tipe ini  mempunyai jangkauan  tertentu.
Misalkan nilai ujian  mempunyai harga 0 sampai 100, maka nilai ujian dapat didefinisikan
sbb :
                            TYPE
                                 nilai = 0..100;
Contoh :
             VAR sks      : 1..4;
                      angkatan : 89..95;
                      nilai    : 'A'..'E';

1.2.2. Tipe data terbilang
Tipe    data    ini  juga  dapat  didefinisikan  sendiri  oleh pemakai.   Disebut tipe terbilang
karena semua nilai disebut  satu persatu.

Contoh :
          TYPE hari       =  (Senin,Selasa,Rabu,Kamis,Jum'at,Sabtu,Minggu);
               hari_kerja   =  (Senin,Selasa,Rabu,Kamis,Jum'at);
               situasi         = (senang,gembira,sedih,susah);

2.1. Tipe data larik (array)
Larik    (array)   adalah  kumpulan data yang  mempunyai  tipe data    sejenis.  Daftar 
nomor telpon, daftar kode  mata  kuliah, vektor,  matrik   merupakan  contoh larik. 

Contoh  penulisan  tipe larik berdimensi satu sbb :
             CONST batas = 20;
             VAR  telpon  :  ARRAY[1..3]  OF  STRING[7]; { larik   dengan   nama telpon     
mempunyai 3  data dengan   tipe
string }
                      nilai    :  ARRAY[1..5]  OF  INTEGER;      {  larik      dengan      nama  nilai      
mempunyai 5 data  dengan   tipe
integer }
                     gaji  : ARRAY[1..batas] OF REAL; { larik  dengan    namagaji        mempunyai
20    data     dengan tipe real }

Contoh larik yang mempunyai tipe da ta terbilang atau  subjangkauan :
             TYPE batas   = 0..100;
                        keadaan = (baru,lama,bagus,jelek);
             VAR nilai : ARRAY[1..30] OF 'A'..' B';  { larik  dengan    nama nilai       mempunyai
30 data, dan pengisian data   yang   
diperbolehkan        hanya A, B, C, D,
E }
                      angka    :  ARRAY[1..50]  OF  batas;      {  larik      dengan      nama  angka      
mempunyai 50  data, dan  pengisian    
data    yang diperbolehkan   hanya
1,2,3,...,99,100 }
                    baju  :  ARRAY[1..10]  OF  keadaan;      {  larik      dengan      nama  angka      
mempunyai 10 data,dan pengisian
data yang diperbolehkan baru, lama,
bagus, jelek }

Contoh program :
             VAR jumlah : INTEGER;
                  nilai    : ARRAY[1..3] OF 'A'..'E';
                 angka  : ARRAY[1..3] OF INTEGER;
             BEGIN
                  nilai[1] := 'C';
                  nilai[2] := 'B';
                  nilai[3] := 'A';
                  angka[1] := 75;
                  angka[2] := 60;
                  angka[3] := 90;
                  jumlah := angka[1]+angka[2]+angka[3];
                  WRITELN('NILAI = ',angka[2],' MENDAPAT ',nilai[1]);
                  WRITELN('JUMLAH = ',jumlah);
             END.
hasil :  nilai 60 mendapat C
            jumlah = 225

Contoh penulisan tipe larik berdimensi dua sbb :
             VAR  tabel  :  ARRAY[1..3,1..2]  OF BYTE;  { larik tabel mempunyai 3  baris dan 2 
kolom dengan  tipe byte }
             BEGIN tabel[1,1] := 5;    { baris 1, kolom 1 }
                   tabel[1,2] := 7;
                   tabel[2,1] := 21;   { baris 2, kolom 1 }
                   tabel[2,2] := 18;
                   tabel[3,1] := 8;
                   tabel[3,2] := 7;
                   WRITELN('BARIS 1 KOLOM 2 = ',tabel[1,2]);
             END.
             hasil :   BARIS 1 KOLOM 2 = 7

2.2. Tipe data record dan file
( dibahas pada pembahasan record dan file)


SOAL-SOAL :
1. Apa yang kamu ketahui tentang pascal ? jelaskan !
2. Sebutkan  & jelaskan secara  rinci   deklarasi-deklarasi  dalam pascal !
3. Sebutkan langkah-langkah pembuatan program pascal !
4. Terangkan langkah-langkah penyimpanan,pemanggilan,  pengeditan, dan  menjalankan
program pascal !
5. Bagaimana cara mengcompile program pascal menjadi program .EXE!
6. Buat program untuk menampilkan Nama, dan NPM anda !


Statemen-statemen Pada Pascal

RESERVED WORD
Reserved  Word adalah kata-kata baku yang  digunakan  dalam program   dan mempunyai
bentuk serta kegunaan tertentu yang   telah didefinisikan   oleh  Pascal.
Reserved  Word  tidak  boleh  didefinisikan   kembali  oleh pemakai, sehingga tidak dapat
digunakan sebagai pengenal  (Identifier).  Dalam  bahasa pemrograman Pascal, beberapa 
Reserved  Word tersebut adalah :
 
             AND                        DOWNTO                       IN                         OF                      STRING
             ASM                        ELSE                                INHERITED       OR                       THEN
             ARRAY                    END                                INLINE                PACKED             TO
             BEGIN                     EXPORTS                      INTERFACE        PROCEDURE    TYPE
             CASE                       FILE                                LABEL                PROGRAM         UNIT
             CONST                    FOR                                LIBRARY            RECORD             UNTIL
             CONSTRUCTOR   FUNCTION                    MOD                    REPEAT   
             DESTRUCTOR       GOTO                             NIL                       SET
             DIV                          IF                                     NOT                      SHL                    WHILE
             DO                           IMPLEMENTATION     OBJECT               SHR  
            WITH                       VAR                                 USES

Selain  dari  Reserved Word di atas,  Turbo  Pascal  masih memiliki tambahan Reserved
Word berikut :

           ABSOLUTE      ASSEMBLER()                  FAR                     FORWARD          INDEX

BEBERAPA STATEMEN / PERINTAH  PADA 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
1.1. READ/READLN(prosedur)
Digunakan  untuk  memasukkan (input) data lewat  keyboard  ke dalam suatu variabel.
Sintaks:  READ/READLN(V);
Keterangan : 
V               = variabel.
READ       = pada  statemen  ini posisi kursor tidak  pindah ke baris selanjutnya.
READLN = pada statemen ini  posisi  ku rsor  akan pindah ke baris selanjutnya
setelah  di input.

1.2. READKEY(fungsi)
Untuk  pembacaan  sebuah karakter dari  keyboard.  Tipe  data yang dihasilkan adalah
char.
              Sintaks:  READKEY;

1.3. WRITE/WRITELN(prosedur)
Digunakan untuk menampilkan isi dari su atu nilai variabel  di layar.
              Sintaks:  WRITE/WRITELN(V);
              Keterangan : 
V    = variabel.
WRITE/WRITELN    = sama dengan READ/READLN.
              Contoh :
                         PROGRAM in_out;
                         USES CRT;
                         VAR nm  : STRING;
                             npm : STRING;
                         BEGIN
                              CLRSCR;
                              WRITELN('masukkan nama dan NPM ');
                              WRITELN('------------------------------');
                              WRITE('nama anda : ');
                              READLN(nm);
                              WRITELN('NPM anda : ');
                              READLN(npm);
                         END.
Bila dijalankan hasilnya adalah:
                        masukkan nama dan NPM
                        ------------------------------
                        nama anda : ( di input )
                        NPM anda : ( di input )

2.  Statemen-statemen  yang digunakan untuk  pengaturan  letak  di layer
2.1. CLRSCR(prosedur)
Digunakan untuk membersihkan layar.
              sintaks:  CLRSCR;

2.2. GOTOXY(prosedur)
Untuk menempatkan posisi kursor pada layar.
              Sintaks:  GOTOXY(X, Y: Byte);
              Keterangan : 
X = sumbu X (posisi horisontal), Y = sumbu Y (posisi vertikal)


2.3. DELLINE(prosedur)
Untuk menghapus sebuah baris pada posi si kursor dan menaikkan baris-baris
dibawahnya.
              Sintaks:  DELLINE;

2.4. INSLINE(prosedur)
Untuk  menyisipkan sebuah baris pada posisi kursor dan  menggeser kebawah tampilan-tampilan baris dibawahnya.
              Sintaks:  INSLINE;

2.5. DELAY(prosedur)
Untuk menghentikan sejenak proses program.
              Sintaks:  DELAY(MS: Word);
              Keterangan :   MS = ukuran waktu dalam milisecond.
              Contoh :
                 PROGRAM LAYAR;
                 USES CRT;
                 VAR   x : CHAR;
                 BEGIN
                      CLRSCR;
                      GOTOXY(35,10);WRITELN('STMIK GUNADARMA');
                      WRITE(tunggu sebentar...!!');
                      DELAY(5000);
                      INSLINE;
                      GOTOXY(35,11);WRITELN('Top Banget Dech ...');
                      GOTOXY(01,13);WRITELN('Tekan Enter !');
                      DELAY(1000);
                      GOTOXY(15,12);
                      DELLINE;
                      READ(x);
                 END.

Hasilnya adalah :
                                            STMIK GUNADARMA
                                            Top Banget Dech ...
                      tunggu sebentar...!   
                      Tekan Enter !

3. Statemen yang digunakan untuk memanipulasi string
3.1. CONCAT(fungsi)
Untuk menggabungkan 2 atau beberapa variabel string.
              Sintaks:  CONCAT(s1 [,s2,...,sn]: String) : STRING;
              contoh:   CONCAT('ABC','DEF')          { ABCDEF }
3.2. COPY(fungsi)
Mengambil satu(1) atau beberapa karakter dari sebuah string.
              Sintaks:  COPY(S,Index,Count) : String;
              Keterangan :
                     S          = sebuah string (string).
                     Index   = posisi   awal kita  akan  mengambil  beberapa karakter (integer)
                     Count  = banyaknya karakter yang akan diambil   (integer).

3.3. DELETE(prosedur)
Menghapus sebagian karakter dari sebuah string.
              Sintaks:  DELETE(S,Index,Count);
              Keter angan : sama dengan statemen COPY.

3.4. INSERT(prosedur)
Menyisipkan  satu(1) atau beberapa karakter ke  dalam  sebuah string.
              Sintaks:  INSERT(Source,var S,Index);
              Keterangan : 
Source = sumber string untuk disisipi (string)
var  S = string tujuan yang akan disi sipi  oleh string Source (string)
Index  = posisi mulai (integer).

3.5. LENGTH(fungsi)
Memberikan  nilai panjang dari suatu string (jumlah  karakterdalam string).
              Sintaks:  LENGTH(S);
              Keterangan : 
S = string
LENGTH(S) menghasilkan nilai integer.

3.6. POS(fungsi)
Mencari  posisi  sebuah  bagian  string  (substring)  didalam sebuah string.
              Sintaks:  POS(Substr,S); {menghasilkan nilai Byte}
              Keterangan :
Substr    =   substring yang akan dicari  posisinya  di dalam sebuah string S. Bila
bernilai 0 berarti nilai string yang dicari tidak ada.

3.7. STR(prosedur)
Merubah nilai numerik ke dalam nilai string.
              Sintaks:  STR(N,S);
              Keterangan :
                          N = data tipe integer,
                          S = data tipe string.

3.8. VAL(prosedur)
Merubah nilai string ke dalam nilai numerik.
              Sintaks:  VAL(S,N,P);
              Keterangan :
                              S = nilai string,
                              N = nilai real,
                              P  = posisi salah.
Nilai string harus berisi angka, plus atau  minus, bila tidak berarti kesalahan dan letak
kesalahannya ditunjukkan oleh vari abel posisi salah. Jika benar, maka nilai variabel tsb = 0
(nol).

3.9. UPCASE(fungsi)
Memberikan huruf kapital dari argumen.
              Sintaks:  UPCASE(S);
              Keterangan :
                        S = variabel bertipe karakter.
              Contoh :
               PROGRAM mani_string;
               USES CRT;
               VAR  s : STRING;
                          l : INTEGER;
                         h : STRING;
               CONST  a='STMIK';
                              b='STIE ';
                              c='GUNADARMA';
               BEGIN
                    CLRSCR;
                    s:=CONCAT(a,b,c);
                    WRITELN(s);
                    INSERT(' & ',s,6);
                    WRITELN(s);
                    DELETE(s,7,7);
                    WRITELN(s);
                    h:=COPY(s,1,5);
                    WRITELN(h);
                    l:=LENGTH(s);
                    WRITELN('Panjangnya string S : ',l);
                    WRITELN('Po sisi "GUNA" pada nilai S : ',POS('GUNA',s));
               END.

Hasilnya adalah :
                                   STMIKSTIE GUNADARMA
                                   STMIK & STIE GUNADARMA
         STMIK GUNADARMA
                                   STMIK
                                   Panjangnya string S : 15
                                   Posisi "GUNA" pada nilai S : 7

4. Statemen-statemen untuk perhitungan aritmatik
4.1. ABS(fungsi)
Memberikan nilai mutlak dari suatu argumen.
              Sintaks:  ABS(x);

4.2. ARCTAN(fungsi)
Memberikan nilai dari fungsi arctangent dari perhitungan goniometri.
              Sintaks:  ARCTAN(x);
Dimana x dapat bertipe real atau integer dan akan  menghasil kan nilai bertipe real.

4.3. COS(fungsi)
              Memberikan nilai dari fungsi Cosinus.
              Sintaks:  COS(x);

4.4. EXP(fungsi)
Menghitung  nilai  pangkat dari bilangan e  (bilangan  alam),
              yaitu sebesar x.
              Sintaks:  EXP(x);
              x  dapat  bertipe  real at au integer  dan  akan  menghasilkan nilai bertipe real.

4.5. FRAC(fungsi)
Untuk mendapatkan nilai pecahan dari suatu bilangan.
              Sintaks:  FRAC(x);
                        Tipe dari x sama seperti yang diatas.

4.6. INT(fungsi)
Memberikan nilai integer (bilangan bulat) dari suatu variabel dengan membuang bilangan
di belakang koma.
              Sintaks:  INT(X);

4.7. LN(fungsi)
Digunakan  untuk  menghitung nilai  logaritma  alam  (natural logarithm) dari nilai x.
              Sintaks:  LN(x);
4.8. SIN(fungsi)
Memberikan nilai dari fungsi Sinus.
              Sintaks:  SIN(x);

4.9. SQR(fungsi)
Digunakan  untuk menghitung nilai pan gkat kuadrat dari  suatu bilangan.
              Sintaks:  SQR(x);
              Tipe dari x bisa berupa real  maupun integer. Dan hasilnya  akan sama dengan tipe
dari x.

4.10. SQRT(fungsi)
Digunakan untuk menghitung nilai akar dari suatu bilangan.
                Sintaks:  SQRT(x);
                Contoh :
                PROGRAM Aritmatik;
                USES CRT;
                VAR x : REAL;
                BEGIN
                    CLRSCR;
                    WRITE('masukkan nilai dari X = ');
                    READLN(x);
                    IF x<0 THEN x:=ABS(x);
                    WRITELN('Nilai X = ',x:5:2);
                    WRITELN('Nilai eksponentialnya = ',EXP(x):9:3);
                    WRITELN('Nilai logaritma alamnya = ',LN(x):9:3);
                    WRITELN('Nilai integernya = ',INT(x):5:2);
                    WRITELN('Nilai fraksionalnya = ',FRAC(x):5:2);
                    WRITELN('Nilai X dipangkatkan = ',SQRT(x):9:3);
                    WRITELN('Nilai X diakarkan = ',SQRT(x):9:3);
                    WRITE('Nilai X jika dimasukkan dalam ');
                    WRITELN('fungsi SIN,COS,TANGEN : ');
                    WRITELN('- Sinus = ',SIN(x):9:3);
                    WRITELN('- Cosinus = ',COS(x):9:3);
                    WRITELN('- Tangen = ',ARCTAN(x):9:3);
                END.
Hasilnya :
                  masukkan nilai dari X = -2.5
                  Nilai X = 2.50
                  Nilai eksponensialnya = 12,182
                  Nilai logarima alamnya =  0,196
                  Nilai integernya = 2.00
                  Nilai fraksionalnya = 0.50
                  Nilai X dipangkatkan = 6.250
                  Nilai X diakarkan =  1.581
                  

Nilai X jika dimasukkan dalam fungsi SIN,COS,TANGEN :
                  - Sinus = 0.598
                  - Cosinus =  -0.801
                  - Tangen = 1.190

5. Statemen-statemen untuk transfer nilai dari suatu variable 
5.1. CHR(fungsi)

Merubah nilai dari byte ke bentuk karakter yang sesuai dengan kode ASCII.
              Sintaks:  CHR(x);
              Keterangan : x bertipe byte
              contoh :  WRITELN(CHR(61);
              hasilnya : a

5.2. ORD(fungsi)
Merubah  nilai suatu variabel dari bentuk karakter ke  bentuk longint.
              Sintaks:  ORD(X);
              Keterangan : x bertipe char
              contoh : WRITELN(ORD('B');
              hasilnya : 42

5.3. ROUND(fungsi)
Membulatkan data tipe real ke data tipe longint.
              Sintaks:  ROUND(X);
              Keterangan  : Jika nilai pecahan < 0,5 maka dibulatkan  kebawah.
                                    Jika  nilai pecahan > 0,5 maka dibulatkan  keatas.
              contoh : WRITELN('10/3 dibulatkan = ',ROUND(10/3));
              hasilnya : 10/3 dibulatkan = 3

5.4. TRUNC(fungsi)
Membulatkan kebawah data tipe real ke data tipe longint.
              Sintaks:  TRUNC(X);
              contoh    :
              WRITELN('20/3 dibulatkan kebawah = ',TRUNC(20/3));
              hasilnya : 20/3 dibulatkan kebawah = 6

6. Statemen-statemen untuk memanipulasi data
6.1. PRED(fungsi)

Memberikan nilai sebelum nilai argumen dalam urutannya  dalam ASCII.
              Sintaks:  PRED(x);

6.2. SUCC(fungsi)
Memberikan nilai sesudah nilai argumen dalam urutannya  dalam ASCII.
              Sintaks:  SUCC(x);

6.3. INC(fungsi)
Menambah (increments) nilai suatu variabel.
              Sintaks:  INC(x,i);        {i >= 1}

6.4. DEC(fungsi)
Mengurangi (decrements) nilai suatu variabel.
              Sintaks:  DEC(x,i);        {i >=1}
              Contoh :
               PROGRAM Mani_data;
               USES CRT;
               TYPE
                    hari = (hr0,hr1,hr2,h r3,hr4,hr5,hr6,hr7)
               VAR
                    urutanhr : hari;
               CONST
                    namahr : ARRAY[hr1..hr7] OF STRING[6]=
                             ('Senin','Selasa','Rabu','Kamis',
                              'Jumat','Sabtu','Minggu');
               BEGIN
                     WRITELN('DAFTAR  NAMA HARI');
                    urutanhr := hr0;
                    WHILE Urutanhr < hr7 DO
                    BEGIN
                     urutanhr := SUCC(urutanhr);
                     WR ITE('hari ke ',ORD(Urutanhr):2,' adalah ');
                     WRITELN(namahr[urutanhr]);
                    END;
               END.
hasilnya adalah :
                     DAFTAR NAMA HARI
                     hari ke  1 adalah Senin
                     hari ke  2 adalah Selasa
                     hari ke  3 adalah Rabu
                     hari ke  4 adalah Kamis
                     hari ke  5 adalah Jumat
                     hari ke  6 adalah Sabtu
                     hari ke  7 adalah Minggu

7. Statemen-statemen tambahan (warna,suara dan window)
7.1. TEXTCOLOR(prosedur)

Untuk mengatur warna dari karakter-karakter di layar.
              Sintaks:  TEXTCOLOR(color : Byte);
              Catatan : untuk  pilihan warna lihat pada  buku Turbo Pascal.

7.2. TEXTBACKGROUND(prosedur)
Untuk mengatur warna latar belakang dari karakter-karakter dilayar.
              Sintaks:  TEXTBACKGROUND(Color : Byte);

7.3. WINDOW(prosedur)
Untuk  membuat  suatu  jendela (window)  yang  terletak  pada layar.
              Sintaks:  WINDOW(x1,x2,y1,y2 : Byte);
x1,x2  = kordinat kiri atas dengan nilai   maksimal sesuai dengan mode layar.
y1,y2  = kordinat  kanan   bawah   dgn   nilai maksimal sesuai dengan mode layar.
7.4. TEXTMODE(prosedur)
Untuk mengatur lebar layar, 80 kolom atau 40 kolom.
              Sintaks:  TEXTMODE(Mode: Byte);
                        Default = C80

7.5. SOUND(prosedur)
Untuk mengaktifkan suara(beep) pada internal speaker.
              Sintaks:  SOUND(Hz : word);
                        Untuk mengnonaktifkannya, gunakan statemen NOSOUND.
             
Contoh :
                           PROGRAM Layar2;
                           USES CRT;
                           BEGIN
                                CLRSCR;
                                WINDOW(5,5,20,75);
                                TEXTBACKGROUND(RED);
                                TEXTCOLOR(YELLOW);
                                SOUND(220);
                                GOTOXY(10,7);
                                WRITELN('Laboratorium Komputer');
                                GOTOXY(11,7);
                                WRITELN('Manejemen Informatika');
                                NOSOUND;
                           END.



SOAL-SOAL :

Soal  I :
Buatlah  program  dibawah  ini  dengan  tampilan  menggunakan perintah  Window, 
Textcolor, Textbackground,  Gotoxy,  dan  Sound untuk memperindah tampilan.
1.   Mengubah derajat temperatur, dari derajat Celcius  ke  derajat Fahreinheit dan Reamur
2.   Menghitung Luas dan Keliling lingkaran, dengan jari-jari  diketahui (diinput).
3.   Menghitung Luas dan Keliling segitiga sembarang yang  diketahui ke tiga sisinya.
4.   Mencari nilai Sinus, Cosinus, dan Tangen dengan sudut diinput.
5.   Mencari akar dan kuadrat dari suatu nilai (nil ai diinput).
6.   Mencari nilai bulat dan pecahan dari suatu nilai yang  dimasuk kan melalui keyboard (diinput). Nilai pecahan te rsebut dibulatkan sampai 3 angka dibelakang koma (,).
7.   Tampilkan nama dan NPM anda di dalam window, dan terletak  pada tengah-tengah layar.
8.   Tampilkan tulisan 'STMIK GUNADARMA' di dalam window pada  pojok kanan atas dengan ukuran window sama dengan tulisan tersebut.

Soal  II :
Buatlah  program pada soal jenis I (no.  1-6) dengan  tampilan menggunakan  2 window.
Window yang pertama digunakan  untuk  nilai yang diinput. Window yang kedua untuk
hasil dari program (output).

Soal  III :
1.  Buatlah program untuk menggabungkan 2  buah kata yang diinput. Setiap  kata
yang diinput harus berada didalam window yang  dan hasilnya  berada pada
window yang berbeda pula.
2.   Buatlah  program untuk menampilkan window secara  acak  dengan warna
yang berbeda.



Bentuk - Bentuk Perulangan  dan Penyeleksian Kondisi

BENTUK - BENTUK PERULANGAN
Dalam  hampir setiap program yang kompleks mutlak  memerlukan suatu perulangan
dan percabangan. Tujuan perulangan disini  adalah untuk mengulang statement atau blok
statement berulang kali sesuai sejumlah yang ditentukan pemakai. Dalam materi ini akan
memberikan gambaran konsep dasar dari pengertian diatas.

1. Perulangan FOR
Perulangan  dengan  statemen FOR  digunakan   untuk  mengulang statemen atau suatu
blok statemen berulang kali. Perulangan dengan statemen FOR dapat berupa perunlangan
positif dan perulangan negatif.

Perulangan FOR positif
Contoh :
           Perulangan positif untuk satu statement :
            USES CRT;
            VAR
                 i : INTEGER;
            BEGIN
                 FOR i := 1 TO 5 DO WRITELN('STMIK GUNADARMA');
            END.

             Maka bila program diatas dicompile
hasilnya :
                         STMIK GUNADARMA
                         STMIK GUNADARMA
                         STMIK GUNADARMA

Penjelasan : Berati statemen STMIK GUNADARMA akan diulang  sebanyak  5  kali yaitu
dengan menghitung nilai i dari i  ke 1  sampai nilai i terakhir yaitu i ke 5.

Contoh  dengan menggunakan blok statement:
Cara penulisannya dengan pada awal blok diawali dengan BEGIN dan pada
akhir blok diakhiri dengan END;

             USES CRT;
             VAR
                  i : INTEGER;
             BEGIN
                  FOR i:= 1 TO 10 DO
                  BEGIN
                       WRITELN('STMIK GUNADARMA');     {  blok statement  }
                  END;
            END.

Hasil  yang akan didapat akan sama dengan contoh  yang  pertama, tapi yang harus
diingat disini untuk penggunaan blok pa da  perulangan FOR biasanya mempunyai
banyak statement (lebih dari 1  statement)

Contoh 3 :
         Peggunaan perulangan FOR dalam blok statement untuk membuat tabel

            USES CRT;
            VAR
                a,b,c : INTEGER;
                bagi  : REAL;
            BEGIN
                 WRITELN('----------------------------------------------');
                 WRITELN(' a        a*a       a*a*a          1/a        ');
                 WRITELN('----------------------------------------------');
                 FOR a:= 1 TO 10 DO
                 BEGIN
                  b:= a*a;
                  c:=a*a*a;
                  bagi := 1/a;
                  WRITELN(a:4,c:10,d:10,bagi:12:3);
                 END;
                 WRITELN('----------------------------------------------');
            END.
maka hasilnya  :
                 ----------------------------------------------
                  a       a*a       a*a*a            1/a
                 ----------------------------------------------
                  1         1           1          1.000
                  2         4           8          0.500
                  3         9          27          0.333
                  4        16          64          0.250
                  5        25         125          0.200
                  6        36         216          0.167
                  7        49         343          0.143
                  8        64         512          0.125
                  9        81         729          0.111
                 10       100        1000          0.100
                ----------------------------------------------

Perulangan FOR negatif
Perulangan negatif adalah perulangan dengan menghitung (counter) dari besar
ke kecil. Statement yang digunakan adalah FOR-DOWNTO-DO
Contoh :
                 USES CRT;
                 VAR
                        i  : INTEGER ;
                 BEGIN
                      FOR i := 10 DOWNTO 1 DO WRITE(i:3);
                 END.
Hasil :
                 10  9  8  7  6  5  4  3  2  1

Perulangan FOR tersarang
Perulangan  FOR tersarang adalah perulangan FOR  yang  berada pada  perulangan  yang
lainnya. Perulangan yang lebih  dalam  akan diproses  terlebih dahulu sampai habis,
kemudian  perulangan  yang lebih luar baru  akan bertambah, mengerjakan perulangan
yang  lebih dalam lagi mulai dari nilai awalnya dan seterusnya.
Contoh :
          VAR
            a,b : INTEGER;
           BEGIN
              FOR  a := 1 TO 3 DO
              BEGIN
               FOR b := 1 TO 2 DO  WRITE(a :4,b:2);
               WRITELN;
              END;
           END.
Hasil :
          1 1     1 2
          2 1     2 2
          3 1     3 2

2. Perulangan WHILE-DO
Penyeleksian  kondisi  digunakan  untuk  agar  program  dapat menyeleksi kondisi,
sehingga program dapat menentukan tindakan apa yang  harus  dikerjakan, tergantung
dari  kondisi  yang  diseleksi tersebut.   Perulangan WHILE-DO tidak dilakukan jika
kondisi  tidak terpenuhi.
Contoh :
                 USES CRT;
                 VAR  i : INTEGER;
                 BEGIN
                      i := 0;
                      WHILE i < 5 do
                      BEGIN
                       WRITE(i:3);
                       INC(i);    { sama dengan i:=i+1 }
                      END;
                 END.
Hasilnya :
                          0  1  2  3  4

Perulangan WHILE-DO tersarang
Perulangan  WHILE-DO  tersarang (nested  WHILE-DO)  merupakan perulangan 
WHILE-DO yang satu di dalam perulangan  WHILE-DO  yang lainnya.
Contoh :
         USES CRT;
          VAR
            a, b : INTEGER;
          BEGIN
               CLRSCR;
                a:=1;
                b:=1;
               WHILE a < 4 DO  { loop selama a masih lebih kecil dari 4 }
                BEGIN
                     a := a+1;
                    WHILE b < 3 DO { loop selama b masih lebih kecil dari 3 }
                     BEGIN
                       WRITE(a:3,b:2);
                        b:=b+1;
                   END;
               END;
               READLN;
          END.

3. Perulangan REPEAT-UNTIL.
REPEAT-UNTIL  digunakan  untuk  mengulang  statement-statemen atau blok statement
sampai (UNTIL) kondisi yang diseleksi di UNTIL tidak terpenuhi. Sintak dari statement
ini adalah :
Contoh
                 VAR
                       i : INTEGER;
                 BEGIN
                      i:=0;
                      REPEAT
                         i:= i+1;
                         WRITELN(i);
                      UNTIL i=5;
                 END.

hasil :
                 1
                 2
                 3
                 4
                 5

REPEAT-UNTIL tersarang
REPEAT-UNTIL  tersarang adalah suatu peru langan  REPEAT-UNTIL yang satu berada
didalam perulangan REPEAT-UNTIL yang lainnya.
         Contoh :
         VAR
              a,b,c   : REAL;
          BEGIN
               WRITELN('========================================');
               WRITELN(' sisi A      sisi B             Sisi C   ');
               WRITELN(' =======================================');
               a:= 1;
               REPEAT           { perulangan luar }
                b := 0;
                REPEAT     { perulangan dalam }
                 c:=SQRT(a*a+b*b);
                 WRITELN(a:6:2, b:9:2, c:9:2);
                 b:=b+5;
                UNTIL  b>25;  { berhenti jika b lebih besar  dari  5  untuk
                                perulangan dalam }
                     a:=a+1;
               UNTIL  a>3;    { berhenti jika a lebih besar  dari  3  untuk
                                perulangan luar }
               WRITELN(' =======================================');
          END.




BENTUK-BENTUK PERCABANGAN / PENYELEKSIAN KONDISI

1. IF-THEN
Bentuk struktur IF-THEN adalah sebagai berikut :
                             IF Kondisi THEN Statement
Ungkapan  adalah  kondisi yang diseleksi oleh  statement  IF. Bila kondisi yang diseleksi
terpenuhi, maka statement yang  mengikuti THEN akan diproses, sebaliknya bila kondisi
tidak  terpenuhi, maka yang akan diproses statement berikutnya. 
         Misalnya :
               IF Pilihan = 2 THEN
               BEGIN     { jika kondisi terpenuhi, Yaitu jika pilihan = 2 }
                ......
               END
               ELSE      { jika kondisi tidak terpenuhi, yaitu jika pilhan
                           tidak sama dengan 2}
               BEGIN
                .......
               END;

Contoh Program :
         USES CRT;
         VAR
             Nilai : REAL;
         BEGIN
              WRITE('Jumlah Nilai :');
              READLN(nilai);           {  Pemasukan data  }
              IF nilai >60 THEN        {  seleksi kondisi variabel nilai  }
              WRITELN('Lulus')         {  Dilaksanakan  jika  nilai  lebih besar dari 60  }
              ELSE
              WRITELN('Tidak lulus');  {  D ilaksanakan jika variabel  nilai lebih kecil dari 60  }
         END.
         Hasil :
Jika  kita  Memasukan  40 pada varibel  nilai,  Maka  program diatas akan mencetak Tidak
lulus.

IF tersarang (nested IF)
Struktur  IF tersarang merupakan bentuk dari suatu  statement IF  berada  di dalam
lingkungan statemen IF  yang  lainya.  Bentuk statement IF tersarang sebagai berikut :

         IF kondisi1 THEN               atau            IF Kondisi1 THEN
         IF kondisi2 THEN                                 BEGIN
              statemen1                                          IF kondisi2 THEN
         ELSE                                                          statemen1
             statemen2;                                         ELSE
                                                                            statemen2
                                                                       END;

2. CASE-OF
Struktur CASE-OF mempunyai suatu ungkapan lo gika yang disebut dengan  selector dan
sejumlah statemen yang diawali  dengan  suatu label  permasalahan (case label) yang
mempunyai tipe  sama  dengan selector.
Statement yang mempunyai case label yang be rnilai sama dengan case label yang bernilai
sama dengan nilai selector akan  diproses sedang statemen yang lainya tidak.
Bentuk struktur dari CASE-OF :
                CASE Variabel Kondisi OF
                    CASE- LABEL 1; STATEMENT 1;
                    CASE- LABEL 2; STATEMENT 2;
                    ........
                    CASE- LABEL N; STATEMENT N;
                END;                            {  end dari case  }
         Daftar  case  label dapat berupa konstanta, range  dari  konstanta yang  bukan 
bertipe real.

         Contoh program ;
         PROGRAM nilai;
         VAR
               nil : CHAR;
         BEGIN
              WRITE('Nilai Numerik yang didapat :');
              READLN(nil);
              CASE nil OF
                'A': WRITELN('SANGAT BAIK');
                'B': WRITELN('BAIK');
                'C': WRITELN('CUKUP');
                'D': WRITELN('KURANG');
                'E': WRITELN('SANGAT KURANG ');
              END;
         END.
hasil  :
              Nilai Numerik yang didapat : B
              BAIK

Contoh listing program untuk dicoba :

1. Program input data dengan array
         PROGRAM pemakaian_Array_Untuk_10_data_dengan_menggunakan_For;
         USES CRT;
         CONST
            garis='------------------------------------------------------';
         VAR
              nil1,nil2 : ARRAY [1 ..10] OF 0..100; {Array dgn Type subjangkauan}
              npm       : ARRAY [1..10] OF STRING[8];
              nama      : ARRAY [1..10] OF STRING[15];
              n,i,bar   : INTEGER;
              jum       : REAL;
             tl        : CHAR;
         BEGIN
              CLRSCR;
              { pemasukan data dalam array }
              WRITE('MAU ISI BERAPA DATA :');
              READLN(N);
              FOR i:= 1 TO n DO
              BEGIN
                   CLRSCR;
                   GOTOXY(30,4+1); WRITE('DATA KE-:',i:2);
                   GOTOXY(10,5+i); WRITE('NPM     :'); READLN(NPM[i]);
                   GOTOXY(10,6+i); WRITE('NAMA    :'); READLN(NAMA[i]);
                   GOTOXY(10,7+i); WRITE('NILAI 1 :'); READLN(NIL1[i]);
                   GOTOXY(10,8+i); WRITE('NILAI 2 :'); READLN(NIL2[i]);
               END;
              { proses data dalam array }
              CLRSCR;
              GOTOXY(5,4); WRITE(GARIS);
              GOTOXY(5,5); WRITE('NO');
              GOTOXY(9,5); WRITE('NPM');
              GOTOXY(18,5); WRITE('NAMA');
              GOTOXY(34,5); WRITE('NIL.1');
              GOTOXY(41,5); WRITE('NIL.2');
              GOTOXY(47,5); WRITE('RATA');
              GOTOXY(54,5); WRITE('ABJAD');
              GOTOXY(5,6); WRITE(GARIS);
              {  proses Cetak isi array dan seleksi kondisi  }
              bar:=7;
              FOR i:= 1 TO n DO
              BEGIN
                   jum:=(nil1[i]+nil2[i])/2;
                   IF jum>=90 THEN tl:='A'
                   ELSE
                       IF jum>80 THEN tl:='B'
                       ELSE
                           IF jum>60 then tl:='C'
                           ELSE
                               IF jum 50 THEN tl:='D'
                               ELSE
                                   tl:='E';
                   {  cetak hasil yang disimpan di array dan hasil  }
                   {  penyeleksian kondisi  }
                   GOTOXY(5,bar); WRITELN(i:2);
                   GOTOXY(9,bar); WRITELN(NPM[i]);
                   GOTOXY(18,bar); WRITELN(NAMA[i]);
                   GOTOXY(34,bar); WRITELN(NIL1[i]:4);
                   GOTOXY(41,bar); WRITELN(NIL2[i]:4);
                   GOTOXY(47,bar); WRITELN(jum:5:1);
                   GOTOXY(54,bar); WRITELN(tl);
                   bar:=bar+1;
             END;
             GOTOXY(5,bar+1);WRITELN(garis);
             READLN;
         END.

          2. Program jendela bergerak
         PROGRAM Window_Bergerak_dgn_delay;
         USES CRT;
         VAR i : INTEGER;
         BEGIN
              FOR i:=1 TO 15 DO
              BEGIN
                   SOUND(i*100);
                   DELAY(100);
                   NOSOUND;
              END;
              TEXTBACKGROUND(black);
              CLRSCR;
              FOR i := 1 TO 9 DO
              BEGIN
                   TEXTBACKGROUND(white);
                   WINDOW(42-i*4,10-i,38+i*4,15+i);
                   CLRSCR;
                   DELAY(100);
              END;
              TEXTCOLOR(15);
              GOTOXY(28,2);WRITELN('c');
              GOTOXY(8,3); WRITELN('3');
              GOTOXY(28,4); WRITELN('A');
              TEXTCOLOR(black);
              GOTOXY(44,3); WRITELN('3');
              GOTOXY(44,2); WRITELN('&');
              GOTOXY(29,4); WRITELN('U');
              TEXTCOLOR(red*25);
              GOTOXY(30,3); WRITELN('B E L A J A R');
              TEXTCOLOR(black);
              GOTOXY(5,5); WRITE('c');
              FOR i := 6 TO 64 DO
              BEGIN
                   GOTOXY(i,5);WRITELN('');
              END;
              FOR i := 6 TO 20 DO
              BEGIN
                   GOTOXY(5,i); WRITELN('3 ');
              END;
              GOTOXY(5,21); WRITELN(' ');
              TEXTCOLOR(white);
              GOTOXY(65,5); WRITE('U');
              FOR i := 6 TO 65 DO
              BEGIN
                   GOTOXY(i,21); WRITELN('  `);
              END;
              FOR i := 6 TO 20 DO
              BEGIN
                   GOTOXY(65,i); WRITELN('3');
              END;
              GOTOXY(65,21); WRITELN('c');
              TEXTCOLOR(yellow);
              READLN;
         END.






SOAL - SOAL :
Buatlah  program  untuk soal dibawah ini dengan  tampilan  sebagus mungkin 
(gunakan  perintah Window, Textcolor  dll).  Jumlah  suku sesuai dengan input dari
keyboard.
         1. Buat deret  hitung  3,7,11,15,......................=?
             Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
         2. Buat deret ukur  3,9,27,................................=?
             Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
         3. Buat tabel deret bergoyang 1,-2,4,-8,...........=?
             Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
        4. Buat deret suku harmonis 1,1/2,1/3,.............=?
            Program akan berhenti jika pa da pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
        5. Buat deret fibbonaci 1,1,2,3,5,.....................=?
            Program akan berhenti jika pa da pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
        6. Buat deret  seperti berikut  1,-2,3,-4,.............=?
            Program akan berhenti jika pa da pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
        7. Buat deret kuadrat 1, 4, 9,............................=?
            Program akan berhenti jika pa da pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
        8. Buat deret seperti berikut  100, 90, 70 ,...........=?
           Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
       9. Buat deret seperti berikut 256, 196, 144,............=?
           Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
     10. Buat  deret seperti berikut  1, 1, 1, 2,  2, 3,   6,  4,  24, 5..........=?
           Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
     11. Buatlah program untuk mencari faktorial, sesuai dengan  input yang diminta.
12. Buatlah program huruf yang berjatuhan sehingga membentuk suatu kalimat yang
telah diinput dari keyboard .





Array
Array  adalah  tipe data terstruktur yang  terdiri  dari  sejumlah komponen  komponen 
yang mempunyai tipe sama.  Komponen tersebut  disebut  sebagai komponen type, larik 
mempunyai  jumlah komponen  yang  jumlahnya tetap. Banyaknya  komponen  dalam 
larik ditunjukkan oleh suatu index, dimana tiap komponen di array  dapat diakses dengan
menunjukkan nilai indexnya atau subskript.
Array  dapat bertipe data sederhana seperti byte,  word,  integer, real,  bolean,  char, string
dan tipe data scalar  atau  subrange. Tipe  larik mengartikan isi dari larik atau  komponen- 
komponenya mempunyai nilai  dengan tipe data tersebut.
Contoh :
          var
          untai : array[1..50] of integer;

Pada  contoh Array dengan nama untai telah  dideklarasikan  dengan tipe integer, dengan
jumlah elemen maksimum 50 elemen, nilai  dari  elemen array tersebut diatas harus bertipe
integer.
Contoh :
         Program contoh_array_input;
         uses crt;
         var
         bilangan : array[1..50] of integer;
             begin
             clrscr;
             bilangan[1]:=3;
             bilangan[2]:=29;
             bilangan[3]:=30;
             bilangan[4]:=31;
             bilangan[5]:=23;
             writeln('nilai varibel bilangan ke 3 =',bilangan[3]);
             readln;
            end.

Array  juga dapat dideklarasikan bersama dengan tipe yang  beragam seperti contoh
dibawah ini :
         Program contoh_deklarasi_array_beragam;
         uses crt;
         var
           NPM      : array[1..20] of string[10];
           nama      : array[1..20] of string[25];
           nilai        : array[1..20] of real;
           umur      : array[1..20] of byte;
           banyak,i : integer;
         begin
           clrscr;
           write('Isi berapa data array');readln(banyak);
           for i := 1 to banyak do
             begin
              write('NPM  =');readln(npm[i]);
              write('Nama =');readln(nama[i]);
              write('Nilai=');readln(nilai[i]);
              write('umur =');readln(umur[i]);
             end;
            {cetak varibel array}
             writeln('NPM       NAMA                 NILAI UMUR ');
            for i:= 1 to banyak do
             begin
              writeln(npm[i]:10,nama[i]:25,nilai[i]:3:2,' ',umur[i]:3);
             end;
             READLN;  end.
Untuk deklarasi array dapat digunakan bebe rapa cara seperti  beri kut ini :
         Type 
           Angka =string[20];
         Var
           nama : array [1..50] of angka;
         begin
           .
         end.
          
Deklarasi tipe indeks subrange integer
Indeks  pada array dapat tipe skalar atau subrange,  tetapi  tidak bisa real.
Contoh:
           var
              nilai : array[1..10] of integer;

Pada contoh ini array nilai  mempunyai 10 buah elemen yaitu dari  1 sampai 10.  Array
tersebut dapat dideklarasikan dengan type seperti berikut ini  :
         Type 
           skala = 1..10;
         var
           nilai   : array [skala] of integer;
         atau :
         Type 
           skala = 1..10;
         Y      = array[skala] of integer;
         var
            nilai :  Y;
         atau :
          Type 
             Y     = array[1..10] of integer;
            var
              nilai : Y;   
         Atau :
         const
            atas     =1;
            bawah = 5;
         type
           y = array[atas..bawah] of integer;
         var
            nilai : y;

I. Deklarasi type indeks skalar
Indeks dari larik dapat berupa tipe skalar.
Contoh :
         program deklarasi_indeks_array_skalar;
         uses crt;
         var
         jum : array[(jan,feb,mar,apr,mei)] of integer;
         begin
         jum[jan]:=25;
         jum[feb]:=45;
         jum[mar]:=21;
         jum[apr]:=23;
         jum[mei]:=50;
         writeln('Jumlah nilai bulan maret =',jum[mar]);
         readln;
         end.
         dapat juga ditulis :
         type
           bln = (jan,feb,mar,apr,mei);
         Var
           jum : array[bln] of integer;
         atau :
         type
           bln =(jan,feb,mar,apr,mei);
         var
          jum : array[jan..mei] of integer;

II. Deklarasi konstanta array
Array  tidak hanya dapat berupa suatu varibel yang  dideklarasikan di  bagian deklarasi
variabel, tetapi dapat juga berupa  konstanta (const).
Contoh :
         program contoh_deklarasi_array_konstan;
          uses crt;
          const
            tetap : array[1..4] of integer=(7,10,21,20);
          var
            i     : integer;
          begin
            for i:= 1 to 4 do
              writeln('Nilai Konstan array ke ',i:2,' =',tetap[i]);
              readln;
          end.

Konstanta array dapat juga berupa ketetapan dalam bentuk  karakter seperti berikut.
Contoh :
         program contoh_konstan_array_char_;
         uses crt;
           const
            huruf : array[0..5] of char=('A','B','C','D','E','F');
           VAR
            i     : integer;
           begin
            for i:= 0 to 5 do
               writeln('Nilai konstan array ke',i:2,' = ',huruf[i]);
            readln;
           end.

Konstanta array dapat juga berupa string seperti berikut ini.
Contoh :
         program constanta_array_string;
         uses crt;
          type
             A     = array [1..5] of string;
          const
             Nama : A = ('basic','pascal','cobol','paradox','dbase');
          var
             I : integer;
           begin
             for i:= 1 to 5 do
               writeln('Nilai array ke-',i:2,'= ',nama[i]);
               readln;
           end.

Dalam  pascal string merupakan array dari elemen- elemen  karakter seperti berikut :
Contoh :
         program string_adalah_array_tipe_char;
         uses crt;
           var
             nama : string;
             i : integer;
            begin
              nama:='Turbo Pascal';
             for i:= 1 to length(nama) do
                writeln('Elemen ',i,' dari ',Nama,'= ',nama[i]);
             readln;
            end.
         
Contoh program bilangan prima dengan menggunakan bantuan array.
         program mencari_bilangan_prima_dengan_array;
         uses crt;
           var
             prima : array[1..100] of integer;
             i,j       : integer;
             bil      : integer;
           begin
           clrscr;
           for i := 2 to 100 do
            begin
             prima[i]:=i;
              for j:= 2 to i-1 do
                begin
           bil := (i mod j);  { i dibagi j dicek apakah 0}
           if bil = 0 then prima[i]:=0; 
                    {jika habis dibagi,berarti bkn prima}
                end;
                if prima[i]<> 0 then write(prima[i],' ');
                    {cetak array yg prima}
              end; readln; end.

Contoh   pengurutan  data dengan metode buble sort,  yaitu  dengan cara penukaran,
dapat dilihat pada contoh dibawah ini :
Contoh program :
         program penggunaan_array_untuk_sortir_buble_sort;
         uses crt;
          var
           nil1 : array[1..100] of integer;
           n,i,j,dum : integer;
          begin
             clrscr;
              write('mau isi berapa data acak (integer) ='); readln(n);
               for i := 1 to n do
                 begin
                  Write('Data Ke ',i,':');readln(nil1[i]);
                 end;

             {* penyapuan proses}
             for i:= 1 to n-1 do
                begin
                for j:= i to n do
                  begin
                   if nil1[j]<nil1[i] then
                    begin
                      dum:=nil1[j];
                      nil1[j]:=nil1[i];
                      nil1[i]:=dum;
                     end;
                end;
          end;
           writeln;
           writeln('Hasil Sortir');
           for i := 1 to n do
            write(nil1[i]:3);
          readln;
          end.

III. Array dua dimensi
Di dalam pascal Array dapat berdimensi lebih dari satu yang  disebut  dengan array
dimensi banyak (Multidimensional array),  disi ni akan dibahas array 2 dimensi saja. Array 
2 dimensi dapat mewakili suatu bentuk tabe l  atau  matrik, yaitu indeks pertama
menunjukkan baris dan indeks ke dua menunjuk kan kolom dari tabel atau matrik.
Untuk  mengetahui  cara mendeklarasikan dari penggunaan  aray  dua dimensi dapat
dilihat pada listing program dibawah ini .
Contoh :
         Program deklarasi_array_dua_dimensi;
         uses crt;
          var
            tabel : array[1..3,1..2] of integer;
            i,j   : integer;
          begin
           clrscr;
           tabel[1,1]:=1;
           tabel[1,2]:=2;
           tabel[2,1]:=3;
           tabel[2,2]:=4;
           tabel[3,1]:=5;
           tabel[3,2]:=6;
           for I := 1 to 3 do
             begin
              for J:= 1 to 2 do
               begin
                writeln('Elemen ',i,',',j,'= ',tabel[i,j]);
               end;
              end;
             readln;
           end.

IV. Alternatif  deklarasi array dua dimensi
Ada beberapa cara dalam mendeklarasikan array dua dimensi, beberapa cara tersebut
dapat dilihat dibawah ini :
Contoh :
         Var
           tabel : array[1..3] of array[1..2] of byte;
atau :
         type
           matrik = array[1..3,1..2] of byte;
         var
           tabel    : matrik;
atau :
         Type
            baris    = 1..3;
            kolom  = 1..2;
            matrik  = array[baris,kolom] of byte;
         var
            tabel     : matrik;
atau :
         type
            baris = 1..3;
            kolom=1..2;
            matrik=array[baris] of array[kolom] of byte;
         var
            tabel   : matrik;
Dibawah  ini akan diberikan listing progra m penggunaan  array  dua dimensi  dalam
aplikasi penjumlahan matrik :
Contoh:
         Program Penjumlahan_matrik;
         uses crt;
          var
           matrik1,matrik2
            , hasil           : array[1..3,1..2] of integer;
            i,j                 : integer;
          begin
          clrscr;
          { input matrik ke satu }
          writeln(' Elemen matrik satu');
           for i := 1 to 3 do
            begin
             for j := 1 to 2 do
              begin
               write('Elemen baris -',i,' kolom -',j,'= ');
               readln(matrik1[i,j]);
              end;
            end;
           {input matrik ke dua}
           writeln('i nput elemen matrik dua');
            for i:= 1 to 3 do
              begin
               for j:= 1 to 2 do
                begin
           write('Elemen baris -',i,' kolom -',j,'= ');
                 readln(matrik2[i,j]);
                end;
              end;
            {proses penjumlahan tiap elemen}       
             for i := 1 to 3 do
               begin
                for j:= 1 to 2 do
           begin
             hasil[i,j]:=matrik1[i,j]+matrik2[i,j];
           end;
                end;
            {proses cetak hasil}
             for i:= 1 to 3 do
              begin
               for j:= 1 to 2 do
                begin
           write(hasil[i,j]:6);
           end;
           writeln;
               end;
              readln;
            end.

V. Array sebagai parameter
Array  dapat  digunakan  sebagai parameter  yang  dikirimkan  baik secara nilai (by value)
atau secara acuan (by reference) ke procedure atau ke function. Procedure yang
menggunakan parameter berupa array harus dideklara sikan  di  dalam  judul procedure 
yang  menyebutkan  parameternya bertipe array.
Contoh :
         program contoh_pengi riman_parameter_array_di_procedure;
         uses crt;
           const
            garis ='---------------------------------------------------';
           type
             untai   = array[1..10] of string[15];
             bulat   = array[1..10] of integer;
             huruf   = array[1..10] of char;
            var
             i,banyak   : integer;
            procedure  proses(nama:untai;nilai:bulat);
             var
              ket   : string;
              abjad : char;
             begin
             writeln(garis);
             writeln('Nama             Nilai  Abjad   Keterangan');
             writeln(garis);
               for i := 1 to banyak do
           begin
             if nilai[i] > 90 then
               begin
                 abjad:='A';
                 ket  :='Istimewa';
               end;
             if (nilai[i]<90) and (nilai[i]>70) then
                begin
                 abjad:='B';
                 ket  :='Memuaskan';
                end;
             if (nilai[i]<70) and (nilai[i]>60) then
                begin
                 abjad:='C';
                 ket :='Cukup';
                end;
             if (nilai[i]<60) and (nilai[i]>45) then
                begin
                  abjad:='D';
                  ket :='Kurang';
                end;
             if nilai[i]< 45 then
               begin
                   abjad:='E';
               ket  :='Sangat kurang';
               end;
         writeln(nama[i]:15,' ',nilai[i]:4,'    ',abjad,'   ',ket:15);
          end;
               writeln(garis);
         end;
         procedure masuk_data;
             var
              nama  : untai;
              nilai : bulat;
             begin
              write('banyak data =');readln(banyak);
               for i:= 1 to banyak do
                begin
           clrscr;
           writeln('Data ke - ',i);
           write('Nama =');readln(nama[i]);
           write('Nilai =');readln(nilai[i]);
                end;
               proses(nama,nilai);
              end;
              {modul Utama}
              begin
                masuk_data;
                readln;
              end.

Record
Tipe data record merupakan tipe data terstruk tur. Dalam  penggunakan  tipe  data record
dapat dikumpulkan beberapa item  data  yang masing-  masing  mempunyai tipe data
berbeda- beda.  Record  dapat berisi beberapa field untuk sebuah subyek tertentu.

I. Deklarasi record
         Diawali    kata    cadangan    Record  ,  lalu diikuti  daftar  field  dan diakhiri kata
cadangan end;
Contoh :
         type
            data_pegawai = record
                 kd_peg : string[5];
                 nama   : string[15];
                 alamat : string[20];
                 gaji   : longint;
               end;
            var
              pegawai : data_pegawai;

atau langsung di deklarasikan di varibel :
         var
            pegawai : record
                 kd_peg : string[5];
                 nama   : string[15];
                 alamat : string[20];
                 gaji   : longint;
               end;

Cara  menggunakan  tiap field dari record  untuk  input, cetak  dan proses adalah sebagai
berikut :
         Nama_record.Nama_field
Contoh :
         program contoh_record_sederhana;
         uses crt;
          type
            data_pegawai = record
                 kd_peg : string[5];
                 nama   : string[15];

                 alamat : string[20];
                 gaji   : longint;
               end;
            var
              pegawai : data_pegawai;
            begin
             clrscr;
              write('Kode pegawai   =');readln(pegawai.kd_peg);
              write('Nama pegawai   =');readln(pegawai.nama);
              write('Alamat pegawai =');readln(pegawai.alamat);
              write('Gaji pegawai   =');readln(pegawai.gaji);
              {cetak}
              writeln('Kode pegawai   :',pegawai.kd_peg);
              writeln('Nama pegawai   :',pegawai.nama);
              writeln('Alamat pegawai :',pegawai.alamat);
              writeln('Gaji pegawai   :',pegawai.gaji);
              readln;
            end.

II. Statemen with
Penggunaan  statemen nama_record.nama_field seperti  contoh  sebelumnya dapat
diringkas menjadi :
Contoh :
         program contoh_record_menggunakan_statmen_with;
         uses crt;
          type
          data_pegawai = record
                 kd_peg : string[5];
                 nama   : string[15];
                 alamat : string[20];
                 gaji   : longint;
               end;
            var
              pegawai : data_pegawai;
            begin
             clrscr;
              with pegawai do
               begin
                write('Kode pegawai   =');readln(kd_peg);
                write('Nama pegawai   =');readln(nama);
                write('Alamat pegawai =');readln(alamat);
                write('Gaji pegawai   =');readln(gaji);
                {cetak}
                writeln('Kode pegawai   :',kd_peg);
                writeln('Nama pegawai   :',nama);
                writeln('Alamat pegawai :',alamat);
                writeln('Gaji pegawai   :',gaji);
               end;
              readln;
          end.

Penjelasan :
Dengan  menggunakan  staremen with maka blok  statemen  berikutnya setelah statemen
With dapat menggunakan nama field tanpa menyebut kan nama recordnya lagi.

III. Record dalam array
Dalam  contoh  sebelunya penggunan tipe data  record  hanya  dapat menyimpan satu
record. Untuk dapat menyimpan sejumlah record  maka dapat  digunakan array yang
bertipe record yang sudah  didifinisikan. Un tuk itu dapat dilihat listing program berikut.
Contoh :
         program contoh_record_dalam_array;
         uses crt;
          type
            data_pegawai = record
                 kd_peg : string[5];
                 nama    : string[15];
                 alamat  : string[20];
                 gaji       : longint;
               end;
            var
              pegawai     : array[1..10] of data_pegawai;
              i                 : integer;
            begin
             clrscr;
             for I:= 1 to 10 do
              begin
               with pegawai[i] do
                begin
           writeln('Record ke- ',i);
           write('Kode pegawai   =');readln(kd_peg);
           write('Nama pegawai   =');readln(nama);
           write('Alamat pegawai =');readln(alamat);
           write('Gaji pegawai   =');readln(gaji);
           writeln;
           end;
                end;
                {cetak}
               writeln('Kode pegawai    Nama     Alamat      gaji');
               for i:= 1 to 10 do
                begin
           with pegawai[i] do
            begin
             write(kd_peg:5);
             write(nama:15);
             write(alamat:20);
             writeln(gaji:10);
            end;
           end;
                writeln('------------------------------------------');
              readln;
            end.

IV. Field record bertipe array
Jika dalam suatu record terdapat beberapa  field yang sama  tipenya dapat  digunakan 
array. Contoh ada data  barang  yang  mempunyai struktur.
- Nama barang                   -> bertipe String
- Jumlah unit barang ke 1      -> bertipe Byte
- Jumlah unit barang ke 2 -> bertipe Byte
- Jumlah unit barang ke 3 -> bertipe Byte

Terlihat  bahwa jumlah unit barang 1,2,3 bertipe sama.  Dalam  hal ini  dapat  digunakan
array ber index 1..  3  untuk  memp ersingkat filed jumlah unit barang.
Contoh :
         program penggunaan_field_record_tipe_array;
         uses crt;
         type
           data_brg = record
                 namaBrg : string[15];
                 unitBrg : array[1..3] of byte;
                end;
          var
            Barang         : array[1..10] of data_brg;
            i,j,banyak,
            Jum1,jum2,jum3 : integer;
          begin
           jum1 :=0;
           jum2 :=0;
           jum3 :=0;
           write('Banyak record Max 10 =');readln(banyak);
            for i:= 1 to banyak do
             begin
               with barang[i] do
           begin
            writeln('Record ke -',i);
            write('Nama barang =');readln(namabrg);
             for j:= 1 to 3 do
               begin
                 write('Unit  barang ke- ',j,'= ');readln(unitbrg[j]);
                end;
             end;
           end;
               clrscr;
               writeln('---------------------------------');
               writeln('Nama barang  unit 1  unit2  unit3');
               writeln('---------------------------------');
               { cetak data }
               for i:= 1 to banyak do
                begin
           with barang[i] do
             begin
              jum1:=jum1+unitbrg[1];
              jum2:=jum2+unitbrg[2];
              jum3:=jum3+unitbrg[3];
              writeln(namabrg:15,unitbrg[1]:5,unitbrg[2]:5,unitbrg[3]:5);
             end;
           end;
               writeln('---------------------------------');
               writeln('Jumlah unit 1 =',jum1:6);
               writeln('Jumlah unit 2 =',jum2:6);
               writeln('Jumlah unit 3 =',jum3:6);
              readln;
         end.

V. Tipe data record dengan field tipe record
Dalam  Turbo  Pascal  tipe data record  dapat  didefinisikan  juga se bagai field dari  suatu
record. Artinya suatu record dapat  juga mempunyai  field  yang merupakan record.
Contoh:  sebuah data pegawai mempunyai struktur sebagai berikut :
         - Nama pegawai   ->   string
         - Mulai masuk      ->   - Tgl
               - Bln
               - Thn
         - Alamat pegawai ->  - Jalan
               - Kota  
         - Gaji       ->  - Gaji pokok
               - Lembur
               - Tunjangan 

Maka dapat disusun program sebagai berikut :
Contoh :
         program penggunaan_field_tipe_record;
         uses crt;
          type
            masuk   = record
                      tgl : 1..31;
                      bln : 1..12;
                      thn : integer;
                    end;
            alamat  = record
                       jalan : string[20];
                       kota  : string[10];
                      end;
            gajipeg = record
                       pokok,tunjangan,lembur : real;
                      end;

            datapegawai = record
                           nama     : string[20];
                           tglmasuk : masuk;
                           almt     : alamat;
                           gaji     : gajipeg;
                          end;
            var
             pegawai    : array [1..10] of datapegawai;
             i,p,banyak : integer;
          begin
          clrscr;
            write('Banyak data record =');readln(banyak);
             for i := 1 to banyak do
               begin
                writeln('record ke -',i);
                 with pegawai[i] do
                  begin
                   write('nama pegawai :');readln(nama);
                   write('Tanggal masuk:');readln(tglmasuk.tgl);
                   write( 'Bulan Masuk  :');readln(tglmasuk.bln);
                   write('Tahun masuk  :');readln(tglmasuk.thn);
                   write('Alamat       :');readln(almt.jalan);
                   write('Kota         :');readln(almt.kota);
                   write('Gaji pokok   :');readln(gaji.pokok);
                   write('Tunjangan    :');readln(gaji.tunjangan);
                   write('Lembur       :');readln(gaji.lembur);
                 end;
              end;

              { cetak data }
             for i := 1 to banyak do
               begin
                writeln('record ke -',i);
                 with pegawai[i] do
                  begin
                    writeln('nama       :',nama);
                    writeln('Tanggal masuk:',tglmasuk.tgl);
                    writeln('Bulan Masuk  :',tglmasuk.bln);
                    writeln('Tahun masuk  :',tglmasuk.thn);
                    writeln('Alamat       :',almt.jalan);
                    writeln('Kota         :',almt.kota);
                    writeln('Gaji pokok   :',gaji.pokok);
                    writeln('Tunjangan    :',gaji.tunjangan);
                    writeln('Lembur       :',gaji.lembur);
                 end;
              end;
             readln;
             end.

VI. Record bervariasi
Record  yang telah dibahas sebelumnya merupakan   struktur  record yang  pasti, artinya
field-field di dalam record  sudah  tertentu dan  pasti. Selain itu di program Pascal dapat
juga  dibuat  suatu record   yang mempunyai field yang tidak pasti atau dapat  berubah,
yang  disebut  sebagai record yang bervaria si. Dalam  record  yang bervariasi dapat
mengandung suatu field yang tergantung dari suatu kondisi. Dalam penerapanya dalam
program hanya dapat diterima satu buah field yang bervariasi saja. Field bervariasi ini
harus terletak dibawah field yang tetap.
Contoh :
Ada sebuah struktur data pegawai  yang terdiri dari :
         - Nama pegawai
         - Alamat pegawai
         - Umur
         -  Gaji -> untuk gaji dibedakan antara pegawai tetap  dgn  honorer  
           Untuk tetap     - Tunjangan
                 - Lembur
                 - Gaji pokok
           Untuk honorer          - Gaji pokok

Deklarasi  dan program :

         type
           Status_pegawai = (Honorer,Tetap);
           data_pegawai   = record
                  nama    : string[15];
                  alamat  : string[20];
                  umur    : byte;
                  case status : status_pegawai of
                  honorer : (gaji_h    : real);
                  tetap   : (gaji_t    : real;
                 tunjangan : real;
                 lembur    : real);
                 end;

Contoh :
         type
           Status_pegawai = (Honorer,Tetap);
           data_pegawai   = record
                  nama    : string[15];
                  alamat  : string[20];
                  umur    : byte;
                  case status : status_pegawai of
                  honorer : (gaji_h    : real);
                  tetap   : (gaji_t    : real;
                 tunjangan : real;
                 lembur    : real);
                 end;
           var
             pegawai  : array[1..10] of data_pegawai;
             banyak,i : integer;
             kode     : char;
           begin
            { input data}
             write('Banyak Data max 10 :');readln(banyak);
             for i := 1 to banyak do
              begin
                with pegawai[i] do
            begin
              write('Nama pegawai =');readln(nama);
              write('Alamat       =');readln(alamat);
              write('Umur        =');readln(umur);
              write('pegawai tetap(T) atau Honorer(H) ');readln(kode);
               kode := upcase(kode);
               case kode of
                'H' : begin
                 Status:=Honorer;
                 write('Gaji didapat= ');readln(gaji_h);
                end;
                'T' : begin
                 status:= Tetap;
                 write('gaji tetap = ');readln(gaji_t);
                 write('Tunjangan  = ');readln(tunjangan);
                 write('Lembur     = ');readln(lembur);
                end;
                 end;
               end;
            end;
                { cetak data}
         writeln('----------------------------------------------------');
         writeln(' Nama Alamat  Um ur  Status  Gaji  Tunjangan   Lembur');
         writeln('----------------------------------------------------');
             for i:= 1 to banyak do
               begin
           with pegawai[i] do
             begin
               write(nama:15);
               write(alamat:20);
               write(umur:3,' ');
              case status of
                 honorer : writeln('Honorer',Gaji_h:8:2);
                 Tetap   :
           writeln('Tetap  ', Gaji_t:8:2,tunjangan:8:2,lembur:8:2);
               end;
             end;
           end;
           writeln('---------------------------------------------');
           readln;
               end.

         program contoh_record_bervariasi;
         uses crt;
          type
            status_karyawan = (lajang,menikah,cerai);
            data_karyawan = record
                            nama    : string[15];
                            alamat  : string[20];
                             gaji      : integer;
                            case status : status_karyawan of
                             lajang  :();
                             menikah :(anakm : 0..20);
                             cerai   :(anakc : 0..20; lagi :char);
                            end;
            var
              karyawan : array [1..10] of data_karyawan;
              i,banyak : integer;
              sts : char;
            begin
             clrscr;
             write('Jumlah data record :');readln(banyak);
              for i := 1 to banyak do
               begin
                with karyawan[i] do
                 begin
                   write('Nama   =');readln(nama);
                   write('Alamat =');readln(alamat);
                   write('Gaji   =');readln(gaji);
            write('status M=menikah L=lajang C=cerai');readln(sts);
             if upcase(sts)='L' then
              begin
                status:=lajang;
              end;
             if upcase(sts)='M' then
              begin
                status:=Menikah;
                write('Jumlah anak= ');readln(anakm);
              end;
             if upcase(sts)='C' then
              begin
                status:=Cerai;
                write('Jumlah anak      = ');readln(anakc);
                write('Kawin lagi (Y/T) = ');readln(lagi);
              end;
            end;
          end;
         { tampil}
              for i := 1 to banyak do
               begin
                with karyawan[i] do
                 begin
                   write(nama);
                   write(alamat);
                   write(gaji);
             case status of
               lajang   : writeln('lajang');
               menikah  : begin
                          writeln('menikah','  ',anakm:4);
                          end;
               cerai       : begin
                             writeln('cerai ', '  ',anakc:4,' ',lagi);
                             end;
              end;
         end;
         readln;
         end.
         program penggunaan_field_tipe_record;
         uses crt;
          type
            masuk   = record
                      tgl : 1..31;
                      bln : 1..12;
                      thn : integer;
                    end;
            alamat  = record
                       jalan : string[20];
                       kota  : string[10];
                      end;
            gajipeg = record
                       pokok,tunjangan,lembur : real;
                      end;
            datapegawai = record
                           nama     : string[20];
                           tglmasuk : masuk;
                           almt     : alamat;
                           gaji     : gajipeg;
                          end;
            var
             pegawai    : array [1..10] of datapegawai;
             i,p,banyak : integer;
          begin
          clrscr;
            write('Banyak data record =');readln(banyak);
             for i := 1 to banyak do
               begin
                writeln('record ke -',i);
                 with pegawai[i] do
                  begin
                   write('nama pegawai :');readln(nama);
                   write('Tanggal masuk:');readln(tglmasuk.tgl);
                   write( 'Bulan Masuk  :');readln(tglmasuk.bln);
                   write('Tahun masuk  :');readln(tglmasuk.thn);
                   write('Alamat       :');readln(almt.jalan);
                   write('Kota         :');readln(almt.kota);
                   write('Gaji pokok   :');readln(gaji.pokok);
                   write('Tunjangan    :');readln(gaji.tunjangan);
                   write('Lembur       :');readln(gaji.lembur);
                 end;
              end;
              { cetak data }
             for i := 1 to banyak do
               begin
                writeln('record ke -',i);
                 with pegawai[i] do
                  begin
                    writeln('nama       :',nama);
                    writeln('Tanggal masuk:',tglmasuk.tgl);
                    writeln('Bulan Masuk  :',tglmasuk.bln);
                    writeln('Tahun masuk  :',tglmasuk.thn);
                    writeln('Alamat       :',almt.jalan);
                    writeln('Kota         :',almt.kota);
                    writeln('Gaji pokok   :',gaji.pokok);
                    writeln('Tunjangan    :',gaji.tunjangan);
                    writeln('Lembur       :',gaji.lembur);
                 end;
              end;
             readln;
             end.



Procedure
Procedure  adalah suatu program yang terpisah   dalam  block tersendiri   yang berfungsi
sebagai subprogram  (program  bagian). Penggunaan  prosedur  diawali dengan kata
cadangan  procedure   di dalam  bagian  de klarasi procedure. Pemanggilan  procedure 
dengan menggunakan judul procedure.
Pada program terstruktur banyak  menggunakan procedure karena :
- Sebagai  penerapan  program yang modular yaitu  memecah  program yang
rumit menjadi program- program bagian yang lebih  sederhana dalam bentuk
procedure.
- Untuk  beberapa perintah yang sering  digunakan  berulang,   cukup dituliskan 
sekali dalam procedure dan dapat dipanggil  sewaktu-waktu.
Contoh Procedure tanpa parameter,
          Procedure garis;
          begin
           writeln('-------------');
          end;
         procedure Judul;
          begin
           writeln('pascal');
          end;
         {modul utama}
          begin
            garis;
            judul;
            garis;
          end.

hasil :
         ------------
         pascal
         ------------

I. Parameter dalam procedure
Nilai  di  dalam suatu procedure sifatnya adalah  local,   berarti hanya  dapat  digunakan
oleh procedure tersebut  saja  dan   tidak dapat digunakan oleh procedure yang lain.
Contoh :
         procedure hitung;
         var
           a,b,c : integer;
           begin
            write('Nilai a =');readln(a);
            write('Nilai b =');readln(b);
            c:=a+b;
           writeln('hasilpenjumlahan=',c:5);
             readln;
          end;
         { modul utama }    akan salah jika pada modul utama :
         begin                   begin
           hitung;                hitung;
         end.               writeln('nilai a=',a); -> a tdk dikenal
                                        end.
Pada kasus diatas dapat diselesaikan dengan menggunakan  deklarasi secara global,
sehingga semua procedure dibawah deklarasi   global dapat menggunakannya.

Contoh penggunaan deklarasi global :
         uses crt;
         procedure kali;
         var
            a,b,c : integer;  { deklarasi secara local utk proc. kali saja}
            begin
              write('A =');readln(a);
              write('b =');readln(b);
              c:=a*b;
              writeln('hasil c =',c:5);
            end;
         var
            d,e,f  : integer;      {deklarasi secara global   hingga  dikenal 
         oleh}
         procedure jumlah; {p roc.jumlah&procedure dibawahnya  }
              begin
                write('nilai d =');readln(d);
                write('nilai e =');readln(e);
                f:=d+e;
                writeln('nilai f =',f:5);
              end;
         procedure kurang;   {procedure ini menggunakan varibel global}
               begin       { yang terletak diatas procedure jumlah}
           write('Nilai d =');readln(d);
           write('nilai  e =');readln(e);
           f:= d-e;
           writeln('Nilai f=',f:5);
               end;
           { modul utama}
             begin
               clrscr;
               kali;
               jumlah;
               kurang;
               readln
             end.

II. Pengiriman parameter secara Nilai
Pada  pengiriman  parameter secara nilai  (by    value),  parameter formal akan berisi nilai
yang dikirimkan dari parameter nyata  dan  nilai  parameter  tersebut akan local
diprocedure  yang   dikirim. sifat dari pengiriman nilai ini adalah satu arah, sehingga  
perubahan  nilai dari parameter formal tidak akan mempengaruhi   nilai parameter nyata.
Contoh :
         Program pengiriman_parameter_secara_nilai;
         procedure kali(a,b : integer); {parameter formal}
          var
            hasil : integer;   {local variabel}
          begin
            hasil :=a*b;
            writeln('hasil =',hasil:6);
          end;
         {modul Utama}
          var
            bil1,bil2 : integer;  
          begin
            write('bilangan 1 =');readln(bil1);
            write('bilangan 2 =');readln(bil2);
            kali(bil1,bil2); {parameter nyata}
            readln;
          end.

Di  bawah  ini  merupakan contoh bahwa  perubahan  pada  parameter formal  tidak  akan 
mempengaruhi nilai  parameter  nyata,  karena  sifatnya adalah satu arah.
         Procedure kali(a,b : integer);
                       kali(bil1,bil2);
Contoh:
         Program parameter_nilai_tdk_mempengaruhi_parameter_nyata;
         uses crt;
         procedure test_hitung(a,b,hasil : integer);
          begin
            hasil := a*b;
            writeln('A =',a:4,' B=',b:4,' Hasil=',hasil:6);
          end;
         {modul utama}
          var
            bil1,bil2,bil3 : integer;
          begin
            bil1:=3;bil2:=4;bil3:=0;
            test_hitung(bil1,bil2,bil3);
            writeln('bil1=',bil1:4,' bil2=',bil2:4,' bil3=',bil3);
            readln;
          end.

III. Pengiriman parameter secara acuan (by reference)
Sifat  dari  pengiriman  parameter secara acuan  adalah  dua  arah artinya  perubahan dari
parameter formal akan  mempengaruhi  nilai dari  parameter  nyata. Cara deklarasi di 
procedure  dengan  kata cadangan Var seperti berikut :

procedure kali(Var a,b,c : integer);  -> parameter formal
                   kali(x,y,z);                -> parameter nyata

Contoh :
         program peng iriman_parameter_secara acuan;
         uses crt;
         procedure kali(var a,b,c : integer); {parameter formal  acuan}
         begin
           c:=a*b;
         end;
         {modul utama}
         var
           x,y,z : integer;
         begin
           write('nilai x=');readln(x);
           write('nilai y=');readln(y);
           kali(x,y,z);  {mengirimkan parameter secara acuan}
           writeln('Nilai z =',z:5);
         end.

Contoh penggunaan parameter secara acuan untuk perhitungan faktorial:
         program Contoh_penggunaan_parameter_acuan;
         uses crt;
          procedure faktor(var banyak,hasil : integer);
           var
            i : integer;
           begin
             hasil := 1;
              for i := 1 to banyak do
               begin
           hasil := hasil*I;
               end;
           end;
         {modul utama}
           var
             n,jumlah : integer;
           begin
             write('Berapa faktorial =');readln(n);
             faktor(n,jumlah);
             writeln(n:5,' faktorial adalah =',jumlah:6);
             readln;
           end.

Contoh  Program dengan penggunaan procedure dgn  parameter  secara acuan pada
perhitungan pangkat lebih besar dari 2 :
         program pangkat;
         uses crt;
          procedure pangkat(var bil,hasil:real;pang:integer);
           var
           i : integer;
         begin
           hasil :=1;
             for i:= 1 to pang do
               begin
           hasil:=hasil*bil;
               end;
             end;
         {modul utama}
          var
             angka,hasil : real;
             pang : integer;
          begin
            clrscr;
            write('bilangan yang dipangkat =');readln(angka);
            write('dipangkatkan =');readln(pang);
            pangkat(angka,hasil,pang);
            write('hasil =',hasil:5:2);
            readln;
          end.

IV. Procedure memanggil procedure yang lain
Di  dalam pascal diperkenankan procedure  memanggil procedure  yang lain seperti
contoh berikut :
         program procedure_memanggil_procedure_yang_lain;
         uses crt;
          procedure satu(a1: integer);
            begin
             writeln(' nilai a =',a1:2,' ada diprocedure satu');
            end;
          procedure dua(a2: integer);
            begin
             writeln(' nilai a =',a2:2,' ada diprocedure dua');
             satu(a2);
            end;
          procedure tiga(a3: integer);
            begin
             writeln(' nilai a =',a3:2,' ada diprocedure tiga');
             dua(a3);
            end;
         procedure empat(a4: integer);
            begin
             writeln(' nilai a =',a4:2,' ada diprocedure empat');
             tiga(a4)
            end;
            {modul Utama}
             var
               a : integer;
             begin
               clrscr;
               write('nilai a=');readln(a);
               empat(a);
               readln;
              end.

V. Procedure Tersarang
Procedure  tersarang  adalah  procedure yang terdapat di dalam procedure yang lain dan
dipanggil oleh procedure diluarnya.
         program contoh_procedure_tersarang;
         uses crt;
         procedure satu;              {deklarasi procedure satu}
           procedure dua;
             begin                         {awal procedure dua}
               writeln('procedure dua ada di procedure satu');
              end;                          {akhir procedure dua}
           procedure tiga;
             begin                          {awal procedure tiga}
               writeln('procedure tiga ada di procedure satu');
             end;                           {akhir procedure tiga}
          begin                             {awal procedure satu}
           writeln(' procedure satu');
           dua;                             {memanggil procedure dua}
           tiga;                            {memanggil procedure tiga}
          end;                              {akhir procedure satu}
         {modul utama}
          begin
           clrscr;
           writeln(' modul utama');
           satu;                            {memanggil procedure satu}
           readln;
          end.

VI. Procedure memanggil dirinya sendiri (rekursi)
Di  dalam  pascal diperkenankan  memanggil  procedurenya  sendiri. istilah  ini disebut
sebagai recursion. Dalam penggunaanya  membutuhkan memory yang besar. Karena
pada setiap pemanggilan  sejumlah memory tambahan dibutuhkan.
Contoh :
         program procedure_memanggil_dirinya_sendiri;
         uses crt;
         var
          I : integer;
          procedure rekursi;
           begin
             writeln('pemangilan procedure ke-',i:5);
             i:=i+1;
             if i < 5 then rekursi;
            end;
           {modul utama}
            begin
              clrscr;
              i:=1;
              rekursi;
              readln;
            end.






Function
Blok pada function hampir sama dengan blok  pada procedure, hanya pada  function 
harus dideklarasikan dengan  tipe  dari   function tersebut  yang  merupakan tipe hasil
dari function  itu   sendiri. Sehingga dikatakan function dapat mengembalikan nilai.
Sintaks :
           FUNCTION identifier(daftar parameter) : type;

I. Parameter Nilai dalam function
Parameter dalam function dapat dikirimk an secara nilai atau secara acuan.
Penulisan judul function y ang menggunakan parameter  secara Nilai adalah :

         Function besar(a,b  : real) : real;

Contoh :
         program penggunaan_parameter_nilai;
         uses crt;
         function besar(a,b :real) : real;
          begin
            if a>b then
               besar:=a
               else
               besar:=b;
          end;
         {modul utama}
          var
          nil1,nil2 : real;
          begin
           write('bilangan 1=');readln(nil1);
           write('bilangan 2=');readln(nil2);
           writeln('bilang an terbesar =',besar(nil1,nil2):6:2);
           readln;
          end.

II. Function dengan parameter acuan
Penulisan judul function dengan menggunakan pa rameter secara acuan adalah  sama 
dengan procedure yaitu ditambah Var  pada  deklarasi parameter. Dengan demikian nilai
parameter acuan ini dapat   digunakan sebagai hasil balik.
Sintaks :
          FUNCTION  jumlah(var a,b : integer) : integer;
Contoh :
         program peng iriman_parameter_secara_acuan;
         function kali(var bi l1,bil2,jumlah : integer) : integer;
          begin
            kali:=bil1*bil2;
            jumlah:=bil1+bil2;
          end;
          var
         x,y,z : integer;
            begin
             write('bilangan 1=');readln(x);
             write('bilangan 2=');readln(y);
             writeln(x:3,'*',y:3,' = ',kali(x,y,z):5);
             writeln(x:3,'+',y:3,' = ',z);
             readln;
           end.

III. Function tanpa parameter
Suatu  function  tanpa parameter berarti nilai  balik  yang   akan  dihasilkan  merupakan
nilai yang sudah pasti. Jika pada   function dengan  parameter, parameternya digunakan
untuk input pada   function dan function akan memberikan hasil balik sesuai dengan
parameter  yang diberikan sehingga bisa diatur  dari program  pemanggil. Sedang  pada 
function tanpa parameter hasil dari  function   tidak dapat diatur. Se hingga function tanpa
parameter jarang digunakan.
Contoh :
          function tiga : integer;
           begin
            tiga:=3;
           end;
          begin
           writeln(tiga);
          end;

         Jadi hasil :
         3

Function  type  string  untuk membuat garis,  ini  juga  merupakan contoh function tanpa
parameter.

         uses crt;
           function garis : string;
            begin
             garis:='----------';
            end;
         {modul utama}
          begin
           writeln(garis);
           writeln('pascal');
           writeln(garis);
           readln;
          end.

Contoh :
         program pangkat_dgn_function;
         uses crt;
          function pangkat(bil :real; pang: integer) : real;
         var
             hasil : real;
             i     : integer;
           begin
            hasil := 1;
            for i:= 1 to pang do
             begin
              hasil:= hasil*bil;
             end;
              pangkat:=hasil;
            end;
            var
             hitung,bil : real;
             pang : integer;
           begin
             write('bilangan =');readln(bil);
             write('pangkat=');readln(pang);
             hitung:= 2*pangkat(2,3);
         writeln(bil:5:2,' pangkat',pang:5,' = ',pangkat(bil,pang):6:2);
             writeln('2 * (2 pangkat 3) =',hitung:6:2);
         readln;
           end.

IV. Rekursi pada function
Rekursi  adalah dimana suatu function memanggil  dirinya  sendiri.  Proses dapat dilihat
pada contoh berikut. Dimana fungsi faktor dipanggil oleh dirinya sendiri.
Contoh :
         program function_memanggil_funnction_yg_lain;
         uses crt;
         function faktor(bilangan : integer) : real;
          begin
           if bilangan=0 then
              faktor:=1
            else
              faktor:=faktor(bilangan-1)*bilangan;
           end;
           var
            n : integer;
           begin
            write('berapa faktorial =');readln(n);
            writeln(N:5,' faktorial =',faktor(n):9:0);
            readln;
           end.

File Teks
Pascal mempunyai dua macam file. File teks dan file binary. Bagian ini membicarakan file
teks. Fiel teks tidak mempunyai besar yang  eteap. Untuk menandai akhir suatu file,
komputer menempatkan karakter khusus end-of-file (<eof>) setelah karakter yang paling
akhir. Untuk menandai akhir suatu baris, komputer menampatkan karakter khusus end-of-line pada akhir baris. 
Dalam perogram yang interaktif biasanya kita menuliskan nilai sentinel untuk menandai
akhir suatu baris atau file. Sebagai cont oh, pecahan program semacam ini digunakan
membaca suatu nama (kumpulan karakt er) dengan nilai sentinel titik.
 Read(nama);
 While(nama<>’.’) Do
  Read(nama);
Dalam file teks, untuk mengetes apakah baris sudah berganti, kita bias menggunakan
fungsi eoln. Berikut ini pecahan program di atas yang ditulis deng fungsi eoln.
  While not EoLn Do
  Read(nama);
Untuk mengetes apakah akhir suatu file, kita bias menggunakan fungsi eof seperti berikut
ini.
  While not Eof(InfileData)  Do
  Begin
   While Not EoL Do
    Read(Nama);
   ReadLn(Gaji);
  End;
InfileData diatas merupakan nama file yang bertipe teks. Program diatas membaca
variable-variabel Nama dan gaji dalam File Infile. Apabila akhir baris dtidak ditemui, nilai
Eoln berarti false yang berarti program membaca variable nama. Setelah akhir baris
ditemui, nilai EoLn menjadi true dan program membaca variable berikutnya yaitu Gaji.
Setelah akhir file ditemui, nilai Eof menjadi true dan program keluar dari loop.

Membuat File Teks
File teks bias dibuat melalu i beberapa cara. Kalau kita ad  DOS, maka dengan cara yang
termudah adalah dengan menggunakan DOS ters ebut. Perintah yang digunakan adalah
sebagai berikut  :
  A:\> Edit <namafile>
Dos editor kemudian muncul, dan kita bias mengetik angka-angka atau huruf yang akan
disimpan sebagai file teks. 
 Apabila kita mempunyai pascal Editor, file teks dapat dibuat dengan menggunakan editor
pascal.  Bentuk editor tersebut mirip deng an DOS Editor. Untuk mengaktifkan menu, kita
bisa menekan tombol F10. File teks bisa  disimpan dengan menu Save atau Save As.

Deklarasi File Teks
Seperti variable-variabel lain  dalam pascal, file teks juga  harus dideklarasikan terlebih
dahulu sebelum digunakan. Berikut ini adalah deklarasi file teks bernama InfileData.
  Program ProsesFile (InfileData,OutFIle)
 Var
  InfileData, Outfile : text;
InfileData dan OutFile dideklarasikan sebagi  file teks. Dalam judul program keduanya
harus dituliskan. Apabila program juga akan menggunakan keyboard (sebagai input) dan
monitor (sebagai Output), maka judul program dituliskan sebagai berikut  :
  Program ProsesFile (InfileData,Input,OutFile,Output);
Var
 InfileData,Outfile : Text;

Pernyataan Reset
Pernyataan Reset digunakan untuk menyiapkan suatu file teks untuk dibaca oleh
program. File teks siap untuk diproses dengan pernyataan berikut  :
 Reset(InfileData);
Dengan pernyataan Reset, pointer digeser ke permulaan file Teks. Karakter pertama
dalam suatu fiel akan diproses sesudah pernya taan Reset. Sebelum data dibaca, operasi
Reset harus dilakukan , apabila tidak program akan gagal menjalankan tugasnya (error
akan muncul).

Pernyataan Rewrite
Untuk menyiapkan Output (file teks yang akan menampung Output program kita), kita
harus menuliskan pernyataan seperti berikut ini  :
 Rewrite(OutFile);
Pernyataan diatas menyiapkan file OutFile untuk menampung hasil pemrosesan. Kija
tidak ada file OutFile sebelumnya,  OutFile akan diciptakan. Apabila 
sebelumnya ada file OutFile, pointer akan ditempatkan pada awal File dan semua isi
OutFile  yang lama akan terhapus oleh hasil pemrosesan yang terbaru.

Pernyataan Close
Pernyataan Close dipakai untuk menutup file-file yang dibuka dan dipakai dalam suatu
program. Program yang menggunakan operasi Output-Input (O/I) biasanya lebih lambat,
karena program tersebut dengan menggunakan jasa DOS berhubungan dengan aspek
Fisik dari disket.
Pascal menyediakan memori untuk menampung atau menuliskan data ke file. Ketika
program menuliskan data atau membaca data , program membaca atau menuliskan data
ke file buffer., bukannya langsung ke file eksternal secara langsung. Pascal secara periodic 
memindahkan data tersebut dari file buffer ke file eksternal. Apabila kita tidak
menuliskan pernyataan close, proses pemindahan data tidak akan sempurna, dengan
akibat ada data yang hilang. Tidak disimpan dalam file. Dengan cara semacam itu,
program yang melibatkan operasi I/O akan diproses lebih cepat daripada apabila
program langsung memanggil file eksternal.
Penulisan pernyataan Close adalah sebagai berikut  :
 Close(InfileData);

Contoh program :
Program hasilPrinter (InfileData,Output):
Var
 InfileData : text;
 I  : Integer;
Begin
AssiGn(InfielData,’PRN’);
Rewrite(InfileData)
WriteLn(InfileData,’Bilangan dari 10 ke 10);
WriteLn;
For   I := 1 to 10 Do
 WriteLn(InfileData,I);
 WriteLn(InfileData,chr(12));
Close(InfileData);
End.

Hasil dari program diatas  :
1
2
3
4
5
6
7
8
9
10
  


File Binary
Sebagai alternatif penulisan file teks, pascal  memungkinkan kita menuliskan file dengan
menggunakan kata(konstruktor) file seperti berikut ini  :
Type 
  DeretAngka = File of Integer;
Var 
 IntData : DeretAngka;
 Angka  : Integer;

File inData disebut juga sebagai File Binary. File Binary adalah file dimana representasi
internal dari tiap-tiap komponen secara l angsung. Misalkan nilai variable angka adalah
244, pernyataan :  
 Write(InData,Angka);

Mengkopi representasi binary internal variable angka dari memori ke file InData.
Misalkan file OutData bertipe teks, pernyataan berikut ini  :
 Write(OutData, angka:4);
Akan menuliskan niali variable angka ke file OutData dengan empat Bytes. Komputer
pertama harus mengubah representasi binary da ri memori ke string ‘244’  dan kemudian
menuliskan kode bnary unutk karakter blank(‘ ‘) ,2,4 dan 4 ke OutFile.
Sebaliknya apabila angka ‘244’ mau ditampilkan dilayar monitor, komputer akan
mengkopi representasi binary dair blank (‘  ‘),2,4 dan 4 kemudian menuliskan ke teks
string ‘244’ yang kemudian ditampilkan dilayar monitor. Proses semacam ini memakan
waktu lebih lama dibandingkan kalau langsung mengkopi representasi binary internal ke
disk.
Bentuk Umum dari file binary(sering juga di sebut typed filed), adalah sebagai berikut  :
Var
  InFile : File of <tipe>;
Dimana tipe bis merupakan tipe dasar file seperi Integer, Char, bahkan suatu record, dan
bias juga suatu string.
Berikut deklarasi file binary  :
Type
 String10 = string[10];
 RecMhs = record
  Nama : string[10];
  IP : Real;
 End;

Var
  InChar   : File of char;
  InMhs    : File of recMhs;
  InItgr    : File of Integer;
  InStrng  : File of String[10];


Contoh program  :
Program Bin01(input,OutFile);
Var
  OutFile    : File of Integer;
 Angka,Jumlah  : Integer;
Begin
AssiGn(OutFile,’a:\latihan\outline.txt’);
Rewrite(OutFile);
WriteLn;
WriteLn(‘Berapa angka yang akan dimasukkan  : ‘);ReadLn(Jumlah);
For Angka := 1 to Jumlah Do
 Write(OutFile,Angka);
Reset(OutFIle);
For Angka := 1 to Jumlah Do
 Begin
  Read(OutFile, Angka);
  Write(Output,Angka);
 End;
ReadLn;
End. 



Pointer
Pada bab terdahulu (dalam hal Array), masih menyisakan beberapa kelemahan, antara
lain adalah penggunaan space (ruang) yang  tetap. Kita harus tahu jumlah maksimum
yang akan kita alokasikan untuk record tersebut, baru kita menentukan space yang kita
butuhkan.
Pascal menyediakan fasilitas untuk mengatas i masalh static data structure seperti
digambarkan diatas dengan menggunakan dynamic  data structure. Berbeda dengan static
data structure, dynamic data structure, struktur data bias berkembang atau berkurang
sesuai dengan kebutuhan. Dengan dynamic da ta structure kita tidak perlu menentukan
jumlah record maksimum dan tidak perlu memb uang space yang tidak terpakai apabila
jumlah record lebih kecil dibandin gkan kapasitas yang disediakan.
Sebagai gambaran array record dan linked record, adalah sebagai berikut  :
Misalkan kita mempunyai data yang tersusun berdasarkan urutan alphabet adalah
sebagai berikut  :
 Pertama (6)    Kedua (7)
 Nama  (1) Djoko   5.000   5
 Nama  (2) Koen   7.000  -1
 Nama  (3) Laudiah   3.000   4
 Nama  (4) Boby   4.000   1
         Nama    (5) Inonk      6.000     2
 Nama  (6) Inem   8.000   3
Nama  (7) ….    ….   ….
 Nama  (8) ….    ….  ….
 .
 .
 Nama  (50) ..    …  50

Data diatas bisa dibaca sebagia berikut : 
Pertama menunjuk ke posisi (6) yang  merupakan urutan pertama. Kemudian Inem
menunjuk kearah berkutnya (Laudiah) yang terletak pada baris ketiga. Laudiah menunjuk
keposisi berikutnya daalam urutan yaitu Bo by yang berada pada urutan ke-4. Posisi
terakhir, yaitu Koen menunjuk pada posisi  -1 yang berarti daftar sudah berakhir.

Data diatas dapat dideklarasikan sebagai berikut  :
 Type 
    Pembeli    :  Record
   Nama  : Packed ArraY [1..10] of char;
      Uang, Link  : IntegeR;       
                          End;
Var
  Daftar      : ArraY [1..50] of Pembeli;
  Pertama, kosong  : Integer;


Apabila kita ingin menambah data baru, maka kita bis menye lipkan data tersebut diantara
daftar yang ada sekarang. Misalkan kita ingin memasukkan nama baru mahmud kedalam
data diatas.

Data Tipe Pointer
Kita akan membicarakan data dengan tipe pointer. Data bisa kita simpan pada variable
semacam ini. Sebagai contoh, dibawah ini  penulisan deklarasi variable dengan tipe
pointer.
Type 
  JumlahReal   = ^Real;
Var 
  Jumlah       :  JumlahReal;
Jumlah dideklarasikan sebagai variable poin ter dengan tipe JumlahReal. Kita bisa
menyimpan alamat memori variable tipe real pada jumlah. ^Real dibaca sebagi petunjuk
(pointer) ke Real.
Dengan Pointer, record daftar pembeli seperti dimuka bisa ditulis sebagi berikut  :

Type 
  Pembeli  = Record
    Nama    : Packed ArraY [1..10] of char;
  Uang   : Integer;
  Link  : ^Pembeli;
 End;
Var 
Daftar, Daftar1,daftar2 : ^Pembeli;

Perlu diingat bahwa variable pointer ini hanya mengandung nilai yang menunjuk pada
alamat memori yang menunjuk pada record dengan tipe pembeli.
Pernyataan New digunakan untuk mengaktifkan daftar.

New(daftar);
Pernyataan tersebut mengalokasikan pada  daftar. Alamat memori kemudian disimpan
pada variable daftar. Gambar berikut menj elaskan proses tersebut secara grafis.

   Daftar     Daftar
Sebelum New         ?    
Sesudah New     3142   →   …..                              ……                  ……
                 Daftar^Nama  
                                                                                               Daftar^Uang
             Daftar^link

Dengan pernyataan New, sel memory dengan alamat 3142 dialokasikan ke daftat.
Penugasan semacam dibawah ini akan mengisi nilai untuk daftar^Nama dan
Daftar^Uang. Daftar^link belum diisi nilainya.
 Daftar^nama : Sari;
 Daftar^uang : 10000;
Kita  juga bisa mengkopikan isi daftar ke daftar1 yang mempunyai tipe data yang sama.
  Daftar1 := Daftar;

Daftar dengan daftar1 mempunyai alamat memory yang sama, dan dengan demikian
menunjuk pada isi yang sama. Gambar berikut ini menjelaskan proses tersebut secara
grafis.

   Nama   Uang   Link
Daftar     Sari    10000      ?

Sesudah daftar dikopikan kedalam da ftar1, adalah sebagai berikut  :
          
   Nama   Uang   Link
Daftar     Sari    10000      ?

Daftar1        

                  

Menghubungkan variable pointer
Misalkan kita mempunyai 3 variabel pointer (sering juga disebut Node), seperti yang ada
dibawah ini   :

   Nama   Uang   Link
Daftar1  Sari   10000   ?
(2311)   
Daftar2  Ahmad  11000   ?
(3110)   
Daftar3  Djoko   6000   ?
(1100)

Angka dalam kurung adalah menunjuk alamat  memori variable diatas. Variabel diatas
belum dihubunkan satu dengan yang lain. VAriabel diatas  dihubungkan dengan
pernyataan sebagai berikut  :
  1. Daftar1^link  := daftar2;
  2. Daftar2^link  := daftar3;
  3. Daftar3^link  := Nil;

sesudah penugasan pernyataan-pernyataan diat as, variable diatas bisa digambarkan
sebagai berikut  :

    Nama   Uang   Link
daftar1   Sari    10000   *
(2311)   

daftar2   Ahmad  11000   *
(3110)

 

daftar3   Djoko   6000   *
(1100)

Nil menunjukkan bahwa daftar3 merupakan akhir dari daftar pembeli diatas. Dengan
menggunakan alamat-alamat memori, proses diatas akan nampak jelas  :

Pertama (3110)

   Nama   Uang   Link
Daftar   Sari   10000   Nil
(2311)

daftar   ahmad   11000   1100
(3110)

daftar   Djoko   6000   2311
(1100)

variable pertama mempunyai alamat memori yang  menunjuk pada alamat 3110.

 Pertama^Nama = ahmad
 Pertama^Uang = 11000
 Pertama^Link  = 1100

Pernyataan daftar := pertama^link (atau dalam hal ini daftar := 1100), membuat program
bergerak turun ke memory sel 1100

 Daftar^Nama  = Djoko
 Daftar^uang  = 6000
 Daftar^link  = 2311

Pernyataan daftar := daftar^link (daftar :=  2311) membuar program bergerak turun ke
memory sel 2311

 Daftar^Nama  = Sari
 Daftar^Uang  = 10000
 Daftar^Link  = Nil

Nil menunjukkan bahwa nilai ini merupakan tanda akhir list (daftar)
Contoh :
Berikut adalah program menciptakan linked data, mencari data dan menghilangkan data

Program Link1 (Input,Output);
Uses crt;
 Type
  Pointer  = ^Cell;
  Cell  = Record
   Value  : Integer;
   Next  : pointer;
  End;
Var
  Last, belakang, Q, P      : pointer;
 Angka, Nomor   : Integer;
 Jawab     : Char;
Found     : Boolean;

Procedure printlist;
Begin
Last := Belakang;
  While last <> nil Do
  Begin
   WriteLn(last^.Value);
   Last := Last^.next;
  End;
End;

Procedure Look;
Begin
  WriteLn(‘Masukkan Angka yang akan dicari  : ‘);ReadLn(angka);
  Last := Belakang;
  Found := false;
  While (last <> nil) and (found <> true) Do
  Begin
      If last^.value = angka then
    Begin
     Found := True;
     WriteLn(‘Angka Ditemukan’);
     WriteLn(Last^.value);
     Found := True;
    End;
   Else    
  
    Last := Last^.next;
   End;
End;

Procedure Delete;
Begin
WriteLn(‘Angka lain dihapus  ???’);ReadLn(angka);
Last := Belakang;
Found := False;
While (last <> Nil) and (found <> true) Do
 Begin
  Last := Last^.next;
   If Q^.value = angka then
    Begin
     Dispose(Q);
     Found := True;
    End;
   Else
   If last ^.value = angka then
    Begin 
     WriteLn(last^.value, ‘ ‘ , ditemukan dan dihapus’)l
     Q^.next := last^.next;
     Dispose(last);
     Found := true;
    End;
   End;
End;

Begin
 Belakang := Nil;
  Nomor := 1;
  writeLn(‘nomor 1 : ‘, nomor);
  Jawab := ‘y’;
  While (jawab <> ‘t’) Do
  Begin
      Writeln(‘Masukkan Angka   : ‘);ReadLn(angka);
   New(last);

   Last^.Value := angka;
   Last^.next := belakang;
   Belakang  := last;
   Nomor  := nomor + 1;
      WriteLn(‘Nomor     :  ‘, nomor);  
   WriteLn(‘Terus (y/t ???? ‘);
   Readln(jawab);
  End;
printList;
Look;
Delete;
printList;
ReadLn(jawab);
End.

Hasil dari program diatas, adalah  :

Masukkan angka  : 3
Terus(y/t)  ????  y

Masukkan angka  : 10
Terus(y/t)  ????  y
     
Masukkan angka   : 7
Terus(y/t)  ????  t

7
10
3

Masukkan angka yang akan dicari  : 10
Angka ditemukan
Angka ingin dihapus      : 7
7 ditemukan dan dihapus
10
3


SEKIAN TENTANG MODUL PASCAL
SEMOGA BERMANFAAT

0 komentar:

Posting Komentar

Related Posts Plugin for WordPress, Blogger...
 
Yudi Ermawan © 2010 | Designed by Trucks, in collaboration with MW3, Broadway Tickets, and Distubed Tour