Bab 4: Struktur Kawalan II

Pernyataan struktur kawalan memerlukan pemahaman kepada konsep operator pengendali di dalam pelajaran yang lepas.  
Di dalam program menggunakan kawalan berjujukan dan kawalan pemilihan, pernyataan hanya dilaksanakan sekali sahaja.  Kebanyakan perisian komersil, sesuatu pernyataan (satu atau sekumpulan pernyataan) boleh diulang beberapa kali. 
Bilangan ulangan di dalam aturcara dipanggil gelung.

Terdapat 3 jenis kawalan pengulangan (gelung).

1.	pernyataan struktur while
2.	pernyataan struktur do~while
3.	pernyataan struktur for

1) Pernyataan Struktur while 

Pernyataan psedocode:

While waktu tidak menunjukkan jam 5
	beli barang yang seterusnya

Carta Aliran:

Bentuk umum: 

while (syarat) 
    badan_gelung
tamat_while 

Penerangan: 

Lakukan pernyataan di dalam badan_gelung sehingga syarat yang terdapat diantara  "(" dan ")" menghasilkan nilai "tidak benar" (ingat nilai 0 ditukar/dianggap oleh kompiler sebagai nilai boolean tidak benar - false  dan nilai selain dari 0 dianggap sebagai boolean benar - true). 
Badan_gelung boleh terdiri dari satu pernyataan atau lebih dari satu pernyataan dan ia akan diulang selama mana syarat itu masih benar.

Berikut ialah contoh program untuk melihat penggunaan asas pernyataan while. 

Contoh : 

#include <iostream.h> 
int main() 
{ 
     int nGelung = 8; 
     int nBil = 1;         // pemula(initialize) 
  
     while ( nBil <= nGelung) { 
          cout << " Gelungan " << nBil << endl;  
          nBil++;        // nBil = nBil + 1;                  
     } 
     return 0; 
} 
  
Output: 
Gelungan 1 
Gelungan 2 
Gelungan 3 
Gelungan 4 
Gelungan 5 
Gelungan 6 
Gelungan 7 
Gelungan 8 

Penerangan: 

int nGelung = 8 
- Supaya perbandingan boleh dilakukan untuk memberhentikan gelungan. 
int nBil = 1; 
- Ini adalah PEMULA. Ianya penting untuk memberitahu pengkompil dari mana kiraan akan bermula. 
Lihat  nBil++ dalam gelungan. Gelungan pertama akan berlaku apabila nBil = 1; di mana nBil dibandingkan dengan nGelung. Dalam ketika ini nBil masih lebih kecil daripada nGelung. Maka pernyataan(1) cout dan seterusnya pernyataan(2) nBil++  akan dilaksanakan. Setelah pernyataan(2) dilaksanakan buat kali pertamanya, nBil akan menjadi 2. 
Seterusnya pergerakkan program akan kembali ke gelungan semula. Tadi, nBil sudah menjadi 2. Perbandingan dilakukan lagi. Oleh kerana nBil masih kecil daripada nGelung. Pernyataan(1) dan (2) akan dilaksakan lagi. Proses ini akan berulang sehinggalah pada suatu ketika, nBil = 9. Pada ketika itu, pergerakan program seperti biasa akan cuba masuk ke gelungan semula dengan membuat perbandingan dengan nGelung. Tetapi, pada ketika ini, nBil sudah melebihi nGelung(= 8) atau tidak sama dengan nGelung. Jadi, pergerakan program akan keluar daripada gelungan dan turun ke pernyataan return 0. Tamatlah perjalanan program. 
 
Latihan:

1.	Tulis satu program yang mana ia mengira jumlah integer 1 hingga integer 10.
i.e: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

2.	Apakah output bagi program berikut:
#include <iostream.h>
int main()
{
	int y, x =1, total = 0;
while (x <= 10){
y =x * x;
cout << y << endl;
total += y;
++x;
}
cout <<”Total is “”<<total<<endl;
return 0;
}

2) Pernyataan Struktur do/while 

Perjalanan struktur do~while dan struktur while hampir sama.
Di dalam struktur while, syarat di uji pada permulaan gelungan sebelum badan_gelung dijalankan.
Struktur do/while menguji syarat selepas badan_gelung dijalankan.
Apabila pernyataan do/while berhenti, perlaksaan terus dijalankan pada pernyatan selepas kosa while.

Carta aliran:

Bentuk umum:

do 
    pernyataan 
while (syarat); 

atau

do {
      badan_gelung
      }
while (syarat);
	
Apakah beza antara keduanya ? 
Pernyataan do-while akan sentiasa di jalankan sekurang-kurangnya SEKALI kerana expresi didalam while cuma digunakan SELEPAS pernyataan dilaksanakan. 
 
Contoh :

#include <iostream.h> 
int main() 
{ 
     int nGelung = 8; 
     int nBil = 1;    // pemula 
  
     do { 
          cout << " Gelungan " << nBil << endl; 
          nBil++;         // nBil = nBil + 1; 
     } while (nBil <= nGelung); 
     return 0; 
} 

Output: 

Gelungan 1 
Gelungan 2 
Gelungan 3 
Gelungan 4 
Gelungan 5 
Gelungan 6 
Gelungan 7 

3) Pernyataan Struktur for 

Jenis gelungan yang ketiga ialah struktur  for. Struktur for ini boleh dikatakan sebagai lanjutan daripada struktur gelungan sebelum ini kerana fungsinya dan  cara berfikirnya juga boleh dikatakan  sama. Cuma cara penggunaannya yang agak berbeza. 

Carta aliran:

Bentuk umum:

for ( ungkapan_1; ungkapan_2 ; ungkapan_3) {
    badan_gelung
}

Penerangan: 

Ungkapan_1: 
-  Di sini boleh dibuat pengisytiharan dan juga nilai awal kepada pembilang secara serentak. 
cth:    for ( int i = 0; .....;......) 

Ungkapan_2 
-  adalah syarat untuk menyebabkan gelungan digerakkan selagi syarat ini benar. Sekiranya benar, badan_gelung akan dilaksanakan dan ungkapan_3 turut dilaksanakan.  Ungkapan_2 merupakan ungkapan yang mengawal gelungan.
cth:    for (....; i < 8 ; ...) 

Ungkapan_3 
- adalah operator pengisian. 
cth:    for (.....; .....; i++) 

Carta aliran jelas menunjukkan bahawa “initialization” berlaku hanya sekali dan tokokan dilaksana selepas badan_gelung dijalankan.

Di bawah ini ialah contoh program yang sepatutnya mempamerkan hasil yang sama seperti contoh yang sebelum ini:

Contoh: 
#include <iostream.h> 
int main() 
{ 
     int nGelung = 8; 
     for (int nBil = 1 ; nBil <= nGelung ; nBil++) 
      cout << "Gelung " << nBil << endl; 
  
     return 0; 
} 

Output:
 
Gelungan 1 
Gelungan 2 
Gelungan 3 
Gelungan 4 
Gelungan 5 
Gelungan 6 
Gelungan 7 
Gelungan 8 

Penerangan: 

Untuk nBil yang bermula dari 0, selagi mana (nBil <= nGelung) , lakukan kenyataan itu. Tetapi penambahan nBil adalah sebanyak 1 setiap kali gelungan dilaksanakan. 

Walaubagaimana pun, ketiga-tiga ungkapan tersebut adalah “optional”.  Sekiranya ungkapan_2 i.e syarat dikosongkan, maka syarat gelungan dianggap BENAR dan ini akan menghasilkan gelungan infiniti.

Ungkapa_3 (tokokan) boleh dikosongkan sekiranya program tidak memerlukan ia ditokok atau tokokan dibuat di dalam badan_gelung.

Latihan:

1.	Nyatakan output bagi sekmen aturcara berikut:

int saiz=8;
for (int I=0; I<saiz; I+=2)
	cout << I;
2.	Nyatakan output dari sekmen sturcara berikut:

for (int k=10; k>0; k--){
	if ((k%2) ==0)
		cout <<2*k<<””;
	else
		cout<<k<<””;
	}