Nested if 164
9.4. Nested IF 9. 2 Perhatikan kembali struktur IF-THEN-ELSE dan IF-THEN Statement seperti yang sudah diterangkan sebagai berikut : Cond Cond FALSE TRUE TRUE S2 S1 FALSE S1 Struktur IF-THEN-ELSE Struktur IF-THEN Dari ilustrasi struktur diatas, S adalah satu atau sekelompok statement. Didalam kelompok S mungkin terdapat statement IF sehingga terjadi IF secara berjenjang atau secara tersarang yang biasa disebut Nested If (nest = sarang) 164
9.4. Nested IF if (cond1) {if (cond2) { - - S1 - } else { - - S2 S2 S1 3 Dari ilustrasi struktur diatas, S adalah satu atau sekelompok statement. Didalam kelompok S mungkin terdapat statement IF sehingga terjadi IF secara berjenjang atau secara tersarang yang biasa disebut Nested If (nest = sarang) Contoh : Cond1 False True 1) if (cond1) {if (cond2) { - - S1 - } else { - - S2 Cond2 True S2 S1 False 164
9.4. Nested IF S1 S3 S2 2) if (cond1) {if (cond2) {- Cond1 - S1 - } True False S1 S3 S2 2) if (cond1) {if (cond2) {- - S1 - } else {- - S2 - S3 164
3) if cond1 { - - S1 - if cond2 - S2 } - S3 else {if cond3 - S4 - S5 9. 5 3) if cond1 { - - S1 - if cond2 - S2 } - S3 else {if cond3 - S4 - S5 Cond1 True False Cond3 S1 False True S5 S4 Cond2 True S2 False S3 Perhatikan posisi letak ‘titik’ Endif (akhir fungsi if ) dalam flowchart. Posisi ini penting untuk menganalisa aliran terutama untuk nested IF yang komplek atau untuk proses pengulangan yang bersifat rekursif. 165
S1 S5 S4 S3 S2 S6 165 4) if (cond1) { - - S1 - if (cond2) - S2 Cond1 } 9. 6 4) if (cond1) { - - S1 - if (cond2) - S2 } else { - - S3 else {if (cond3) - S4 - S5 - S6 Cond1 False True Cond3 S1 False True S5 S4 Cond2 True False S3 S2 S6 165
166 5) if(cond1) {if(cond2) {if(cond3) {if(cond4) { - - S1 - } S1 9. 7 5) if(cond1) {if(cond2) {if(cond3) {if(cond4) { - - S1 - } Cond1 True Cond2 True False Cond3 True False Cond4 True False S1 False endif endif endif endif S1 dilaksanakan, hanya bila keempat kondisi nilainya TRUE 166
166 6) if(cond1) { - - S1 - } else {if(cond2) - S2 {if(cond3) - S3 False True Cond2 S1 False True Cond3 S2 False True Cond4 True S3 False S5 S4 endif endif endif endif 166
166 6) if(cond1) { - - S1 - } else {if(cond2) - S2 {if(cond3) - S3 False True Cond2 S1 False True Cond3 S2 False True Cond4 True S3 False S5 S4 endif endif endif endif 166
Multi condition dan Logical Operator. 5.14 9.5. Kadang-kadang satu kondisi saja tidak cukup untu menentukan suatu syarat, sehingga diperlukan dua atau lebih kondisi. Untuk menggabung kondisi kondisi tersebut digunakan operator yang disebut logical operator. Ada 3 maca logical operator yaitu : Yang dalam Bahasa C/C++ dan Java dinyatakan dengan simbol : 1. NOT 2. AND 3. OR 1. ! sebagai NOT 2. && sebagai AND 3. || sebagai OR 167
5.14 1). Operator NOT. Operator NOT, walaupun sifatnya logical, tapi beberapa buku literatur tidak memasukkannya kedalam Logical Operator. Operator NOT, bukan untuk menggabung dua buah kondisi, tapi bekerja sebagai pembalik nilai logika TRUE menjadi FALSE, False menjadi TRUE sehingga sering disebut Unary Operator. 167
Contoh : Misal nilai A = 5 dan B = 2 5 2 A B 167 Condition Nilai Not (Condition) Nilai A == B A > B A < B A >= B A <= B A !=> B False True ! (A == B) ! (A > B) ! (A < B) ! (A >= B) ! (A <= B) ! (A != B) True False 167
Contoh : Misal nilai A = 5 dan B = 2 5 2 A B 167 Sama maksudnya dengan Penulisan ! (A == B) ! (A > B) ! (A < B) ! (A >= B) ! (A <= B) ! (A != B) A != B A <= B A >= B A < B A > B A == B Contoh Penulisan dalam Bahasa C : if( ! ( A < B ) ) disini boleh ada satu atau lebih spasi 167
2). Operator AND. IF cond1 AND cond2 if ( cond1 && cond2 ) 5.15 Operator AND, menggabung dua buah kondisi menjadi satu nilai sedemikian rupa akan bernilai TRUE hanya bila kedua kondisi yang digabungkan bernilai TRUE. Atau dengan perkataan lain harus memenuhi kedua syarat yang ditentukan0 Pemakaiannya dalam instruksi IF IF cond1 AND cond2 cond1 = kondisi-1 cond2 = kondisi-2 Yang dalam Bahasa C ditulis : if ( cond1 && cond2 ) atau if ( (cond1) && (cond2) ) 1) if ( KodeSex == 1 && Umur <= 25 ) 2) if ( Nilai >= 60 && Nilai < 70) 168
Truth Table (Tabel Kebenaran) 5.15 cond-1 AND cond-2 cond-1 cond-2 TRUE FALSE TRUE FALSE TRUE FALSE Contoh pemakaian : Bila nilai A = 5, B= 2, C = 6 dan D = 4 Maka : if( A > B && C > D) akan bernilai TRUE true true if ( A > B && B > D ) akan bernilai FALSE true false if ( A > C && B > D ) akan bernilai FALSE false false if( ( A > B) && ! (B > D) akan bernilai TRUE 168 true true
3). Operator OR if ( cond1 || cond2 ) if ( (cond1) || (cond2) ) 169 5.16 Operator OR, menggabung dua buah kondisi menjadi satu nilai sedemikian rupa akan bernilai TRUE cukup bila salah satu saja dari kedua kondisi yang digabungkan bernilai TRUE. Hanya bila kedua kondisi bernilai FLASE, maka nilai gabungannya bernilsi FALSE. Atau dengan perkataan lain : cukup satu satu syarat saja yang harus dipenuhi. Pemakaiannya dalam instruksi IF : IF cond1 OR cond2 cond1 = kondisi-1 cond2 = kondisi-2 Yang dalam Bahasa C ditulis : if ( cond1 || cond2 ) atau if ( (cond1) || (cond2) ) 169
1) if(Status == 1 || Umur >= 17 ) Contoh penulisan : 1) if(Status == 1 || Umur >= 17 ) 2) if (NilAgo >= 60 || NilMat >= 65 ) Misal maksudnya : 1) Syarat sebagai pemilih : sudah menikah (Status =1 ) atau umur tidak kurang dari 17 tahun. 2) Diberi Sertifikat bila Nilai Algoritma >= 60, atau Nilai Matematik >= 60. 169
Perhatikan Truth Table yang memperlihatkan nilai gabungan dua buah kondisi (cond-1 dan cond-2) yang digabung dengan operator OR. cond-1 cond-2 cond-1 OR cond-2 TRUE FALSE TRUE FALSE TRUE FALSE Salah satu bernilai TRUE akan menghasilkan nilai gabungan = TRUE Hanya bila kedua kondisi bernilai FALSE, yang menghasilkan nilai gabungan = FALSE 169
Bila nilai A = 5, B= 2, C = 6 dan D = 4 Contoh pemakaian : Bila nilai A = 5, B= 2, C = 6 dan D = 4 Maka : if (A > B || C > D) akan bernilai TRUE true true if ( A > B || B > D ) akan bernilai TRUE true false IF (A > C || B > D ) akan bernilai FALSE false false IF (!(A > B) || !(C > D)) akan bernilai FALSE false false 169
if (Cond1 && Cond2) 4) Proses pada multi condition. Kita sebut saja : Pandanglah statement IF dengan condition merupakan gabungan dua kondisi (Cond1 dan Cond2) sebagai berikut: if (Cond1 && Cond2) Kita sebut saja : Nilai Cond1 sebagai input, Nilai Cond2 sebagai input, dan Nilai (Cond1 && Cond2) sebagai output Bagaimana logika proses yang dilakukan oleh komputer untuk mendapatkan output gabungan dari dua atau lebih input dapat dijelaskan sebagai berikut : 170
1 1 1 a) Proses AND. if ( Cond1 && Cond2 ) Truth Table Proses oleh komputer input C1 input C2 output C1 AND C2 1. Mula-mula memeriksa nilai semua kondisi (Cond1 dan Cond2). Nilai logical TRUE dinyatakan dengan : 1 dan logical FALSE dengan : 0 1 1 1 2. Kemudian dilakukan proses AND, yang hasilnya diperlihatkan pada truth table yang diberikan C1 = Cond1 C2 = Cond2 170
170 Mula mula memeriksa Cond1. Bila Cond1 = TRUE baru periksa Cond2 Bagaimana kita (bukan komputer) menganalisa untuk mencari nilai output, dapat kita lakukan dengan menggambarkan padanannya kalau dibuat dalam bentuk Nested If yang Program Flowchartnya diilustrasikan sebagai berikut : Cond1 Cond2 True True TRUE False False FALSE FALSE Mula mula memeriksa Cond1. Bila Cond1 = TRUE baru periksa Cond2 bila Cond2 = TRUE maka output = TRUE bila Cond2 = FALSE maka output = FALSE Bila Cond1 = FALSE , output langsung = FALSE Cond2 tidak diperiksa lagi 170
1 1 1 b) Proses OR . if ( Cond1 || Cond2 ) Truth Table Proses oleh komputer input C1 input C2 output C1 OR C2 1. Mula-mula memeriksa nilai semua kondisi (Cond1 dan Cond2). Nilai logical TRUE dinyatakan dengan : 1 dan logical FALSE dengan : 0 1 1 1 2. Kemudian dilakukan proses OR, yang hasilnya diperlihatkan pada truth table yang diberikan C1 = Cond1 C2 = Cond2 171
Bagaimana kita menganalisa untuk mencari nilai output, dapat kita lakukan dengan menggambarkan padanannya kalau dibuat dalam bentuk Nested If yang Program Flowchartnya diilustrasikan sebagai berikut : Cond1 True TRUE False Cond2 True TRUE False Mula mula memeriksa Cond1. Bila Cond1 = TRUE maka langsung output = TRUE tak perlu lagi memeriksa Cond2 Bila Cond1 = FALSE, maka baru memeriksa Cond2 Bila Cond2 = TRUE maka output = TRUE Bila Cond2 = FALSE maka output = FALSE FALSE 171
c) Proses lebih dari satu Logical Operator. 5.19 c.1) if ( Cond1 && Cond2 && Cond3 ) Nomor dan merupakan hasil sekaligus urutan proses oleh komputer Cond1 AND Cond2 menghasilkan Hasil AND Cond3 menghasilkan Output = 1 2 1 2 output Untuk mencari output, apakah hasilnya TRUE atau FALSE dapat dianalisa dengan Nested IF sebagai berikut : Cond1 Cond2 True False Output = FALSE TRUE Cond3 172
172 c.2) if ( Cond1 && Cond2 || Cond3 ) Nomor dan 5.19 Nomor dan merupakan hasil sekaligus urutan proses oleh komputer Cond1 AND Cond2 menghasilkan Hasil OR Cond3 menghasilkan Output = 1 2 if ( Cond1 && Cond2 || Cond3 ) 1 1 1 2 2 2 output Untuk mencari output, apakah hasilnya TRUE atau FALSE dapat dianalisa dengan Nested IF sebagai berikut : Cond1 True Cond2 True Output = TRUE False False Cond3 True Output = TRUE False 172 Output = FALSE
Catatan : Urutan menganalisa hasil output, dengan menggunakan padanan logikanya dalam program flowchart Nested IF belum tentu sama dengan urutan pelaksanaannya oleh komputer. Komputer memperlakukan operator AND tingkat hirarkhinya lebih tinggi dari OR, sehingga apabila ada AND dan OR, output untuk AND dicari lebih dulu dari OR. 172
173 c.3) if ( Cond1 || Cond2 && Cond3 ) Komputer akan mencari output untuk AND lebih dulu, hasilnya digabung dengan OR sehingga didapat output akhir 1 2 output Cond1 True TRUE Untuk mencari output akhir dengan lebih cepat dapat dilakukan dengan mula mula melihat nilai Cond1, bila nilainya TRUE maka outpu akhirnya pasti TRUE tak perlu lagi melihat nilai (Cond2 AND Cond3) seperti yang diperlihatkan padananya bila digambarkan dengan program flowchart Nested If berikut ini. False Cond2 Cond3 True True TRUE False False FALSE FALSE 173
if ( Cond1 || Cond2 || Cond3 ) Padanan logikanya untuk mencari output dapat digambarkan dalam bentuk Flowchart Nested If berikut ini : if ( Cond1 || Cond2 || Cond3 ) 1 Cond1 True TRUE 2 False output Cond2 True TRUE False Cond3 True TRUE False FALSE 173
9. 30 9.6. Contoh Program Sederhana Menggunakan Nested If dan Multi Conditions Soal-1. Susun program dalam bahasa C untuk menginput tiga buah bilangan bulat (integer), dimana ketiga buah bilangan tersebut dianggap bernilai tidak sama, kemudian mencetak salah satu bilangan yang nilainya terbesar: 174
9. 31 5 17 8 scanf 5 17 8 17 A B C printf KEYBOARD SCREEN MEMORY 174
9. 32 17 5 8 scanf 17 5 8 17 A B C printf KEYBOARD SCREEN MEMORY 174
9. 33 5 8 17 scanf 5 8 17 17 A B C printf KEYBOARD SCREEN MEMORY 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false true 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true A > C 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true A > C printf A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true A > C printf printf C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true A > C printf printf C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true A > C printf printf C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true B > C A > C printf printf C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true B > C A > C printf printf printf B C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true B > C A > C printf printf printf printf C B C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true B > C A > C printf printf printf printf C B C A 174
174 Jawab-1. Cara-1 START Scanf A A B C Menggunakan 3 variabel scanf B false A > B true false true false true B > C A > C printf printf printf printf C B C A 174 END
174 Jawab-1. Cara-1 #include <stdio.h> main() { int A,B,C; START 47 #include <stdio.h> main() { int A,B,C; scanf(“ %i ”, &A); scanf(“ %i ”, &B); scanf(“ %i ”, &C); if(A > B) if(A > C) printf(“%i“, A); else printf(“%i”, C); } if(B > C) printf(“%i“, B); Scanf A scanf B scanf C false true A > B false true false true B > C A > C printf printf printf printf C B C A A B C 174 END Menggunakan 3 variabel
A B C #include <stdio.h> main() { int A,B,C; scanf(%i”, &A); Karena setiap blok instruksi hanya terdiri dari satu instruksi, maka program diatas dapat ditulis menjadi : 9. 48 #include <stdio.h> main() { int A,B,C; scanf(%i”, &A); scanf(%i”, &B); scanf(%i”, &C); if (A > B) if (A > C) printf(“%i“, A); else printf(“%i”, C); if (B > C) printf(“%i“, B); } A B C Menggunakan 3 variabel 176
5 7 9 5 9 7 7 5 9 7 9 5 9 5 7 9 7 5 Menggunakan 3 variabel A B C 175 Jawab-1. Cara-1 Menggunakan 3 variabel A B C 5 7 9 5 9 7 7 5 9 7 9 5 9 5 7 9 7 5 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-1 START 5 7 9 Scanf A A B C Menggunakan 3 variabel scanf B scanf C false A > B true false true false true B > C A > C 1 2 3 4 Bila diinput 3 buah nilai diatas, maka flow akan menuju nomor : ……… 175
Jawab-1. Cara-2 175
#include <stdio.h> main() { int A,B,C, MAX; Jawab-1. Cara-2 START #include <stdio.h> main() { int A,B,C, MAX; scanf(“%i %i %i”, &A, &B, &C); MAX = A; if (B > MAX) MAX = B; if (C > MAX) MAX = C; printf(“%i“, MAX); } scanf A, B, C MAX = A B > MAX true MAX = B false C > MAX true MAX = C false printf MAX A B C MAX Menggunakan 4 variabel 175 END
Jawab-1. Cara-3 176
#include <stdio.h> main() { int A,B,C, MAX; scanf(“ %i ”, &A); Jawab-1. Cara-3 9. 59 #include <stdio.h> main() { int A,B,C, MAX; scanf(“ %i ”, &A); MAX = A; scanf(“ %i ”, &B); if (B > MAX) MAX = B; scanf(“ %i ”, &C); if (C > MAX) MAX = C; printf(“%i “, MAX); } Scanf A MAX = A scanf B true B > MAX false MAX = B scanf C true C > MAX false MAX = C A B C MAX printf MAX 176
Jawab-1. Cara-4 177
Jawab-1. Cara-4 Menggunakan hanya 2 variabel. Variabel A khusus untuk menampung input, dan variabel MAX khusus mencatat atau menyimpan nilai terbesar. 5 17 8 scanf 8 17 A 17 printf KEYBOARD MAX MEMORY SCREEN 177
#include <stdio.h> main() { int A, MAX; scanf(“ %i ”, &A); Jawab-1. Cara-4 #include <stdio.h> main() { int A, MAX; scanf(“ %i ”, &A); MAX = A; if (A > MAX) printf(“\n %i “, MAX); } Scanf A MAX = A scanf A A > MAX true false MAX = A scanf A A > MAX true false MAX = A Algoritma ini nanti yang menjadi dasar algoritma pencarian bilangan terbesar atau terkecil dari sejumlah bilangan yang ada atau bilangan yang diinput. printf MAX 177
Jawab-1. Cara-5 178
#include <stdio.h> main() { int A,B,C; Jawab-1. Cara-5 Menggunakan multi conditions dengan logical operator AND 9. 64 5 17 8 scanf 5 17 8 17 A B C printf KEYBOARD MEMORY Dengan menggunakan Logical Operator AND (&&) SCREEN #include <stdio.h> main() { int A,B,C; scanf(“ %i %i %i”, &A, &B, &C); if (A>B && A>C) printf(“\n %i“, A); else { if (B>A && B>C) printf(“\n %i”, B); printf(“\n %i“, C); } 178
178 #include <stdio.h> main() { int A,B,C; scanf(“ %i %i %i”, &A, &B, &C); if (A>B && A>C) printf(“\n %i“, A); else { if (B>A && B>C) printf(“\n %i”, B); printf(“\n %i“, C); } START Scanf A,B,C A>B && A>C true printf false B>A && B>C A true printf printf C B Sebenarnya disini cukup membanding-kan B dengan C karena bila pemeriksaan pertama if (A>B && A>C) hasilnya FALSE maka A sudah bukan yang terbesar, tinggal B atau C yang terbesar Hanya untuk keseragaman saja dibuat lagi if (B>A && B>C), dengan cara ini berpikirnya lebih mudah END Ini sebenarnya bisa diganti cukup dengan : B > C 178
Jawab-1. Cara-6 179
Jawab-1. Cara-6 Berpikir lebih praktis, tapi computer-time tidak efisien 9. 67 5 17 8 scanf 5 17 8 C printf 17 A B KEYBOARD MEMORY SCREEN #include <stdio.h> main() { int A,B,C; scanf(“ %i %i %i”, &A, &B, &C); if (A>B && A>C) printf(“\n i%“, A); if (B>A && B>C) printf(“\n i%”, B); if (C>A && C>B) printf(“\n i%“, C); } 179
#include <stdio.h> main() { int A,B,C; START 9. 68 #include <stdio.h> main() { int A,B,C; scanf(“ %i %i %i”,&A,&B,&C); if (A>B && A>C) printf(“\n i%“, A); if (B>A && B>C) printf(“\n i%”, B); if (C>A && C>B) printf(“\n i%“, C); } Scanf A,B,C A>B && A>C true printf A B>A && B>C true printf B C>A && C>B true printf C END 179
! 179 #include <stdio.h> main() { int A,B,C; scanf(“ %i %i %i”, &A, &B, &C); if (A>B && A>C) printf(“\n i%“, A); if (B>A && B>C) printf(“\n i%”, B); if (C>A && C>B) printf(“\n i%“, C); } ! Cara ini yang paling mudah logikanya. Tapi dengan cara seperti ini, computer-time bisa lebih panjang karena computer akan melaksanakan semua instruksi if Walaupun pada if yang pertama didapat misal A yang terbesar, tapi computer akan tetap melaksanakan if yang ke-dua memeriksa apakah B yang terbesar dan juga masih melaksanakan if yang ke-tiga, memeriksa apakah C yang terbesar. Dengan perkataan lain, data seperti apapun yang diinput, ketiga instruksi if tersebut akan selalu dilaksanakan. Dalam pemrograman selalu ada kompromi antara kemudahan membuat program dengan efisiensi. 179