minggu iii pemilihan 2008 - · pdf file›dalam kehidupan sehari-hariselalu ......

51
Minggu III STRUKTUR PEMILIHAN (KONTROL PROGRAM)

Upload: doankhanh

Post on 02-Feb-2018

227 views

Category:

Documents


1 download

TRANSCRIPT

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 :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;

}

Latihan individu­ Dari setiap contoh sebelumnya,

buatlah program lengkap dengan C++ style !

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 =

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 <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

Flowchart 3.1mulai

A, B

A > B ?

selesai

max = A

max = B

max

tidak

ya

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

Minggu Depan :­ Perulangan/ LOOP­ Pernyataan :

– for– while– do … while