minggu iii pemilihan 2008 - · pdf file›dalam kehidupan sehari-hariselalu ......
TRANSCRIPT
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 :Algoritmik C++
if (kondisi) then aksi
end if
if (kondisi) aksi;
if (kondisi) then aksi1
else aksi2
end if
if (kondisi) aksi1;
else aksi2;
pernyataan majemuk { … }
Aksi1 Aksi2
benar salah
Kondisi
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-ifif <kondisi 1 true>{
<do Q>}else if <kondisi 2 true>{
<do R>}else if <kondisi 3 true>{
<do S>}else{
<do T>}
Q
R
TS
Beberapa else :
Algoritmik C++ Pilih (nama)
<label1> : aksi1 < label2> : aksi2 < label3> : aksi3 … < labelN> : aksiN else : aksiX
end {pilih}
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" << endl;else if(Nilai_angka >= 80)
cout << "Nilai = B" << endl;else if(Nilai_angka >= 70)
cout << "Nilai = C" << endl;else if(Nilai_angka >= 60)
cout << "Nilai = D" << endl;else
cout << "Nilai = F" << endl;
Pernyataan switchswitch(int(Nilai_angka)/10){
case 10:case 9: cout << "Nilai = A" << endl;
break;case 8: cout << "Nilai = B" << endl;
break;case 7: cout << "Nilai = C" << endl;
break;case 6: cout << "Nilai = D" << endl;
break;default: cout << "Nilai = F" << endl;
}
Operator Relasional
Algoritmik Arti C++ < lebih kecil < > lebih besar >
<= lebih kecil sama dengan <= >= lebih besar sama dengan >= ≠ tidak sama dengan != = sama dengan = =
Or atau || And dan &&
Contoh ekspresi boolean
n C++ memiliki tipe bool yang dapat memiliki salah satu nilai :nTrue, ornFalse bool P = true;bool Q = false;bool R = true;bool S = P && Q;bool T = !Q || R;bool U = !(R && !Q);
Presedensi Operatorn Presedensi operator (dari tertinggi sampai
terrendah)– Parentheses ( … )– Unary operators !– Multiplicative operators * / %– Additive operators + -– Relational ordering < <= >= >– Relational equality == !=– Logical and &&– Logical or ||– Assignment =
Pernyataan if bersarang
Bersarang : satu pernyataan lengkap berada di dalam pernyataan yang lain
if <kondisi 1 true>{<do A>if <kondisi 2 true>{
<do B>if <kondisi 3 true>{
<do C>}<do D>
} <do E>
}
Contoh 3 :
if <hari Senin>{if <jam 7:00 pagi>{
if <hari hujan>{<bawa payung>
}<kuliah Algoritma>
} <telepon teman>
}
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;
elsec = 3;
n Indentasi berikut memperlihatkanbagaimana C++ akan mengelompokkancontoh 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” Problemn 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 binerp q p or q
benar benar benar
benar salah benar
salah benar benar
salah salah salah
p q p and q
benar benar benar
benar salah salah
salah benar 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 Stylevoid 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
Program 3.1Bahasa C++
#include <iostream.h> main() { int A, B; cout << "Bilangan pertama = "; cin >> A; cout << "Bilangan kedua = "; cin >> B; if (A > B) cout << "Bilangan terbesar : " << A; else cout << "Bilangan terbesar : " << B; return 0; }
Buatlah versi C++ dengan class !
Translasi algoritma menjadi class
Algoritma Maksimum 2 Bilangan {Menentukan nilai terbesar antara dua bilangan bulat}
Menjadi nama class
Deklarasi A, B : integer
Menjadi bagian private data member
Deskripsi read (A, B) if (A > B) then write (‘Bilangan terbesar adalah = ‘,A) else write (‘Bilangan terbesar adalah = ‘,B) endif
read dan write menjadi operator overoding iostream. Solusi masalah menjadi method (fungsi) dari class
class Banding { friend istream& operator>>(istream&, Banding&); public: Banding() {}; void bandingkan() { if (A > B) cout << "Bilangan terbesar : " << A; else cout << "Bilangan terbesar : " << B; } 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 ß AA ß BB ß 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 akan diperoleh akar imajiner.
2
1,24
2− ± −
=b b acx
a2 4 0B AC− <
Input : koefisien A, B dan C bilangan real
Proses : ada tiga alternatif pilihan dari harga
Yaitu harganya 0, positif atau negatif Output : nilai akar berdasar rumus
2 4−b ac
Algoritma Persamaan_Kuadrat {Menghitung akar-akar persamaan kuadrat Ax^2+Bx+C = 0} Deklarasi
A, B, C : integer {koefisien-koefisien persamaan} disk : longint {nilai diskriminan} x1, x2 : real {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 <iostream.h> #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"; 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; }
Buatlah versi C++ dengan class !
Kasus 3.4. Konversi Nilai Konversikan nilai angka menjadi nilai
huruf dengan ketentuan sebagai berikut :
Nilai Angka Nilai huruf 0 – 20 E
21 – 40 D 41 – 60 C 61 – 80 B
81 – 100 A
Algoritma Konversi_Nilai {Mengkonversikan nilai angka menjadi nilai huruf}
Deklarasi
nilai : integer nilai_huruf : char Deskripsi
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 <iostream.h> 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.5Algoritma 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++
#include <iostream.h> #include <string.h> main() { int hari_ke; char *hari; cout << "Masukkan hari ke-"; cin >> hari_ke; switch (hari_ke) { case 1: strcpy(hari, "Senin"); break; case 2: strcpy(hari, "Selasa");break; case 3: strcpy(hari, "Rabu"); break; case 4: strcpy(hari, "Kamis"); break; case 5: strcpy(hari, "Jum 'at");break; case 6: strcpy(hari, "Sabtu"); break; default: strcpy(hari, "M inggu");break; } cout << "Hari ke- “ << hari_ke << “ adalah “ << hari << endl; return 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 denganhadir kuliah saat ini. Berikan detail kondisi dan pilihan aksi dari setiapkondisi yang ada.– Minimal 4 kejadian– Setiap kejadian ada beberapa kondisi– Terdiri dari 2 – 5 pilihan aksi