Pola Bintang

Kali ini, kita akan membuat program untuk menampilkan segitiga dalam segitiga dengan karakter asterisk (*). Kalian bisa mengganti “karakter” lain jika kalian mau.

Sebelum membahas tentang “pola bintang", saya akan membahas sedikit tentang penerapan perulangan dalam C++. Perhatikan kode program di bawah ini!

#include <stdio.h>
#include <math.h>

int polasegitiga(int n){
     for(int i=1;i<=n;i++){
         for(int j=1;j<=n;j++){
             printf("*");
         }
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*****
*****
*****
*****
*****

Program di atas melakukan perulangan dengan syarat “i<=n”, dengan nilai awal “i=1”. Perulangan tersebut mempengaruhi jumlah baris karena terdapat “printf("\n");”. Kalian bisa mengubah jumlah baris yang ditampilkan dengan mengubah nilai argumen untuk parameter n.

Di dalam perulangan juga terdapat perulangan lainnya dengan syarat “j<=n”, dan nilai awal “j=1”. Perulangan tersebut mencetak karakter asterisk(*) sebanyak n. Perulangan tersebut diulang oleh perulangan terluar sehingga menghasilkan tampilan berbentuk segi empat.

Pola Segitiga

Sekarang kita akan sedikit mengubah program di bagian perulangan “kedua”. Perhatikan program di bawah ini.

#include <stdio.h>

int polasegitiga(int n){
     for(int i=1;i<=n;i++){
         for(int j=1;j<=i;j++){
             printf("*");
         }
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*
**
***
****
*****

Kode program tersebut hanya berbeda satu baris dengan kode program sebelumnya. Syarat perulangan kedua yang sebelumnya “j<=n” diubah menjadi “j<=i”. Karena nilai “variabel i” bertambah satu di setiap perulangan pertama maka jumlah asterisk yang tercetak di tiap baris berubah sesuai nilai variabel i, sehingga terbentuk tampilan seperti segitiga.

Selain menggunakan increment(++) untuk menghasilkan segitiga seperti di atas, kalian juga bisa menggunakan decrement (--) pada loop terluar.

#include <stdio.h>

int polasegitiga(int n){
     for(int i=n;i>=1;i--){
         for(int j=1;j<=i;j++){
             printf("*");
         }
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*****
****
***
**
*

Kebalikannya?

Kebalikan dari 2 segitiga sebelumya bisa dibuat dengan pola segiempat yang diberi if agar menampilkan spasi di satu sisi dan bintang di sisi lainnya.

#include <stdio.h>

int polasegitiga(int n){
    for(int i=1;i<=n;i++){
        for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
        }
        printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
    *
   **
  ***
 ****
*****
Kalau kalian mengubah increment menjadi decrement untuk loop terluar, kalian bisa mendapatkan kebalikan dari pola di atas.
#include <stdio.h>

int polasegitiga(int n){
    for(int i=n;i>=1;i--){
        for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
        }
        printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*****
 ****
  ***
   **
    *

Pola Segitiga sama kaki

Pola yang berbeda loop terluarnya seperti pasangan contoh di atas bisa dengan mudah digabungkan. Itu juga berlaku untuk pola yang hanya berbeda loop bagian dalamnya, walaupun caranya sedikit berbeda. Contoh penggabungan pola-pola di atas misalnya untuk membuat pola segitiga sama kaki.

#include <stdio.h>

int polasegitiga(int n){
     for(int i=1;i<=n;i++){
         for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         for(int j=1;j<i;j++){
             printf("*");
         }
         
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
    *
   ***
  *****
 *******
*********

Pola seperti di atas hanya penggabungan 2 pola yang loop luarnya sama. Segitiga yang menggunakan spasi didahulukan untuk membentuk pola tersebut. Loop bagian dalam salah satunya diubah tanda perbandingannya dari <= menjadi <, atau dari >= menjadi >. 

Kalian seharusnya bisa menebak pola bintang mana yg digabungkan. Dua pola dasar lain bisa membentuk pola seitiga yang jadi kebalikan dari pola di atas.

#include <stdio.h>

int polasegitiga(int n){
     for(int i=n;i>=1;i--){
         for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         for(int j=1;j<i;j++){
             printf("*");
         }
         
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*********
 *******
  *****
   ***
    *

Walaupun saya bilang "pola bintang lainnya, kenyataannya yg saya ubah hanya loop luarnya. Kalau menggabungkan 2 pola di atas dengan sedikit perubahan pada loop terluar, kalian akan mendapatkan pola diamond atau belah ketupat.

Lubang Segitiga

Selain pola di atas, kalian bisa membuat pola seperti di bawah ini.
#include <stdio.h>

int polasegitiga(int n){
     for(int i=1;i<=n;i++){
         for(int j=1;j<n;j++){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*       *
**     **
***   ***
**** ****
*********
Kebalikannya?
#include <stdio.h>

int polasegitiga(int n){
     for(int i=n;i>=1;i--){
         for(int j=1;j<n;j++){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         for(int j=n;j>=1;j--){
            if(j<=i)printf("*");
            else printf(" ");
         }
         
         printf("\n");
     }

     return 0;
}

int main(){
     polasegitiga(5);
     return 0;
}
Output :
*********
**** ****
***   ***
**     **
*       *