Misalkan user memasukan nilai 5, maka bentuknya adalah seperti ini:
1 2 1 2 3 2 1 2 3 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5
Bagaimana membuatnya dalam program C++?
Langkah pertama adalah meminta user memasukan bilangan untuk jumlah barisnya (N) dan ditempatkan pada variabel integer jmlBaris.
Setelah itu tetapkan nilai awal program. Kamu perlu mendefinisikan jangkauan nilainya. Jangkauan ini memiliki bentuk deret bilangan ganjil 1, 3 ,5, dan seterusnya.
Karena pola bilangannya semakin ke bawah semakin naik nilainya maka perlu digunakan variabel counter yang akan mencatat nilai seperti:
baris 1 = 1
baris 2 = 2 1 2
baris 3 = 3 2 1 2 3
baris 4 = 4 3 2 1 2 3 4
baris 5 = 5 4 3 2 1 2 3 4 5
Perhatikan juga bilangannya bahwa jika nilainya kurang dari satu, maka bilangan akan dijumlahkan lagi. Perhatikan 3 2 1 2 3, bilangan akan dikurangi dulu sampai angka 1 kemudian dijumlahkan lagi setelah angka 1. Untuk keperluan ini, kamu memerlukan variabel tipe boolean yang akan memberitahu apakah mode perhitungan diubah dari pengurangan ke penjumlahan, misalnya kita set variabel balik pada awalnya adalah false.
Untuk membentuk pola miring, maka dapat dilakukan dengan mengetahui posisi nilai sebelumnya. Misalnya posisi sebelumnya berada pada nilai 5 maka posisi penulisan angka sekarang pada posisi 5-1 = 4 dan bila posisi sebelumnya 4 maka posisi sekarang 4-1 = 3 jadi bentuknya starter - 1.
Kamu juga perlu tahu lebar piramidanya dengan mengalikan jumlah baris dengan bilangan 2. Sehingga tengah-tengah piramida tersebut dapat diketahui dengan membagi dua lebar piramida tersebut.
Berikut kode inisialisasi awal program ini:
int jangkauan = 1; int counter = 1; int starter = jmlBaris; int lebar = jmlBaris * 2; bool balik = false;
Melalui perulangan for terluar, maka kamu bisa menentukan jumlah barisnya. Berikut potongan kodenya:
for (int i = 1; i <= jmlBaris; i++) { counter = i; // instruksi selanjutnya berupa perulangan bersarang // untuk menentukan nilai per baris // ..... for // ..... for balik = false; starter--; jangkauan += 2; lebar = jmlBaris * 2; cout << "\n" << endl; }Dapat dilihat dari potongan kode di atas tiap ganti baris, beberapa variabel di inisialisasi ke nilai baru seperti mode penjumlahan diganti ke mode pengurangan melalui variabel balik = false, kemudian awal penulisan bilangan digeser ke kiri sebesar satu langkah melalui bentuk starter--, jangkauan nilai semakin besar yang misalnya dari 1 ke 3, dan dari 3 ke 5. Kemudian lebar akan diset ke bentuk awal. Kode selanjutnya adalah untuk menuliskan bilangan, spasi, dan format penulisan lainnya. Kode ini dituliskan di dalam blok perulangan di atas. Berikut kodenya:
for (int j = 1; j <= lebar; j++) { if (j == starter) { for (int k = 1; k <= jangkauan; k++) { if (counter <= 1 && !balik) balik = true; printf("%4d", counter); lebar--; if (balik) counter++; else counter--; } } else { cout << " "; } }
Perulangan pertama pada kode di atas akan menentukan lebar piramida yang bernilai 2 kali tingginya. Kemudian akan memeriksa apakah pada posisi j yakni posisi tertentu pada jangkauan lebarnya sama dengan nilai starter. Penyeleksian kondisi ini nanti akan menentukan kemiringan angka yang dituliskan sehingga membentuk gambar piramida.
Perulangan kedua digunakan untuk keperluan menuliskan angka-angka penyusun piramida dan di dalamnya terdapat penyeleksian kondisi lagi apakah nilai yang dituliskan kurang dari satu, jika benar maka nilainya dinaikkan lagi.
Jika kondisi penulisan angka tidak terpenuhi maka, program hanya akan menuliskan spasi baris.
Program ini membutuhkan kemampuan algoritma yang matang. Karena berhubungan dengan menyusun pola piramida(segitiga sama kaki) dan menuliskan pola bilangan 1; 2 1 2; 3 2 1 2 3; dst, secara vertikal.
Happy Programming :D
(C) 2011 Computer Science Solution (CSS)
Tidak ada komentar:
Posting Komentar