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:
- Angka genap dan besar dari 10
- Angka genap dan kecil dari 10
- Angka ganjil dan besar dari 10
- 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.
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:
- Angka genap dan besar dari 10
- Angka genap dan kecil dari 10
- Angka ganjil dan besar dari 10
- 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?
Yup, 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:
- Angka genap dan besar dari 10
- Angka genap dan kecil dari 10
- Angka ganjil dan besar dari 10
- Angka ganjil dan kecil dari 10
- 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.
Awsam bang. ntar ajarin nyang third party library yak ^^.
Requestnya ditampung ya… :)
Bagus nih tutornya, modal buat masuk SMK jurusan RPL, jadi kalau pas diajarin udah ngerti semua. THANKS MIN
Siip gan, semoga sukses dengan studinya..
Gan, kapan lagi nih updatenya soalnya dah gak sabar mau belajar lagi, hahahahhahaha. Oh iya gan, saya tanya sama temen saya, kalau mau jadi programer yang handal harus belajar linux ubuntu, apa itu benar gan?
Hehe, iya nih… akhir2 ini banyak kegiatan lain, jadi sering tertunda. Hari ini saya rencanakan bisa publish artikel lanjutannya…
G harus kok gan, tapi memang lebih baik jika bisa linux, terutama kalau pengen ke web programming. Linux umumnya digunakan di server, jadi ketika membuat aplikasi yang berhubungan dengan jaringan dan server, akan lebih baik jika paham linux terutama perintah2 command line-nya. Tapi ini g harus kok..
Masih bingung tentang if bersarang, agak rumit
Hehe, pelan2 saja dipelajarinya gan… :)
Min, kalau mau jadi programer hal yang harus dikuasai apa saja?
Berarti kalau kita ingin menambahkan 1 lagi kemungkinan (angka = 10) tidak bisa menggunakan nested if ya Bang?
Dalam contoh ini, di dalam nested if untuk angka 10 sudah dihandle oleh bagian "else".
Saya membuat kondisi "if (angka > 10)", dan "else". Artinya jika angka tersebut tidak besar dari 10, akan masuk ke bagian else. Jadi memang tidak perlu lagi kondisi if tambahan.
Tp jika pengen, juga bisa ditambahkan kok. Sehingga nested ifnya jadi punya 3 kondisi: "if (angka > 10)", "if (angka < 10)" dan "else". Bagian else akan dijalankan jika variabel angka = 10.
Oo.. begitu.. Sebelumnya saya juga mencoba menambahkan tapi sayanya bingung. hehe..
Sekarang sudah saya tambah lagi dan memang bisa ternyata. Terimakasih, sekarang nggak bingung lagi Alhamdulillah :)
Siip… :)
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. GAN TULIS PROGRAM if(angka=10) dimanaya ya??????????????????????,,ane coba berkali2 gak bisa2,tolong gannn??
Mas Andre.. salam sukses..
Mas tutorial visual basic 6.0 or Net kga ada ya?
Kalau bisa ajarin juga mas :D.. Biar websitenya makin berjaya.. :)
Sebelumnya Terima Kasih Artikelnya..
Saat ini saya masih fokus ke web programming nih, tapi mudah2an nanti sempat buat tutorial tentang pemrograman desktop juga seperti VB.
Maaf kak,
Saya ingin menambahkan kasus
If (=10) tapi, setelah saya modif,
Saya selalu kesalah di else nya…
Mohon pencerahannya kak ??
Makasih gan/min
Lagi belajar pascal,saya
Belajar di lazarus
Bang kalau pakek y/n itu if nya bagaimana?
if jenis = 'L' {<= kondisi 1} then
begin
writeln('Lolos'); {<= kode program 1}
if umur < 30 {<= kondisi 1.1} then
begin
Writeln('Lolos'); {kode program 1.1}
end;
end
else
begin
Writeln('Tidak Lolos'); {kode program 2}
end;
Waktu kondisi 1 dan kondisi 1.1 terpenuhi, kode program 1 dan kode program 1.1 dijalankan (dobel lolos).
kalau kode program 1 dihilangkan waktu kondisi 1 terpenuhi tapi kondisi 1.1 tidak terpenuhi malah kode program 2 yang harusnya dijalankan, gak dijalankan. cek
Makasih Gannn tutorialnya benar2 membantu… hehehehe
tapi saya mau tanya bagaimana jika kita juga menggunakan div??? apakah sama programnya berjalan??
Div dan mod merupakan operator yang berbeda, sama seperti tambah dan kurang. Jadi itu tergantung seperti apa program yang dibuat.