5
Perulangan
Statemen-statemen
iterasi (perulangan) pada Java adalah while,
for, dan do-while. Ketiga
statemen inilah yang dinamakan dengan loop. Seperti yang Anda ketahui, loop secara
berulang mengeksekusi sehimpunan instruksi sampai kondisi terminasi terpenuhi.
Statemen-Statemen
Iterasi
Loop while merupakan statemen loop paling fundamental pada Java.
Statemen ini mengeksekusi secara berulang suatu statemen atau blok statemen
ketika ekspresi pengendali bernilai true.
Berikut adalah format umumnya:
while (kondisi) {
// tubuh
loop
}
Loop do-while selalu mengeksekusi tubuhnya minimal sebanyak sekali, karena
ekspresi kondisional berada di bawah loop. Format umunya adalah
do {
// tubuh
loop
} while
(kondisi)
Setiap iterasi pada loop do-while pertama-tama mengeksekusi tubuh loop dan
kemudian mengevaluasi ekspresi kondisional. Jika ekspresi ini bernilai true, maka loop akan berulang.
Sebaliknya, loop akan berhenti. Sama seperti semua loop Java, kondisi harus merupakan ekspresi
Boolean.
Berikut adalah format umum dari statemen for:
for (inisialisasi; kondisi; iterasi) {
// tubuh
loop
}
Jika hanya ada satu statemen yang akan dieksekusi secara berulang, maka
kurung kurawal ({ dan }) tidak diperlukan.
Soal dan
Penyelesaian
1.
Tulislah
sebuah program yang menggunakan loop while untuk menghitung mundur dari 10,
kemudian menampilkan sepuluh baris yang memuat “tik”.
Penyelesaian
//Demo while
public class
DemoWhile {
public static void main(String args[]) {
int n = 10;
while(n > 0) {
System.out.println("tik
" + n);
n--;
}
}
}
Keluaran Program
tik 10
tik 9
tik 8
tik 7
tik 6
tik 5
tik 4
tik 3
tik 2
tik 1
2.
Tubuh
loop while (atau loop Java lainnnya)
bisa kosong. Ini karena statemen null (yang hanya merupakan titik-koma) secara
sintaks valid pada Java. Tulislah program untuk mengilustrasikan situasi ini.
Penyelesaian
//Tubuh loop bisa kosong
public class
TubuhWhileKosong {
public static void main(String args[]) {
int i, j;
i = 100;
j = 200;
// mencari titik tengah
antara i dan j
while(++i < --j) ; // tidak ada tubuh loop ini
System.out.println("Titik-tengah adalah " + i);
}
}
Keluaran Program
Titik-tengah adalah 150
3.
Tulislah sebuah
program yang membaca suatu masukan dari pengguna yang akan dipakai sebagai
bagian dari ekspresi kondisional pada loop while.
Penyelesaian
import java.util.Scanner;
public class
DemoWhileBaca {
public static void main(String[] args) {
int kounter, angka;
System.out.println("Masukkan sebuah angka");
Scanner papantik = new Scanner(System.in);
angka = papantik.nextInt();
kounter = 1;
while (kounter <= angka) {
System.out.print(kounter + ",
");
kounter++;
}
System.out.println();
System.out.println("Hidup Indonesia!.");
}
}
Keluaran Program
Masukkan sebuah angka
3
1, 2, 3,
Hidup Indonesia!.
4. Tulislah sebuah program yang menggunakan loop while untuk menghasilkan runtun Fibonacci yang bernilai kurang dari
1000. Runtun Fibonacci didefinisikans sebagai
Penyelesaian
public class
WhileUntukFibonacci {
public static void main(String[] args) {
System.out.print(0);
int fib0 = 0;
int fib1 = 1;
int fib2 = fib1 + fib0;
while (fib2 < 1000) {
fib0 = fib1;
fib1 = fib2;
fib2 = fib1 + fib0;
System.out.print(",
" + fib1);
}
}
}
Keluaran Program
0, 1, 2, 3, 5, 8, 13, 21, 34,
55, 89, 144, 233, 377, 610, 987
5. Tulislah sebuah program yang menggunakan loop while untuk menguji keprimaan suatu
angka.
Penyelesaian
import java.util.Random;
public class
WhilePrima {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
System.out.println("x = " + x);
int n = (int)Math.floor(101*x);
boolean apaPrima = (n > 1);
int d = 2;
while (apaPrima && d < n)
apaPrima = (n % d++ != 0
);
if (apaPrima) System.out.println(n + " adalah prima.") ;
else System.out.println(n + " bukan prima.");
}
}
Keluaran Program
x = 0.117919505
11 adalah prima.
6. Tulislah sebuah program untuk menghitung logaritma
biner diskrit berikut:
Logaritma atas sebuah angka positif x dengan basis
b adalah b dipangkat y yang sama dengan x. Logaritma biner (basis 2) atas
sebuah angka positif x adalah 2 dipangkat y yang sama dengan x. Jadi, logaritma
biner diskrit atas sebuah angka positif x adalah integer terdekat dari 2
dipangkat dengan y yang kurang dari atau sama dengan x.
Penyelesaian
import java.util.Random;
public class
WhileLogaritmaDiskrit {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
x = 999999*x+2;
int y = 0;
int n = 1;
while (n <= x) {
n *= 2;
++y;
System.out.println("n=
"+ n + "\ty = " + y);
}
--y;
System.out.println(" x: "+ x);
System.out.println("Logaritma biner diskrit atas x: "
+ y);
float lgx =
(float)(Math.log(x)/Math.log(2.0));
System.out.println("Logaritma biner kontinya atas x: "
+ lgx);
}
}
Keluaran Program
n= 2 y = 1
n= 4 y = 2
n= 8 y = 3
n= 16 y = 4
n= 32 y = 5
n= 64 y = 6
n= 128 y = 7
n= 256 y = 8
n= 512 y = 9
n= 1024 y = 10
n= 2048 y = 11
n= 4096 y = 12
n= 8192 y = 13
n= 16384 y = 14
n= 32768 y = 15
n= 65536 y = 16
n= 131072 y = 17
n= 262144 y = 18
n= 524288 y = 19
n= 1048576 y = 20
x: 925551.06
Logaritma biner diskrit atas
x: 19
Logaritma biner kontinya atas
x: 19.819954
7. Tulislah sebuah program untuk menghitung GCD (greatest common divisor) dari dua angka
yang dibangkitkan secara acak, menggunakan loop while.
Penyelesaian
import java.util.Random;
public class
WhileGCD {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
int m = Math.round(999*x + 2);
x = acak.nextFloat();
int n = Math.round(999*x + 2);
System.out.println("m= "+ m + "\t\t n= " + n);
while (m > 0) {
if (m < n) {
int temp = m;
m = n;
n = temp;
System.out.println("m= "+ m + "\t\t n= " + n);
}
m -= n;
}
System.out.println("GCD atas m dan n adalah " + n);
}
}
Keluaran Program
m= 771 n= 291
m= 291 n= 189
m= 189 n= 102
m= 102 n= 87
m= 87 n= 15
m= 15 n= 12
m= 12 n= 3
GCD atas m dan n adalah 3
8. Tulislah program versi do-while dari soal no.1.
Penyelesaian
//Demonstrasi loop do-while
public class
DemoDoWhile {
public static void main(String args[]) {
int n = 10;
do {
System.out.println("tik
" + n);
n--;
} while(n > 0);
}
}
Keluaran Program
tik 10
tik 9
tik 8
tik 7
tik 6
tik 5
tik 4
tik 3
tik 2
tik 1
9. Tulislah sebuah program yang menggunakan loop do-while
untuk memproses seleksi pada suatu menu.
Penyelesaian
//Menggunakan loop do-while untuk memproses suatu menu
public class
DoWhileUntukMenu {
public static void main(String args[])
throws java.io.IOException {
char pilihan;
do {
System.out.println("Silahkan
pilih:");
System.out.println(" 1. if");
System.out.println(" 2.
switch");
System.out.println(" 3.
while");
System.out.println(" 4.
do-while");
System.out.println("
5. for\n");
System.out.println(" Pilih
satu:");
pilihan = (char) System.in.read();
} while( pilihan < '1' || pilihan > '5');
System.out.println("\n");
switch(pilihan) {
case '1':
System.out.println("Statemen
if:\n");
System.out.println("if(kondisi)
statemen;");
System.out.println("else
statemen;");
break;
case '2':
System.out.println("Statemen
switch:\n");
System.out.println("switch(ekspresi)
{");
System.out.println(" case
konstanta:");
System.out.println(" runtun
statemen");
System.out.println(" break;");
System.out.println("
// ...");
System.out.println("}");
break;
case '3':
System.out.println("Loop
while:\n");
System.out.println("while(kondisi)
statemen;");
break;
case '4':
System.out.println("Loop
do-while:\n");
System.out.println("do {");
System.out.println(" statemen;");
System.out.println("} while
(kondisi);");
break;
case '5':
System.out.println("Loop
for:\n");
System.out.print("for(inisialisasi;
kondisi; iterasi)");
System.out.println(" statemen;");
break;
}
}
}
Keluaran Program
Silahkan pilih:
1. if
2. switch
3. while
4. do-while
5. for
Pilih satu:
4
Loop do-while:
do {
statemen;
} while (kondisi);
10. Tulislah program versi do-while dari soal no.3.
Penyelesaian
import java.util.Scanner;
public class
DoWhileBaca {
public static void main(String[] args) {
int kounter, angka;
System.out.println("Masukkan sebuah angka");
Scanner papantik = new Scanner(System.in);
angka = papantik.nextInt();
kounter = 1;
do {
System.out.print(kounter
+ ", ");
kounter++;
} while (kounter <= angka);
System.out.println();
System.out.println("Hidup Indonesia!");
}
}
Keluaran Program
Masukkan sebuah angka
3
1, 2, 3,
Hidup Indonesia!
11. Tulislah sebuah program yang menggunakan loop do-while
untuk menghitung faktorial.
Penyelesaian
import java.util.Random;
public class
DoWhileFaktorial {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
int n = Math.round(21*x);
long f = 1;
int k = 1;
do
f *= k++;
while (k <= n);
System.out.println(n+ "
! = " + f ) ;
}
}
Keluaran Program
10 ! = 3628800
12. Tulislah program versi do-while dari soal no.5.
Penyelesaian
import java.util.Random;
public class
DoWhilePrima {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
System.out.println("x=
" + x);
int n = Math.round(97*x + 2);
boolean apaPrima;
int d = 2;
do
apaPrima = (n % d++ !=
0);
while (apaPrima && d < n);
if (apaPrima) System.out.println(n + " adalah prima.");
else System.out.println(n + " bukan prima.");
}
}
Keluaran Program
x= 0.28035682
29 adalah prima.
13. Tulislah sebuah program yang mengimplementasikan
algoritma Babylonian menggunakan loop do-while untuk menghitung akar kuadrat.
Penyelesaian
import java.util.Random;
public class
DoWhileBabylonian {
public static void main(String[] args) {
final double TOL =
0.5E-15;
Random acak = new Random();
double x = acak.nextDouble();
System.out.println("\tx= " + x);
do {
x = (x + 2.0/x)/2;
System.out.println("\tx =
" + x);
} while (Math.abs(x*x - 2.0) > TOL*2*x);
System.out. println("sqrt(2.0) = " + Math.sqrt (2.0)) ;
}
}
Keluaran Program
x= 0.10805864536113496
x = 9.308263416194997
x = 4.761563132766911
x = 2.5907966333093677
x = 1.6813799823490092
x = 1.4354395483822262
x = 1.4143704977461546
x = 1.4142135710796933
x = 1.414213562373095
sqrt(2.0) = 1.4142135623730951
14. Tulislah program versi loop for dari soal no.1.
Penyelesaian
public class
DemoFor {
public static void main(String args[]) {
int n;
for(n=10; n>0; n--)
System.out.println("tik " + n);
}
}
Keluaran Program
tik 10
tik 9
tik 8
tik 7
tik 6
tik 5
tik 4
tik 3
tik 2
tik 1
15. Tulislah program versi loop for dari soal no.5.
Penyelesaian
public class
ForPrima {
public static void main(String args[]) {
int angka;
boolean apaPrima = true;
angka = 14;
for(int i=2; i <=
angka/i; i++) {
if((angka % i) == 0) {
apaPrima = false;
break;
}
}
if(apaPrima) System.out.println("Prima");
else System.out.println("Bukan
Prima");
}
}
Keluaran Program
Bukan Prima
16. Ekspresi inisialisasi atau iterasi pada loop for bisa diabaikan. Tunjukkan hal
tersebut pada sebuah program.
Penyelesaian
public class
VariasiFor {
public static void main(String args[]) {
boolean selesai = false;
int i;
i = 0;
for( ; !selesai; ) {
System.out.println("i
bernilai " + i);
if(i == 10) selesai = true;
i++;
}
}
}
Keluaran Program
i bernilai 0
i bernilai 1
i bernilai 2
i bernilai 3
i bernilai 4
i bernilai 5
i bernilai 6
i bernilai 7
i bernilai 8
i bernilai 9
i bernilai 10
17. Tulislah sebuah program untuk menghasilkan
keluaran daftar karakter dari suatu rentang nilai ASCII yang diberikan.
Penyelesaian
public class
ForDaftarHuruf {
public static void main(String[] args) {
for(char c = 0; c <
128; c++)
if(Character.isLowerCase(c))
System.out.println("nilai:
" + (int)c +
" karakter: " + c);
}
}
Keluaran Program
nilai: 97 karakter: a
nilai: 98 karakter: b
nilai: 99 karakter: c
nilai: 100 karakter: d
nilai: 101 karakter: e
nilai: 102 karakter: f
nilai: 103 karakter: g
nilai: 104 karakter: h
nilai: 105 karakter: i
nilai: 106 karakter: j
nilai: 107 karakter: k
nilai: 108 karakter: l
nilai: 109 karakter: m
nilai: 110 karakter: n
nilai: 111 karakter: o
nilai: 112 karakter: p
nilai: 113 karakter: q
nilai: 114 karakter: r
nilai: 115 karakter: s
nilai: 116 karakter: t
nilai: 117 karakter: u
nilai: 118 karakter: v
nilai: 119 karakter: w
nilai: 120 karakter: x
nilai: 121 karakter: y
nilai: 122 karakter: z
18. Tulislah sebuah program yang menggunakan loop for untuk mengakumulasi penjumlahan.
Penyelesaian
import java.util.Random;
public class
ForAkumulasi {
public static void main(String[] args) {
Random acak = new Random();
float jum = 0;
for (int i = 0; i <
5; i++) {
float x = acak.nextFloat();
jum += x;
System.out.println("\tx=
" + x + "\t\tjum= " +
jum);
}
}
}
Keluaran Program
x= 0.70382637 jum= 0.70382637
x= 0.32614684 jum= 1.0299733
x= 0.9151373 jum= 1.9451106
x= 0.42224544 jum= 2.367356
x= 0.93935806 jum= 3.306714
19. Tulislah program versi lain dari soal no. 15 untuk
menguji keprimaan suatu angka.
Penyelesaian
import java.util.Random;
public class
ForKeprimaan {
public static void main(String[] args) {
Random random = new Random();
float x = random.nextFloat();
System.out.println("x = " + x) ;
int n = (int)Math.floor(99*x+2);
for (int d = 2; d <
n; d++)
if (n%d == 0) {
System.out.println(n
+ " bukan prima.");
return;
}
System.out.println(n +
" prima.");
}
}
Keluaran Program
x = 0.11275619
13 prima.
20. Tulislah sebuah program yang menggunakan statemen break untuk menghentikan loop for.
Penyelesaian
import java.util.Random;
public class
FordanBreak {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
System.out.println("x = " + x);
int n = (int)Math.floor(101*x);
boolean apaTidakPrima = (n < 2);
for (int d = 2; d <
n; d++) {
apaTidakPrima = (n%d ==
0);
if (apaTidakPrima) break;
}
if (apaTidakPrima) System.out.println(n + " bukan prima.");
else System.out.println(n + " prima.");
}
}
Keluaran Program
x = 0.75748885
76 bukan prima.
21. Tulislah sebuah program yang menampilkan isi dari
suatu array menggunakan loop for-each.
Penyelesaian
//Demonstrasi loop for-each
public class
DemoForEach {
public static void main(String args[]) {
int angka[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int jum = 0;
// menggunakan gaya for-wach
for(int x : angka) {
System.out.println("Nilai
adalah: " + x);
jum += x;
}
System.out.println("Penjumlahan akumulasi: " + jum);
}
}
Keluaran Program
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 6
Nilai adalah: 7
Nilai adalah: 8
Nilai adalah: 9
Nilai adalah: 10
Penjumlahan akumulasi: 55
22. Dimisalkan Anda memiliki sebuah array float yang berisi nilai-nilai acak,
gunakanlah loop for-each untuk menampilkan tiap elemen
array tersebut.
Penyelesaian
import java.util.*;
public class
ForEachFloat {
public static void main(String[] args) {
Random acak = new Random(47);
float f[] = new float[10];
for(int i = 0; i <
10; i++)
f[i] = acak.nextFloat();
for(float x : f)
System.out.println(x);
}
}
Keluaran Program
0.72711575
0.39982635
0.5309454
0.0534122
0.16020656
0.57799757
0.18847865
0.4170137
0.51660204
0.73734957
23. Tulislah versi lain dari program pada soal no. 21,
tetapi dengan memanfaatkan statemen break
agar hanya lima nilai yang ditampilkan.
Penyelesaian
public class
ForEachBreak {
public static void main(String args[]) {
int jum = 0;
int angka[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// menampilkan nilai-nilai
dan penjumlahan akumulatif
for(int x : angka) {
System.out.println("Nilai
adalah: " + x);
jum += x;
if(x == 5) break; //
menghentikan loop ketika x bernilai 5
}
System.out.println("Penjumlahan atas 5 elemen
pertama: " + jum);
}
}
Keluaran Program
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Penjumlahan atas 5 elemen pertama: 15
24. Tulislah sebuah program untuk membuktikan bahwa
loop for-each tidak dapat dipakai untuk memodifikasi isi suatu array.
Penyelesaian
public class
ForEachTidakBisaModifikasi {
public static void main(String args[]) {
int angka[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for(int x : angka) {
System.out.print(x +
" ");
x = x * 10; // tidak
berpengaruh pada array angka
}
System.out.println();
for(int x : angka)
System.out.print(x +
" ");
System.out.println();
}
}
Keluaran Program
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
25. Tulislah sebuah program yang menggunakan loop for-each untuk menjelajah array dua-dimensi.
Penyelesaian
public class
ForEachDuaDimensi {
public static void main(String args[]) {
int jum = 0;
int angka[][] = new int[3][5];
// mengisi array angka
for(int i = 0; i < 3;
i++)
for(int j=0; j < 5;
j++)
angka[i][j] = (i+1)*(j+1);
// menampilkan isi dan
penjumlahan elemen-elemen array
for(int x[] : angka) {
for(int y : x) {
System.out.println("Nilai
adalah: " + y);
jum += y;
}
}
System.out.println("Penjumlahan akumulasi: " + jum);
}
}
Keluaran Program
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 2
Nilai adalah: 4
Nilai adalah: 6
Nilai adalah: 8
Nilai adalah: 10
Nilai adalah: 3
Nilai adalah: 6
Nilai adalah: 9
Nilai adalah: 12
Nilai adalah: 15
Penjumlahan akumulasi: 90
26. Tulislah sebuah program yang menggunakan statemen continue agar menyebabkan dua angka
ditampilkan pada tiap baris.
Penyelesaian
public class
DemoContinue {
public static void main(String args[]) {
for(int i=0; i<10;
i++) {
System.out.print(i +
" ");
if (i%2 == 0) continue;
System.out.println("");
}
}
}
Keluaran Program
0 1
2 3
4 5
6 7
8 9
27. Tulislah lagi program yang mengilustrasikan
penggunaan statemen continue, dimana
terdapat label di dalamnya.
Penyelesaian
public class
DemoContinue2 {
public static void main(String args[]) {
luar: for (int i=0; i<10;
i++) {
for(int j=0; j<10;
j++) {
if(j > i) {
System.out.println();
continue luar;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
Keluaran Program
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27
36 45 54 63 72 81
28. Gunakan dua loop for bersarang untuk menampilkan tabel perkalian.
Penyelesaian
public class
DemoForTabelKebenaran {
public static void main(String[] args) {
final int UKURAN = 15;
for (int x = 1; x <=
UKURAN; x++) {
for (int y = 1; y <=
UKURAN; y++) {
int z = x*y;
if (z < 10) System.out.print(" ");
if (z < 100) System.out.print(" ");
System.out.print(" " + z ) ;
}
System.out.println();
}
}
}
Keluaran Program
1
2 3 4
5 6 7
8 9 10
11 12 13
14 15
2
4 6 8
10 12 14
16 18 20
22 24 26
28 30
3
6 9 12
15 18 21
24 27 30
33 36 39
42 45
4
8 12 16
20 24 28
32 36 40
44 48 52
56 60
5
10 15 20
25 30 35
40 45 50
55 60 65
70 75
6
12 18 24
30 36 42
48 54 60
66 72 78
84 90
7
14 21 28
35 42 49
56 63 70
77 84 91 98
105
8
16 24 32
40 48 56
64 72 80
88 96 104 112 120
9
18 27 36
45 54 63
72 81 90 99
108 117 126 135
10
20 30 40
50 60 70
80 90 100 110 120 130 140 150
11
22 33 44
55 66 77
88 99 110 121 132 143 154 165
12
24 36 48
60 72 84 96
108 120 132 144 156 168 180
13
26 39 52
65 78 91 104 117 130 143 156 169 182 195
14
28 42 56
70 84 98 112 126 140 154 168 182 196 210
15 30
45 60 75 90
105 120 135 150 165 180 195 210 225
29. Tulislah suatu program yang menggunakan loop for untuk menghitung
Penyelesaian
import java.util.Random;
public class
DemoForHitung {
public static void main(String[] args) {
Random acak = new Random();
float x = acak.nextFloat();
System.out.println("x= " + x);
int n = (int)Math.floor(99*x+2);
System.out.println("n= " + n);
int jum = 0;
for (int i = 1; i <=
n; i++)
jum += i*i;
int formula = n*(n+1)*(2*n+1)/6;
System.out.println("jum= " + jum);
System.out.println("n*(n+l)*(2*n+l)/6 = " + formula);
}
}
Keluaran Program
x= 0.0011000633
n= 2
jum= 5
n*(n+l)*(2*n+l)/6 = 5
mantull nih min
ReplyDeleteSolder uap
Logika Pemrograman: Bab 5. Soal And Penyelesaian Java >>>>> Download Now
ReplyDelete>>>>> Download Full
Logika Pemrograman: Bab 5. Soal And Penyelesaian Java >>>>> Download LINK
>>>>> Download Now
Logika Pemrograman: Bab 5. Soal And Penyelesaian Java >>>>> Download Full
>>>>> Download LINK