Tuesday, May 13, 2014

Tutorial Pemrograman C/C++: Bahasa C, Satu Bahasa Sejuta Cara


12233
Jika melihat tampilan screenshot di samping ini, kira-kira bagaimanakah programnya?
Terus-terang bingung juga menentukan judul yang cocok untuk postingan kali ini. Kelamaan mikir judul, akhirnya saya putuskan untuk memilih judul seperti di atas – Satu Bahasa Sejuta Cara. Memang agak berlebihan kesannya, tapi kira-kira begitulah kesan saya terhadap bahasa pemrograman C. Dengan bahasa C kita bisa menyelesaikan permasalahan pemrograman dengan banyak cara. Dengan C/C++ programmer bebas berekspresi dan membuat program sesuai dengan gayanya. Namun demikian bahasa C juga termasuk bahasa pemrograman yang sulit dikuasai. Jika tidak berhati-hati, programmer dapat dengan mudah membuat kesalahan atau bug tanpa disadari.
Dengan dikembangkannya bahasa C++, maka progammer C bisa menambah kemampuannya dalam menangani program berskala besar dan kompleks. Dan karena pasar C++ saat ini lebih tinggi dibanding C, maka memang sebaiknya seorang programmer menguasai bahasa C++ jika ingin terjun di dunia pemrograman C/C++.
Btw, saya adalah pengguna C. Saya lebih banyak menggunakan C daripada C++. Oleh karenanya, pada postingan ini semua program yang saya berikan menggunakan bahasa C. Namun demikian, karena C adalah subset dari C++, maka program-program yang saya berikan di sini juga valid untuk kompiler C++.
Baiklah, kita akan langsung membuat program untuk membuat tampilan seperti screenshot di atas.

Program I

Pada program pertama ini, kita akan menggunakan cara yang sederhana.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
  
int main()
{
    int i, j, n;
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=i; j++) printf("%3d", i);
        for (j=1; j<=n-i; j++) printf("%3d", 0);
        printf("\n\n");
    }
    return 0;
}

Program II

Sedikit modifikasi dari Program I dengan mengganti perulangan for dengan while.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include
  
int main()
{
    int i, j;
    int n;
  
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
  
    i = 1;
    while (i<=n)
    {
        for (j=1; j<=i; j++) printf("%3d", i);
        for (j=1; j<=n-i; j++) printf("%3d", 0);
        printf("\n\n");
        i++;
    }
    return 0;
}

Program III

Masih menggunakan perulangan for dengan menambahkan pengkondisi if.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include
  
int main()
{
    int i, j;
    int n;
  
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
  
    i = 1;
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++)
            if (j<=i)
                printf("%3d", i);
            else
                printf("%3d", 0);
        printf("\n\n");
    }
    return 0;
}

Program IV

Tidak ada salahnya juga menggunakan variabel array seperti program berikut ini.
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
#include
  
int main()
{
    int i, j, n;
    int mat[11][11];
      
    for (i=1; i<=10; i++)
        for (j=1; j<=10; j++)
            mat[i][j] = 0;
          
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
      
    for (i=1; i<=n; i++)
        for (j=1; j<=i; j++) mat[i][j] = i;
  
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++)
            printf("%3d", mat[i][j]);
        printf("\n\n");
    }
    return 0;
}

Program V

Dan tidak ada larangan untuk membuat program yang sedikit rumit untuk menyelesaikan masalah yang mudah seperti program berikut ini.
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
#include
#include
#include
  
int main()
{
    int i, j, n;
    char *s[25];
      
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
      
    if (n<1 n="">9) exit(1);
      
    for (i=0; i
    {
        s[i] = (char *)calloc(n+1, sizeof(char));
        memset(s[i], '0', n);
        memset(s[i], '1'+i, i+1);
        for (j=0; s[i][j]; j++) printf("%3c", s[i][j]);
        printf("\n\n");
        free(s[i]);
    }
    return 0;
}
Untuk Program V ini akan saya berikan sedikit penjelesan mengenai bagaimana proses kerja programnya.
Variabel i dan j adalah variabel untuk index perulangan, sedangkan variabel n adalah variabel untuk menampung masukan nilai dari user. Variabel s adalah array pointer sebanyak 10. Cukup sepuluh karena kita akan membatasi masukan user tidak boleh lebih dari 9. Untuk membatasi masukan digunakan perintah if (n<1 n="">9) exit(1); Program akan exit jika user memasukkan nilai kurang-dari 1 atau lebih-dari 9. Jadi user harus memasukkan nilai bilangan bulat antara 1-9.
Pada perulangan for, perintah s[i] = (char *) calloc(n+1, sizeof(char)); akan mengalokasikan memori sebanyak n+1 dengan tipe char. Setelah perintah ini, maka sususans[i] untuk n=8 adalah sebagai berikut:
index012345678
s[i]nullnullnullnullnullnullnullnullnull
Perintah selanjutnya memset(s[i], ’0′, n); akan mengisi nilai s[i] dengan karakter ’0′sehingga susunan s[i] sekarang menjadi:
index012345678
s[i]‘0’‘0’‘0’‘0’‘0’‘0’‘0’‘0’null
Sekarang s telah menjadi null-terminated string bernilai “00000000”.
Perintah selanjutnya, yakni memset(s[i], ‘1’+i, i+1); akan mengisi s[i] dengan karakter ‘1+i sebanyak i+1. Untuk i=0, maka karakter yang diisikan adalah ‘1’ sebanyak 1 karakter. Jadi untuk i=0, maka susunan s[0] adalah
index012345678
s[0]‘1’‘0’‘0’‘0’‘0’‘0’‘0’‘0’null
Untuk i=1, maka karakter yang diisikan adalah ‘2’ sebanyak 2 karakter, sehingga susunan karakter s[1] menjadi
index012345678
s[1]‘2’‘2’‘0’‘0’‘0’‘0’‘0’‘0’null
Dan seterusnya untuk s[2] hingga s[7] sehingga susunan karakter s[0]-s[7] menjadi
index012345678
s[0]‘1’‘0’‘0’‘0’‘0’‘0’‘0’‘0’null
s[1]‘2’‘2’‘0’‘0’‘0’‘0’‘0’‘0’null
s[2]‘3’‘3’‘3’‘0’‘0’‘0’‘0’‘0’null
s[3]‘4’‘4’‘4’‘4’‘0’‘0’‘0’‘0’null
s[4]‘5’‘5’‘5’‘5’‘5’‘0’‘0’‘0’null
s[5]‘6’‘6’‘6’‘6’‘6’‘6’‘0’‘0’null
s[6]‘7’‘7’‘7’‘7’‘7’‘7’‘7’‘0’null
s[7]‘8’‘8’‘8’‘8’‘8’‘8’‘8’‘8’null
Selanjutnya, program akan membuat tampilan seperti screenshot di atas dengan menggunakan perintah for (j=0; s[i][j]; j++) printf("%3c", s[i][j]); dan printf(“\n\n”);
Perulangan j dimulai dari 0 hingga s[i][j] dengan penambahan j=j+1 pada setiap perulangan. Jika kita perhatikan, kondisi perulangan for j hanya ditulis s[i][j] tanpa operator pembanding.
Bagaimanakah kondisi s[i][j] yang tanpa operator pembanding seperti ==<, atau >dapat menghentikan perulangan for j?
Pada bahasa C, nilai logika FALSE direpresentasikan sebagai 0 (nol) dan selain nol akan dinyatakan sebagai logika TRUE. Jadi perulangan for j yang dimulai dari 0 dan akan terus diulang selama nilai s[i][j] tidak-sama-dengan nol. Inilah mengapa kita mengalokasikan sebanyak n+1 dan menginisialisasi setiap array-of-char dengan 0 (null).
Untuk lebih mudahnya, perulangan for j dapat ditulis menjadi for (j=0; s[i][j]!=0; j++) atau lebih mudah lagi menjadi for (j=0; j.
Pada prakteknya, penulisan kode program yang rumit (less-readable) dipersilakan untuk kebutuhan pribadi, tapi sebaiknya tidak dipraktekkan pada kerja tim. :D
Jadi perulangan for j akan mencetak per karakter dari string s[i] dengan format “%3c” untuk memberikan jarak pada masing-masing karakter. Sedangkan printf(“\n\n”); berfungsi untuk memberi jarak baris pada masing-masing string.
Nah, saya rasa demikian penjelasan singkat untuk Program V. Dan saya rasa lima buah program cukup untuk mewakili judul di atas. Mungkin judul di atas perlu diganti menjadiBahasa C, Satu Bahasa Lima Cara.

0 comments:

Post a Comment

Followers

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified


  © Blogger template 'A Click Apart' by Ourblogtemplates.com 2008

Back to TOP