• Tidak ada hasil yang ditemukan

BAB V - BAB VI Pengulangan

N/A
N/A
Protected

Academic year: 2019

Membagikan "BAB V - BAB VI Pengulangan"

Copied!
30
0
0

Teks penuh

(1)

Pe

m am puanny

h 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

(2)

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

(3)

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 ;

(4)

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 ;

}

(5)

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;

(6)

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. */

(7)

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;

(8)

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 ;

(9)

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;

(10)

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

(11)

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;

(12)

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:

(13)

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 {

(14)

23 printf("\n\n"); return 0;

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream> #include <conio2.h>

using namespace std;

(15)

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

(16)

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>

(17)

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

(18)

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;

(19)

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

(20)

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[]) {

(21)

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.

(22)

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;

(23)

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

(24)

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;

(25)

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[]) {

(26)

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??";

}

(27)

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. */

(28)

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. */

(29)

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);

(30)

Hasil eksekusi:

Gambar

Gambar 6.1 Hasil eksekusi program Lat 6.2
Gambar 6.2 Hasil eksekusi program Lat 6.3
Gambar 6.3 Hasil eksekusi program Lat 6.4
Gambar 6.4 Hasil eksekusi program Lat 6.4
+7

Referensi

Dokumen terkait