Struktur Dasar Pemilihan (Selection)

Pemilihan(Selection)
Kita dapat menggunakan struktur kontrol pilihan dalam pseudocode untuk menggambarkan sebuah pilihan diantara dua atau lebih tindakan, tergantung kepada sebuah kondisi adalah benar atau salah. Kondisi ini berdasarkan pada sebuah perbandingan 2 hal, dan biasanya diekspresikan dengan salah satu operator hubungan/relational berikut ini :
<          kurang dari                                       
=          sama dengan                                      
>=        lebih besar atau sama                       
>          lebih dari
<=        kurang atau sama dengan
<>        tidak sama

Struktur pemilihan ini merupakan suatu implementasi algoritma dalam pemecahan suatu masalah dengan berbagai alternatif jawaban yang tersedia dan Anda harus mengambil keputusan untuk memilih salah satu jawaban yang tepat.

C++ menyediakan dua perintah pengambilan keputusan yaitu perintah IF dan perintah SWITCH yang disertai dengan CASE

  1. Perintah IF – Tanpa Else
Bentuk Umum Algoritma

If kondisi then

Pernyataan (jika kondisi bernilai benar)
End if

Dalam Bahasa Pemrograman C++

if  (kondisi)
      pernyataan;



Hal paling penting dalam penggunaan IF adalah pemahaman soal yang selanjutnya diterjemahkan dalam kondisi, yaitu membuat formula perbandingan dengan menggunakan operator hubungan.
Contoh:
IF jenis_kelamin = ‘w’ THEN
    jumlah_wanita = jumlah_wanita + 1
END IF

Atau dalam C++
if (jenis_kelamin ==’w’)
   { jumlah_wanita=jumlah _wanita +1;}

Pasangan kurung kurawal (paranthesis) untuk pernyataan yang jumlahnya satu adalah optinal namun apabila pernyataan majemuk(lebih dari satu wajib, digunakan tanda { untuk mengawalinya dan tanda } untuk mengakhiri pernyataaan pada perintah IF.
if (kondisi)
          {
           pernyataan1;
           pernyataan2;
           pernyataan3;
           …..
           pernyataan ke n;
           }

  1. Perintah IF.. Else
Bentuk umum IF...Else

            IF kondisi THEN
                        Pernyataan1;
            ELSE
                        Pernyataan2;
            END IF
Dalam Bahasa C++

if (kondisi)
    Pernyataan1;
else
   Pernyataan2;

Sedangkan untuk majemuk (lebih dari satu pernyataan)

if (kondisi)
     {   
          Pernyataan_1;
          Pernyataan_2
          ...
          Pernyataan_n;
}
else
    {   
     Pernyataan_5;
          Pernyataan_6;
          .....
          Pernyataan_n;
}

Bentuk ini mempunyai arti jika kondisi benar maka pernyataan 1 akan dikerjakan dan jika kondisi salah (tidak terpenuhi) maka pernyataan 2 yang akan dikerjakan.

Kasus 4.1:
Algoritma mencetak bilangan terbesar dari dua bilangan
  1. Masukkan bilangan1
  2. Masukkan bilangan2
  3. IF  bilangan1 > bilangan2 THEN
Cetak “Bilangan terbesar adalah bilangan1”
Cetak bilangan1
ELSE
Cetak “Bilangan terbesar adalah bilangan2”
Cetak bilangan2
            END IF
  1. Selesai



Untuk kasus di atas dipecahkan dalam program sebagai berikut:
#include <iostream.h>
#include <conio.h>
void main()
{
    int bil1, bil2;
    cout<<"Masukan bilangan 1:";
    cin>>bil1;
    cout<<"Masukan bilangan 2:";
    cin>>bil2;
    if (bil1>bil2)
       cout<<"Bilangan terbesar yang Anda masukkan adalah :"<<bil1;
    else
       cout<<"Bilangan terbesar yang Anda masukkan adalah :"<<bil2;
}


Kasus 4.2  IF ..Else dengan pernyataan yang dikalkulasi
Warung “Murah Meriah” memberikan diskon menarik untuk pelanggannya jika pembelian mencapai Rp. 2.000.000 maka mendapat diskon 5%, dan  Bonus = Kaos.
  1. Masukkan pembelian
  2. Jika pembelian lebih besar sama dengan Rp. 2.000.000, maka Dis = 5%*2.000.000 dan Bonus = Kaos.
  3. Tampilkan Pembelian
  4. Tampilkan diskon
  5. Tampilkan total
  6. Tampilkan Bonus

Program untuk kasus di atas adalah:
#include <iostream.h>
#include <conio.h>
void main()
{
    long pembelian,disk, total;
    disk = 0;
    total = 0;
    cout<<"Masukan pembelian:";
    cin>>pembelian;
    if (pembelian>=2000000)
            disk=0.05*pembelian;
    total = pembelian-disk;
    cout<<"Jumlah Pembelian:"<<pembelian<<endl;
    cout<<"Jumlah diskon :"<<disk<<endl;
    cout<<"Jumlah yang dibayar:"<<total<<endl;
}


  1. NESTED IF – IF Bersarang LINIER (IF dengan kondisi lebih dari satu)
Kombinasi pernyataan IF adalah pernyataan IF yang berisi banyak kondisi dan sejenis. Untuk lebih jelasnya perhatikan contoh kasus 4.3.
    
Kasus 4.3 dengan menggunakan lebih dari satu kondisi
Algoritma untuk mencetak warna, bila diketahui warna kuning untuk kode 1, Biru untuk kode 2 sedangkan ungu untuk kode 3
  1. Masukkan Kode warna
  2. IF Kode_warna = 1 THEN
Cetak  “ Kuning”
ELSE IF Kode_warna = 2 THEN
Cetak “Biru”
           ELSE
                        CETAK “Ungu”
  1. Selesai

Program untuk masalah di atas adalah:
#include <iostream.h>
#include <conio.h>
void main()
{
    int kode;
    cout<<"Masukan Kode Warna:";
    cin>>kode;
    if (kode ==1)
       cout<<"Warna yang Anda sukai adalah Kuning";
    else if (kode ==2)
       cout<<"Warna yang Anda sukai adalah Biru";
    else
       cout<<" Warna yang Anda sukai adalah Ungu";
}


Lakukan perubahan program bila kode warna yang dimasukkan selain angaka 1, 2, dan 3, maka akan tercetak pernyataan “Kode yang Anda masukkan salah”

  1. NESTED IF – IF Bersarang NON-LINIER
Kombinasi pernyataan IF adalah pernyataan IF yang berisi banyak kondisi dan beda untuk jenis kondisinya. Setiap pernyataan bisa menggunakan operator logika AND (DAN) atau OR (ATAU). Jika kondisi dikombinasikan dengan menggunakan penghubung AND, kedua kondisi harus bernilai benar untuk membuat kondisi kombinasi bernilai benar. Jika kondisi dikombinasikan dengna menggunakan penghubung OR, salah satu dari konsidi bernilai benar maka pernyataan bisa dikerjakan.

Perintah ini sering disebut dengan nested-if (if bersarang). Perintah ini bentuk umumnya adalah:
            IF kondisi THEN
                        IF kondisi2 THEN
                        Pernyataan1;
            Else
                                    Pernyataan2;

Kasus 4.4
Suatu rental VCD memberlakukan ketentuan sebagai berikut:
Bila menyewa lebih dari atau sama dengan 10 dan menjadi anggota tetap maka mendapat diskon 0.10 tapi bila bukan member dia mendapatkan diskon 0.05.
Bila menyewa lebih dari atau sama dengan 5 dan menjadi anggota tetap maka mendapat diskon 0.05 dan bila bukan member tidak mendapatkan diskon, selainnya itu  maka tidak mendapatkan diskon.
Petunjuk:
Bila menjadi Anggota kode yang dimasukkan 1
Bila bukan Anggota kode yang dimasukkan 2

Algoritma untuk masalah tersebut adalah:
Masukan kode_anggota
Masukan jumlah_CD
IF jumlah_cd >= 10 THEN
      IF kode_anggota = 1 THEN
           Diskon = 0.1
      ELSE
           Diskon = 0.05
      END IF
ELSE IF jumlah_cd>=5 THEN
      IF kode_anggota = 1 THEN
           Diskon = 0.05
      ELSE
           Diskon = 0
       END IF
 ELSE
        Diskon =0

Kasus tersebut dapat dipecahkan dengan menggunakan operator logika “AND”, algoritmanya menjadi
IF jumlah_cd >= 10 AND IF kode_anggota = 1 THEN
           Diskon = 0.1
ELSE IF jumlah_cd >= 10 AND IF kode_anggota = 2 THEN
           Diskon = 0.05
ELSE IF jumlah_cd>=5 AND  IF kode_anggota = 1 THEN
           Diskon = 0.05
ELSE
        Diskon =0

Untuk kasus di atas bila dipecahkan dalam c++ adalah:

#include <iostream.h>
#include <conio.h>
void main()
{
int jml_sewa, kd_anggota;
float harga,disk,bayar, tot;
harga = 3000;
disk = 0;
cout<<"Masukan Jumlah Kaset yang Disewa:";
cin>>jml_sewa;
cout<<"Masukan Kode Anggota:";
cin>>kd_anggota;
bayar = jml_sewa * harga;
if (jml_sewa >= 10)
    if (kd_anggota == 1)
     {
     cout<<"Anda diskon 10 %";
     disk = bayar * 0.1;
     }
    else
     {
     cout<<"Anda diskon 5 %";
     disk = bayar * 0.05;
     }
else if (jml_sewa >= 5)
    if (kd_anggota == 1)
     {
     cout<<"Anda diskon 5 %";
     disk = bayar * 0.05;
     }
    else
     cout<<"Anda Tidak Diskon";
else
    cout<<"Anda Tidak Diskon";
tot = bayar - disk;
cout<<"\nHarga Sewa sebelum didiskon;"<<bayar;
cout<<"\nHarga Sewa setelah didiskon;"<<tot;
}


Perhatikan program berikut ini untuk menyelesaikan kasus 5.4 tunjukkan perbedaannya dan jelaskan
#include <iostream.h>
#include <conio.h>
void main()
{
int jml_sewa, kd_anggota;
float harga,disk,bayar, tot;
harga = 3000;
disk = 0;
cout<<"Masukan Jumlah Kaset yang Disewa:";
cin>>jml_sewa;
cout<<"Masukan Kode Anggota:";
cin>>kd_anggota;
bayar = jml_sewa * harga;
if (jml_sewa >= 10 && kd_anggota == 1)
     {
     cout<<"Anda diskon 10 %";
     disk = bayar * 0.1;
     }
else if (jml_sewa >= 10 && kd_anggota == 2)
     {
     cout<<"Anda diskon 5 %";
     disk = bayar * 0.05;
     }
else if (jml_sewa >= 5 && kd_anggota == 1)
     {
     cout<<"Anda diskon 5 %";
     disk = bayar * 0.05;
     }
else if (jml_sewa >= 5 && kd_anggota == 2)
     cout<<"Anda Tidak Diskon";
else
    cout<<"Anda Tidak Diskon";
tot = bayar - disk;
cout<<"\nHarga Sewa sebelum didiskon;"<<bayar;
cout<<"\nHarga Sewa setelah didiskon;"<<tot;
}


Perintah SWITCH

Perintah SWITCH merupakan pernyataaan yang dirancang untuk menangani pengambilan keputusan yang melibatkan sejumlah alternatif yang diantaranya untuk menggantikan pernyataan IF bersarang LINIER dengan menggunakan operator hubungan “=”  atau “samadengan” saja.

Bentuk Umum
Switch (ekspresi)
               {
                     Case konstanta1:
                           Pernyataan1;
                           Break;

                     Case konstanta2:
                           Pernyataan2;
                           Break;
              
                     Case konstanta3:
                           Pernyataan3;
                           Break;

                     …….
                     …….

                     Case konstanta ke n:
                           Pernyataan ke n;
                           Break;
                    
                     Default:
                           Pernyataan x
               }

Bentuk ekspresi dapat bertipe integer atau karakter begitu juga untuk konstanta.
Pengujian pada switch akan dimulai dari konstanta1. Apabila nilainya cocok dengan ekspresi maka pernyataan1 akan dijalankan. Kalau tidak cocok maka akan beralih ke pernyataaan2 dan seterusnya sampai hasil yang diinginkan.

Perintah break menyebabkan eksekusi menyebabkan ekskursi diarahkan ke akhir switch kalau nilai konstanta1 tidak sama dengan nilai ekspresi dan kemudian baru diteruskan pengujian dengna konstanta2 dan seterusnya. Jika sampai pada pengujian akhir tidak ada yang cocok maka default akan dijalankan.

Jika pernyataan break tidak diikutsertakan pada setiap case maka walupun konstanta cocok dengan ekspresi, maka setelah pernyataan pada case tersebut dikerjakan akan dilanjutkan ke case berikutnya sampai ditemui pernyataan break pada akhir switch.

Kasus 5.4
Misalkan ada permasalahan dimana Anda diminta untuk membuat algoritma dan pemrograman untuk menentukan menu makanan berdasakan kose yang dimasukkan. Adapun kode yang dimasukkan mulai dari A, B, C, D, E, F dan G. Input dari permasalahan di atas adalah kode dan keluaranya adalah menu makanana. Untuk lebih jelasnya perhatikan keterangna berikut:

Jika kode = A, maka menu = Yogya
Jika kode = B, maka menu = Padang
Jika kode = C, maka menu = Cina
Jika kode = D, maka menu = Jawa Timur
Jika kode = E, maka menu = Eropa
Jika kode = F, maka menu = Laut
Jika kode = G, maka menu = Jepang

Algoritma untuk kasus di atas adalah:
  1. Masukkan kode
  2. Jika kode = A, maka menu = Yogya
  3. Jika kode = B, maka menu = Padang
  4. Jika kode = C, maka menu = Cina
  5. Jika kode = D, maka menu = Jawa Timur
  6. Jika kode = E, maka menu = Eropa
  7. Jika kode = F, maka menu = Laut
  8. Jika kode = G, maka menu = Jepang
  9. Tampilkan kode dan hari

Program untuk kasus di atas dipecahakan dengan if  adalah:
#include <iostream.h>
#include <conio.h>
#include <ctype.h>

void main()
{
char kdmenu;
cout<<"Masukkan Kode Menu [A - G]:";
cin>>kdmenu;
kdmenu = toupper(kdmenu);
if (kdmenu =='A')
    cout<<"Khas Yogya";
else if (kdmenu =='B')
    cout<<"Khas Padang";
else if (kdmenu =='C')
    cout<<"Khas Cina";
else if (kdmenu =='D')
    cout<<"Khas Jawa Timur";
else if (kdmenu =='E')
    cout<<"Khas Eropa";
else if (kdmenu =='F')
    cout<<"Khas Laut";
else if (kdmenu =='G')
    cout<<"Khas Jepang";
else
    cout<<"Kode yang Anda Masukkan Salah";
}



Program untuk kasus di atas dipecahakan dengan case adalah:

#include <iostream.h>
#include <conio.h>
#include <ctype.h>

void main()
{
char kdmenu;
cout<<"Masukkan Kode Menu [A - G]:";
cin>>kdmenu;
kdmenu = toupper(kdmenu);
switch (kdmenu)
{
case 'A':
cout<<"Khas Yogya";
break;
case 'B':
cout<<"Khas Padang";
break;
case 'C':
cout<<"Khas Cina";
break;

case 'D':
cout<<"Khas Jawa Timur";
break;
case 'E':
cout<<"Khas Eropa";
break;
case 'F':
cout<<"Khas Laut";
break;
case 'G':
cout<<"Khas Jepang";
break;
default:
cout<<"Kode yang Anda Masukkan Salah";
}
}


Lebih baru Lebih lama