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.

#include <stdio.h>
 
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.

#include <stdio.h>
 
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.

#include <stdio.h>
 
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.

#include <stdio.h>
 
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.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
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<n; 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 sususan s[i] untuk n=8 adalah sebagai berikut:

index 0 1 2 3 4 5 6 7 8
s[i] null null null null null null null null null

Perintah selanjutnya memset(s[i], ‘0’, n); akan mengisi nilai s[i] dengan karakter ‘0’ sehingga susunan s[i] sekarang menjadi:

index 0 1 2 3 4 5 6 7 8
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

index 0 1 2 3 4 5 6 7 8
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

index 0 1 2 3 4 5 6 7 8
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

index 0 1 2 3 4 5 6 7 8
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<n; j++).

Pada prakteknya, penulisan kode program yang rumit (less-readable) dipersilakan untuk kebutuhan pribadi, tapi sebaiknya tidak dipraktekkan pada kerja tim.😀

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 menjadi Bahasa C, Satu Bahasa Lima Cara. Tapi sangat tidak menarik, bukan?😀

Semoga bermanfaat.

😀

2 comments

  1. Ricky · Februari 4, 2014

    Multipurpose programming language memang punya banyak cara untuk menyelesaikan masalah. Terlebih lagi dengan C, bahasa middleware yang fleksibel. Bisa menguasai bahasa C memang menyenangkan, tapi belajarnya juga butuh kesabaran😛

    • Chandra MDE · Februari 4, 2014

      Thanks atas kunjungan dan komentarnya. Salam sukses!😀

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s