# What Does This Program Do?

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Frequently, one must use or modify sections of another programmer’s code. Since the original author is often unavailable to explain his/her code, it is essential to be able to read and understand an arbitrary program. This category has been rewritten using pseudocode similar to the design of the AP CS Principles course. Pseudo-code is English-like, language independent algorithmic code and should be able to be traced by students regardless of whether they are familiar with BASIC, C++, Java, Python, or any other high level language. We will use the following constructs in writing this code for this topic in ACSL:

The questions in this topic will cover any of the above constructs in the Intermediate and Senior Division. In the Junior Division, loops will not be included in contest 1; loops will be used in contest 2; strings will be used in contest 3; and arrays will be included in contest 4. Line numbers will be included for the purpose of explaining the solution.

# Sample Problems

## Sample Problem 1

After this program is executed, what is the value of B that is printed if the input values are 50 and 10?

10 input H, R
20 B = 0
30 if H>48 then
40 B = B + (H - 48) * 2 * R
50 H = 48
60 end if
70 if H>40 then
80 B = B + (H - 40) * (3/2) * R
90 H = 40
100 end if
110 B = B + H * R
120 output B

Solution: This program computes an employee’s weekly salary, given the hourly rate (R) and the number of hours worked in the week (H). The employee is paid an hourly rate for the number of hours worked, up to 40, time and a half for the overtime hours, up to 48 hours, and double for all hours over 48. The table monitors variables B and H:

LINE B H
20 0 50
50 40 48
90 160 40
110 560 40

Therefore, the final value of B is 2*2*10 + 8*3/2*10 + 40*10 = 40 + 120 + 400 = 560.

## Sample Problem 2

After the following program is executed, what is the final value of NUM?

10 A = “BANANAS”
20 NUM = 0: T = “”
30 for J = len(A) - 1 to 0 step –1
40 T = T + A[j]
50 next
60 for J = 0 to len(A) - 1
70 if A[J] == T[J] then NUM = NUM + 1
80 next

Solution: The program first stores the reverse of variable A into variable T and then counts the number of letters that are in the same position in both strings. A B A N A N A S T S A N A N A B * * * * * Those positions marked with an asterisk contribute one to the value of NUM. There are 5 such positions.

## Sample Problem 3

After the following program is executed, what is the final value of C[4]?

```    10 A[0] = 12: A[1] = 41: A[2] = 52
20 A[3] = 57: A[4] = 77: A[5] = -100
30 B[0] = 17: B[1] = 34: B[2] = 81
40 J = 0: K = 0: N = 0
50 while A[J] > 0
60      while B[K] <= A[J]
70             C[N] = B[K]
80             N = N + 1
90             k = k + 1
100       end while
110       C[N] = A[J]: N = N + 1: J = J + 1
120 end while
130 C[N] = B[K]
```

Solution: The following table traces the variables through the execution of the program.

j k n A[j] B[k] C[n] 0 0 0 12 17 12 1 0 1 41 17 17 1 1 2 41 34 34 1 2 3 41 81 41 2 2 4 52 81 52 3 2 5 57 81 57 4 2 6 77 81 77 5 2 7 -100 81 81

Thus, the value of C[4] is 52. Note that this program merges two arrays in increasing order into one array until a negative number is input.