pembentuk piramida), contoh:
Masukkan angka 5 (jika diisi 5 akan membentuk piramida sbb)
Kode Program (C++)
#include <iostream>
using namespace std;
int main() {
// n: untuk menyimpan masukan
// m: counter baris, untuk output spasi pada awal baris
int n, m=1;
cout << "Masukkan sebuah angka: ";
cin >> n;
cout << "Piramida terbalik yang dapat dibentuk:" << endl;
while (n >= 0) {
for (int i=0; i <= 2*n; i++) {
i <= n ? cout << i : cout << 2*n-i;
cout << " ";
}
cout << endl;
// spasi di awal baris
for (int i=0; i < m; i++) cout << " ";
n--; m++;
}
return 0;
}
Pembahasan
Pada program di atas, dideklarasikan 2 buah variabel, yaitu [tex]\tt n[/tex] dan [tex]\tt m[/tex].
- Variabel [tex]\tt n[/tex] digunakan sebagai "counter" angka yang dicetak.
- Variabel [tex]\tt m[/tex] digunakan sebagai "counter" baris piramida yang dicetak, dan sebagai penghitung banyak spasi yang dibutuhkan di awal baris baru.
Untuk menghasilkan piramida terbalik, program di atas menggunakan looping utama [tex]\tt while[/tex]. Kondisi dari [tex]\tt while[/tex] adalah [tex]\tt n > = 0[/tex], di mana [tex]\tt n[/tex] adalah angka masukan user. Di akhir blok looping \tt while, diperlukan dekrementasi [tex]\tt n[/tex] (dengan [tex]\tt n--[/tex]) agar nilai [tex]\tt n[/tex] berkurang 1 setiap kembali ke awal blok [tex]\tt while[/tex]. Kita juga perlu inkrementasi [tex]\tt m[/tex] (dengan [tex]\tt m++[/tex]) dalam setiap eksekusi blok [tex]\tt while[/tex].
Untuk mencetak angka [tex]\tt 0\ 1\ 2\ ...\ n\ (n-1)\ (n-2)\ ...\ 0[/tex] pada setiap baris, digunakan looping [tex]\tt for[/tex], yang melakukan pencetakan angka 0 hingga [tex]\tt n[/tex], kemudian menurun hingga 0 lagi, untuk setiap baris, dengan nilai [tex]\tt n[/tex] awal, atau nilai [tex]\tt n[/tex] yang sudah berkurang pada iterasi ke-2 dan setelahnya.
Kita dapat menggunakan 2 skema [tex]\tt for[/tex] secara sekuensial, yang pertama untuk angka menaik, dan yang kedua untuk angka menurun ketika sudah mencapai nilai [tex]\tt n[/tex]. Namun pada program ini, dijadikan 1 saja, sehingga variabel perulangannya, yaitu [tex]\tt i[/tex], perlu diinkrementasi dari 0 hingga [tex]\tt 2*n[/tex]. Di dalam [tex]\tt for[/tex], terdapat "inline" [tex]\tt if[/tex], atau [tex]\tt if[/tex] satu baris, yaitu pada baris: i <= n ? cout << i : cout << 2*n-i;
Artinya, jika [tex]\tt i[/tex] kurang dari atau sama dengan [tex]\tt n[/tex], cetak [tex]\tt i[/tex], namun jika tidak (lebih dari [tex]\tt n[/tex]), cetak angka [tex]\tt 2*n-i[/tex].
Contoh Hasil Eksekusi
Dengan masukan angka 5:
Masukkan sebuah angka: 5
Piramida terbalik yang dapat dibentuk:
0 1 2 3 4 5 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 2 1 0
0 1 2 1 0
0 1 0
0
Dengan masukan angka 9:
Masukkan sebuah angka: 9
Piramida terbalik yang dapat dibentuk:
0 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 5 4 3 2 1 0
0 1 2 3 4 5 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 2 1 0
0 1 2 1 0
0 1 0
0
Dengan masukan angka 4:
Masukkan sebuah angka: 4
Piramida terbalik yang dapat dibentuk:
0 1 2 3 4 3 2 1 0
0 1 2 3 2 1 0
0 1 2 1 0
0 1 0
0