Detail Cara Membuat Pola Perulangan PHP (Pola Rumah)

Sebelum kamu membuat pola rumah ini dengan menggunakan perulangan PHP, maka penting sekali agar memahami bagaimana sebuah kotak dibentuk hasil dari perulangan.

for($a=1; $a<=$ukuran; $a++){  //pf1
	for($b=1; $b<=$ukuran; $b++){  //pf2
		echo "* ";
	}
	echo "<br/>";
}

Seperti kode diatas ini, bahwa perulangan pertama yang saya namakan saja pf1 mengulang-ulang statement-statement yang ada di dalamnya. Di dalam pf1 terdapat dua statement yaitu perlangan kedua yang saya namakan saja pf2 dan statement echo "<br/>";. Pf1 mempunyai variabel pengulang yaitu a dan nilai awalnya disini saya mulai dari 1 ($a=1), batas berhenti yaitu $a<=$ukuran (diamana ukuran mempunyai nilai hasil dari inputan), dan iterasinya bertambah satu terus ($a++). Sedangkan pf2 mempunyai nilai yang sama namun dengan variabel yang berbeda yaitu b.

Pf2 mengandung satu statement yaitu echo "* ";. Jadi, jelas bahwa yang menghasilkan atau menampilkan deretan bintang-bintang (*) tersebut adalah pf2. Apabila kita tracing maka pada saat pf1 melakukan perulangan yang pertama dia akan menjalankan pf1 (dimana pf1 akan menghasilkan deretan bintang kesamping berjumlah sebanyak nilai dari variabel ukuran), lalu menjalankan echo "<br/>" (dimana statement merupakan bagian yang membuat deretan bintang tersebut menjadi turun kebawah/membuat baris baru). Setelah itu maka perulangan pertama dari pf1 selesai, dan pf1 kembali melakukan perulangan lagi yang kedua dan begitu seterusnya sampai menemui kondisi berhenti yaitu $a<=$ukuran. Apabila secara singkat terilustrasikan seperti berikut:

  • pf1 (perulangan ke-1, $a=1) –> pf2 (menghasilkan 10 bintang berderet horizontal)–> echo "<br/>"<;/code> (membuat baris baru)
  • pf1 (perulangan ke-2, $a=2) –> pf2 (menghasilkan 10 bintang berderet horizontal)–> echo "<br/>"; (membuat baris baru)
  • pf1 (perulangan ke-3, $a=3) –> pf2 (menghasilkan 10 bintang berderet horizontal)–> echo "<br/>"; (membuat baris baru)
  • dan seterusnya sampai $a=$ukuran.

Okay. Ini saatnya kita bermain serunya menyortir setiap bintang yang muncul 😀 Apasii wkwk. Kenapa menyortir? Karena saya membayangkannya seperti itu apabila dilihat dari kronologi atau tracing pembuatan kotak sperti yang saya jelaskan di atas.

Catatan: Biasanya orang agar mudah dipahami maka pf1 merupakan perulangan yang bertugas membuat baris, pf2 bertugas untuk membuat kolom. Jadi dengan begitu berati bahwa variabel $a sama dengan baris, dan $b sama dengan kolom.

Bagaimana mencetak kolom ke-1 sampai 5 berupa simbol min (-) dan kolom ke-5 sampai 10 berupa bintang (*) dengan ketentuan bahwa ukurannya adalah 10 ($ukuran=10)?

$ukuran=10;
for($a=1; $a<=$ukuran; $a++){
	for($b=1; $b<=$ukuran; $b++){ if($b>=6){
			echo "* ";
		} else{
			echo "- ";
		}
	}
	echo "<br/>";
}

Dari kode di atas apabila diceritakan bahwa ketika pf2 melakukan perluangan maka berikut kronologinya:

  • perulangan ke-1 ($b==1)–> apakah $b<=$tengah? jika ya cetak simbol min (-), tidak maka cetak bintang (*) –> dicetak (-).
  • perulangan ke-2 ($b==2)–> apakah $b<=$tengah? jika ya cetak simbol min (-), tidak maka cetak bintang (*) –> dicetak (-).
  • dst sampai ($b==5)
  • perulangan ke-6 ($==6)–> apakah $b<=$tengah? jika ya cetak simbol min (-), tidak maka cetak bintang (*) –> dicetak (*).
  • dst sampai ($b==10) –> ($b==$ukuran)

Berikut hasilnya:

g1

Contoh lain, bagaimana mencetak bintang pada kolom ke-1 tetapi hanya pada baris ke-5 sampai terakhir? ($ukuran=10)

$ukuran=10;
for($a=1; $a<=$ukuran; $a++){
	for($b=1; $b<=$ukuran; $b++){ if($b==1&&$a>=6){
			echo "* ";
		} else{
			echo "- ";
		}
	}
	echo "<br/>";
}

Dari kode tersebut bahwa ($b==1 && $a>=6) akan menyortir nilai kolom yang sama dengan 1 ($b==1) dan baris yang lebih dari 6 ($a>=6).

g2
Jadi maksud saya peran if adalah sebagai penyortir. Yang tersortir akan ditampilkan sesuai kehendak sedangkan yang tidak ditampilkan atau dicetak juga sebenarnya walaupun dengan spasi echo ”  “.

Penting juga untuk pahami, bagaimana mencetak bintang (*) seluruh kolom hanya pada baris ke-1 dan terakhir? ($ukuran=10)

$ukuran=10;
for($a=1; $a<=$ukuran; $a++){
	for($b=1; $b<=$ukuran; $b++){
		if(($a==1) || ($a==$ukuran)){
			echo "* ";
		} else{
			echo "<a style='color:red'>* </a>";
		}
	}
	echo "<br/>";
}

Hasil cetakannya:
g3

Dari kode tersebut maka (($a==1) || (Sa==$ukuran)) akan menyortir kolom pada baris ke-1 atau (||) terakhir $b==$ukuran. Ingat logika true false! Maka kedua-duanya baris pertama dan terakhir akan menampilkan simbol bintang (*).

Untuk membuat suatu pola dengan perulangan maka memahami kronologi atau tracing dari terbuatnya kotak adalah corenya. Dikarenakan yang mencetak atau memunculkan bintang (*) ke browser adalah pf2, maka penyortir digunakan disini untuk bisa menyortir (yang nantinya akan membuat suatu pola atau bentuk). Dengan kata lain bahwa statement echo "<br/>" pada perulangan yang menghasilkan kotak tersebut di modifikasi sehingga bintang-binatang tersebut ada yang ditampilkan dan ada yang tidak ditampilkan atau diganti dengan karakter lain agar bisa terlihat beda.

Oleh karena itu maka untuk membuat pola rumah berikut yang disyaratkan (bisa dimodif):

  • nilai $ukuran dan $warna hasil dari inputan
  • nilai variabel ukuran ganjil
  • nilai awal variabel kolom dan baris dari 1
  • kondisi mengulang pada $a<=$ukuran.
  • $tengah untuk mengambil nilai tengah. Ukuran 15 maka tengahnya 7 ($tengah = ($ukuran/2) + 0.5)
  • untuk membuat inputan dan nilainya masuk ke variabel $ukuran dan $warna maka gunakan form dan gunakan method post saja.

Dan berikut beberapa penyortirnya:

  • untuk mencetak kolom ganjil pada baris paling tengah: ($a==$tengah && $b%2==1)
  • untuk mencetak kolom ke-1 dan terakhir pada baris-baris lebih dari sama dengan baris paling tengah: (($b==1 || $b==$ukuran) && $a>=$tengah)
  • untuk mencetak kolom ganjil pada baris paling akhir: ($a==$ukuran && $b%2==1)
  • untuk mencetak kolom dari tengah ke samping kanan sudut tengah baris: ($b==$tengah+($a-1))
  • untuk mencetak kolom dari tengah ke samping kiri sudut tengah baris: ($b==$tengah-($a-1))

download file lengkap disini

Silakan coba…

You may also like...

1 Response

  1. Iqbal says:

    Artikel nya menarik lengkap dengan penjelasan. Saya mencoba explore lebih jauh tentang perulangan bintang tersebut, sehingga saya menemukan kendala disaat saya ingin membentuk bintang seperti berikut: $x=8
    *- – – – – – –
    – – – – – – -**
    ***- – – – –
    – – – – – -****
    *****- – –
    – – -******
    *******-
    ********
    kasus nya seperti itu, bagaimana logikanya menggunakan perulangan for? ketika ada urutan genap di baris kanan, sehingga membentu pola tersebut. Sebelumnya terima kasih banyak

Leave a Reply

Your email address will not be published. Required fields are marked *