Anda di halaman 1dari 11

MODUL 3

STRUKTUR LOOPING

 Pengulangan (repetition/looping) dapat dikontrol dengan :

counter, atau
sentinel (nilai pembatas)
 Jika jumlah iterasi diketahui sebelumnya, maka pengulangan dikontrol dengan
counter. Counter merupakan suatu variabel untuk menghitung jumlah iterasi.
 Sentinel dipakai untuk mengontrol pengulangan (looping) apabila :
1. Jumlah iterasi tidak diketahui sebelumnya
2. Looping itu mengandung statemen untuk mengambil data dalam tiap
iterasi.
 Sentinel (nilai pembatas) menyatakan akhir data. Sentinel harus muncul setelah
semua data regular telah muncul. Sentinel harus berbeda dengan data regular.
 Statemen while dapat dikontrol dengan counter maupun sentinel.

 Pengulangan yang dikontrol dengan counter lebih mudah dilakukan dengan


menggunakan statemen for yang berbentuk :

for (ekspresi1;ekspresi2;ekspresi3)
statemen
 Statemen di atas ekivalen dengan :

eskpresi1;
while (ekspresi2) {
statemen
ekspresi3;
}
kecuali apabila statemen mengandung statemen continue yang akan
dibahas nanti.
ekspresi1 menginisialisasi counter (variabel pengontrol looping) ;
ekspresi2 merupakan kondisi yang menentukan kelanjutan looping;
ekspresi3 mengubah nilai counter.

/* Contoh penggunaan for - loop */

Konsep Pemrograman 23
#include <stdio.h>

main() {
int a;

/* mengubah counter a dari 1 s/d 10,


* dengan kenaikan 1
*/

for (a=1; a <= 10; a++)


printf ("%d", a);

printf("\n");

/* mengubah counter a dari 10 s/d 1,


* dengan kenaikan -1 (penurunan 1)
*/

for (a=10; a >= 1; a--)


printf ("%d", a);

printf("\n");

/* mengubah counter a dari 2 s/d 20,


* dengan kenaikan 3
*/

for (a=2; a <= 20; a += 3)


printf ("%d", a);

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

Output :

1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
2 5 8 11 14 17 20

/*

Konsep Pemrograman 24
* Program ini melakukan penjumlahan :
* 1 + 2 + 3 + ...N
*/

#include <stdio.h>

main() {
long int jumlah = 0;
int bilangan, N;

printf("Mau menjumlahkan 1 s/d berapa ? ");


scanf("%d", &N);

for (bilangan=1; bilangan <= N; ++bilangan)


jumlah += bilangan;

printf("1 + 2 + 3 + . . . . %d = %ld\n", N, jumlah);


return 0;
}

Output :

Mau menjumlahkan 1 s/d berapa ? 99


1 + 2 + 3 + . . . . 99 = 4950

 Variabel bertipe long int (dapat disingkat long) dapat menampung bilangan
bulat, biasanya dari -2147483648 (LONG_MIN) sampai dengan +2147483647
(LONG_MAX).

 Konstanta LONG_MAX dan LONG_MIN didefinisikan dalam header-file


<limits.h>

 Conversion-specifier %ld dipakai untuk menampilkansuatu nilai bertipe long


int.

 ekspresi1, ekspresi2 dan ekspresi3 dalam suatu statemen for adalah


bersifat opsional (dapat dihilangkan).

Konsep Pemrograman 25
 Jika ekspresi2 tidak ada, maka kondisi itu dianggap selalu true.

Jadi
for(;;) {
. . . . .
}
merupakan suatu infinite-loop. (Dapat dipecah dengan menggunakan return atau
break.).

 Ada satu lagi statemen yang bisa digunkan untuk melakukan looping, yaitu statemen
do /while, yang bentuknya :
do {
statemen
} while (kondisi);

 Berbeda dengan statemen while, statemen while/do melakukan evaluasi terhadap


kondisi sesudah pelaksanaan statemen. Jadi dalam suatu looping do/while,
statemen dilaksanakan minimal satu kali.

/* Contoh penggunaan statemen do/while */


#include <stdio.h>
main() {
int counter = 1;

do {
printf("%d", counter++);
} while (counter <=10);

return 0;
}

Output :

1 2 3 4 5 6 7 8 9 10

Konsep Pemrograman 26
3.1. Statemen break dan continue

 Statemen break dan continue digunakan untuk mengubah alur kontrol

 Pelaksanaan statemen break dalam struktur while, for, do/while atau


switch menyebabkan keluar segera dari struktur tersebut.

/* Contoh penggunaan statemen break dalam struktur for */

#include <stdio.h>

main() {
int x;

for(x = 1; x <= 10; x++) {


if (x == 5) break;
printf("%d", x);
}

printf("\nKeluar dari loop ketika x == %d\n", x);


return 0;
}

Output :

1 2 3 4
Keluar dari loop ketika x == 5

 Pelaksanaan statemen continue dalam struktur while, for atau do/while


menyebabkan lompat ke iterasi berikutnya.

 Dalam struktur while dan do/while, evaluasi kondisi segera dilakukan setelah
pelaksanaan continue. Dalam struktur for, setelah pelaksanaan continue
yang dilakukan berikutnya adalah evaluasi ekspresi3 dan kemudian evaluasi
ekspresi2.

Konsep Pemrograman 27
/* Contoh penggunaan continue dalam for-loop */

#include <stdio.h>

main() {
int x;

for(x = 1; x <= 10; x++) {


if (x == 5) continue;
printf("%d", x);
}

printf("\nNilai 5 dilompati dengan continue. \n");


return 0;
}

Output :

1 2 3 4 5 6 7 8 9 10
Nilai 5 dilompati dengan continue.

3.2. Statemen switch

 Untuk memilih dari beberapa alternatif, dengan cara menguji apakah suatu ekspresi
mempunyai nilai yang cocok dengan satu dari beberapa konstanta bernilai bulat.

switch (ekspresi) {
case ekspresi-konstan : statemen
.
.
.
case ekspresi-konstan : statemen
default : statemen
}

Konsep Pemrograman 28
 Tiap alternatif diberi label suatu konstanta atau ekspresi konstan bernilai bulat. Jika
ekspresi cocok dengan salah satu label ekspresi-konstan, eksekusi dimulai
dari statemen yang mengikuti label itu sampai dengan statemen break / statemen
terakhir sebelum tanda }. Tiap ekspresi-konstan harus unik. Alternatif yang
dilabel default akan dilaksanakan jika tidak ada alternatif lain yang cocok.
Alternatif default bisa dihilangkan. Jika tidak ada alternatif default dan tidak
ada case yang cocok, maka tidak ada aksi sama sekali

/* Program ini menghitung banyaknya nilai-huruf */


#include <stdio.h>
main() {
int nilai;
int hitungA = 0, hitungB = 0, hitungC = 0,
hitungD = 0, hitungE = 0;

printf("Masukkan nilai dalam huruf \n");


printf("(EOF untuk berhenti) :\n");
while((nilai = getchar()) != EOF) {
switch(nilai) {
case 'A' : case 'a' : hitungA++;
break;
case 'B' : case 'b' : hitungB++;
break;
case 'C' : case 'c' : hitungC++;
break;
case 'D' : case 'd' : hitungD++;
break;
case 'E' : case 'e' : hitungE++;
break;
case '\n' : case ' ' : /* abaikan '\n'`dan ' ' */
break;
default : /* menangkap karakter lainnya */
printf("Input salah. Tolong ulangi. \n");
break;
}
}
printf("\nBanyaknya nilai \n");
printf("A : %d\n", hitungA);
printf("B : %d\n", hitungB);
printf("C : %d\n", hitungC);
printf("D : %d\n", hitungD);
printf("E : %d\n", hitungE);
return 0;
}
Contoh outputnya :

Konsep Pemrograman 29
Masukkan nilai dalam huruf
(EOF untuk berhenti) :
B
A
a
B
b
B
F
Input salah. Tolong ulangi.
c
E

Banyaknya nilai
A : 2
B : 4
C : 1
D : 0
E : 1

 getchar(), yang didefinisikan dalam stdio.h, memberikan nilai karakter


yang dibacanya dari keyboard.
 Karakter biasanya disimpan dalam variabel bertipe char. Tetapi karena char
adalah subtipe dari int, maka karakter juga dapat disimpan dalam variabel bertipe
int.
 Variabel bertipe char memerlukan memori 1 byte, tipe char terdiri dari integer-
integer kecil.
 Konstanta karakter adalah suatu integer yang ditulis dalam bentuk satu karakter
dalam tanda kutip tunggal, misalnya : 'a'
Contoh :
printf("Karakter (%c) mempunyai nilai %d.\n",'a','a');

akan mencetak

Karakter (a) mempunyai nilai 97.

Penentu konversi (conversion-specifier) %c dipakai untuk mencetak karakter dan


%d untuk mencetak nilai desimalnya. %x untuk mencetak bilangan hexadesimal.
 Bilangan 97 itu merupakan representasi numerik desimal dari karakter a dalam
komputer.

Konsep Pemrograman 30
 Kebanyakan komputer menggunakan character-set ASCII (American Standard Code
for Information Interchange), dimana 97 mengkodekan huruf kecil a.
 Karakter dapat dibaca dengan fungsi scanf dengan memakai conversion-specifier
%c.
 EOF adalah konstanta simbolik (biasanya bernilai -1) yang menyatakan end-of-file.
Didefinisikan dalam berkas stdio.h
 Variabel nilai dalam program itu diberi tipe int agar aman, karena harus
menampung nilai dari EOF.
 Untuk sistem Unix / Linux, EOF dibuat dengan mengetikkan

<return> <ctrl-d>
 Untuk sistem DOS, dibuat dengan mengetiikka <ctrl-z

3.3. Operator-operator Logika

 Kondisi-kondisi sederhana seperti a > 3 dan a != 10 dapat digabung menjadi


kondisi yang lebih rumit..

 Kondisi-kondisi yang sederhana dapat dikombinasikan menjadi kondisi yang lebih


rumit dengan menggunakan operator-operator logika :
! (NOT logika)
&& (AND logika)
|| (OR logika)

ekspresi !ekspresi
0 (false) 1 (true)
tidak-nol (true) 0 (false)

ekspresi1 ekspresi2 ekspresi1 && ekspresi2


0 (false) 0 (false) 0 (false)
0 (false) tidak-nol (true) 0 (false)

Konsep Pemrograman 31
tidak-nol (true) 0 (false) 0 (false)
tidak-nol (true) tidak-nol (true) 1 (true)

ekspresi1 ekspresi2 ekspresi1 || ekspresi2


0 (false) 0 (false) 0 (false)
0 (false) tidak-nol (true) 1 (true)
tidak-nol (true) 0 (false) 1 (true)
tidak-nol (true) tidak-nol (true) 1 (true)

Contoh :
char c = 'B';
int k = 7, h = 8;

ekspresi nilai
!c 0
!(k - h) 0
!k - h -8
!!k 1
'A' < c && c <= 'Z' 1
k > h || c < 'K' 1
k / h || k && h - 8 0

Perhatikan presedensi dari masing-masing operator.

3.4 Evaluasi Short-Circuit


Dalam pengevaluasian ekspresi-ekspresi yang menjadi operand dari && dan ||, proses
evaluasi berhenti ketika hasil true atau false sudah diketahui.

Konsep Pemrograman 32
Evaluasi short-circuit ini merupakan sifat yang penting dari operator && dan ||.

Andaikan eksp1 dan eksp2 adalah ekspresi dan eksp1 mempunyai nilai nol. Dalam
ekspresi logika :

eksp1 && eksp2

evaluasi terhadap eksp2 tidak terjadi, karena nilai dari ekspresi logika itu secara
keseluruhan sudah dapat ditentukan sama dengan nol.

Demikian pula, jika eksp1 bernilai tidak-nol, maka evaluasi terhadap eksp2 dalam
ekspresi logika :

eksp1 || eksp2

tidak terjadi, karena nilai dari ekspresi logika itu secara keseluruhan sudah dapat
ditentukan sama dengan 1.

Konsep Pemrograman 33

Anda mungkin juga menyukai