Algorithms and Programming C/C++ SYS Course 2
Struktur Kendali
Adalah sebuah paradigma untuk mengendalikan alur program ke arah tertentu. Untuk meguasai materi struktur kendali pada pemrograman C/C++, ada beberapa hal yang diperlukan untuk dipahami
- Ekspresi Boolean
- Operator
- Operator Perbandingan
- Operator Logika
- Konstruksi Program
Struktur kendali terbagi menjadi 2, yaitu
- Struktur Percabangan
- Strutkur Perulangan
Struktur Percabangan (Conditional Statement)
Konstruksi Percabangan & Blok Program
Konstruksi Percabangan adalah sebuah program yang ketika dijalankan akan menimbulkan percabangan kedalam sub cabangnya yang berisi sebuah blok program sesuai dengan kondisi dan logika yang diminta. Umumnya konstruksi percabangan dalam Bahasa pemrograman C/C++ sendiri dapat dibuat dengan memanggil keyword if/else if/else ataupun dengan menggunakan switch case. Berikut tabelnya:
Tabel IF/ELSE IF/ELSE:
Keterangan | Keyword |
---|---|
Terdapat 1 pilihan keputusan | if |
Terdapat 2 pilihan keputusan | if/else |
Terdapat lebih dari 2 pilihan keputusan | if/else if/else |
Tabel keyword SWITCH CASE:
Keterangan | Keyword |
---|---|
Opsi pemilihan keputusan | switch |
keputusan pilihan | case |
pilihan keputusan default | default |
memberhentikan keputusan dan mengakhiri pemilihan keputusan | break |
Blok program berisi sekumpulan ekpresi dan statement untuk dikerjakan oleh komputer. Dalam Bahasa pemrograman C/C++, blok program dapat diidentifikasikan dengan tanda kurung kurawal (“{}”) dan diberikan indentasi setelah pendeklarasian konstruksi if/else if/else, for, while ataupun ketika melakukan definisi fungsi.
Blok program yang terdapat pada kondisi if/switch case sendiri akan dijalankan jika kondisi yang diminta bernilai True.
Blok program yang terdapat pada kondisi kondisi else if memiliki arti jika tidak sesuai dengan kondisi sebelumnya maka akan disesuaikan dengan kondisi lainnya yang dapat bernilai true.
Blok program yang terdapat pada kondisi else/default akan dijalankan ketika nilai dari kondisi sebelumnya yaitu if/else if ataupun switch case bernilai False.
Berikut ini adalah contoh sederhana program konstruksi percabangan if/else if/else yang menggunakan operator perbandingan:
Code Editor:1
2
3
4
5
6
7
8
9
10
11
12
13
14int main() {
int credits = 45;
if (credits >= 120) { // Memasuki Blok Program IF
printf("Senior"); // Didalam Blok Program IF
} else if (credits >= 90) { // Memasuki Blok Program ELIF
printf("Junior"); // Didalam Blok Program ELIF
} else { // Memasuki Blok Program ELSE
printf("New College Student"); // Didalam Blok Program ELSE
}
return 0;
}
Berikut ini adalah contoh sederhana program konstruksi percabangan switch case:
Code Editor:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29int main() {
int status = 2;
switch(status){ // Memasuki Blok Program Switch Case
case 0: // Memasuki Blok Program Case 0
printf("OFF\n"); // Didalam Blok Program Case 0
break; // Berhenti dan mengakhiri Switch Case
case 1: // Memasuki Blok Program Case 1
printf("ON\n"); // Didalam Blok Program Case 1
break; // Berhenti dan mengakhiri Switch Case
case 2: // Memasuki Blok Program Case 2
printf("STAND BY\n"); // Didalam Blok Program Case 2
case 3: // Memasuki Blok Program Case 3
printf("FINISH\n"); // Didalam Blok Program Case 3
break; // Berhenti dan mengakhiri Switch Case
default: // Memasuki Blok Program Default
printf("UNKNOWN\n"); // Didalam blok program default
break; // Berhenti dan mengakhiri Switch Case
}
return 0;
}
Output:STAND BY
FINISH
One Liner Conditional Statement
Merupakan konsep atau paradigma percabangan yang hanya menggunakan 1 baris untuk menghasilkan dua kondisi yang berbeda.
Format penggunaan:Variable = Kondisi ? Jika Benar : Jika salah;
Code Editor:1
2
3
4
5
6
7
8int main(){
unsigned char status = 1;
string category = status != 0 ? "ON" : "OFF";
printf("%s\n", category);
}
Output:ON
Nested Conditional/Percabangan Bersarang
Merupakan konsep atau paradigma dimana dalam suatu percabangan program terdapat percabangan lagi. Biasanya percabangan bersarang akan sering ditemui pada kode program yang cukup kompleks ataupun kode program yang terbilang rumit. berikut ini adalah contoh percabangan bersarang.
Code Editor:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22int main(){
int credits = 125;
if (credits >= 120){ // Memasuki Blok Program IF
if (credits > 120){ // Memasuki Blok Program IF Bersarang didalam Blok program IF
printf("Senior Tua"); // Didalam Blok Program IF Bersarang
} else { // Memasuki Blok Program ELSE Bersarang didalam Blok program IF
printf("Senior Muda"); // Didalam Blok Program ELSE Bersarang
} // Mengakhiri Blok Program ELSE Bersarang
} else if (credits >= 90) { // Memasuki Blok Program ELSE IF
if (credits > 90) { // Memasuki Blok Program IF Bersarang didalam Blok program ELSE IF
printf("Junior Tua"); // Didalam Blok Program IF Bersarang
} else { // Memasuki Blok Program ELSE Bersarang didalam Blok program ELSE IF
printf("Junior Muda"); // Didalam Blok Program ELSE Bersarang
} // Mengakhiri Blok Program ELSE Bersarang
} else { // Memasuki Blok Program ELSE
printf("New College Student"); // Didalam Blok Program ELSE
}
return 0;
}
Output:Senior Tua
Complex Logical Conditional Statement
Merupakan sebuah paradigma percabangan dengan menambahkan logika tertentu untuk mendapatkan alur yang lebih terfilter dalam sebuah kode program. Umumnya untuk mendapatkan alur yang lebih tertuju biasanya programmer akan lebih mengutamakan complex logical conditional statement ketimbang menggunakan percabangan bersarang agar kode yang dibuat juga tidak terlalu panjang dan mudah untuk melakukan maintenance/perawatan kode nantinya. Untuk membuat Complex Logical Conditional Statement anda perlu menambahkan operator logika didalam if/else if seperti contoh yang akan kita terapkan pada program yang sebelumnya telah dibuat. Berikut ini contohnya:
Code Editor:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18int main(){
int credits = 95;
if ( ( credits > 122 ) && ( credits <= 144 ) ) {
printf("Senior Tua");
} else if ( ( credits >= 120 ) && ( credits <= 122 ) ) {
printf("Senior Muda");
} else if ( ( credits > 90 ) && ( credits < 120 ) ) {
printf("Junior Tua");
} else if ( ( credits <= 90 ) && ( credits > 24 ) ) {
printf("Junior Muda");
} else {
printf("New College Student");
}
return 0;
}
Output:Junior Tua
Struktur Perulangan (Looping)
Looping atau perulangan adalah sebuah program yang ketika dijalankan akan menimbulkan perulangan. Terdapat 2 tipe perulangan yaitu:
- Perulangan yang diketahui berapa kali jumlah perulangannya (For).
- Perulangan yang tidak diketahui berapa kali jumlah perulangannya (While).
For Loop
For Loop atau Perulangan for biasa digunakan ketika jumlah perulangannya dapat kita ketahui. for dapat dideklarasikan dengan memanggil kata kunci for dan diikuti dengan inisalisasi nilai awal serta kondisi untuk berhenti dan increment/decrement dari inisialisasi nilai awalnya. contohnya syntaxnya seperti dibawah ini:
1 | for ( inisialisasi nilai awal; kondisi untuk berhenti; increment/decrement ) {} |
Berikut ini adalah contoh implementasi perulangan For:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using namespace std;
int main() {
// For
// Syntax Type 1:
for ( int i = 0; i < 5; i++ ) { // 5 itu nilai akhir | Ketika i ada dalam jangkauan 0~4
cout<<"Ini Perulangan ke-"<<i<<endl;
}
cout<<endl;
// Syntax Type 2:
for ( int i = 3; i < 10; i++ ) { // 3 itu nilai awal, 10 nilai akhir | Ketika i dalam jangkauan 3~9
cout<<"Ini Perulangan ke-"<<i<<endl;
}
cout<<endl;
// Syntax Type 3:
for ( int i = 20; i >= 5; i -= 5 ) { // 20 nilai awal, 5 nilai akhir, dan selisih -5 |
// Ketika i dalam jangkauan 20~4 maka kurangi 5 disetiap perulangan
cout<<"Ini Perulangan ke-"<<i<<endl;
}
return 0;
}
Berikut ini adalah contoh implementasi perulangan For untuk mengambil data dari variabel bertipe data list:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using namespace std;
int main() {
// For biasanya digunakan untuk mengambil data dari tipe data variabel list
// digunakan ketika memiliki sebuah data yang berupa list/array
// List/Array
// Kumpulan sebuah daftar data (biasanya setipe, tetapi ada pula yang tidak setipe)
// Cara mendeklarasikan list menggunakan {} dan setiap data dipisah dengan koma (,)
int list_int_angka[6] = {10, 8, 6, 4, 2, 0};
for ( int i = 0; i < sizeof(list_int_angka); i++ ) {
cout<<"Ini Data ke-"<<i + 1<<" adalah: "<<list_int_angka[i]<<endl;
}
return 0;
}
While Loop
While Loop atau perulangan while merupakan sebuah perulangan yang diaktifkan menggunakan boolean. Biasanya digunakan ketika jumlah perulangannya tidak kita ketahui. Terdapat 2 versi while yaitu
- Versi Conditional
- Versi Keyword/Kata Kunci
Versi kondisonal digunakan ketika kita ingin mengulangi perulangan dengan kondisi yang kita sesuaikan sendiri, cara penggunaannya tidak berbeda jauh dengan Conditional IF berikut contohnya:
1 |
|
Versi Keyword atau kata kunci akan mengandalkan keyword untuk memberhentikan atau melanjutkan perulangan, hal ini cukup beresiko dan menyebabkan infinite loop atau perulangan yang tidak terbatas jika tidak menggunakannya secara hati-hati.
Terdapat 2 kata kunci yang digunakan di dalam while
- continue (melanjutkan perulangan)
- break (berhenti paksa)
Berikut ini adalah contoh penggunaannya:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using namespace std;
int main() {
// Versi Tanpa Kata Kunci
int status = TRUE;
int i = 0;
int int_max;
cout<<"Masukkan Jumlah Maksimal:"<<ends;
cin>>int_max;
while( status ) {
if ( i < int_max ) {
cout<<"Ini Perulangan ke-"<<i<<endl;
i += 1;
} else {
cout<<"Program Berhenti"<<endl;
status = FALSE;
}
}
// Versi Dengan Kata Kunci
int i = 0;
int int_max;
cout<<"Masukkan Jumlah Maksimal:"<<ends;
cin>>int_max;
while( TRUE ) {
if ( i < int_max ) {
cout<<"Ini Perulangan ke-"<<i<<endl;
i += 1;
continue;
} else {
cout<<"Program Berhenti"<<endl;
break;
}
}
return 0;
}
Do While Loop
Sama seperti While loop hanya saja, Jika while harus mengaktifkan loopingnya terlebih dahulu baru mengeksekusi dan menjalankan kode blok program didalam while setelahnya, maka do while sebaliknya. Do While akan mengeksekusi dan menjalankan kode blok program di dalam do whilenya terlebih dahulu baru mengaktifkan loopingnya.
Berikut ini adalah contoh penggunaannya:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using namespace std;
int main() {
int index = 0;
do { //Kode yang akan dijalankan terlebih dahulu
cout<<"Perulangan ke-"<<index<<endl;
index++; //Increment untuk mencegah infinite loop
} while ( index < SIZE_DO_WHILE ); //Setelah menjalankan kode diatas, baru perulangannya akan diaktifkan
return 0;
}
Latihan Struktur Kendali
Kerjakan Latihan Berikut ini untuk mengetes pemahamanmu tentang Struktur Kendali.
Latihan Percabangan
Latihan Percabangan 1
Buatlah sebuah program untuk menentukan angka ganjil dan genap dari nilai yang diinputkan oleh user. (estimasi 5 menit)
Clue: Menggunakan Operator Aritmatika
INPUT:
Angka bebas
PROSES:
Melakukan filtering apakah angka itu ganjil atau genap
OUTPUT:
Menampilkan hasil ganjil/genap
Latihan Percabangan 2
Buatlah Program untuk mengkategorisasikan umur inputan bilangan yang dapat diinput oleh user (inputan umur tidak bisa negatif) (estimasi 10 menit)
- Bayi = 0 - 1
- Batita = 2 - 3
- Balita = 4 - 5
- Anak - Anak = 6 - 12
- Remaja = 13 - 17
- ABG = 18 - 21
- Pra Dewasa = 22 - 30
- Dewasa = 31 - 50
- Pra Lansia = 51 - 70
- Lansia = 71 keatas
INPUT:
Umur
PROSES:
Melakukan Filtering untuk menentukan kategori umur
OUTPUT:
Kategori hasil filtering
Latihan Percabangan 3
Buatlah Program untuk melakukan konversi suhu (estimasi 15 menit)
- Celcius ke Fahrenheit
- Celcius ke Kelvin
- Fahrenheit ke Celcius
- Fahrenheit ke Kelvin
- Kelvin ke Celcius
- Kelvin ke Fahrenheit
Cari rumus konversinya di internet lalu buatlah user memilih salah satu diantara keenam menu diatas dan tampilkan hasil konversinya
INPUT:
- Suhu (Derajat Celcius/Fahrenheit/Kelvin)
- Menu yang dipilih
PROSES:
Melakukan Konversi suhu dibawah ini:
- Celcius ke Fahrenheit
- Celcius ke Kelvin
- Fahrenheit ke Celcius
- Fahrenheit ke Kelvin
- Kelvin ke Celcius
- Kelvin ke Fahrenheit
OUTPUT:
Suhu (Derajat Celcius/Fahrenheit/Kelvin)
Latihan Percabangan 4
Buatlah Sebuah Program untuk Menentukan Jenis Segitiga. Ketiga Sisi yang didapat diinput oleh user. Lalu setelah user selesai menginput akan tercetak jenis segitiga apa. (estimasi 20 menit)
- Sama Sisi
- Sama kaki
- Bukan Segitiga
- Sembarang
- Siku-siku (Clue: menggunakan besar sudut) —> ini dapat nilai bonus
Hati-hati dalam menetukan sebuah kondisi karena jika memasukkan 1 2 3 kedalam setiap sisi segitiga, ketiga inputan tersebut bukanlah merupakan segitiga
INPUT:
- Sisi A
- Sisi B
- Sisi C
PROSES:
Melakukan filtering jenis segitiga berdasarkan ketiga sisi yang diinputkan
OUTPUT:
Menampilkan hasil jenis segitiga (sama sisi/sama kaki/bukan segitiga/sembarang/siku siku)
Latihan Percabangan 5
Buatlah Sebuah program percabangan untuk menentukan persamaan kuadrat menggunakan diskriminan (estimasi 20 menit)
- Jika diskriminan lebih besar dari 0 maka memiliki akar berbeda
- Jika diskriminan lebih kecil dari 0 maka memiliki akar imajiner
- Jika diskriminan sama dengan 0 maka merupakan akar kembar
hati-hati jika nilai a = 0 maka itu bukanlah merupakan akar persamaan kuadrat
INPUT:
- Nilai A
- Nilai B
- Nilai C
PROSES:
Melakukan Filtering nilai A apakah 0, jika bukan 0 maka hitung diskriminan menggunakan rumus abc, hasil diskriminannya dapat digunakan untuk melakukan filtering jenis akar (akar berbeda/akar imajiner/akar kembar)
OUTPUT:
Jika akar berbeda:
- Cetak “Merupakan Akar Berbeda”
- Cetak persamaan kuadratnya
- Cetak nilai diskriminannya
- Cetak nilai Akar x1nya
- Cetak nilai Akar x2nya
Jika akar imajiner:
- Cetak “Merupakan Akar imajiner”
- Cetak persamaan kuadratnya
- Cetak nilai diskriminannya
- Cetak rumus Akar x1nya
- Cetak rumus Akar x2nya
Jika akar kembar:
- Cetak “Merupakan Akar kembar”
- Cetak persamaan kuadratnya
- Cetak nilai diskriminannya
- Cetak nilai Akarnya (gunakan salah satu akar x1 atau x2)
Jika a = 0:
- Cetak “bukan merupakan akar persamaan kuadrat”
Latihan Perulangan
Latihan Perulangan For
Latihan Perulangan For 1
Buatlah program piramida segitiga angka seperti pada contoh dibawah ini. (Estimasi 10 Menit)
OUTPUT1
2
3
4
5
6
7
8
9Input Nilai Max: 7 (Diinput oleh User)
7777777
666666
55555
4444
333
22
1
Latihan Perulangan For 2
Buatlah program piramida segitiga angka seperti pada contoh dibawah ini. (Estimasi 15 Menit)
OUTPUT1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Input Nilai Max: 7 (Diinput oleh User)
7777777
666666
55555
4444
333
22
1
22
333
4444
55555
666666
7777777
Latihan Perulangan While
Latihan Perulangan 1
Buatlah program filtering angka ganjil genap pada latihan sebelumnya menjadi sebuah perulangan. (estimasi 2 menit)
OUTPUT1
2
3
4
5
6
7
8
9
10Masukkan Angka Bebas: 5 (Diinput oleh User)
Angka 5 merupakan ganjil
Ingin mengulanginya lagi? Y (Diinput oleh User)
Masukkan Angka Bebas: 8 (Diinput oleh User)
Angka 8 merupakan genap
Ingin mengulanginya lagi? N (Diinput oleh User)
Program Berhenti
Terima kasih telah menggunakan program saya ^^
Latihan Perulangan 2
Buatlah program filtering segitiga pada latihan sebelumnya menjadi sebuah perulangan. (estimasi 3 menit)
OUTPUT1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Masukkan Sisi A: 5 (Diinput oleh user)
Masukkan Sisi B: 5 (Diinput oleh user)
Masukkan Sisi C: 5 (Diinput oleh user)
Merupakan Segitga Sama Sisi
Ingin mengulanginya lagi? Y (Diinput oleh User)
Masukkan Sisi A: 5 (Diinput oleh user)
Masukkan Sisi B: 5 (Diinput oleh user)
Masukkan Sisi C: 7 (Diinput oleh user)
Merupakan Segitiga Sama Kaki
Ingin mengulanginya lagi? N (Diinput oleh User)
Program Berhenti
Terima kasih telah menggunakan program saya ^^
Latihan Perulangan 3
Buatlah program fungsi untuk merata-ratakan nilai sesuai dengan kategori huruf yang diinputkan dimana aturannya adalah sebagai berikut: (estimasi 20 menit)
- A = 4.00
- A- = 3.75
- B+ = 3.50
- B = 3.00
- B- = 2.75
- C+ = 2.50
- C = 2.00
- C- = 1.75
- D = 1.50
- E = 1.20
OUTPUT1
2
3
4
5
6Masukkan Kategori Nilai (Tekan Enter Untuk Berhenti): A //4
Masukkan Kategori Nilai (Tekan Enter Untuk Berhenti): B //3
Masukkan Kategori Nilai (Tekan Enter Untuk Berhenti): B //3
Masukkan Kategori Nilai (Tekan Enter Untuk Berhenti): C //2
Masukkan Kategori Nilai (Tekan Enter Untuk Berhenti): //(4 + 3 + 3 + 2)/4 = 3
Rata-rata nilainya adalah 3.00 dengan Predikat B