Control Flow

Program komputer ditulis untuk menyelesaikan suatu tugas. Dalam prosesnya sebuah program akan menerima masukan selanjutnya melakukan perbandingan, pengujian,penerapan algoritma tertentu dan menampilkan hasil proses itu dalam bentuk informasi yang berguna(opsional). Untuk memahami proses itu kita perlu mengetahui bagaimana masing-masing sub-proses itu dilakukan. Secara umum program melakukan proses itu dengan mengikuti suatu alur(flow) tertentu. Pada bab ini akan dibahas bagaimana alur itu diikuti dengan mengenalkan kepada anda tentang komparasi dan iterasi atau perulangan.

Pengambilan Keputusan dengan if-else

Bentuk umumnya dapat ditulis dalam bentuk :

if (kondisi1)
       ekspresi1;
else if(kondisi2)
       ekspresi2;
else
       ekspresi3;

atau multibaris harus disertakan tanda kurung {} ,

if (kondisi1)
{
       ekspresi;
       …
}
else if(kondisi2)
{
       ekspresi;
       …
}
else
{
       ekspresi;
       …
}

Pengujian dilakukan mulai dari kondisi1 berlanjut ke kondisi2 dan seterusnya. Jika semua tidak dipenuhi maka ekspresi terakhir setelah else akan dijalankan.

Kesalahan yang sering terjadi adalah penulisan pernyataan if dengan diakhiri dengan semicolons (;) misalnya:

if (a > b);
       ekspresi1;

dengan adanya “;” setelah pengujian kondisi itu, maka akan dianggap sebagai akhir dari sebuah ekspresi sehingga baris ekspresi1 akan selalu dijalankan tanpa memandang hasil pengujian kondisi.

Pernyataan if-else juga dapat nested yaitu berada dalam pernyataan if-else yang lain.

Contoh :

int a = 100;
if (a > 0)
{
       if (a > 100)
              printf(“a adalah besar\n”);
       else
              printf(“a adalah sedang\n”);
}

Pengujian kondisi dengan switch

Jika pengujian melibakan banyak kondisi dengan  tipe integer (bilangan bulat), maka penggunaan if-else menjadi kurang efisien. C mempunyai kata kunci switch untuk melakukan pengujian dengan banyak kondisi dengan bentuk :

switch(nilai_integer)
{
       case nilai1:ekspresi1;
       break;
       case nilai2:ekspresi2;
       break;
       …
       default:ekspresi_default;
       break;
}

kata kunci break berguna untuk segera keluar dari blok switch sehingga begitu setiap ekspresi dijalankan, maka kontrol akan dipindahkan keluar switch atau dengan kata lain untuk menjamin hanya satu ekspresi saja yang dijalankan.

default berperan seperti else yaitu sebagai alternatif dari suatu kondisi yang tidak dipenuhi.

Namun ada saatnya dimana break tidak digunakan , misalnya untuk menjalankan ekspresi yang sama untuk beberapa kondisi.

Contoh penggunaan switch :

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

///Kamus
       char n = ‘E’;
///Deskripsi
int main()
{
printf(“Masukkan Sebuah Nilai : “);  scanf(“%c”,&n);
printf(“%c\n”,n);
switch(n)
{
       case ‘A’:case ‘a’:
              printf(“Nilai antara 80-100\n”);
              break;
       case ‘B’:case ‘b’:
              printf(“Nilai antara 70-80\n”);
              break;
       case ‘C’:case ‘c’:
              printf(“Nilai antara 60-70\n”);
              break;
       case ‘D’:case ‘d’:
              printf(“Nilai kurang dari 60\n”);
              break;
       default : printf(“Kriteria nilai tidak ada\n”);
}

       return 0;
}

While

Seringkali dibutuhkan untuk melaksanakan tugas berulang sampai suatu kondisi tetentu tercapai. C memiliki tiga jenis loop  atau perulangan, tapi yang akan dibahas adalah while-do saja yang memiliki bentuk :

while (kondisi)
       ekspresi;

atau

while (kondisi)
{
       ekspresi;
}

selama kondisi bernilai benar, maka ekspresi akan dijalankan terus menerus. Biasanya ekspresi itu sendiri mengandung perintah untuk membuat kondisi menjadi false sehingga loop berhenti.

Contoh :

int a = 10;
printf(“Mulai\n”);
while (a > 0)
{
        printf(“a = %d\n”,a);
        a=a-1;
}
printf(“akhir\n”);

Program ini akan mencetak nilai a terus menerus sampai nilai a sama dengan 0 yang tidak akan ditampilkan.

Seperti hal lainnya dalam C, kesalahan umum dalam penulisan loop ini misalnya dengan meletakkan semicolon (;) setelah while :

while (kondisi);
{
       ekspresi;
}

yang menyebabkan program akan terjebak dalam menjalankan loop tak terhingga (infinite loop) karena kondisi tidak pernah diperbaharui untuk menghentikan loop.

Break

Kata kunci ini dapat anda gunakan untuk keluar dari suatu loop terdekat.

Contoh :

int a = 0;
for (;;)
{
        printf(“Masukkan Sebuah angka : “);
        if ((scanf(“%d”,&a)==1) && (a==0))
            break;
}

Continue

Berfungsi untuk menjalankan iterasi  berikutnya walaupun eksekusi program belum mencapai akhir sebuah iterasi. Misalnya program untuk melewati program untuk melewati bilangan dengan kelipatan 3 :

int a;
for (a=1;a<=10;a=a+1)
{
        if (a%3 == 0) continue;
        printf(“%d\n”,a);
}

akan menghasilkan 1,2,4,5,7,8,10.

Operator

Operator Aritmetika

Dalam setiap bahasa pemrograman selalu memiliki operator yang berguna untuk melakukan suatu operasi dgn menggunakan symbol symbol tertentu. Dalam postingan ini akan dibahas operator-operator dalam bahasa C yang dikelompokkan dalam kategori operasionalnya.

C mendukung operator untuk operasi aritmetika seperti berikut :

+             Untuk operasi penjumlahan

      –              Untuk operasi pengurangan

      *             Untuk operasi perkalian

      /              Untuk operasi pembagian

      %            Untuk mendapatkan sisa hasil bagi

perhatikan program berikut :

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

///Kamus
      int i=5, j=4, k;
      float f = 5.0, g=4.0, h;

///Deskripsi
int main()
{
        k=i/j;
        h=f/g;
        h=i/j;

        return 0;
}

pada baris  k=i/j, compiler akan menggunakan pembagian integer karena kedua operand adalah tipe integer.

pada baris h=f/g, compiler akan menggunakan pembagian real(float) karena kedua operand adalah tipe real(float).

Pada baris h=i/j, compiler tetap menggunakan pembagian integer dgn mengabaikan bahwa variabel utk menampung hasilnya adalah tipe real(float). Hasil yang diperoleh akan disimpan dalam bentuk real(float).

Casting Operator

Istilah casting sering diartikan sebagai berperilaku spt sesuatu yang lain dan untuk tujuan tertentu. Perhatikan baris program berikut :

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

///Kamus
      int i=5, j=4, k;
      float f;

///Deskripsi
int main()
{
      f = (float)i / j;
      f = i/(float)j;
      f = (float)i / (float)j;
      f = (float) (i / j);

      return 0;
}

Pada baris  f = (float)i / j;       f = i/(float)j;       f = (float)i / (float)j; compiler menggunakan pembagian tipe float karena salah satu operand  adalah tipe float yang secara otomatis operand yang berukuran lebih kecil akan diubah sementara menjadi float. Operasi ini disebut  type promotion.

Sedangkan pada f = (float) (i / j);  compiler tetap menggunakan pembagian integer namun hasilnya diubah ke float.

Operator Komparasi

Bahasa C dalam melakukan operasi logika menggunakan dua logika yaitu benar (true) atau salah (false) namun C tidak memiliki kata kunci khusus untuk true/false. Semua nilai yang tidak nol akan dianggap true dan nilai nol akakn dianggap false.

Logika benar dan salah ini digunakan untuk melakukan operasi perbandingan dengan berbagai kondisi yang dalam C dapat dilakukan dengan operator-operator seperti berikut :

<             Kurang dari

      <=           kurang atau sama dengan

      >             Lebih besar dari

      >=           Lebih besar atau sama dengan

      !=            Tidak sama dengan

Perhatikan contoh program berikut :

int i=10, j, k;
j = i > 5;
k = i < 2;

Hasil dari program ini akan membuat j bernilai 1 (true) karena i memang lebih besar dari 5 dan k bernilai 0 (false) karena i lebih besar dari 2.

Operator Logika

Dalam melakukan operasi perbandingan atau komparasi seringkali dilakukan untuk dua atau lebih pernyataan logika untuk menggambil sebuah keputusan. C menyediakan operator untuk melakukan perbandingan logika :

&&         Dan (and)

      ||           Atau (or)

      !              Tidak (not)

Operator-operator ini juga menganggap nilai tidak nol sebagai nilai yang benar (true) dan nol sebagai nilai yang salah (false).

contoh program :

int j=5, k=2;
if (j>10 && k<=2)

Untuk program ini, compiler tidak akan mengevaluasi k <= 2 karena operator  &&  yang akan bernilai benar hanya jika kedua operand yang dibandingkan bernilai benar(tdk nol). Jadi untuk hal ini karena j>10 bernilai salah maka compiler sudah yakin bahwa pernyataan ini bernilai salah (false). Mekanisme ini disebut short-circuit. Dengan mekanisme ini juga, compiler dapat menghasilkan program yang lebih efisien.

Sebagai saran praktis, gunakan tanda kurung untuk memisahkan masing-masing kondisi agar alur program menjadi jelas.

Bitwise Operator

Operator-operator ini digunakan untuk memanipulasi bit-bit(bitwise ) dalam sebuah variabel yang sering digunakan dalam bahasa assembly. Keberadaan operator ini sangat masuk akal karena C pertama kali dirancang untuk membuat abstraksi dari assembly dan dijuluki sebagai high level assembly.

Operator-Operator yang disediakan antara lain :

&             and

      |              or

      ~             not(negasi)

      >>           geser ke kiri

      <<           geser ke kanan

      ^             xor

Operator Kondisional

Operator ini berguna untuk menguji suatu kondisi. Operator ini mempunyai bentuk :

kondisi ? ekspresi_jika_kondisi_benar_:ekspresi_jika_kondisi_salah;

yang sama jika ditulis,

if(kondisi)
      ekspresi_jika_kondisi_benar;
else
      ekspresi_jika_kondisi_salah;

contoh :

int  a,b = 20,  c = -10;
a = (b > c)  ?  b : c;

Baris perintah itu membuat nilai a menjadi 20. Operator ini biasa disebut ternary operator.