Pe
m am puannyh dan bosa m pilkan kat m aham i fu an. Di dalam
an at au sam m elakukan pai t erdap ant u dalam ebih j elasn t a “Sa ya t m pai kondi n perint ah-at kondisi
ka seorang
1.c nst ruksi be ulangan da gan t ercapa
dalam seb enghent ik an
ogram . erulang k al
pat dilakuk ai. Pengulan kt ur pengu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
Program 6.1
Nama File : Lat-6.1.cpp
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
cout<<"Saya tidak akan bolos lagi!"<<endl; cout<<"Saya tidak akan bolos lagi!"<<endl; cout<<"Saya tidak akan bolos lagi!"<<endl; cout<<"Saya tidak akan bolos lagi!"<<endl; cout<<"Saya tidak akan bolos lagi!"<<endl; system("PAUSE");
return EXIT_SUCCESS; }
Mungk in unt uk k asus sepert i ini m asih bisa diselesaikan dengan pem ecahan di at as. Tapi apabila kat a t ersebut harus dit am pilk an sebanyak 100 kali m aka pem ecahan di at as t idak efisien lagi. St rukt ur pengulangan dapat m em ecahkan kasus di at as dengan efisien.
Struktur Pengulangan
St rukt ur pengulangan secara um um t erdiri at as dua bagian, yait u: 1. Kondisi pengulangan
Ek spresi boolean yang harus dipenuhi unt uk m elaksanakan pengulangan. Kondisi ini ada yang diny at ak an secara eksplisit oleh program m er at au dikelola sendiri oleh kom put er ( im plisit ) .
2. Badan pengulangan
Bagian algorit m a yang diulang. 3. I nisialisasi
4. Term inasi
Aksi yang dilakukan set elah pengulangan selesai dilaksanakan.
I nisialisasi dan t erm inasi t idak harus selalu ada. Tapi kebanyakan kasus pengulangan m em erluk an st rukt ur ini. Secara um um bent uk st rukt ur pengulangan adalah sebagai berikut :
< in isia lisa si>
Aw a l pe n gula n ga n
Ba da n pe n gu la n ga n
Ak h ir pe n gula nga n
< t e r m in a si>
Di dalam pem rogram an C dan C+ + ada 4 bent uk pengulangan, yait u: 1. For
2. While 3. Do while 4. Label.
Struktur Pengulangan
for
St rukt ur pengulangan for digunakan unt uk m enghasilkan pengulangan sej um lah yang dispesifikasikan ( sudah diket ahui banyakny a) . St rukt ur for m em punyai m inim al pengulangan sebanyak sat u k ali art iny a m inim al dalam pengulanganny a, badan pengulangan dieksek usi sebany ak sat u kali. St rukt ur ini paling bany ak digunakan unt uk kasus pengulangan yang berurut dan sudah diket ahui kondisi akhir pengulangannya. Unt uk bisa m enggunakan st rukt ur ini, dibut uhk an sebuah v ariabel sebagai indek sny a.
Bent uk um um pengulangan for adalah sebagai berikut :
for ( in isia lisa si cou n t e r ;k ondisi pe ngu la n ga n;st a t e m e nt )
{
pe r n ya t a a n ;
Ket erangan:
1. I nisialisasi count er
Ber bent uk sebuah variabel yang diinisialisasi dengan nilai k ondisi aw al pengulangan. Sebagai cont oh: i= 1; .
2. Kondisi pengulangan
Bagian ini berisi k ondisi y ang m enggam barkan akhir dari pengulangan for ini. Sebagai cont oh: i< = 5;
3. St at em ent
Biasanya diisi dengan operasi perhit ungan increm ent dan decrem ent dari var iabel yang disebut kan di bagian inisialisasi count er. Apabila bagian ini dilewat kan m aka pengulangan ini t idak akan berhent i ( kecuali apabila di pernyat aan t erdapat st at em ent increm ent at au decrem ent dari variabel t ersebut ) .
Ada dua j enis pengulangan for, yait u: 1. Ascending ( sifat nya m enaik)
Bent uk um um :
for ( va r ia be l= n ila i_ a w a l;k ondisi;va r ia be l+ + )
{
pe r n ya t a a n ;
}
2. Descending ( sifat ny a m enurun) Bent uk um um :
for ( va r ia be l= n ila i_ a k h ir ;k on disi;va r ia be l- - )
{
pe r n ya t a a n ;
}
1
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
22 23 24 25 26 27
cout<<i<<endl; }
cout<<endl;
system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.1 Hasil eksekusi program Lat 6.2
Cat at an Unt uk for ascending m aka inisialisasi count er var iabelnya diisi dengan bat as bawah pengulangan. Sebaliknya unt uk for descending, inisialisasi count er variabelnya diisi dengan bat as at as pengulangannya.
Salah sat u pengaplikasian penggunaan for adalah unt uk program penj um lahan deret . Sint aksnya sebagai berikut :
1 2 3 4 5 6 7 8 9
/*
Program 6.3
Nama File : Lat-6.3.c
Programmer : Adam Mukharil Bachtiar, S.Kom. */
11
printf("Masukkan bilangan : ");scanf("%i",&j); printf("\nJumlah deret = ");
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int i,j,jumlah; jumlah=0;
Hasil eksekusi:
Gam bar 6.2 Hasil eksekusi program Lat 6.3
Struktur Pengulangan
while
St rukt ur pengulangan w hile akan m em eriksa kondisi pengulangan si aw al blok st rukt ur. Badan pengulangan hanya akan dilakukan apabila kondisi pengulangan bernilai t rue ( benar) . Oleh sebab it u, pengulangan w hile m em punyai m inim al pengulangan sebanyak nol kali, art inya apabila kondisi pengulangan ber nilai false ( salah) ket ika per t am a kali eksekusi blok m ak a badan pengulangan t idak akan dieksekusi.
Bent uk um um dari pengulangan w hile adalah sebagai berikut :
w h ile ( k on disi)
{
pe r n ya t a a n ;
Unt uk lebih j elasny a buat lah program di bawah ini:
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int baris,kolom;
printf("Masukkan jumlah baris : ");scanf("%i",&baris); while(baris>=1)
{
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream> #include <iomanip>
using namespace std;
int main(int argc, char *argv[]) {
int baris,kolom;
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
while(baris>=1) {
kolom=1;
while(kolom<=baris) {
cout<<setw(2)<<baris*kolom<<" "; kolom++;
}
cout<<endl; baris--; }
cout<<endl; system("PAUSE");
return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.3 Hasil eksekusi progr am Lat 6.4
Salah sat u pengaplikasian pengulangan while adalah unt uk m enghit ung rat a- rat a sam pai kondisi yang t idak diinput k an di aw al ( cont ohny a sam pai nilai m asih m em enuhi ket ent uan um um yait u ant ara 0 sam pai 100) . Sint aksnya adalah sebagai berikut :
1 2 3 4 5
/*
Program 6.5
Nama File : Lat-6.5.c
7
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int jml_data;
float nilai,rata2,jml_nilai; jml_data=0;
jml_nilai=0;
printf("Masukkan nilai : ");scanf("%f",&nilai); while((nilai>=0)&&(nilai<=100))
{
jml_data=jml_data+1;
jml_nilai=jml_nilai+nilai;
printf("Masukkan nilai : ");scanf("%f",&nilai); }
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream> #include <iomanip>
using namespace std;
int main(int argc, char *argv[]) {
int jml_data;
float nilai,rata2,jml_nilai; jml_data=0;
jml_nilai=0;
21 22 23 24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39 40
{
jml_data=jml_data+1;
jml_nilai=jml_nilai+nilai;
cout<<"Masukkan nilai : ";cin>>nilai; }
if(jml_data!=0) {
rata2=jml_nilai/jml_data; cout<<endl;
cout<<setiosflags(ios::fixed);
cout<<"Rata-rata = "<<setprecision(2) <<rata2<<endl<<endl;
} else {
cout<<endl;
cout<<"Tidak ada data inputan!"<<endl<<endl; }
system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Struktur Pengulangan
do while
Pengulangan do while akan m em eriksa kondisi pengulangan di akhir blok pengulangan. Hal ini t ent unya sangat berbeda dengan pengulangan while yang m em eriksa kondisi pengulangan di aw al blok. Perint ah ini ekuivalen dengan perint ah
r e pe a t u nt il yang ada di algorit m a. Karena pem eriksaan kondisi ada di akhir blok
m aka badan pengulangan m inim al akan dieksekusi sebanyak sat u k ali. Bent uk um um pengulangan do while adalah sebagai ber ikut :
do
{
pe r n ya t a a n ;
} w hile ( k on disi) ;
Ada beberapa pengaplikasian pengulangan do w hile ant ara lain unt uk m em buat st rukt ur m enu ( besert a v alidasi input annya) sert a unt uk m em buat login m enggunakan passw ord ( k at a kunci) . Unt uk pengaplikasian pada st rukt ur m enu, program ny a adalah sebagai berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
Program 6.6
Nama File : Lat-6.6.c
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h> #include <conio2.h>
int main(int argc, char *argv[]) {
int pil; int i; do {
23 printf("\n\n"); return 0;
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream> #include <conio2.h>
using namespace std;
27 28 29 30 31 32 33 34 35 36 37
38 39 40 41 42 43
cout<<"| Pilihan [1..4] : |"<<endl; cout<<" ======================="<<endl; gotoxy(20,9);cin>>pil;
gotoxy(3,12); switch(pil) {
case 1 :cout<<"Hai"<<endl<<endl;break; case 2 :cout<<"Hoi"<<endl<<endl;break; case 3 :cout<<"Hui"<<endl<<endl;break; case 4 :cout<<"Bye"<<endl<<endl;break; default:cout<<"Anda salah pilih"
<<endl<<endl; }
system("PAUSE"); system("cls"); }while(pil!=4);
return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.5 Hasil eksekusi program Lat 6.6
1
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h> #include <conio.h>
#define pass 1234
int main(int argc, char *argv[]) {
}while((password!=pass)&&(i!=3)); system("PAUSE");
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream> #include <conio.h>
15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33
{
int password,i; i=0;
do {
cout<<"Masukkan password yang benar : "; cin>>password;
if(password==pass)
cout<<"Password anda benar!"<<endl; else
{
cout<<"Password anda salah"<<endl; getch();
system("cls"); }
i++;
}while((password!=pass)&&(i!=3)); system("PAUSE");
return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.6 Hasil eksekusi program Lat 6.7
1
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h> #include <conio2.h>
#define pass 1234
int main(int argc, char *argv[]) {
int password,i; i=1;
printf("Masukkan password yang benar : "); scanf("%i",&password);
while((password!=pass)&&(i!=3)) {
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream> #include <conio2.h>
#define pass 1234 using namespace std;
17 18
19 20 21 22 23
24 25 26 27 28 29 30
i=1;
cout<<"Masukkan password yang benar : "; cin>>password;
while((password!=pass)&&(i!=3)) {
cout<<"Password anda salah!"<<endl<<endl; getch();
gotoxy(1,2);clreol();//menghapus satu baris dimulai dari pointer gotoxy(32,1);clreol();
scanf("%i",&password); i++;
}
system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.7 Hasil eksekusi program Lat 6.8
Struktur Pengulangan Menggunakan Label
1. Kasus baris y ang t idak t erek sek usi
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
printf("Perintah ini tak akan dieksekusi\n"); printf("Perintah ini juga tak akan
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
16 17 18 19 20 21 22 23 24
25 26 27 28 29 30
awal:
i=i+1;
cout<<i<<endl; if(i<10)
goto awal; else
goto akhir;
cout<<"Perintah ini tak akan dieksekusi"<<endl; cout<<"Perintah ini juga tak akan dieksekusi" <<endl;
akhir:
cout<<endl; system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.8 Hasil eksekusi program Lat 6.9
Terlihat dari hasil eksekusi bahwa ada dua baris perint ah yang t idak dieksekusi sam a sekali diakibat kan adanya label. Hal ini j elas m em buat st rukt ur program m enj adi t idak baik.
2. Kasus label yang m engingkari kondisi if ( m erusak logika program )
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
19 20 21 22 23
24 25 26 27 28
cout<<i<<" bilangan genap!"<<endl<<endl; else
{
free_pass:
cout<<i<<" bilangan ganjil!" <<endl<<endl;
} }
system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.9 Hasil eksekusi pr ogram Lat 6.10
Dari hasil eksekusi t erlihat bahwa label m em buat logika program m enj adi salah. Angka 2 dan 4 yang seharusnya m asuk ke dalam kat egori bilangan genap m alah dit am pilk an sebagai bilangan ganj il. Hal it u disebabkan k arena adanya label free_pass yang langsung m asuk ke dalam else.
Perintah
break
dan
continue
1
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int i,j;
printf("Masukkan banyak pengulangan : "); scanf("%i",&j);
for(i=1;i<=j;i++)
printf("\ni terakhir (break=banyak-3) = %i\n\n",i); system("PAUSE");
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int i,j;
23
24 25 26
cout<<"i terakhir (break=banyak-3) = "<<i <<endl<<endl;
system("PAUSE"); return EXIT_SUCCESS; }
Hasil eksekusi:
Gam bar 6.10 Hasil eksekusi program Lat 6.11
Dari hasil eksekusi t erlihat bahw a pengulangan akan dihent ikan apabila i- nya sudah sam a dengan banyak pengulangan dikurangi t iga.
Ber beda dengan perint ah break , perint ah cont inue berguna unt uk m eneruskan perulangan. Dengan kat a lain perint ah ini akan m enyebabkan program m eloncat ke perny at aan aw al yang t erdapat di dalam badan pengulangan. Unt uk lebih j elasnya lihat program di baw ah ini:
1 2 3 4 5 6 7 8 9 10 11 12
/*
Program 6.12
Nama File : Lat-6.12.c
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
13 14 15 16 17
18 19 20 21
for(bil=1;bil<=5;bil++) {
printf("%i\n",bil); continue;
printf("Diskriminasi!!!! Saya kok tidak muncul??");
}
system("PAUSE"); return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23
/*
Program 6.12
Nama File : Lat-6.12.c
Programmer : Adam Mukharil Bachtiar, S.Kom. */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int bil;
for(bil=1;bil<=5;bil++) {
cout<<bil<<endl; continue;
cout<<"Diskriminasi!!!! Saya kok tidak muncul??";
}
Hasil eksekusi:
Gam bar 6.11 Hasil eksekusi program Lat 6.12
Dari hasil eksekusi t erlihat bahw a ada sat u bar is perint ah di dalam badan pengulangan y ang t idak dieksekusi ak ibat adanya perint ah cont inue sebelum nya. Perint ah cont inue ini akan m enyebabkan eksekusi pengulangan selanj ut nya t anpa m em bereskan t erlebih dahulu badan pengulangan yang t erlet ak di baw ah perint ah cont inue.
Kombinasi Pengulangan dengan Conio2.h
Salah sat u fungsi pengulangan yang bisa digunakan adalah unt uk m em bent uk kom binasi w arna dalam sat u layar. Tent unya unt uk dapat m enggunakan w arna di dev c+ + harus m enginst al conio2.h sepert i yang sudah disebut k an di bab I V. Salah sat u cont oh program nya adalah sebagai berikut :
1 2 3 4 5 6 7 8 9 10
/*
Program 6.13
Nama File : Lat-6.13.c
Programmer : Adam Mukharil Bachtiar, S.Kom. */
11
int main(int argc, char *argv[]) {
int i;
textbackground(WHITE);system("cls"); for(i=2;i<=12;i++)
{
gotoxy(9,i);
textbackground(LIGHTGREEN); printf(" ");
textbackground(YELLOW); printf(" ");
textbackground(LIGHTBLUE); printf(" ");
textbackground(LIGHTMAGENTA); printf(" ");
}
textbackground(WHITE); printf("\n\n\n");
textcolor(BLACK); system("PAUSE");
Programmer : Adam Mukharil Bachtiar, S.Kom. */
10
using namespace std;
int main(int argc, char *argv[]) {
int i;
for(i=2;i<=12;i++) {
gotoxy(9,i);
textbackground(LIGHTGREEN); cout<<" ";
textbackground(YELLOW); cout<<" ";
textbackground(LIGHTBLUE); cout<<" ";
textbackground(LIGHTMAGENTA); cout<<" ";
}
textbackground(WHITE); cout<<endl<<endl<<endl; textcolor(BLACK);
Hasil eksekusi: