Tutorial Belajar Pascal Part 38: Percabangan Kondisi IF Bersarang dalam Pascal

Dalam tutorial belajar pascal kali ini kita akan membahas penerapan lanjutan dari struktur IF THEN ELSE, yakni membuat percabangan IF bersarang, atau dikenal juga sebagai nested IF.


Konsep Dasar Kondisi IF Bersarang (Nested IF)

Secara sederhana, IF bersarang atau nested IF adalah penggunaan struktur IF di dalam IF. Kondisi seperti ini sering digunakan untuk kode program yang sudah cukup kompleks.

Terdapat banyak variasi dari nested IF, tergantung kode program yang ingin kita rancang. Salah satunya adalah sebagai berikut:

IF (kondisi 1) THEN
  begin
    (kode program 1)
    IF (kondisi 1.1) THEN
      begin
        (kode program 1.1)
      end;
  end
ELSE
  begin
    (kode program 2)
  end;

Dalam contoh ini saya menempatkan sebuah kondisi IF di dalam IF (nested IF). Perhatikan bahwa (kode program 1.1) hanya akan dijalankan jika kondisi 1 dan kondisi 1.1 terpenuhi. Jika kondisi 1 tidak terpenuhi, program akan langsung lompat ke bagian ELSE.

Pascal dan mayoritas bahasa pemrograman lain tidak membatasi jumlah IF di dalam IF. Anda bisa membuat struktur yang lebih rumit seperti ini:

IF (kondisi 1) THEN
  begin
    (kode program 1)
    IF (kondisi 1.1) THEN
      begin
        (kode program 1.1)
          IF (kondisi 1.1.1) THEN
            begin
             (kode program 1.1.1)
          end;
      end;
  end
ELSE
  begin
    (kode program 2)
        IF (kondisi 2.1) THEN
      begin
        (kode program 2.1)
      end;
  end;

Kali ini saya membuat struktur IF di dalam IF di dalam IF (2 level nested IF). Untuk kode program yang panjang seperti ini, anda harus hati-hati menentukan kode program mana yang masuk ke dalam blok IF.

Penulisan indenting (menjorokkan kode program beberapa spasi di awal) juga akan membantu kita membedakan kode program ini masuk IF yang ini, dan kode program itu masuk ke IF yang itu.

Kemampuan logika juga sangat berperan dalam membuat kondisi yang kompleks seperti ini.


Contoh Kode Program Nested IF dalam Pascal

Cukup dengan teori seputar nested IF atau IF bersarang. Mari kita masuk ke contoh program. Saya ingin membuat sebuah program yang meminta input angka (integer), kemudian menginformasikan apakah angka itu angka genap atau ganjil, dan apakah angka itu besar atau kecil dari 10.

Dapatkah anda merancang kode programnya? Tentunya dengan menggunakan konsep nested IF. Disini terdapat 2 kondisi dengan 4 kemungkinan:

  1. Angka genap dan besar dari 10
  2. Angka genap dan kecil dari 10
  3. Angka ganjil dan besar dari 10
  4. Angka ganjil dan kecil dari 10

Berikut kode program yang saya gunakan:

program struktur_if_then_else_nested;
uses crt;
var
  angka:integer;
begin
  clrscr;
  write('Masukkan sebuah angka: ');
  readln(angka);
  if (angka mod 2 = 0) then
    begin
      write('Angka yang anda masukkan merupakan bilangan genap ');
      if (angka > 10) then
        begin
          writeln('dan besar dari 10');
        end
      else
        begin
          writeln('dan kecil dari 10');
        end;
    end
  else
    begin
      write('Angka yang anda masukkan merupakan bilangan ganjil ');
     if (angka > 10) then
        begin
          writeln('dan besar dari 10');
        end
      else
        begin
          writeln('dan kecil dari 10');
        end;
    end;    
  readln;
end.

Silahkan pelajari sebentar kode program diatas. Jika anda sudah mengikuti seluruh tutorial pascal di duniailkom, saya yakin bisa membaca maksud kode program ini (walaupun agak panjang).

Kemampuan logika juga akan berperan. Sebagai contoh, saya tidak perlu memeriksa apakah angka tersebut kecil dari 10, atau apakah angka itu tidak habis dibagi 2. Kondisi ini cukup dibuat menggunakan ELSE. Jika sebuah angka tidak lebih besar dari 10, pastinya angka itu kecil dari 10 (tidak perlu diperiksa). Jika angka tidak habis dibagi 2, berarti angka tersebut ganjil.

Saya juga menggunakan perintah write dan writeln secara bergantian, agar hasil akhir teks menjadi 1 baris.

Silahkan anda input berbagai angka, dan test apakah kode program tersebut sudah benar atau ada yang kurang.

Hasil Contoh Program - Kondisi IF Bersarang - Nested IF Pascal


Alternatif Penggunaan Nested IF

Dalam beberapa situasi, kita bisa mengubah nested IF menjadi IF "biasa" dengan bantuan operator logika AND.

Kode program yang saya buat sebelumnya digunakan untuk membuat hasil untuk 4 kemungkinan:

  1. Angka genap dan besar dari 10
  2. Angka genap dan kecil dari 10
  3. Angka ganjil dan besar dari 10
  4. Angka ganjil dan kecil dari 10

Dengan demikian, saya juga bisa membuat kode program sebagai berikut:

program struktur_if_then_else_nested;
uses crt;
var
  angka:integer;
begin
  clrscr;
  write('Masukkan sebuah angka: ');
  readln(angka);
  if (angka mod 2 = 0) and (angka > 10) then
    begin
      writeln('Angka yang anda masukkan merupakan bilangan genap dan besar dari 10');
    end
  else 
  if (angka mod 2 = 0) and (angka < 10) then
    begin
      writeln('Angka yang anda masukkan merupakan bilangan genap dan kecil dari 10');
    end
  else 
  if (angka mod 2 <> 0) and (angka > 10) then
    begin
      writeln('Angka yang anda masukkan merupakan bilangan ganjil dan besar dari 10');
    end 
  else 
  if (angka mod 2 <> 0) and (angka < 10) then
    begin
      writeln('Angka yang anda masukkan merupakan bilangan ganjil dan kecil dari 10');
    end;      
  readln;
end.

Yup, kali ini tanpa nested IF dan hasil yang didapat sama persis dengan kode program kita sebelumnya. Bagi kebanyakan orang, kode ini juga lebih mudah dibaca, karena kita langsung bisa melihat kondisi apa saja yang akan diperiksa.

Namun dari sudut pandang performa, nested IF lebih efisien daripada ini. Dalam situasi terburuk, variabel angka hanya diperiksa sebanyak 2 kali jika menggunakan nested IF. Misalkan saya menginput angka:= 7, pertama kali akan diperiksa kondisi: if (angka mod 2 = 0)? Tidak, program langsung menjalankan bagian ELSE, dan masuk ke kondisi kedua: if (angka > 10)? Tidak, jalankan ELSE.

Sedangkan yang tanpa nested IF, variabel angka akan diperiksa lebih dari 4 kali. Pertama if (angka mod 2 = 0)? Tidak. Program lanjut ke bagian ELSE IF kedua: if (angka mod 2 = 0)? Juga tidak, lanjut ke ELSE IF ketiga: if (angka mod 2 <> 0)? Betul. Kali ini program akan masuk ke kondisi (angka > 10)? Tidak. Sehingga akan dijalankan ELSE terakhir: if (angka mod 2 <> 0) and (angka < 10)? Benar.

Untuk kode program yang sederhana seperti diatas, efeknya tidak akan terasa (karena dieksekusi dengan sangat cepat). Beberapa programmer juga tidak keberatan mengorbankan sedikit performa agar kode program mudah dibaca daripada menggunakan nested IF.


Hati-hati Dengan Kesalahan Logika!

Dalam pembuatan kode program, kita sering melakukan kesalahan. Misalnya lupa menambahkan penutup titik koma ' ; ' diakhir setiap perintah atau salah memberikan tipe data ke sebuah variabel.

Kesalahan seperti ini disebut sebagai syntax error. Meskipun sering terjadi, error seperti ini gampang ditemukan. Compiler Pascal (aplikasi yang menerjemahkan kode program yang kita ketik), akan langsung menampilkan pesan error ini sebagai syntax error.

Jenis error yang kedua adalah kesalahan logika (logic error). Berbeda dengan syntax error, logic error sangat susah ditemukan. Error jenis ini tidak akan "diprotes" oleh compiler pascal, karena penulisan kode programnya memang sudah benar. Kesalahan ini disebabkan dari programmernya sendiri yang kurang hati-hati.

Sebagai contoh, 2 kode program yang saya tulis diatas mengandung kesalahan logika yang cukup fatal. Dapatkah anda menemukannya? Kode programnya sendiri memang tidak mengandung syntax error, soalnya kalau ada, program tentu tidak akan bisa jalan.

Masih belum ketemu? Bagaimana jika saya gunakan angka 10 sebagai input program?

Hasil Contoh Program Kesalahan Logika dalam PascalYup, kode program yang saya tulis hanya bisa membedakan angka yang kurang dari 10, dan angka yang lebih dari 10. Tetapi tidak untuk angka 10 itu sendiri.

Untuk contoh yang nested IF, hasilnya adalah: Angka yang anda masukkan merupakan bilangan genap dan kecil dari 10. Sedangkan untuk contoh kode program yang menggunakan operator AND. Tidak akan tampil hasil apa-apa.

Ini terjadi karena kode program tersebut "tidak sadar" bahwa ada 1 lagi logika kondisi, yakni jika angka tersebut adalah 10. Artinya, seharusnya ada 5 kemungkinan:

  1. Angka genap dan besar dari 10
  2. Angka genap dan kecil dari 10
  3. Angka ganjil dan besar dari 10
  4. Angka ganjil dan kecil dari 10
  5. Angka genap dan sama dengan 10

Sebagai solusi dari masalah ini, anda bisa menambahkan 1 lagi kondisi if untuk memeriksa if (angka = 10). Kode programnya tentu semakin kompleks, tapi bagus sebagai sarana latihan. Silahkan anda modifikasi kode diatas, dan test apakah anda bisa memodifikasi kode programnya untuk memproses angka 10.


Dalam tutorial ini kita telah membahas tentang struktur IF bersarang atau dikenal juga sebagai nested IF. Selain itu kita telah melihat salah satu contoh kesalahan logika yang bisa saja terjadi pada aplikasi yang sedang anda rancang.

Selain menggunakan struktur IF THEN ELSE, di dalam Pascal juga tersedia percabangan kode program menggunakan kondisi CASE. Inilah yang akan kita bahas selanjutnya: Tutorial Percabangan Kondisi CASE dalam bahasa pemrograman Pascal.


eBook Pascal Uncover Duniailkom
Apabila anda serius ingin mempelajari Pascal dan butuh materi Pascal yang jauh lebih lengkap, Duniailkom telah menerbitkan eBook Pascal Uncover yang membahas bahasa pemrograman Pascal dari dasar hingga procedure, function dan contoh kasus. Penjelasan lebih lanjut bisa ke eBook Pascal Uncover Duniailkom.

22 Comments

  1. Tikopipi
    26 Sep 16
    • Andre
      26 Sep 16
  2. Taufik
    07 Oct 16
    • Andre
      07 Oct 16
  3. Taufik
    09 Oct 16
    • Andre
      10 Oct 16
  4. Taufik
    10 Oct 16
    • Andre
      10 Oct 16
  5. Taufik
    10 Oct 16
  6. Shiota
    16 Jan 17
    • Andre
      17 Jan 17
      • Shiota
        17 Jan 17
        • Andre
          18 Jan 17
      • Ospek
        10 Sep 20
  7. Anggy Antoro
    05 Mar 17
    • Andre
      07 Mar 17
      • Kara
        20 Jan 21
  8. Osha Permadi
    28 Oct 17
  9. Carlos
    30 Jan 19
  10. Lupa hehe
    03 Feb 19
  11. piman hura
    25 Nov 19
    • Andre
      25 Nov 19

Add Comment