This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lab 8 Repetition Part 2 (Nested Loops)
## Topic 3: Basic Program Structures
### Intended Learning Outcomes
Upon completion of this lab, you should be able to:
- Trace loops to determine their actions, such as the number of iterations.
- Use loops to process elements in an array.
- Use nested loops to generate two-dimensional tables.
## Exercise 1
What will be the value of x after executing the program fragments below?
(a)
```java
int x, a=0;
for (x=9; x>=1; x--) {
a++;
if (a == 4)
break;
}
// x is 6
```
(b)
```java
int a=9, x=0;
while (a > 0) {
a--;
x+=2;
if (a < 3)
continue;
x+=3;
}
// x is 36
```
## Exercise 2
Will the programs below terminate? If so, give the output.
(a)
```java
int balance = 100;
while ( true ) {
if ( balance < 12 )
break;
balance = balance – 12;
}
System.out.println( "Balance is " + balance );
// Output:
Balance is 4
```
(b)
```java
int balance = 100;
while ( true ) {
if ( balance < 12 )
continue;
balance = balance – 12;
}
System.out.println( "Balance is " + balance );
// loop
```
## Exercise 3
What will be the number of times the statement marked with a comment executes?
(a)
```java
for (i=0; i<5; i++)
for (j=0; j<7; j++)
System.out.println("loop"); // statement in question
// 5*7 = 35 times
```
(b)
```java
for (i=0; i<5; i++)
for (j=0; j<7; j++)
for (k=0; k<6; k++)
System.out.println("another loop");
System.out.println("loop"); // statement in question
// 1 times, due to for loop not {}. Therefore, the loop will only handle next line only.
```
## Exercise 4
Determine the output of the program below.
(a)
```java
public class Test {
public static void main ( String[] args ) {
for ( int i = 1; i < 5; i++ ) {
int j = 0;
while ( j < i ) {
System.out.print( j + " " );
j++;
}
}
System.out.println();
}
}
// Output:
0 0 1 0 1 2 0 1 2 3
```
(b)
```java
public static void main( String[] args ) {
String s1;
for ( int row=1; row<=5; row++ ) {
s1 = "";
for ( int column=1; column<=5; column++ ) {
s1 += ( row == column ) ? "*" : " ";
}
System.out.println( s1 );
}
}
// Output:
*
*
*
*
*
```
(c)
```java
for (int i=0; i<2; i++) {
System.out.println("outer " + i);
for (int j=0; j<3; j++) {
System.out.println("Inner " + i + " " + j);
}
for (int k=2; k>0; k--) {
System.out.println("Inner " + i + " " + k);
}
}
// Output:
outer 0
Inner 0 0
Inner 0 1
Inner 0 2
Inner 0 2
Inner 0 1
outer 1
Inner 1 0
Inner 1 1
Inner 1 2
Inner 1 2
Inner 1 1
```
## Exercise 5
In lecture notes 3.2 (Repetition Structures – Part 2), the Java program FindPrime is used to illustrate nested-loops.
```java
public class FindPrime {
public static void main(String[] args) {
int count = 1;
System.out.print(2); // 2 is the first prime number
int num = 2;
while (count < 20) {
num++; // try next number
boolean isPrime = true;
for (int i = 2; i < num; i++) {
if (num % i == 0) // divisible by i
isPrime = false; // not a prime
}
if (isPrime) {
count++; // one more prime is found
System.out.print(", " + num);
}
}
System.out.println("\nDone");
}
}
```
(a) Add some program statements to count the number of times the inner-loop has been executed, and verify that it agrees with the value 2415 given in the lecture notes.
```
c:\> java FindPrime
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
Done
Total calculation = 2415
```
(b) Modify the program so that the number of times the inner-loop is executed can be reduced without sacrificing the correctness of the program. Report the number of times the inner-loop has been executed in your improved program.
```
c:\> java FindPrime2
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
Done
Total calculation = 677
```
## Exercise 6
Write a program that asks the user to input an integer. The program then prints a pattern with the number of lines controlled by the user input. You must use a nested-for loop.
(a)
```
c:\exercises> java Pattern
Number? 4
1
12
123
1234
```
(b)
```
c:\exercises> java Pattern2
Number? 5
1
12
123
1234
12345
```
## Exercise 7
Generate a Multiplication Table:
Write a Java program to fill values to a two-dimensional array, mTable[10][10], for a multiplication table. Print the multiplication table as follows.
```
0 1 2 3 4 5 6 7 8 9
+------------------------------
0| 0 0 0 0 0 0 0 0 0 0
1| 0 1 2 3 4 5 6 7 8 9
2| 0 2 4 6 8 10 12 14 16 18
3| 0 3 6 9 12 15 18 21 24 27
4| 0 4 8 12 16 20 24 28 32 36
5| 0 5 10 15 20 25 30 35 40 45
6| 0 6 12 18 24 30 36 42 48 54
7| 0 7 14 21 28 35 42 49 56 63
8| 0 8 16 24 32 40 48 56 64 72
9| 0 9 18 27 36 45 54 63 72 81
```
## Exercise 8
Write a Java program to prompt a user to input some positive real numbers and store them in an array. The user can enter no more than 10 numbers. The program should stop prompting input when the user has entered the 10th number or input a negative value, e.g. -1. Then, the program starts to calculate the following statistics.
1. Sum = $\sum_{i=1}^{n}x_i$
2. Mean, $\overline{x} = \frac{Sum}{n}$
3. Maximum
4. Minimum
5. Standard Deviation, $\sigma = \sqrt{\frac{\sum_{i=1}^{n}(x_i-\overline{x})^2}{n-1}}$ (for $n>1$ only)
Test your program with the following five numbers, 1.23, 2.05, 4.0, 0.01, 0.12. Their sum=7.41, mean=1.48, maximum=4.0, minimum=0.01, and standard deviation=1.64.
## Exercise 9
Approximate sin x by a sum of series:
Write a Java program to calculate the following series ($x$ is in radians, $360° = 2\pi$ radians):
```math
\sin(x)=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}-\frac{x^{11}}{11!}...+\frac{x^{25}}{25!}-\frac{x^{27}}{27!'}, -3.1416 < x < 3.1416
```
**Sample Output**
```
C:\>java SinX
Enter x (in radians): _2_
Term 1 = 2.0
Term 2 = -1.3333333333333333
Term 3 = 0.26666666666666666
Term 4 = -0.025396825396825393
Term 5 = 0.0014109347442680773
Term 6 = -5.130671797338463E-5
Term 7 = 1.3155568711124264E-6
Term 8 = -2.5058226116427168E-8
Term 9 = 3.6850332524157597E-10
Term 10 = -4.309980412182175E-12
Term 11 = 4.1047432496973094E-14
Term 12 = -3.2448563238713907E-16
Term 13 = 2.163237549247594E-18
Term 14 = -1.2326139881752673E-20
Sin(2.0)=0.9092974268256817
```