Translate

Rabu, 19 September 2012

PROGRAM PASCAL 1/2 BELAH KETUPAT DENGAN FOR



Pascal Bab Perulangan



Proses yang Berulang
       Seringkali kita harus melakukan pengulangan terhadap suatu proses. Untuk memudahkan hal ini, Turbo Pascal menyediakan tiga macam pernyataan:
§  FOR
§  WHILE
§  REPEAT

   Dengan menggunakan pernyataan ini, suatu proses yang berulang dapat ditulis dengan kode yang pendek. Sebagai sontoh, jika Anda diminta menampilkan tulisan ‘Turbo Pascal’ seratus kali, tidaklah mungkin kita menuliskan perintah Writeln (‘Turbo Pascal’) seratus kali. Bila hal ini harus dilakukan karena tidak ada pernyataan lain yang mendukung, pemrograman akan terasa membosankan. Untungnya hal ini tidak harus terjadi!
  
   Ketiga Pernyataan di atas merupakan komponen yang membuat Pascal merupakan suatu bahasa pemrograman yang terstruktur. Suatu pengulangan dapat dilakukan tanpa menggunakan pernyataan GOTO sebagaimana dilakukan pada bahasa-bahasa pendahulu Pascal (meskipun pascal juga menyediakannya).

?
Terdapat Istilah loop atau kalang. Istilah ini menyatakan proses yang berulang.

1.1 Pernyataan FOR
       Pernyataan FOR biasa digunakan untuk melakukan pengulangan yang jumlahnya telah diketahui sebelumnya. Sebagai contoh, FOR dapat digunakan untuk menampilkan tulisan ‘Turbo Pascal’ 10 kali atau pun dalam jumlah yang lebih banyak lagi.

1.1.1 FOR TO
Salah satu bentuk pernyataan FOR adalah sebgai berikut:

FOR variabel := nilai_awal TO nilai_akhir DO
      pernyataan


Gambar 1.1 Pernyataan FOR

Pada format ini, variabel bertindak sebagai variabel pengontrol pengulangan. Variabel akan diisi dengan nilai, dimulai dari nilai_awal hingga nilai_akhir untuk setiap iterasi (putaran). Untuk setiap iterasi, pernyataan akan dijalankan. Gambar 1.1 menunjukkan mekanisme pengulangan oleh FOR.

Pada bentuk FOR di atas:

§  Variabel, nilai_awal dan nilai_akhir harus bertipe sama atau kompatibel
§  Tipe yang digunakan pada ketiga komponen tersebut harus berupa ordinal.
§  Nilai_awal harus lebih kecil atau sama dengan nilai_akhir. Kalau nilai_akhir lebih kecil daripada nilai_awal, bagian pernyataan tidak dijalankan sama sekali.
Contoh program yang menggunakan FOR untuk menampilkan tulisan ‘Turbo Pascal’ 10 kali:
Program 1.1

Program x10;

{     -----------------------------------------------------------              }
{     Contoh pemakaian FOR untuk                            }
{        menampilkan tulisan Turbo Pascal 10 kali.     }
{     -----------------------------------------------------------              }

USES Crt;

Var
     Pencacah
BEGIN
     ClrScr;

     For Pencacah := TO 10 DO
          Writeln (‘Turbo Pascal’);
END.

Akhir Program

Pada contoh diatas, Pencacah akan bernilai 1, 2, 3, 4 hingga 10 secara berturut-turut. Untuk setiap nilai tersebut, pernyataan:
            WriteLn (‘Turbo Pascal’);
dieksekusi. Sebagai akibatnya, pada layar muncul tulisan:
            Turbo Pascal
Sebanyak 10 kali.
Pada contoh berikut, isi dari variabel pengontrol FOR ditampilkan.

Program 1.2
                       
                        PROGRAM Deret;
                   {------------------------------------------------------}
                   {Menampilkan bilangan 1 sampai 10.   }
                   {------------------------------------------------------}
                            
                   Uses Crt;

                   Var
                       Pencacah : Integer;
                   BEGIN
                       Clrscr;
                       For Pencacah := 1 to 10 do
                       WriteLn (Pencacah);
                   END.

Akhir Program

            Hasilnya berupa bilangan dari 1 sampai dengan 10:
           

1
2
3
4
5
6
7
8
9
10

   Di depan telah dijelaskan bahwa nilai awal yang diberikan pada FOR-TO harus lebih kecil dari nilai akhir. Apa yang terjadi seandainya aturan ini dilanggar? Marilah kita lihat contoh berikut:
   FOR Pencacah := 10 TO 1 DO
         WriteLn (pencacah);

Perintah seperti di atas tidak menghasilkan keluaran apapun. Anda dapat melihat Gambar 1.1 untuk menganalisis kenapa hasilnya tidak ada.

   Sebuah gambaran atas penggunaan pernyataan majemuk di dalam pernyataan FOR ditunjukkan pada program berikut:

Program 1.3

   Program Rata2;
 
  {----------------------------------------------------------------------       }
  {Contoh program untuk menghitung nilai rata-rata         }
  {      dari sejumlah nilai                              }
  {----------------------------------------------------------------------       }
 
  USES Crt;

  VAR
          Nilai,                     {Menampung data dari keyboard}
          Jum    : Real; {Untuk menampung jumlah semua data }
          Pencacah : Integer;
  BEGIN
          Clrscr;
 
          Jum := 0;               {Diisi dengan nol terlebih dulu}
          FOR pencacah := 1 to 5 do
          BEGIN
                    Write (‘Nilai ke-‘, Pencacah, ‘ : ‘);
                   ReadLn (Nilai);

                   Jum := Jum + Nilai;  {Tambahkan Nilai ke Jum }
          END;

          WriteLn (‘Nilai rata-rata = ‘, Jum / 5 : 0 :2 ) ;
  END.

Akhir Program

Contoh di atas menggambarkan cara menghitung rata-rata dari 5 buah nilai. Mula-mula variabel Jum yang akan digunakan untuk menghitung jumlah kelima nilai diisi dengan nol. Kemudian untuk setiap nilai Pencacah yang bergerak dari 1 hingga 5, pernyataan:
   Write ( ‘Nilai ke-‘, Pencacah, ‘ : ‘);
   ReadLn (Nilai) ;

   Jum := Jum + Nilai;

akan dijalankan.

   Setelah FOR berakhir, Jum berisi total dari semua nilai yang dimasukkan dari keyboard. Kemudian untuk menghitung nilai rata-rata, Jum tinggal dibagi dengan 5.

Contoh pengeksekusian terhadap Program 1.3:

Nilai ke-1 : 70 
Nilai ke-2 : 80
Nilai ke-3 : 75
Nilai ke-4 : 90
Nilai ke-5 : 60
Nilai rata-rata = 75.00


Telah disinggung di depan bahwa variabel yang digunakan sebagai pengontrol FOR dapat bertipe CHAR. Contoh tentang hal ini dapat dilihat pada program berikut :

Program 1.4

   Program Abjad;

  {------------------------------------------------------------------------------ }
  { Contoh pemakaian FOR dengan variabel pengontrol      }
  {      bertipe Char.                                                         }
  {------------------------------------------------------------------------------ }

  USES Crt;
 
  Var
          Kar : Char;

  Begin
          Clrscr;

          FOR Kar := ‘A’ TO ‘z’ DO
                   Write (Kar) ;
          WriteLn;
  END.

Akhir Program

Pada contoh ini , secara berturut-turut Kar akan berisi dari ‘A’ hingga ‘Z’. Itulah sebabnya hasil dari program di atas berupa:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Adapun contoh berikut menunjukkan variabel pengontrol yang bertipe Boolean.
   FOR Saklar := False TO True DO
   WriteLn (Saklar) ;

Hasil dari pernyataan di atas berupa:

nFALSE
nTRUE

Program berikut memberikan gambaran cara menampilkan bilangan ganjil antara 1 sampai dengan 15.

Program 1.5

   PROGRAM Ganjil;

  {------------------------------------------------------------------------      }
  { Menampilkan bilangan ganjil antara 1 sampai dengan 15.        }
  {-----------------------------------------------------------------------                }

  USES Crt;

  Var
          Bilangan : Integer;

  BEGIN
          Clrscr;

          FOR Bilangan := 1 to 15 DO
                   IF Odd(Bilangan) THEN     { Kalau ganjil }
                             WriteLn (Bilangan) ;
  END.

Akhir Program

Hasil program:

1
3
5
7
9
11
13
15

1.1.2 FOR DOWNTO
   Kalau FOR-TO digunakan untuk mencacah naik, FOR-DOWNTO adalah kebalikannya. Pada FOR-DOWNTO, nilai awal justru harus lebih besar (atau sama dengan) nilai akhir. Format selengkapnya:

For variabel ;= nilai_awal DOWNTO nilai_akhir DO
        pernyataan


Pernyataan seperti:

   FOR Pencacah := 10 DOWNTO 1 do
   WriteLn (Pencacah);

Menghasilkan berupa:       

10
9
8
7
6
5
4
3
2
1

Adapun contoh berikut digunakan untuk menampilkan huruf Z hingga A:

   FOR Huruf := ‘Z’ DOWNTO “a” DO
   Write (Huruf) ;

Hasil:

ZYXWVUTSRQPONMLKJIHGFEDCBA

1.1.3 Kenaikan atau Penurunan Tidak Sebesar Satu
   FOR merupakan pernyataan yang cocok untuk menangani pencacah yang kenaikan atau penurunannya sebesar satu. FOR-TO dipakai untuk pencacahan yang naik sebesar satu (nilai   ordinalnya), sedangkan FOR-DOWNTO digunakan untuk pencacahan yang menurun sebesar satu (nilai ordinalnya). Bila selang kenaikan atau penurunan pencacahan tidak sebesar satu, WHILE dan REPEAT-lah yang cocok dipakai untuk keperluan itu.

1.1.4 FOR Bersarang
   Pada masalah tertentu ada kemungkinan FOR di dalam FOR yang lain. Bentuk seperti ini biasa disebut FOR bersarang (nested FOR). Contoh penerapan FOR bersarang adlah untuk membuat gambar seperti berikut ini:

   *
   **
   ***
   ****
   *****
   ******
   *******
   ********
Program untuk membuat pola seperti di atas ditunjukkan di bawah ini.

Program 1.6

    PROGRAM Bintang;

  {------------------------------------------------      }
  { Contoh pemakaian IF di dalam IF.     }
  {------------------------------------------------      }

  USES Crt;

  CONST
          AKHIR = 8;   { -- Jumlah * pada bari terakhir --  }
                  
  VAR
          Baris, Kolom : Integer;

  BEGIN
          Clrscr;

          FOR Baris := 1 TO AKHIR DO
          BEGIN
          FOR Kolom := 1 TO Baris DO
                   Write (‘*’) ;

                   WriteLn;                { ---- Pindah Baris --- }
          END;
  END.

Akhir Program
FOR yang terluar dipakai untuk mengontrol baris. Baris yang dibuat bergerak dari 1 sampai dengan AKHIR. Kemudian untuk setiap nilai baris, tanda * ditulis sebanyak nomor baris saat itu. Dapat dilihat, baris pertama berisi 1 buah tanda *, baris kedua berisi 2 buah tanda * dan seterusnya. Untuk menampilakan banyaknya tanda * dalam satu baris, pernyataan yang digunakan adalah FOR yang kedua:
  
   FOR Kolom := 1 TO Baris DO
            Write (‘ * ’) ;

Setelah menampilkan tanda * yang terakhir untuk setiap baris, kursor dipindahkan ke baris berikutnya dengan menggunakan WriteLn.

?
FOR bersarang umum dipakai pada operasi matriks.

1.1.5 FOR Tanpa Diikuti oleh Pernyataan

Suatu pernyataan FOR bisa saja tidak diikuti dengan sebuah pernyataan pun. Contoh:

   FOR I := 1 TO 20000 DO ;
   Writeln (‘Halo’) ;

Tampak bahwa sesudah DO terdapat titik koma. Ini menandakan bahwa FOR tidak diikuti dengan pernyataan yang akan diulang. Pernyataan di atas jelas berbeda dengan:

   FOR I := 1 TO 20000 DO
            Writeln ( ‘ Halo ‘ );

Bukan karena tulisan Writeln ditulis masuk ke kanan, tetapi berhubung tanda titik koma tidak ada pada akhir DO, pernyataan yang terakhir ini akan mengulang Writeln sebanyak 20.000 kali. Sedangkan pernyataan FOR pada contoh sebelumnya akan menunda pengerjaan Writeln sampai I bernilai 20.000 terlampaui ( Writeln hanya dikerjakan sekali).

?
Cara penundaan eksekusi terhadap suatu perintah melalui bentuk semacam:
FOR I := 1 TO 20000 DO;

Sangat bergantung oleh kecepatan computer. Lama penundaan menjadi tidak tentu. Cara yang terbaik untuk melakukan penundaan eksekusi adalah dengan memakai prosedur standar bernama delay (bab 20)


1.2 Pernyataan WHILE
   Pernyataan WHILE biasa dipakai untuk melakukan pengulangan yang jumlahnya tidak diketahui di depan atau selang pencacah tidak sebesar 1 atau -1. Bentuk pernyataan WHILE:

WHILE kondisi DO
          pernyataan


1.2.1 Pencacahan Meningkat
Contoh program berikut menunjukkan pemakaian WHILE untuk menggantikan perintah:
   FOR Pencacah := 1 TO 10 DO
            Writeln (I) ;

Program 1.7

   PROGRAM Whill;
 
  {--------------------------------------------------------------------         }
  {Contoh WHILE untuk menampilkan bilangan          }
  {      antara 1 sampai 10                             }
  {--------------------------------------------------------------------         }

  USES Crt;
  VAR
          Pencacah : Integer:
  Begin
          Clrscr;
          Pencacah := 1;       { - - - Nilai awal - - - }
          While Pencacah <= 10 DO
          BEGIN

                   WriteLn(Pencacah);
                   Pencacah := Pencacah +1; { - - - Menaikkan nilai Pencacah - - - }
          END;
  END.

Akhir Program

Pada contoh di atas:
            Pencacah := 1;                        
            While Pencacah <= 10 DO
            BEGIN

                        WriteLn(Pencacah);
                        Pencacah := Pencacah +1;                  
            END;

Menggantikan:
            FOR Pencacah := 1 TO 10 DO
                        WriteLn (Pencacah);

Tampak bahwa pada instruksi di atas:
n Pemberian nilai awal terhadap variabel pengndali pengulangan berupa:
    Pencacah := 1;        

n Upaya untuk menaikkan nilai variabel pengontrol pengulangan, berupa:
    Pencacah := Pencacah +1;  

n Kondisi pengulangan berupa: Pencacah <= 10 DO.
    Kondisi ini menentukan terjadinya pemrosesan bagian pernyataan kalau bernilai           True.
Ketiga hal tersebut perlu diperhatikan dengan seksama. Kekeliruan seperti kealpaan terhadap penaikan variabel pengontrol pengulangan ( Pencacah pada contoh diatas) berakibat fatal. Misalnya bila pernyataan:

   Pencacah := Pencacah + 1;

Pada Program 9.7, tidak disertakan bagian yang terletak di dalam BEGIN END yang mengikuti WHILE akan dijalankan terus-menerus.


?
Jika keadaan ini terjadi dan Anda sedang berada di linhkungan IDE, Anda bisa menekan tombol Ctrl+Break untuk menghentikannya.

1.2.2 Pencacahan Menurun
WHILE juga dapat diakai untuk menggantikan FOR-DOWNTO, yaitu sebagai contoh:

   Pencacah := 10;
   WHILE Pencacah >0 DO
   BEGIN
            WriteLn (Pencacah);
            Pencacah := Pencacah -1;
   END;

Merupakan pengganti dari:
   FOR Pencacah := 10 DOWNTO 1 DO
            WriteLn (Pencacah);

Contoh Program:

Prgram 1.8

   Program Whil2;
  {----------------------------------------------------------------   }
  {Contoh WHIle untuk menampilkan bilangan }
  {      dari 10 ke 1.                                       }
  {----------------------------------------------------------------   }

  USES Crt;

  VAR
          Pencacah : Integer;
  BEGIN
          Clrscr;       
          Pencacah := 10;  { - - - Nilai Awal - - - }
          WHILE Pencacah >= 1 DO
          BEGIN
                   WriteLn (Pencacah);
                   Pencacah := Pencacah -1;  { - - - Menurunkan nilai Pencacah }
          END;
  END.

Akhir Program
Hasil:
1.2.3 Kenaikan atau Penurunan Tidak Sebesar Satu
10
9
8
7
6
5
4
3
2
1
   Dengan mengatur selang kenaikan pada variabel pengontrol pengulangan, WHILE bisa dimanfaatkan, misalnya untuk mendapatkan sederetan bilangan ganjil ataupun menampilkan bilangan dari 1 sampai dengan 10 dengan kenaikan sebesar 0,2. Sebagai contoh (dengan Bil bertipe Real):

   Bil := 1:
   WHILE Bil <= 2.0 DO
   BEGIN
            WriteLn (Bil :0:2);
            Bil := Bil + 0.2;
   END;

Hasil dari pernyataan-pernyataan di atas adalah:
   1.00
   1.20
   1.40
   1.60
   1.80
   2.00
1.2.4 Tidak Selamanya Ada Pencacahan
Beberapa contoh WHILE yang telah diberikan melibatkan pencacahan (yang meningkat ataupun menurun). Hal ini sebenarnya belum tentu ada. Pada contoh berikut dapat dilihat bahwa pengndalian kondisi WHILE ditentukan oleh keabsahan yang dimasukkan dari keyboard.
Program 1.9

PROGRAM While;

{----------------------------------------------------------------------          }
{ Contoh WHILE yang tidak melibatkan pencacah.     }
{----------------------------------------------------------------------          }

USES Crt;

VAR
  Absah : Boolean;
  Pil     : Integer;
BEGIN
  Clrscr;

  Absah := FALSE;    { --- Nilai Awal --- }
  WHILE NOT Absah DO
  BEGIN
          Write (‘Pilihan  [1..3] : ‘);
          ReadLn (Pil) ;
         
          Absah := (Pil >= 1) AND (Pil <= 3);
  END;

  WriteLn (‘Selesai…’);
END.

Akhir Program

Hasil:

Pilihan  [1..3]  :  5
Pilihan  [1..3]  :  4
Pilihan  [1..3]  :  3
Selesai…


Pada WHILE di atas,
   Absah := (Pil >= 1) AND (Pil <= 3) ;

Menentukan bagian yang terletak di dalam BEGIN END yang mengikuti WHILE akan diproses lagi atau tidak. Dari contoh di atas terlihat bahwa kalau nilai seperti 4 atau 5 dimasukkan, bagian BEGIN END akan diproses kembali, mengingat Absah bernilai False disebabkan nilai 4 atau 5 tidak terletak antara 1 sampai dengan 3.

1.2.5 WHILE Bersarang
   Bagian yang akan diulang oleh WHILE juga bisa mengandung WHILE yang lain.
Gambaran mengenai hal ini, yaitu misalnya untuk membuat gambar seperti berikut:

*
***
*****
*******
Programnya dapat dilihat di bawah ini.
Program 1.10

PROGRAM Bintang2;
{-----------------------------------------------------    }
{ Contoh yang menggunakan WHILE                }
{        di dalam WHILE.                         }
{-----------------------------------------------------    }

USES Crt;
VAR
          Baris,                              { - - Pencacah Baris - - }
                   Kolom,                             { - - Pencacah Kolom - }
                   JumBaris : Integer; { - - Jumlah Baris - - -        }       

BEGIN
          Clrcr;
          Write (‘ Jumlah baris : ‘);
          Readln (JumBaris);
          Baris := 1;
          WHILE Baris <= JumBaris DO
          BEGIN
                   { - - Menulis * yang pertama - - }
                   Write (‘*’ : JumBaris + 1 – Baris);

                   { - - Menulis * selanjutnya - - }
                   Kolom := 2;
                   WHILE Kolom <= (2 * Baris -1) DO
                   BEGIN
                             Write (‘*’);
                             Kolom := Kolom +1;  { - - Naikkan Kolom - - }
                   END;

                   WriteLn;   { - - Pindah baris - - }
                   Baris := Baris +1 { - - Naikkan Baris - - }
          END;
END.

Akhir Program
Namun perlu diketahui, program di atas akan menjadi lebih sederhana kalau WHILE diganti dengan FOR. Anda bisa mencobanya.


1.3 Pernyataan REPEAT
            REPEAT biasa dipakai untuk menangani pengulangan yang jumlahnya belum pasti, tetapi paling tidak dikerjakan sekali ( Pada WHILE, ada kemungkinan bagian pernyataan tidak dijalankan sama sekali).

Bentuk pernyataan REPEAT :

REPEAT
   Pernyataan_1;
   Pernyataan_2;
  
   Pernyataan_n
UNTIL kondisi

   Pada dasarnya REPEAT dapat digunakan untuk semua masalah yang dapat ditangani oleh FOR ataupun WHILE. Sebagai contoh:
   FOR Pencacah := 1 TO 10 DO
            Writeln (‘Turbo Pascal’);

Dapat disajikan dengan menggunakan REPEAt seperti berikut:
   Pencacah := 1;
   REPEAT
            Writeln (‘Turbo Pascal’);
            Pencacah := Pencacah + 1 : { - - Menaikkan nilai Pencacah - - }

   Contoh berikut memberikan gambaran penggunaan REPEAt untuk membentuk tabel ekuivalensi derajat celcius, fahrenheit dan reamur. Rumus yang digunakan:

   F=9/5 x C +32
   R=4/5 x C

Program 9.11

PROGRAM Cfr;
{--------------------------------------------------------------       }
{ Tabel derajar Celcius, Fahrenheit, Reamur.  }
{--------------------------------------------------------------       }
USES Crt;

VAR
  Celcius,
  Reamur,
  Fahrenheit : Real;
Begin
  Clrscr;

  Writeln (‘Celcius’ : 12, ‘Reamur’ :12, ‘Fahrenheit’ : 12);
  Writeln (‘---------------------------------------------------‘);

  Celcius := 0:
  REPEAT
          Reamur := 4 / 5 * Celcius;
          Fahrenheit := 9 / 5 * Celcius + 32;
          Writeln (Celcius:12:2, Reamur :12:2, Fahrenheit:12:2);
  UNTIL Celcius >10;
  Writeln (‘--------------------------------------------------‘);
END.

Akhir Program

Hasil eksekusi:

  Celcius                      Reamur                        Fahrenheit
      0.00                         0.00                                 32.00
      0.50                         0.40                                 32.90
    1.00                            0.80                                 33.80
    2.00                            1.60                                 35.60
    3.00                            2.40                                 37.40