Analisis Kasus/Percabangan (dalam Bahasa C++) Tim Penyusun Materi PTI-B
KU1072/Pengenalan Teknologi Informasi B Tahap Tahun Pertama Bersama Institut Teknologi Bandung
Tujuan • Mahasiswa memahami pengertian dan jenis-jenis analisis kasus • Mahasiswa dapat menggunakan notasi analisis kasus dengan benar • Mahasiswa dapat memanfaatkan jenis-jenis analisis kasus dalam menyelesaikan persoalan sederhana yang diberikan
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
2
2
Contoh Analisis Kasus: Memilih Mangga • Analisis kasus dapat digunakan dalam kehidupan sehari-hari, contoh: memilih mangga • Mangga yang sudah matang dan siap dimakan adalah mangga yang berwarna kuning • Jika tidak berwarna kuning maka tidak matang
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
3
3
Flowchart memilih mangga
Mulai
Pilih Mangga
ya
Apakah kuning?
tidak Tidak Matang
Matang
Selesai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
4
Contoh lain: Mengupas Kentang Revisited • Berdasarkan pengamatan, ada hari-hari di mana ibu memakai celemek ketika mengupas kentang, tapi ada hari-hari lain yang tidak – Setelah diamati, ternyata jika ibu sedang memakai baju berwarna cerah, maka ibu memakai celemek takut bajunya terlihat kotor – Jika tidak (memakai baju berwarna gelap), maka ibu tidak memakai celemek
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
5
Kasus-1: Ya
Kondisi: Apakah memakai baju warna cerah
Pakai celemek
Kupas kentang
Kasus-2: Tidak Kentang tersedia 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
6 Kentang terkupas
Flowchart: Mengupas Kentang (Revisited) Keadaan awal: Kentang Tersedia
Mulai
Keadaan akhir: Kentang Terkupas
Cek warna baju
Apakah memakai baju warna cerah? Tidak
2015-9-7
Ya
Pakai celemek
KU1072/Pengenalan Teknologi Informasi B
Kupas Kentang
Seles ai
7
Contoh lain: • Diketahui 2 (dua) buah bilangan integer, misalnya A dan B, tentukan manakah yang lebih besar di antaranya keduanya • Kondisi yang digunakan untuk pemeriksaan? Apakah A lebih besar dari B? • Kasus: – Jika A lebih besar dari B, maka hasilnya adalah A – Jika tidak, maka hasilnya B
• Alternatif lain untuk kondisi dan kasus? 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
8
Contoh lagi: • Diberikan sebuah bilangan bulat, misalnya A, nyatakan apakah bilangan tersebut adalah bilangan positif, negatif, atau nol • Kondisi: Apakah A > 0? • Kasus: – Jika ya, maka: A adalah positif – Jika tidak, maka: kondisi: Apakah A = 0? • Jika ya, maka A adalah nol • Jika tidak, maka A adalah negatif
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
9
9
Analisis Kasus (1) • Memungkinkan kita membuat teks yang sama, namun menghasilkan eksekusi berbeda • Sering disebut percabangan – Dari satu langkah ada pilihan (bercabang) ke beberapa langkah
• Terdiri atas: – Kondisi: ekspresi yang menghasilkan true dan false – Aksi: statement yang dilaksanakan jika kondisi yang berpasangan dengan aksi dipenuhi
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
10
Analisis Kasus (2) • Analisis kasus harus memenuhi 2 kriteria: –COMPLETE: semua kasus terdefinisi secara lengkap –DISJOINT: tidak ada kasus yang tumpang tindih/overlapped
• Contoh: Diberikan sebuah bilangan bulat, misalnya A, nyatakan apakah bilangan tersebut adalah bilangan positif, negatif, atau nol • Ada 3 kasus yang complete dan disjoint: –A > 0 –A < 0 –A = 0 Tidak ada kasus lain yang bisa ddefinisikan dan ketig kasus tersebut tidak tumpang tindih 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
11
11
Contoh Flowchart • Menerima masukan sebuah integer A • Memeriksa apakah A positif atau bukan • Mencetak ke layar
Mulai
input(A)
true
A>0 false output (“Bukan Positif”)
output (“Positif”)
Selesai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
12
Jenis Analisis Kasus • • • •
Satu kasus Dua kasus komplementer Banyak kasus Banyak kasus dengan switch
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
13
Satu Kasus •Sintaks C++:
kondisi
false
true
if ( kondisi ) { aksi; } ...
aksi
...
•Kondisi benar aksi dilakukan •Kondisi tidak benar tidak terjadi apa-apa 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
14
14
Contoh Persoalan Satu Kasus (1) • Input: i • Jika i >= 0, cetak “Positif”.
mulai
Input (i)
false i >= 0 Program CetakPositif // Input i; jika i >= 0, cetak “positif” KAMUS int i; ALGORITMA // Lihat flowchart di samping
true Output (“positif”) seles ai
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
15
15
Contoh Persoalan Satu Kasus (2) – C++ // Program CetakPositif // Input i; jika i >= 0, cetak “positif” #include using namespace std; int main () { // KAMUS int i;
Input (i)
false i >= 0 true
// ALGORITMA cin >> i; if (i >= 0) { cout << "positif“ << endl; } return 0; } 2015-9-7
mulai
KU1072/Pengenalan Teknologi Informasi B
Output (“positif”) seles ai
16
Dua Kasus Komplementer •Sintaks C++:
true
false kondisi
if (kondisi) { aksi-1; } else { // not kondisi aksi-2; }
aksi-1
aksi-2
•Perhatikan kondisi eksplisitnya! 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
17
17
Contoh Persoalan: 2 Kasus Komplementer (1) • Input i • Jika i >= 0; cetak “positif” • Jika tidak, cetak “negatif” Program CetakPosNeg // Input i; // Jika i >= 0, cetak “positif” // Jika tidak, cetak “negatif” KAMUS int i;
Input (i)
true
false i >= 0
Output (“negatif”)
Output (“positif”)
ALGORITMA // Lihat flowchart di samping
2015-9-7
mulai
KU1072/Pengenalan Teknologi Informasi B
seles ai
18
18
Contoh Persoalan: 2 Kasus Komplementer (2) – C++ // Program CetakPosNeg // Input i; Jika i >= 0, cetak “positif” // Jika tidak, cetak “negatif” #include using namespace std; int main () { // KAMUS int i; // ALGORITMA cin >> i; if (i >= 0) { cout << "positif"; } else { // i < 0 cout << "negatif"; } return 0; } 2015-9-7
mulai
Input (i)
true
false i >= 0
Output (“positif”)
Output (“positif”)
KU1072/Pengenalan Teknologi Informasi B
seles ai 19
Banyak Kasus (1) kondisi-1 kondisi-2
var1, var2, ... var-n
Dibaca: tergantung nilai var-1, var-2, ..., var-n kondisi-n
aksi-1 aksi-n aksi-2
...
kondisi-1, kondisi-2, ...., kondisi-n ditentukan oleh nilai var-1, var-2, ..., var-n kondisi-x adalah ekspresi boolean: menghasilkan [true, false] Property yang perlu diperhatikan untuk kondisi-x: disjoint dan complete 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
20
20
Banyak Kasus (2) – C++ Sintaks C++ (diadaptasi dari 2 kasus komplementer) if (kondisi-1) { aksi-1; } else if (kondisi-2) { aksi-2; } else if ... // kondisi-3 ... dst ... } else { // kondisi-n aksi-n } 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
21
21
Contoh Persoalan: Banyak kasus (1) • • • •
Baca nilai i (integer) Jika i > 0; cetak “positif” Jika i = 0; cetak “nol” Jika i < 0, cetak “negatif”
Program CetakPosNeg // Input i; // Jika i > 0, cetak “positif” // Jika i = 0, cetak “nol” // Jika i < 0, cetak “negatif” KAMUS int i; ALGORITMA // Lihat flowchart di samping
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
22
22
mulai
Contoh Persoalan: Banyak kasus (2) Flowchart
Input (i)
i<0
i>0 i i=0 Output (“positif”)
Output (“nol”)
Output (“negatif”)
seles ai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
23
Contoh Persoalan: Banyak kasus (3) – C++ // Program CetakPosNeg // Input i; Jika i > 0, cetak “positif” // Jika i = 0, cetak “nol”; Jika i < 0, cetak “negatif” #include using namespace std; int main () { // KAMUS int i; // ALGORITMA cin >> i; if (i > 0) { cout << "positif“ << endl; } else if (i == 0) { cout << "nol“ << endl; } else { // i < 0 cout << "negatif“ << endl; } return 0; KU1072/Pengenalan Teknologi } 2015-9-7 Informasi B
24
Switch (1) - Flowchart • Sintaks khusus di C/C++ untuk banyak kasus • Jika kondisi ditentukan oleh nilai 1 variabel bertipe ordinal var=val-1
Nilai var
var=val-2
aksi-1
2015-9-7
aksi-2
...
var != val-1 && var != val-2 && ... var != val-n var=val-n
aksi-1
KU1072/Pengenalan Teknologi Informasi B
aksidefault
25
25
Switch (2) – C++ switch (var) { case val-1: aksi-1; break; case val-2: aksi-2; break; …
case val-n: aksi-n; break; default: aksi-default; break; }
•var bertipe ordinal, val-1 , val-2, ..., val-n adalah
constant •Default-case: jika bukan val-1 , val-2, ..., val-n 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
26
Contoh Persoalan Switch (1) • Dibaca nilai A sebuah integer • Tuliskan nama bulan dalam penanggalan Masehi yang direpresentasikan dengan A, jika 1 A 12, yaitu: – – – – –
1 = Januari 2 = Februari 3 = Maret ... 12 = Desember
• Jika A < 1 atau A > 12 maka tuliskan “Nomor bulan tidak tepat” 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
27
27
Program NamaBulan // Menuliskan nama // bulan berdasarkan // masukan integer
Contoh Persoalan Switch (2) Flowchart
mulai
KAMUS int A;
Input (A)
ALGORITMA A=1
A<1 || A > 12 A=? A=12
A=2 Output (“januari”)
Output (“februari”)
...
Output (“desember”)
seles ai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
28
Output (“Nomor bulan tidak tepat”)
Contoh Persoalan Switch (2) – C++ // Program NamaBulan // Menuliskan nama bulan berdasarkan masukan integer #include using namespace std; int main () { // KAMUS int A; // ALGORITMA cin >> A; switch (A) { case 1 : cout << "januari" << endl; break; case 2 : cout << "februari" << endl; break; case 3 : cout << "maret" << endl; break; ... // lanjutkan sendiri case 12 : cout << "desember" << endl; break; default: cout << “Nomor bulan tidak tepat" << endl; break; } return 0; KU1072/Pengenalan Teknologi } 2015-9-7 29 Informasi B
Analisis Kasus sebagai sarana validasi if ( kondisi-benar ) { aksi; } else { // not kondisi-benar pesan-kesalahan; }
true
kondisi -benar
false
Output (pesankesalahan)
aksi
•Digunakan untuk memvalidasi masukan program sehingga masukan yang salah tidak diproses •aksi hanya dilakukan jika kondisi-benar terpenuhi, jika tidak maka diberikan pesan-kesalahan. 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
30
30
Contoh Kasus Validasi (1) • Buatlah program yang digunakan untuk menuliskan ke layar nama-nama bulan dari nomor bulan, yaitu 1 s.d. 12 yang dibaca dari keyboard. • Program memvalidasi terlebih dahulu apakah masukan dari keyboard sudah benar atau belum, yaitu apakah nomor bulan sudah tepat 1 s.d. 12. Jika tidak tepat, maka dikeluarkan pesan kesalahan yaitu “Nomor bulan tidak tepat”.
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
31
31
Program NamaBulan // Menuliskan nama // bulan berdasarkan // masukan integer
mulai
Contoh Kasus Validasi (2)Flowchart
Input (A)
KAMUS int A; ALGORITMA Bandingkan dengan solusi slide 28
1<=A<=12
false
true A=1
A=12
A
A=2 Output (“januari”)
2015-9-7
Output (“februari”)
...
Output (“desember”)
seles ai Teknologi KU1072/Pengenalan Informasi B
32
Output (“Nomor bulan tidak tepat”)
Contoh Kasus Validasi (3)- C++ // Program NamaBulan // Menuliskan nama bulan berdasarkan masukan nomor bulan #include using namespace std; int main () { // KAMUS int A; // ALGORITMA cin >> A; if (A >= 1 && A <= 12) { switch (A) { case 1 : cout << "januari" << endl; break; case 2 : cout << "februari" << endl; break; ... // lanjutkan sendiri } } else { // A < 1 || A > 12 // pesan kesalahan cout << “Nomor bulan tidak tepat" << endl; return 0; } KU1072/Pengenalan Teknologi 2015-9-7 33 Informasi B
33
Soal-1a • Dalam sebuah program dikenal 2 buah variabel bertipe integer yaitu A dan B • Ingin dituliskan, nilai yang paling besar di antara A dan B • Apa saja kasus yang harus didefinisikan sehingga memenuhi kriteria: – Complete / lengkap – Disjoint / saling lepas
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
34
34
Solusi Soal-1a • Kasus-kasus yang mungkin: –A > B hasilnya A –A < B hasilnya B –A = B hasilnya bisa A, bisa B (pilih salah satu)
• Kasus-kasus ini sudah lengkap (tidak mungkin ada alternatif lain berdasarkan hukum bilangan bulat) dan saling lepas (tidak tumpang tindih) • Bisa diringkas menjadi: –A >= B hasilnya A –A < B hasilnya B Atau: –A > B hasilnya A –A <= B hasilnya B
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
35
Soal-1b • Buatlah program yang menerima masukan 2 buah integer A dan B dan menuliskan nilai terbesar di antara keduanya. • Gunakan analisis kasus berikut: – A >= B maka A – A < B maka B
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
36
Solusi Soal-1b (1)
mulai
Program Max2Integer // Menentukan dari 2 integer // mana yang paling besar
Input (i)
KAMUS int A, B;
true
ALGORITMA // Lihat flowchart di samping Untuk latihan, coba alternatif analisis kasus lain seperti di soal 1a
2015-9-7
false A>=B
Output (B)
Output (A)
KU1072/Pengenalan Teknologi Informasi B
seles ai
37
Alternatif Solusi Soal-1 // Program Max2Integer // Menuliskan nilai terbesar dari masukan 2 integer #include using namespace std; int main () { Untuk latihan, // KAMUS coba alternatif int A, B; analisis kasus lain seperti di // ALGORITMA soal 1a cin >> A; cin >> B; if (A >= B) { cout << A << endl; } else { // A < B cout << B << endl; } return 0; } 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
38
Soal-2 • Buatlah sebuah program yang menerima suhu air (dalam derajat celcius) dan menuliskan wujud air ke layar yaitu beku, cair, atau uap. • Bagaimanakah analisis kasusnya? • Solusi analisis kasus: Ada 3 kasus – Jika suhu air <= 0 derajat, maka tuliskan “beku” – Jika suhu air > 0 dan kurang dari 100 derajat, maka tuliskan “cair” – Jika suhu air >= 100, maka tuliskan “uap” 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
39
Alt. Solusi Soal-2 (1) mulai
Program SuhuAir // Menuliskan wujud air // tergantung masukan suhu KAMUS float suhu; ALGORITMA // Lihat flowchart di samping
Input (suhu)
suhu >= 100
suhu <= 0 suhu
0 < suhu < 100 Output (“beku”)
Output (“cair”)
Output (“uap”)
seles ai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
40
Alt. Solusi Soal-2 (3) – C++ // Program SuhuAir // Menuliskan wujud air tergantung masukan suhu #include using namespace std; int main () { // KAMUS float suhu; // ALGORITMA cin >> suhu; if (suhu <= 0) { cout << “Beku” << endl; } else if ((suhu > 0) && (suhu < 100)) { cout << “Cair” << endl; } else { // suhu >= 100 cout << “Uap” << endl; } return 0; } 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
41
Soal-3 •Buatlah program yang menerima 3 buah hambatan (R1, R2, R3) dan menghasilkan total hambatan (RT) jika dirangkai seri. RT = R1 + R2 + R3 •R1, R2, dan R3 tidak boleh bernilai negatif. Jika setidaknya satu saja hambatan bernilai negatif, maka diberikan pesan kesalahan “Hambatan tidak boleh negatif”. •Definisikan dulu kasus-kasus apa saja yang mungkin pada pemeriksaan nilai R1, R2, R3 •Selanjutnya buatlah solusinya dalam bentuk flowchart dan kode program C++. 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
42
Alt. Solusi Soal-3 (1) Kasus-kasus yang mungkin dalam pemeriksaan nilai R1, R2, R3: •Kasus-1: – Minimum salah satu nilai dari R1, R2, R3 adalah negatif (<0) – Ekspresi: R1 < 0 || R2 < 0 || R3 < 0 – Aksi: Berikan pesan kesalahan “Hambatan tidak boleh negatif”
•Kasus-2: komplemen dari Kasus-1 – Semua nilai R1, R2, R2 >= 0 – Ekspresi: R1 >= 0 && R2 >= 0 && R3 >= 0 – Aksi: Hitung dan tampilkan nilai RT = R1 + R2 + R3 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
43
Alt. Solusi Soal-3 (2) Flowchart Program HambatanSeri // Menghitung hambatan total // berdasarkan masukan 3 // hambatan R1, R2, R3 KAMUS float R1, R2, R3, RT;
mulai
Input (R1, R2, R3)
true
ALGORITMA // Lihat flowchart di samping RT = R1 + R2 + R3
R1>=0 && R2>=0 && R3>=0
false
Output (“Hambatan tidak boleh negatif”)
Output(RT)
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
selesa i 44
Alt. Solusi Soal-3 (3) – C++ // Program HambatanSeri // Menghitung hambatan total berdasarkan hambatan R1, R2, R3 #include using namespace std; int main () { // KAMUS float R1, R2, R3, RT; // ALGORITMA cin >> R1; cin >> R2; cin >> R3; if ((R1 >= 0) && (R2 >= 0) && (R3 >= 0)) { RT = R1 + R2 + R3; cout << RT << endl; } else { // R1 < 0 || R2 < 0 || R3 < 0 cout << “Hambatan tidak boleh negatif” << endl; } return 0; } 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
45
Soal-4 • Sebuah kalkulator super sederhana Calc-SS, digunakan untuk menerima masukan 2 buah bilangan bulat, misalnya A dan B, dan menuliskan beberapa hasil operasi aritmatika terhadap kedua bilangan tersebut, tergantung pilihan operasi melalui character sebagai berikut: – – – – – –
Pilihan = a : menuliskan hasil A + B Pilihan = b : menuliskan hasil A – B Pilihan = c : menuliskan hasil A * B Pilihan = d : menuliskan hasil A/B hasilnya real/float Pilihan = e : menuliskan hasil A div B hasilnya integer Pilihan = f : menuliskan hasil A mod B
• Jika dimasukkan pilihan menu character lain, maka dituliskan “Bukan operasi yang benar” 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
46
46
Soal-4: Contoh masukan dan keluaran Masukan
Keluaran
A
B
pilihan operasi
3
2
a
A+B=5
3
2
b
A–B=1
3
2
c
A*B=6
3
2
d
A / B = 1.5
3
2
e
A div B = 1
3
2
f
A mod B = 1
3
2
h
Bukan pilihan menu yang benar
Buatlah alur solusinya dalam flowchart dan program C++ yang sesuai 2015-9-7
KU1072/Pengenalan Teknologi Informasi B
47
47
Soal 5 • Diberikan 3 buah integer yang dibaca dari keyboard, misalnya A, B, C. Asumsikan bahwa ketiga bilangan tersebut berbeda. • Tuliskan ke layar ketiga bilangan tersebut dalam urutan dari yang terbesar sampai yang terkecil. • Contoh: A = 1, B = -1, C = 2 Maka tertulis di layar: 2 1 -1
2015-9-7
KU1072/Pengenalan Teknologi Informasi B
48