Anda di halaman 1dari 19

ALGORITMA DAN PEMROGRAMAN

TOPIK 4. PENGAMBILAN KEPUTUSAN (DECISION MAKING)

Apa itu Decision Making?

Pengambilan keputusan dalam pemrograman menyangkut kemampuan merubah perilaku program


yang didasarkan pada informasi tertentu yang dikenal dengan alur program.

Dalam berbagai Bahasa pemrograman, terdapat beberapa bentuk dan variasi pernyataan untuk
menentukan alur control program. Berikut kita akan membahas berbagai bentuk algoritma dalam
pengambilan keputusan atau control alur program.

Pernyataan IF

Pernyataan IF digunakan untuk melakukan test terhadap suatu kondisi, apabila kondisinya benar
(true) maka satu blok pernyataan dalam tubuh IF tersebut akan dilaksanakan (bagian THEN),
sebaliknya, jika hasil pengujian kondisi tersebut bernilai salah (false), maka pernyataan dalam tubu IF
akan dilewati.

Flowchart dapat berupa:

Sedangkan dalam bentuk pseudocode dapat berupa:

IF ekspresi_boolean THEN aksi

Apabila ekspresi terhadap ekspresi_boolean bernilai true, maka aksi (dapat terdiri dari sekumpulan
aksi) dilaksanakan, sebaliknya, maka aksi dilewati.

Implementasi dalam C akan berbentuk sebagai berikut:

if(ekspresi_boolean)
{
Aksi-aksi;
}

Misal, kita ingin mengevaluasi apakah suatu variable bernilai 10 atau kurang, jika ya, maka
munculkan keterangan.

Algoritmanya berbentuk:

IF i <= 10 then write(‘Nilai dari i kurang atau sama dengan 10’)


Implementasi dalam C:
#include<stdio.h>
#include<conio.h>
main(){
int i=10;
if(i<=10){
printf(“Nilai dari i kurang atau sama dengan 10”);
}
}

Pernyataan IF ELSE

Pernyataan IF ELSE digunakan apabila evaluasi terhadap suatu kondisi bernilai TRUE, maka aksi
dalam IF dilaksanakan, tetapi apabila hasil evaluasi terhadap kondisi tersebut bernilai FALSE, maka
pernyataan atau aksi dalam bagian ELSE yang akan dilaksanakan.

Bentuk flowchart IF ELSE:

Bentuk pseudocode berupa:

IF ekspresi_boolean
THEN aksi_1
ELSE
aksi_2

dalam C berbentuk:

if(ekspresi_boolean){
Aksi_1;
}
else{
Aksi_2;
}

Misalnya, kita ingin mengevaluasi apakah suatu nilai variable bernilai kurang atau sama dengan 10,
jika ya, maka munculkan keterangan, tetapi jika tidak, maka munculkan keterangan lain.

Algoritma untuk kasus tersebut dapat berupa:


IF I <= 10
THEN write(‘Nilai dari i kurang atau sama dengan 10’)
ELSE
Write(‘Nilai variable I lebih dari 10’)

Implementasi dalam C dapat berupa:


#include<stdio.h>
#include<conio.h>
main(){
int i=10;
if(i<=10){
printf(“Nilai dari i kurang atau sama dengan 10’”);
}
else{
printf(“Nilai variable i lebih dari 10”);
}
}

Variasi lain dari bentuk penggunaan pernyataan IF

Penggunaan pernyataan IF dapat memiliki berbagai bentuk variasi yang sangat ditentukan oleh
permasalahan serta cara menyelesaikan permasalahan tersebut. Beberapa diantaranya adalah
sebagai berikut.

Flowchart:

Pseudocode:

IF kondisi_1 THEN aksi_1


ELSE IF kondisi_2 THEN aksi_2
ELSE IF kondisi_3 THEN aksi_3
ELSE aksi_4

Implementasi C:

if(kondisi_1) aksi_1;
else if(kondisi_2) aksi_2;
else if(kondisi_3) aksi_3
else aksi_4

Flowchart:

Pseudocode:

IF kondisi_1
THEN IF kondisi_2
THEN aksi_2
ELSE aksi_3
ELSE aksi_1

Implementasi C:

If(kondisi_1)
If(kondisi_2)
aksi_2
else aksi_3
else aksi_1

Variasi bentuk IF di atas disebut NESTED IF, dan dapat memiliki banyak bentuk lainnya.

Contoh-contoh kode dalam Bahasa C

Sebagai contoh, kita ingin membuat sebuah kode program untuk menampilkan nilai. User diminta
menginput sebuah huruf antara ‘A’ – ‘E’. Kemudian kode program akan menampilkan hasil tampilan
yang berbeda-beda untuk setiap huruf yang diinput, termasuk jika huruf tersebut di luar ‘A’ – ‘E’.

Berikut contoh kode programnya:

1#include <stdio.h>
2main()
3{
4  char nilai;

6  printf("Input Nilai Anda (A - E): ");
7  scanf("%c",&nilai);

9  if (nilai == 'A' ) {
10    printf("Pertahankan! \n");
11  }
12  else if (nilai == 'B' ) {
13    printf("Harus lebih baik lagi \n");
  }
14
  else if (nilai == 'C' ) {
15
    printf("Perbanyak belajar \n");
16  }
17  else if (nilai == 'D' ) {
18    printf("Jangan keseringan main \n");
19  }
20  else if (nilai == 'E' ) {
21    printf("Kebanyakan bolos... \n");
22  }
23  else {
24    printf("Maaf, format nilai tidak sesuai \n");
25  }
26  
27}
28

Hasil kode program:

Input Nilai Anda (A - E): A


Pertahankan!
 
Input Nilai Anda (A - E): D
Jangan keseringan main
 
Input Nilai Anda (A - E): E
Kebanyakan bolos...
 
Input Nilai Anda (A - E): F
Maaf, format nilai tidak sesuai

Di baris 5 kita mendefinisikan sebuah variabel nilai sebagai char. Variabel nilai ini kemudian dipakai


untuk menampung input dari perintah scanf di baris 8.

Mulai dari baris 10 hingga 27, terdapat 5 buah pemeriksaan kondisi, yakni satu untuk setiap block IF
ELSE. Dalam setiap kondisi, isi variabel nilai akan di diperiksa, apakah itu berupa karakter ‘A’, ‘B’,
hingga ‘E’. Jika salah satu kondisi ini terpenuhi, maka block kode program yang sesuai akan di
eksekusi.

Jika ternyata nilai inputan bukan salah satu dari karakter ‘A’ – ‘E’, maka block ELSE di baris 25 lah
yang akan dijalankan.

Setiap kondisi dari block IF ELSE IF ini bisa diisi dengan perbandingan yang lebih kompleks, seperti
contoh berikut:
1#include <stdio.h>

3main()
4{
5  int nilai;

7  printf("Input Nilai Anda (0 - 100): ");
8  scanf("%i",&nilai);

10  if (nilai >= 90 ) {
11    printf("Pertahankan! \n");
12  }
13  else if (nilai >= 80 && nilai < 90) {
14    printf("Harus lebih baik lagi \n");
  }
15
  else if (nilai >= 60 && nilai < 80) {
16
    printf("Perbanyak belajar \n");
17  }
18  else if (nilai >= 40 && nilai < 60) {
19    printf("Jangan keseringan main \n");
20  }
21  else if (nilai < 40) {
22    printf("Kebanyakan bolos... \n");
23  }
24  else {
25    printf("Maaf, format nilai tidak sesuai \n");
26  }
27  return 0;
28}
29

Di sini kita memodifikasi sedikit kode program kita sebelumnya. Sekarang nilai inputan berupa angka
antara 0 hingga 100. Angka inputan ini ditampung ke dalam variabel nilai yang sekarang di set
sebagai tipe data integer di baris 5.

Di baris 10, isi dari variabel nilai di periksa apakah berisi angka yang lebih dari 90. Jika iya, tampilkan
teks “Pertahankan!”.

Jika kondisi di baris 10 tidak terpenuhi (yang artinya isi variabel nilai kurang dari 90), maka kode
program akan lanjut ke kondisi ELSE IF berikutnya di baris 13. Di sini kita menggabungkan dua buah
kondisi menggunakan operator logika && (yakni operator AND). Kondisi if(nilai >= 80 && nilai <
90) hanya akan terpenuhi jika isi variabel nilai berada dalam rentang 80 sampai 89.

Ketika membuat kondisi perbandingan, kita harus hati-hati dengan penggunaan tanda, apakah ingin
menggunakan tanda lebih besar saja (>) atau tanda lebih besar sama dengan (>=) karena bisa
mempengaruhi hasil akhir.

Jika ternyata kondisi ini tidak dipenuhi juga (artinya isi variabel nilai kurang dari 80), program akan
lanjut ke kondisi if(nilai >= 60 && nilai < 80) di baris 16, yakni apakah nilai berada dalam rentang 60 –
79. Demikian seterusnya hingga kondisi terakhir if(nilai < 40) di baris 22.

Jika semua kondisi tidak terpenuhi, jalankan block ELSE di baris 26.


Berikut hasil percobaan dari kode program di atas:

Input Nilai Anda (0 - 100): 95


Pertahankan!
 
Input Nilai Anda (0 - 100): 60
Perbanyak belajar
 
Input Nilai Anda (0 - 100): 30
Kebanyakan bolos...

Yang cukup unik adalah, jika kita memberikan nilai di luar rentang 0 – 100, akan tetap ditangkap oleh
kondisi IF di baris 10 atau di baris 22:

Input Nilai Anda (0 - 100): 200


Pertahankan!
 
Input Nilai Anda (0 - 100): -1000
Kebanyakan bolos...

Ini terjadi karena nilai 200 tetap memenuhi syarat if (nilai >= 90), dan nilai -1000 juga tetap
memenuhi syarat if (nilai < 40). Silahkan anda modifikasi kode program di atas agar jika diinput
angka di luar dari rentang 0 -100, akan tampil teks “Maaf, format nilai tidak sesuai”. Untuk hal ini
kita cuma perlu mengubah / menambah 2 kondisi saja.

Contoh-contoh Kasus
Rancang suatu algoritma dan implementasinya dalam C untuk kasus-kasus berikut.

1. Menghitung Total biaya foto kopi sesuai status ‘pelanggan’ atau ‘bukan pelanggan’ dan
jumlah lembar.

Penjelasan: Diasumsikan bahwa jika statusnya pelanggan, maka ybs mendapatkan potongan
biaya sebesar 10%. Dan jika lembar foto kopi diatas 100 lembar, maka ybs juga mendapat
potongan sebesar 5%. Biaya foto kopi perlembar ditetapkan Rp. 100.0
Untuk mengetahui status ‘pelanggan’ atau ‘bukan pelanggan’, kita dapat mengajukan
pertanyaan yang hanya dijawab ya dengan menekan tombol ‘Y’ atau tidak, dengan menekan
tombol ‘T’.

Langkah-langkah
- Menanyakan berapa jumlah lembar fotokopi
- Menanyakan status, apakah pelanggan atau bukan (Y/T)
- Hitung total biaya fotokopi, dengan formula
Total biaya <- jumlah lembar * harga per lembar
- Jika status adalah pelanggan, maka
Total biaya <- total biaya – (total biaya * DISKON PELANGGAN)
Jika lembar fotokopi >= 100, maka
Total biaya <- total biaya – (total biaya * DISKON LEMBAR)
Tampilkan total biaya
Jika tidak
Tampilkan total biaya
Jika tidak, maka
Jika jumlah lembar >= 100, maka
Total biaya <- total biaya – (total biaya * DISKON LEMBAR)
Tampilkan total biaya
Jika tidak, maka
Tampilan total biaya

Analisis Kebutuhan
- Kebutuhan output:
Menampilkan nilai total biaya, missal
Total Biaya fotokopi adalah Rp. XXXX

- Kebutuhan input:
Meminta masukan berupa jumlah lembar fotokopi dan status pelanggan atau bukan,
missal:
Ketikan jumlah lembar fotokopi: ????
Apakah statusnya pelanggan (Y/T): ?

- Kebutuhan konstanta:
o Untuk menyimpan tetapan diskon lembar konstanta diberi nama DISKON_LBR
dengan nilai 0.05
o Untuk menyimpan tetapan diskon status pelanggan, konstanta diberi nama
DISKON_PLG dengan nilai 0.05
o Untuk menyimpan tetapan harga, tetapan diberi nama HARGA dengan nilai
100.0

- Kebutuhan variable:
o Untuk menyimpan variable jumlah lembar fotokopi, variable diberi nama lembar
bertipe real atau double
o Untuk menyimpan variable total biaya, variable diberi nama total bertipe real
atau double
o Untuk menyimpan variable status diberi nama status bertipe karakter

- Kebutuhan proses:
o Untuk menghitung total biaya normal
Total <- lembar * HARGA
o Untuk menghitung total biaya jika statusnya pelanggan dgn lembar < 100 lembar
Total yang baru <- total – (total * STATUS_PLG)
o Untuk menghitung total biaya jika statusnya pelanggan dgn lembar >= 100
lembar
Total yang baru <- total – (total * STATUS_LBR)
o Untuk menghitung total biaya jika statusnya bukan pelanggan dgn jumlah
lembar >= 100 lembar
Total yang baru <- total – (total * DISKON_LBR)
o Untuk menghitung total biaya jika statusnya bukan pelanggan dgn jumlah
lembar < 100 lembar
Total <- total * HARGA atau biaya normal

Algoritma biaya_fotokopi(input, output)


{menghitung total biaya fotokopi berdasarkan jumlah lembar fotokopi dan status pelanggan}
Deklarasi
Konstanta:
DISKON_LBR = 0.05
DISKON_PLG = 0.5
HARGA = 100.0

Variable:
Lembar, total: real
Status: karakter

Deskripsi
Start
Write(‘MENGHITUNG TOTAL BIAYA FOTOKOPI’)
Wrte(‘Ketikkan jumlah lembar fotokopi: ‘)
Read(lembar)
Write(‘Apakah statusnya pelanggan (Y/T): ‘)
Read(status)
//hitung dulu biaya normalnya
Total <- lembar * HARGA
IF status == ‘Y’
THEN
Total <- total – (total * DISKON_PLG)
IF lembar >= 100
THEN
Total <- total – (total * DISKON_LBR)
Write(‘Total biaya adalah: ‘ + total)
ELSE
Write(‘Total biaya adalah: ‘ + total)
ELSE IF lembar >= 100
THEN
Total <- total – (total * DISKON_LBR)
Write(‘Total biaya adalah: Rp. ‘ + total)
ELSE
Write(‘Total baiaya adalah: Rp. ‘ + total)
stop

Implementasi dalam C

/*
Program menghitung total biaya fotokopi berdasarkan jumlah lembar
fotokopi dan status pelanggan
Nama File: fotokp2.c
Programmer: Anu
*/
#include <stdio.h>
#include <stdlib.h>

//konstanta
#define DISKON_LBR 0.05
#define DISKON_PLG 0.05
#define HARGA 100.0

main(){
double lembar, total=0.0;
char status;

printf("MENGHITUNG TOTAL BIAYA FOTOKOPI\n");


printf("Ketikkan jumlah lembar fotokopi: ");
scanf("%lf",&lembar); fflush(stdin); //membersihkan buffer input
printf("Apakah statusnya pelanggan (Y/T): ");
scanf("%c", &status); fflush(stdin);

//hitung dulu total biaya normal


total = lembar * HARGA;
if(toupper(status) == 'Y') //konversikan status menjadi huruf kapital
{
total = total - (total * DISKON_PLG);
if(lembar>=100){
total = total - (total * DISKON_LBR);
printf("Total biaya adalah Rp. %.1lf\n",total);
}
else{
printf("Total biaya adalah Rp. %.1lf\n",total);
}
}
else{if(lembar>=100){
total = total - (total * DISKON_LBR);
printf("Total biaya adalah Rp. %.1lf\n",total);
}
else{
printf("Total biaya adalah Rp. %.1lf\n",total);
}
}
}

2. Membuat kalkulator tukang bareh (operator: +, -, *, / dan ^ (simbol pangkat)

Penjelasan: Menghitung suatu operasi atau ekspresi aritmatik dapat dilakukan berdasarkan
tanda operator yang digunakan, missal tanda ‘+’, ‘-‘, ‘*’, ’/’, atau tanda ‘^’, selain tanda
tersebut, maka operasi tidak dapat dilakukan. Oleh karena itu, jika operator dan persyaratan
lainnya sesuai maka harus operasi tersebut harus ditandai sebagai ‘operasi yang bisa
dilakukan’ (dapat menggunakan tanda berupa variable bernilai tertentu). Selain itu, khusus
operasi pembagian (tanda ‘/’), maka harus dilakukan pengecekan terlebih dahulu terhadap
nilai operan_2, dimana operasi perhitungan hanya dapat dilakukan apabila nilai operan_2
bukan 0.

Langkah-langkah
- User diminta mengetikkan operasi, missal 5 * 2.5
- Hitung operasi jika tanda operator dan nilai sesuai persyaratan
- Tampilkan hasil perhitungan

Analisis Kebutuhan
- Kebutuhan output
Menampilkan hasil perhitungan kalkulator, misal:
Hasilnya = XXXX

- Kebutuhan input
Meminta masukan dalam format operan_1 operator operan_2, misalnya user
mengetikkan 5 * 2.5
Ketikkan operasi: ??? ? ???
- Kebutuhan operasi
Perhitungan berdasarkan operasi, sbb:
o Beri penanda pada operasi yang bisa dilakukan, misal tanda OKE yang bersifat
Boolean, nilai TRUE jika operasi bisa dilakukan dan nilai FALSE jika sebailknya
o Jika operatornya ‘+’, maka
Hasil <- operan_1 + operan_2
o Jika operatornya ‘-’, maka
Hasil <- operan_1 - operan_2
o Jika operatornya ‘*’, maka
Hasil <- operan_1 * operan_2
o Jika operatornya ‘/’, maka
Jika nilai operan_2 bukan nol, maka
Hasil <- operan_1 / operan_2
Jika nilai operan_2 == 0, maka
Operasi tidak dilakukan, tampilkan keterangan ‘Tidak bisa dihitung’
o Jika operatornya ‘^’, maka
Hasil <- power(operan_1, operan_2), dimana power() adalah fungsi untuk
menghitung nilai operan_1 pangkat operan_2

- Kebutuhan variable
o Untuk menyimpan nilai operan_1 diberi nama opn1 bertipe real
o Untuk menyimpan nilai operan_2 diberi nama opn2 bertipe real
o Untuk menyimpan nilai hasil operasi, diberi nama hasil bertipe real
o Untuk menyimpan tanda operator, diberi nama op bertipe karakter
o Untuk menyimpan tanda bahwa operasi bisa dilakukan beri nama oke, bertipe
Boolean (dalam C menggunakan tipe int, dimana nilai1 bernilai TRUE dan nilai 0
bernilai FLASE

Algoritma kalkulator(input, output)


{Menghitung hasil operasi kalkulator}

Deklarasi
Variable
Opn1, opn2, hasil: real
Op: karakter

Deskripsi
Start
Write(‘KALKULATOR TUKANG BAREH’)
Write(‘Ketikan operasi, misal 5 * 2.5: ‘)
Read(opn1, op, opn2)
Oke <- FALSE //dianggap bahwa operasi tidak dapat dilakukan
IF op == ‘+’
THEN
Oke <- TRUE
Hasil <- opn1 + opn2
ELSE IF op == ‘-‘
THEN
Oke <- TRUE
Hasil <- opn1 - opn2
ELSE IF op == ‘*‘
THEN
Oke <- TRUE
Hasil <- opn1 * opn2
ELSE IF op == ‘/‘
THEN
IF opn2 != 0
THEN
Oke <- TRUE
Hasil <- opn1 / opn2
ELSE
Oke <- FALSE
ELSE IF op == ‘^’
THEN
Oke <- TRUE
Hasil <- power(opn1, opn2)
ELSE
Write(‘Operator tidak dikenal!’)
IF oke == TRUE
THEN
Write(‘Hasil = ‘ + hasil)
ELSE write(‘Operasi tidak dapat dilakukan!’)
Stop

Implementasi dalam C

/*
Menghitung hasil operasi kalkulator
Nama File: kalkulator.c
Programmer: Anu
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main(){
double opn1, opn2, hasil=0.0;
char op;
int oke;

printf("KALKULATOR TUKANG BAREH\n");


printf("Ketikkan operasi, misal 5 * 2.5 lalu tekan ENTER: ");
scanf("%lf %c %lf", &opn1, &op, &opn2); fflush(stdin);
oke = 0; //dianggap tidak dapat dihitung
//periksa tanda operator
if(op == '+'){
oke = 1;
hasil = opn1 + opn2;
}
else if(op == '-'){
oke = 1;
hasil = opn1 - opn2;
}
else if(op == '*'){
oke = 1;
hasil = opn1 * opn2;
}
else if(op == '/'){
if(opn2 != 0.0){
oke = 1;
hasil = opn1 / opn2;
}
else{
oke = 0;
}
}
else if(op == '^'){
oke = 1;
hasil = pow(opn1, opn2);
}
else{
oke = 0;
printf("Operator tidak dikenal!\n");
}

//tampilkan hasilnya jika operasi bisa dilakukan


if(oke == 1)
printf("Hasil = %.2lf\n", hasil);
else
printf("Operasi tidak dapat dilakukan!");
}

3. Menentukan Nilai Mata Kuliah dalam Huruf berdasarkan nilai UTS, UAS, TUGAS, PRAKTEK

Penjelasan: Diasumsikan bahwa nilai akhir diperoleh berdasarkan nilai uts(20%), uas (30%),
tugas (20%) dan nilai praktek (30%).
Ketentuan nilai Huruf:
Nilai A: 81.0<=nilai akhir<=100.0
Nilai B: 66.0<=nilai akhir<81.0
Nilai C: 55.0<=nilai akhir<66.0
Nilai D: 45.0<=nilai akhir<55.0
Nilai E: nilai akhir<45.0

Langkah-langkah
- Meminta masukan berupa nilai mata kuliah
- Periksa, apakah nilai tersebut berada dalam batas penilaian yang ditetapkan
Jika nilai berada dalam batas 81.0<=nilai akhir<=100.0, maka nilai huruf adalah ‘A’
Jika nilai berada dalam batas 66.0<=nilai akhir<81.0, maka nilai huruf adalah ‘B’
Jika nilai berada dalam batas 55.0<=nilai akhir<66.0, maka nilai huruf adalah ‘C’
Jika nilai berada dalam batas 45.0<=nilai akhir<55.0, maka nilai huruf adalah ‘D’
Selain itu (nilai akhir<45.0), maka nilai huruf adalah ‘E’
- Tampilkan nilai total dan nilai hururf

Analisis Kebutuhan
- Kebutuhan output:
Menampilkan nilai akhir dan nilai huruf, misal
Nilai akhir: XX.X dan Nilai huruf X

- Kebutuhan input:
Meminta masukan nilai untuk unsur nilai UTS, UAS, TUGAS dan nilai PRAKTEK, misal
Ketikkan nilai UTS : ??
Ketikkan nilai UAS : ??
Ketikkan nilai TUGAS : ??
Letikkan nilai PRAKTEK : ??

- Kebutuhan proses atau operasi


o Menghitung nilai akhir dengan formula:
Nilai akhir <- UTS * 20% + UAS* 30% + TUGAS * 20% + PRAKTEK * 30%
o Menentukan nilai huruf
 Jika 81.0<=nilai akhir<=100.0, maka nilai huruf = ‘A’
 Jika 66.0<=nilai akhir<81.0, maka nilai huruf = ‘B’
 Jika 55.0<=nilai akhir<66.0, maka nilai huruf = ‘C’
 Jika 45.0<=nilai akhir<55.0, maka nilai huruf = ‘D’
 Selain itu (nilai akhir<45.0), maka nilai huruf = ‘E’
- Kebutuhan konstanta
o Tetapan untuk persentase nilai uts diberi nama PUTS bernilai 20%
o Tetapan untuk persentase nilai uas diberi nama PUAS bernilai 30%
o Tetapan untuk persentase nilai tugas diberi nama PTGS bernilai 20%
o Tetapan untuk persentase nilai praktek diberi nama PTEK bernilai 30%
- Kebutuhan variable
o Untuk menyimpan nilai uts, variable diberi nama uts bertipe real
o Untuk menyimpan nilai uas, variable diberi nama uas bertipe real
o Untuk menyimpan nilai tugas, variable diberi nama tugas bertipe real
o Untuk menyimpan nilai praktek, variable diberi nama praktek bertipe real
o Untuk menyimpan nilai akhir, variable diberi nama akhir bertipe real
o Untuk menyimpan nilai huruf, variable diberi nama huruf bertipe karakter

Algoritma penilaian(input, output)


{menghitung nilai akhir dan nilai huruf mata kuliah berdasarkan nilai uts, uas, tugas dan
praktek}

Deklarasi
Konstanta
PUTS = 0.20
PUAS = 0.30
PTGS = 0.20
PTEK = 0.30
Variable
uts, uas, tugas, praktek, akhir: real
huruf: karakter
Deskripsi
Start
Write(‘PENILAIAN MATA KULIAH’)
Write(‘Ketikkan nilai UTS : ‘)
Read(uts)
Write(‘Ketikkan nilai UAS : ‘)
Read(uas)
Write(‘Ketikkan nilai Tugas : ‘)
Read(tugas)
Write(‘Ketikkan nilai praktek : ‘)
Read(praktek)
//menghitung nilai akhir
Akhir <- uts * PUTS + uas * PUAS + tugas * PTGS + praktek * PTEK
//konversi ke nilai huruf
IF akhir>=81.0 AND akhir<=100
THEN huruf <- ‘A’
ELSE IF akhir>=66.0 AND akhir< 81.0
THEN huruf <- ‘B’
ELSE IF akhir>=55.0 AND akhir< 66.0
THEN huruf <- ‘C’
ELSE IF akhir>=45.0 AND akhir< 55.0
THEN huruf <- ‘D’
ELSE huruf <- ‘E’
//tampilkan informasi
Write(‘Nilai Akhir : ‘ + akhir)
Write(‘Nilai Huruf : ‘ + huruf)
Stop

Implementasi dalam C
#include <stdio.h>
#include <stdlib.h>

//deklarasi konstanta
#define PUTS 0.20
#define PUAS 0.30
#define PTGS 0.20
#define PTEK 0.30

main(){
double uts, uas, tugas, praktek, akhir;
char huruf;

printf("PENILAIAN MATA KULIAH\n");


printf("Ketikkan nilai UTS : ");
scanf("%lf", &uts);
printf("Ketikkan nilai UAS : ");
scanf("%lf", &uas);
printf("Ketikkan nilai Tugas : ");
scanf("%lf", &tugas);
printf("Ketikkan nilai Praktek: ");
scanf("%lf", &praktek);

//menghitung nilai akhir


akhir = uts * PUTS + uas * PUAS + tugas * PTGS + praktek * PTEK;
if((akhir >= 81.0) && (akhir <= 100.0))
huruf = 'A';
else if((akhir >= 66.0) && (akhir < 81.0))
huruf = 'B';
else if((akhir >= 55.0) && (akhir < 66.0))
huruf = 'C';
else if((akhir >= 45.0) && (akhir < 55.0))
huruf = 'D';
else huruf = 'E';

//menampilkan informasi nilai


printf("Nilai Akhir : %.1lf\n",akhir);
printf("Nilai Huruf : %c\n",huruf);
}

Pernyataan Switch

Pengambilan keputusan dengan syarat-syarat tertentu dapat menggunakan pernyataan switch.


Persyaratan yang dimaksud adalah, apabila nilai yang dievaluasi merupakan nilai yang tetap (seperti
bilangan integer atau karakter).

Perhatikan diagram alir yang dapat menggambarkan pernyataan switch berikut ini.

Flowchart:

Suatu variable atau ekspresi ditempatkan pada bagian switch untuk dievaluasi. Hasil evaluasi akan
dibandingkan dengan sejumlah nilai yang ditetapkan hingga ditemukan nilai yang sama. Jika hasil
evaluasi sama dengan salah satu dari sejumlah nilai tersebut, maka bagian aksi (block) akan
dieksekusi. Apabila tidak ad satupun nilai yang cocok, maka bagian default yang akan dieksekusi.

Bentuk pseudocode dari pernyataan switch adalah seperti berikut:

Switch ekspresi
Case nilai_1: aksi_1
Case nilai_2: aksi_2
Case nilai_3: aksi_3
Case nilai_n: aksi_n
Default : aksi_default
Endswitch

Perlu diketahui, algoritma pseudocode terkait pernyataan switch sering menggunakan istilah
pernyataan Depend On, sehingga bentuk algoritma pseudocode berupa:

Depend On ekspresi
Case nilai_1: aksi_1
Case nilai_2: aksi_2
Case nilai_3: aksi_3
Case nilai_n: aksi_n
Default : aksi_default
endDependOn

impelemtasi dalam C dapat berbentuk seperti berikut:


switch(expression){
case value1 :
//Statements
break;
case value2 :
//Statements
break;
case valuen :
//Statements
break;
default : //Optional
//Statements
}

Kita bisa melihat, implementasi pernyataan switch dalam C memiliki ciri dan aturan tersendiri. Nilai
yang dievaluasi harus bertipe integer atau memiliki hasil evaluasi bernilai integer (seperti char)
sedangkan tipe real atau floating point, seperti float dan double tidak dapat digunakan dalam
pernyataan switch dalam C.

Perhatikan, bahwa stiap blok pernyataan untuk masing-masing nilai case, diakhiri dengan
pernyataan break yang berarti bahwa, apabila suatu nilai cocok, maka pencarian nilai lainnya tidak
perlu dilakukan. Break memaksa program untuk menghentikan pencarian nilai yang lain dan alur
control keluar dari badan switch.
Sebagai contoh, misalnya pada kasus membuat kalkulator yang sebelumnya menggunakan
pernyataan IF, kita implementasikan dengan menggunakan pernyataan switch. Perhatikan
implementasinya dalam C berikut ini:

/*
Menghitung hasil operasi kalkulator menggunakan switch
Nama File: kalkswitch.c
Programmer: Anu
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main(){
double opn1, opn2, hasil=0.0;
char op;
int oke;

printf("KALKULATOR TUKANG BAREH\n");


printf("Ketikkan operasi, misal 5 * 2.5 lalu tekan ENTER: ");
scanf("%lf %c %lf", &opn1, &op, &opn2); fflush(stdin);
oke = 0; //dianggap tidak dapat dihitung
//periksa tanda operator
switch(op){
case '+': oke = 1;
hasil = opn1 + opn2;
break;
case '-': oke = 1;
hasil = opn1 - opn2;
break;
case '*': oke = 1;
hasil = opn1 * opn2;
break;
case '/': if(opn2 != 0.0){
oke = 1;
hasil = opn1 / opn2;
}
else{
oke = 0;
}
break;
case '^': oke = 1;
hasil = pow(opn1, opn2);
break;
default : oke = 0;
printf("Operator tidak dikenal!\n");

//tampilkan hasilnya jika operasi bisa dilakukan


if(oke == 1) printf("Hasil = %.2lf\n", hasil);
else printf("Operasi tidak dapat dilakukan!");
}
Jika program ini dijalankan, maka hasilnya akan sama dengan program sebelumnya yang
menggunakan pernyataan IF. Cobalah Anda amati perbedaan kedua kode program tersebut.

Anda mungkin juga menyukai