Tuesday, May 13, 2014

Tutorial Pemrograman C/C++: Sejuta Cara Membuat Program Tampilan Diamond / Berlian Dari Deret Bilangan Ganjil

diamond

“diamond.”
Berlian beneran pastinya mahal, sebagai programmer C/C++ pemula, kita bisa membuat sendiri program yang bisa menampilkan bentuk diamond atau berlian seperti gambar di samping. Jadi, kalau rekan atau sahabat Anda sedang belajar pemrograman C/C++ atau sedang terbebani tugas pemrograman semacam ini, Anda bisa memberinya diamond (baca: tulisan) ini. :D
Pada tulisan ini kita akan membuat beberapa program untuk menghasilkan tampilan berlian dengan teknik yang berbeda-beda. Untuk masing-masing program akan dilengkapi dengan sedikit penjelasan dengan harapan agar dapat menjadi bahan belajar yang bermanfaat.
Nah, kita mulai dengan program yang pertama. Program pertama ini menggunakan bahasa C dengan perulangan for sebagai senjata utamanya. Berikut ini adalah kode programnya.

Program Pertama (Bahasa C)

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
#include
int main()
{
    int i, n, x, odd[50];
    const char spasi = 177;
    const char diamond = '*';
    printf("Masukkan nilai n = ");
    scanf("%d", &n);
     
    for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
     
    for (i=0; i
    {
        for (x=0; xprintf("%c", spasi);
        for (x=0; xprintf("%c", diamond);
        for (x=0; xprintf("%c", spasi);
        printf("\n");
    }
     
    for (i=n-2; i>=0; i--)
    {
        for (x=0; xprintf("%c", spasi);
        for (x=0; xprintf("%c", diamond);
        for (x=0; xprintf("%c", spasi);
        printf("\n");
    }
    return 0;
}

Penjelasan

Variabel in dan x adalah variabel-variabel yang digunakan untuk indeks perulangan for. Sedangkan variabel array odd[50] digunakan untuk menyimpan nilai deret bilangan ganjil.
Perulangan for (i=1; i<=n; i++) odd[i-1] = 2*i-1; akan menghasilkan deret bilangan ganjil sebanyak n dan disimpan pada variabel array odd[]. Perhatikan bahwa jumlah karakter bintang yang dicetak membentuk diamond adalah nilai deret bilangan ganjil. Untuk nilai n=11, maka komposisi variabel array odd[] adalah sebagai berikut:
Index0123456789101149
odd13579111315171921000
Setelah deret bilangan ganjil selesai dihitung, selanjutnya menampilkan bentuk diamond dengan background seperti screenshot di atas.
1
2
3
4
5
6
7
for (i=0; i
{
    for (x=0; xprintf("%c", spasi);
    for (x=0; xprintf("%c", diamond);
    for (x=0; xprintf("%c", spasi);
    printf("\n");
}
Perulangan i di atas memiliki 3 tugas yakni:
1.for (x=0; x 
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kiri diamond.
2.for (x=0; x 
Menampilkan karakter asterisk yang akan membentuk diamond deret bilangan ganjil.
3.for (x=0; x 
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kanan diamond.
Karena jumlah karakter yang ditampilkan pada tiap barisnya berbeda, maka perulangan xPerulangan ini akan membentuk segitiga atau separo diamond seperti ditunjukkan olehscreenshot berikut ini.
image
Perulangan berikutnya berfungsi untuk menampilkan segitiga atau separo diamond bagian bawah.
1
2
3
4
5
6
7
for (i=n-2; i>=0; i--)
{
    for (x=0; xprintf("%c", spasi);
    for (x=0; xprintf("%c", diamond);
    for (x=0; xprintf("%c", spasi);
    printf("\n");
}
Perulangan i yang kedua ini diawali dengan nilai (n-2) hingga 0 yakni mewakili indeks dari bilangan ganjil terbesar kedua hingga bilangan ganjil pertama atau terkecil.
Sama seperti halnya perulangan i yang pertama, perulangan i yang kedua ini memiliki 3 fungsi yakni:
1.for (x=0; x 
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kiri diamond.
2.for (x=0; x 
Menampilkan karakter asterisk yang akan membentuk diamond deret bilangan ganjil.
3.for (x=0; x 
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kanan diamond.
Perulangan i kedua akan membentuk segitiga bawah atau separo diamond bagian bawah seperti ditunjukkan oleh screenshot berikut ini.
image
Jika kedua perulangan digabungkan maka akan menghasilkan tampilan diamond sepenuhnya seperti screenshot berikut ini.
image

Program Kedua (C++)

Nah, sebagai perbandingan kita akan membuat program dengan hasil tampilan yang sama dengan bahasa C++. Mari kita simak kode program C++ 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
26
27
28
29
30
31
32
33
#include
#include
 
using namespace std;
 
int main()
{
    int i, n, odd[50];
    const char spasi = 177;
    const char diamond = '*';
 
    cout << "C++ - Masukkan nilai n = ";
    cin >> n;
     
    for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
     
    for (i=0; i
    {
        cout << setfill(spasi) << setw(n-i) << "";
        cout << setfill(diamond) << setw(odd[i]) << "";
        cout << setfill(spasi) << setw(n-i) << "";
        cout << endl;
    }
    for (i=n-2; i>=0; i--)
    {
        cout << setfill(spasi) << setw(n-i) << "";
        cout << setfill(diamond) << setw(odd[i]) << "";
        cout << setfill(spasi) << setw(n-i) << "";
        cout << endl;
    }
     
    return 0;
}
Pada dasarnya kode program ini sama dengan kode program bahasa C sebelumnya. Namun demikian, program C++ tidak menggunakan perulangan untuk mencetak karakter per karakter. C++ memiliki fasilitas untuk mengatur (memanipulasi) output yang berupa fungsi-fungsi yang terdapat dalam header iomanip.
Dengan kombinasi setfill(karakter) dan setw(jumlah), maka kita dapat mencetak karakter tertentu (setfill) sebanyak yang kita inginkan (setw). Berikut adalah tampilan yang dihasilkan oleh kode program C++ di atas.
image
Wow, lumayan bukan? Silakan Anda mencoba masing-masing kode program dan semoga bermanfaat. :D

Program Ketiga (Bahasa C/C++)

Program ketiga atau yang terakhir akan kita buat dengan teknik yang berbeda dari kedua program sebelumnya dan kita akan menggunakan fungsi-fungsi khas bahasa C dan C++. Mari kita simak kode program ketiga 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
26
27
28
29
30
31
32
33
34
35
36
37
38
#include
#include
#include
 
using namespace std;
 
int main()
{
    int i, n, odd[50];
    char *s[50];
    const char spasi = 177;
    const char diamond = '*';
 
    cout << "C/C++ - Masukkan nilai n = ";
    cin >> n;
     
    for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
     
    for (i=0; i
    {
        s[i] = new char[odd[n-1]+3];
        memset(s[i], spasi, odd[n-1]+2);
        memset(s[i]+odd[n-1]+3, '\0', 1);
        memset(s[i]+n-i, diamond, odd[i]);
 
        s[2*n-i-2] = new char[odd[n-1]+3];
        memset(s[2*n-i-2], spasi, odd[n-1]+2);
        memset(s[2*n-i-2]+odd[n-1]+3, '\0', 1);
        memset(s[2*n-i-2]+n-i, diamond, odd[i]);   
    }
     
    for (i=0; i<2 code="" i="" n-1="">
    {
        cout << s[i] << endl ;
        delete s[i];
    }
    return 0;
}
Jika program pertama dan kedua menggunakan perulangan x dan setfill()-setw() untuk mencetak karakter-karakter untuk membentuk diamond, maka program ketiga ini mencetak diamond di memori (buffer) sebelum ditampilkan di layar (console).
Untuk sekedar variasi agar program terkesan menggunakan fungsi khas bahasa C dan C++, maka fungsi calloc() yang khas bahasa C diganti dengan new (C++) dan oleh karenanya fungsi free() diganti dengan delete. Dan tentunya fungsi printf() kita ganti dengan cout.
Nah, berikut adalah hasil tampilan dari program ketiga.
image

Penjelasan

Untuk penjelasan program ketiga ini silakan Anda membaca tulisan berikut ini:
segitiga
Link ke tulisan yang dimaksud:
Btw, mohon maaf jika judul tulisan di atas terkesan berlebihan karena ternyata tulisan ini hanya menampilkan 3 program diamond dan bukannya sejuta.

0 comments:

Post a Comment

Followers

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

Back to TOP