Thursday, January 1, 2015


BAB V
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 beberapa 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),  disini akan dibahas array 2 dimensi saja. Array 
2 dimensi dapat mewakili suatu bentuk tabel  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 program 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('input 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_pengiriman_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 terstruktur. 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. Untuk 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  mempersingkat 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 sebagai 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 bervariasi. 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  Umur  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;
         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  deklarasi 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; {proc.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 pengiriman_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 dikirimkan secara nilai atau secara acuan.
Penulisan judul function yang 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('bilangan terbesar =',besar(nil1,nil2):6:2);
           readln;
          end.

 II. Function dengan parameter acuan
Penulisan judul function dengan menggunakan parameter 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 pengiriman_parameter_secara_acuan;
         function kali(var bil1,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. Sehingga 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 contoh, pecahan program semacam ini digunakan membaca suatu nama (kumpulan karakter) 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 diatas 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 melalui beberapa cara. Kalau kita ad DOS, maka dengan cara yang termudah adalah dengan menggunakan DOS tersebut. 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 dengan 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 pernyataan 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
  

0 comments:

Post a Comment

Unordered List

Sample Text

Popular Posts

Recent Posts

Text

Flag Counter