Minggu III
STRUKTUR PEMILIHAN (KONTROL PROGRAM)
Motivasi Dalam kehidupan sehari-hari selalu diperlukan pemilihan dari beberapa alternatif Contoh : - Terdapat beberapa alternatif untuk memilih sabun mandi - Pertimbangan : harga, wangi -
Alternatif mengacu pada tindakan yang akan dilakukan - Pertimbangan mengacu pada syarat : -
– Jika harus dipenuhi keduanya à dan – Jika boleh salah satu à atau
Salah satu kemampuan komputer adalah dapat melakukan proses pemilihan dari beberapa alternatif sesuai dengan kondisi yang diberikan. - Pernyataan : -
Kondisi benar Aksi1
salah Aksi2
Algoritmik if (kondisi) then aksi end if if (kondisi) then aksi1 else aksi2 end if pernyataan majemuk
C++ if (kondisi) aksi;
if (kondisi) aksi1; else aksi2; {
…
}
Contoh 1 : Input masukan - Jika masukan adalah 1 cetak 1 - Jika bukan, cetak bukan 1 -
if (masukan == 1) cout << “1” else cout << “Bukan 1” -
Ada pertanyaan ?
Pernyataan if-else-if if
{ <do Q> } else if { <do R> } else if { <do S> } else{ <do T> }
Q R S
T
-
Beberapa else :
Algoritmik Pilih (nama) : aksi1 < label2> : aksi2 < label3> : aksi3 … < labelN> : aksiN else : aksiX end {pilih}
C++ switch (nama) { case label1 : aksi1; break; case label2 : aksi2; break; case label3 : aksi3; break; … case labelN : aksiN; break; default : aksix; }
Contoh 2 : if(Nilai_angka >= 90) cout << "Nilai = A" else if(Nilai_angka >= cout << "Nilai = B" else if(Nilai_angka >= cout << "Nilai = C" else if(Nilai_angka >= cout << "Nilai = D" else cout << "Nilai = F"
<< endl; 80) << endl; 70) << endl; 60) << endl; << endl;
Pernyataan switch switch(int(Nilai_angka)/10){ case 10: case 9: cout << "Nilai break; case 8: cout << "Nilai break; case 7: cout << "Nilai break; case 6: cout << "Nilai break; default: cout << "Nilai }
= A" << endl; = B" << endl; = C" << endl; = D" << endl; = F" << endl;
Latihan individu -
Dari setiap contoh sebelumnya, buatlah program lengkap dengan C++ style !
Operator Relasional Algoritmik < > <= >= ≠ = Or And
Arti lebih kecil lebih besar lebih kecil sama dengan lebih besar sama dengan tidak sama dengan sama dengan atau dan
C++ < > <= >= != == || &&
Contoh ekspresi boolean n C++
memiliki tipe bool yang dapat memiliki salah satu nilai : n True, or n False
bool bool bool bool bool bool
P Q R S T U
= = = = = =
true; false; true; P && Q; !Q || R; !(R && !Q);
Presedensi Operator n
Presedensi operator (dari tertinggi sampai terrendah) – – – – – – – – –
Parentheses Unary operators Multiplicative operators Additive operators Relational ordering Relational equality Logical and Logical or Assignment
( … ) ! * / % + < <= >= > == != && || =
nContoh
:
5 != 6 || 7 <= 3 (5 !=6) || (7 <= 3) 5 * 15 + 4 == 13 && 12 < 19 || !false == 5 < 24
Pernyataan if bersarang -
Bersarang : satu pernyataan lengkap berada di dalam pernyataan yang lain if { <do A> if { <do B> if { <do C> } <do D> } <do E> }
Contoh 3 : if { if <jam 7:00 pagi>{ if { } } }
Masalah : “Dangling Else” Pernyataan if bersarang dapat mengarah kepada pengertian yang membingungkan. Berikut contohnya : - Berapa nilai akhir dari c ? -
int a=-1, b=1, c=1; if(a>0) if(b>0) c = 2; else c = 3;
n Indentasi
berikut memperlihatkan bagaimana C++ akan mengelompokkan contoh di atas (jawab : c=1). int a=-1, b=1, c=1; if(a>0) if(b>0) c = 2; else // dangling else // dikelompokkan pada if terdekat c = 3;
“Dangling Else” Problem n Gunakan
{ } untuk memperjelas arti
indentasi int a=-1, b=1, c=1; if(a>0){ if(b>0) c = 2; else // tanda kurung menghindari // dangling else c = 3; }
Tabel Kebenaran Operator Or dan AND -
Termasuk operator biner p
q
p or q
p
q
p and q
benar
benar
benar
benar
benar
benar
benar
salah
benar
benar
salah
salah
salah
benar
benar
salah
benar
salah
salah
salah
salah
salah
salah
salah
Kasus 3.0
• Buatlah algoritma untuk mencetak nilai positif dari sembarang bilangan ! • Analisis : • Jika masukan bernilai positif maka bilangan tetap • Jika masukan bernilai positif maka bilangan “dipositifkan”
Algoritma 3.0 Input bilangan - Proses : -
– Jika bilangan < 0 maka bilangan = (-1) * bilangan -
Cetak bilangan – Tulislah algoritma di atas menggunakan standar penulisan algoritma ! – Buatlah flowchart dari algoritma di atas !
Kasus 3.0 // program C Style void main(){ int bilangan; cout << “Masukkan sebuah bilangan : "; cin >> bilangan; if(bilangan < 0) bilangan = -bilangan; cout << “Nilai absolut bilangan adalah " << bilangan << endl; } • Buatlah menjadi C++ style !
Kasus 3.1. Tentukanlah bilangan terbesar antara dua bilangan bulat. Analisis : - Input : misalkan A dan B, keduanya integer - Proses : bandingkan A dan B – Jika A > B maka A terbesar (output) – Sebaliknya B terbesar (output)
Algoritma 3.1 Algoritma Maksimum 2 Bilangan {Menentukan nilai terbesar antara dua bilangan bulat} Deklarasi A, B : integer Deskripsi read (A, B) if (A > B) then write (‘Bilangan terbesar adalah = ‘,A) else write (‘Bilangan terbesar adalah = ‘,B) endif
Flowchart 3.1 mulai
A, B
max = A
A>B?
max = B
max
selesai
ya tidak
Program 3.1 Bahasa C++ #include main() {
int A, B;
cout << "Bilangan pertama = ";
Buatlah versi C++ dengan class !
cin >> A;
cout << "Bilangan kedua cin >> B;
= ";
if (A > B)
cout << "Bilangan terbesar : " << A;
else
cout << "Bilangan terbesar : " << B;
}
return 0;
Translasi algoritma menjadi class Algoritma Maksimum 2 Bilangan {Menentukan nilai terbesar antara dua bilangan bulat} Deklarasi A, B : integer Deskripsi read (A, B) if (A > B) then write (‘Bilangan terbesar adalah = ‘,A) else write (‘Bilangan terbesar adalah = ‘,B) endif
Menjadi nama class
class Banding { friend istream& operator>>(istream&, Banding&); public: Menjadi bagian private Banding() {}; data member void bandingkan() { if (A > B) read dan write menjadi cout << "Bilangan terbesar : " << A; operator overoding else iostream. cout << "Bilangan terbesar : " << B; Solusi masalah menjadi } method (fungsi) dari class private: int A, B; };
Algoritma 3.1 Lanjut Urutkan 2 buah integer dari kecil ke besar ! - Analisis : -
– Jika bilangan1 < bilangan2 maka cetak (bilangan1, bilangan2) – Jika tidak, tukar tempat dua bilangan tersebut kemudian cetak (bilangan1, bilangan2)
Algoritma tukar tempat -
Misal A akan ditukar tempat ke B, kita butuh variabel Temp sebagai tempat sementara : Temp ß A AßB B ß Temp
Algoritma Mengurutkan 2 Bilangan {Menentukan letak dua bilangan bulat dai kecil ke besar} Deklarasi bilangan1, bilangan2 : integer Deskripsi read (bilangan1, bilangan2) if (bilangan1 > bilangan2) then temp ß bilangan1 bilangan1 ß bilangan2 bilangan2 ß temp end if write (bilangan1, bilangan2) endif
Buatlah program lengkap versi C++ dengan class !
Bagaimana bila user memasukkan bilangan 1 dan kedua sama besar ? - è syarat perlu ditambahkan : - if (A=B) then “bilangan sama besar” -
Kasus 3.2. Tentukanlah bilangan terbesar antara 3 bilangan bulat. Analisis - Input : misalkan x, y dan z, semua integer - Proses : kita harus membandingkan ketiga bilangan tersebut (caranya?) - Output : bilangan terbesar
Algoritma 3.2 (alternatif 1) Algoritma Nilai_ Maksimum {Membaca tiga buah bilangan bulat, menentukan bilangan terbesar di antara tiga buah bilangan tersebut dan menampilkannya ke layar} Deklarasi x, y, z : integer Deskripsi read (x, y, z) if (x > y) and (x > z) then write (‘Bilangan terbesar adalah = ‘,x) else if (y > x) and (y > z) then write (‘Bilangan terbesar adalah = ‘,y) else write (‘Bilangan terbesar adalah = ‘,z) end if
Buatlah program lengkap versi C++ dengan class !
Kelemahan : Bilangan lebih dari 3 à sangat kompleks - Alternatif (2) : Idenya : -
– Hanya satu bilangan maka bilangan tersebut pastilah terbesar (atau terkecil) – Bilangan berikutnya tinggal dibandingkan dengan nilai terbesar yang saat ini diperoleh.
Algoritma alternatif (2) Algoritma Nilai_ Maksimum {Membaca tiga buah bilangan bulat, menentukan bilangan terbesar di antara tiga buah bilangan tersebut dan menampilkannya ke layar} Deklarasi x, y, z : integer maks : integer Deskripsi read (x, y, z) maks ß x if (y > maks) then maks ß y end if if (z > maks) then maks ß z end if write (‘Bilangan terbesar adalah = ‘,maks)
Buatlah program lengkap versi C++ dengan class !
Kasus 3.3. Carilah akar-akar persamaan kuadrat. Analisis : - Persamaan kuadrat adalah persamaan dengan bentuk umum Ax2 + Bx + C = 0, dan tentu saja dengan A ≠ 0. Akar persamaan kuadrat diperoleh dengan rumus :
-
Bila
−b ± b 2 − 4ac x1,2 = 2a
B 2 − 4AC < 0 akan
diperoleh akar imajiner.
Input : koefisien A, B dan C bilangan real - Proses : ada tiga alternatif pilihan dari harga 2 b − 4ac -
Yaitu harganya 0, positif atau negatif - Output : nilai akar berdasar rumus -
Algoritma Persamaan_Kuadrat {Menghitung akar-akar persamaan kuadrat Ax^2+Bx+C = 0} Deklarasi A, B, C disk x1, x2
: integer : longint : real
{koefisien-koefisien persamaan} {nilai diskriminan} {nilai-nilai akar untuk disk>=0}
Deskripsi read (A, B, C) disk ß B*B – 4*A*C if (A = 0) then write (‘Bukan Persamaan Kuadrat’) else if disk > 0 then x1 ß -B + sqrt (disk)/(2*A) x2 ß -B - sqrt(disk)/(2*A) else if disk = 0 then x1 ß -B/(2*A) x2 ß x1 else write (‘Akar imajiner’) end if write (x1,x2)
Bahasa C++ #include #include <math.h> main() {
int A, B, C; long disk;
float x1, x2;
cout << "Koefisien pangkat 2
: "; cin >> A;
cout << "Koefisien pangkat 1
: "; cin >> B;
cout << "Koefisien pangkat 0
: "; cin >> C;
if (A == 0) { cout << "bukan pers. kuadrat.\n";
Buatlah versi C++ dengan class !
cout << "Harga akar = " << -C/B; } else { disk = B*B - 4*A*C; if (disk > 0) {
x1 = -B+sqrt(disk)/(2*A); x2 = -B-sqrt(disk)/(2*A);
cout << "diskriminan = " << disk << endl; cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl;
} else if (disk == 0) {
x1 = -B/(2*A); x2 = x1;
cout << "diskriminan = 0\n";
cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl; }
} else cout << "Akar imajiner";
return 0;
}
Kasus 3.4. Konversi Nilai -
Konversikan nilai angka menjadi nilai huruf dengan ketentuan sebagai berikut : Nilai Angka 0 – 20 21 – 40 41 – 60 61 – 80 81 – 100
Nilai huruf E D C B A
Algoritma Konversi_Nilai {Mengkonversikan nilai angka menjadi nilai huruf} Deklarasi nilai nilai_huruf Deskripsi
: integer : char
read (nilai) if (nilai > 0) and (nilai <= 20) then nilai_huruf ß ‘E’ else if (nilai > 20) and (nilai <= 40) then nilai_huruf ß ‘D’ else if (nilai > 40) and (nilai <= 60) then nilai_huruf ß ‘C’ else if (nilai > 60) and (nilai <= 80) then nilai_huruf ß ‘B’ else nilai_huruf ß ‘A’ endif write (nilai_huruf)
Pelajari perbedaan dengan contoh 2 sebelumnya !
Bahasa C++ #include main() {
int nilai;
char nilai_huruf;
cout << "Masukkan nilai angka = ";
cin >> nilai;
if ((nilai > 0) && (nilai <= 20)) nilai_huruf = 'E'; else if ((nilai > 20) && (nilai <= 40)) nilai_huruf = 'D'; else if ((nilai > 40) && (nilai <= 60)) nilai_huruf = 'C'; else if ((nilai > 60) && (nilai <= 80)) nilai_huruf = 'B'; else nilai_huruf = 'A';
cout << "Nilai huruf = " << nilai_huruf; return 0;
}
Buatlah versi C++ dengan class !
Kasus 3.5. Konversi Hari Buatlah algoritma, flowchart, dan program untuk mengkonversi hari ke-1 adalah hari Senin sampai dengan hari ke-7 adalah Minggu. - Misalkan dimasukkan nilai 5, outputnya adalah hari Jum’at. -
Algoritma 3.5 Algoritma menentukan_hari { masukan integer 1 sampai 7, akan ditentukan hari apa yang sesuai } Deklarasi hari_ke : integer; hari : string; Deskripsi read(hari_ke); pilih (hari_ke) untuk 1 : hari ß 'Senin' 2 : hari ß 'Selasa'; 3 : hari ß 'Rabu'; 4 : hari ß 'Kamis'; 5 : hari ß 'Jum''at'; 6 : hari ß 'Sabtu'; else hari ß 'Minggu'; end {pilih} write(hari)
Bahasa C++ #inclu de < iostream .h > #inclu de < strin g.h > m ain () {
in t hari_ke; char *h ari;
cout < < "M asu kk an hari ke-"; cin > > h ari_k e; sw itch (hari_ke) {
case 1: strcpy(h ari, "Sen in "); break ; case 2: strcpy(h ari, "Selasa");break ;
case 3: strcpy(h ari, "Rabu "); break; case 4: strcpy(h ari, "Kam is"); break; case 5: strcpy(h ari, "Jum 'at");break;
case 6: strcpy(h ari, "Sabtu"); break;
defau lt: strcpy(h ari, "M in ggu ");b reak; }
cout < < "H ari k e- “ < < h ari_k e < < “ ad alah “ < < h ari < < en dl;
}
retu rn 0 ;
Buatlah versi C++ dengan class !
Rangkuman Bedakan operator = dan == - Gunakan pernyataan if dan switch secara tepat - Pelajari kembali tentang tabel nilai kebenaran untuk operator kondisional yang lain (xor, nor, dll.) - Berguna untuk proses rekursif -
Bacaan -
[S2] – 2.6 Control Flow Constructs – Buat contoh program lengkap berdasar cuplikan program yang diberikan
-
[S3] – Chapter 2 - Decisions and Loops – Buat pernyataan ‘soal’, algoritma dan modifikasilah contoh yang diberikan (Try It Out)
Diskusikan -
Konstruksikan algoritma perjalanan anda dari bangun tidur sampai dengan hadir kuliah saat ini. Berikan detail kondisi dan pilihan aksi dari setiap kondisi yang ada. – Minimal 4 kejadian – Setiap kejadian ada beberapa kondisi – Terdiri dari 2 – 5 pilihan aksi
Minggu Depan : Perulangan/ LOOP - Pernyataan : -
– for – while – do … while