Difference between revisions of "What Does This Program Do?"
Marc Brown (talk | contribs) |
Marc Brown (talk | contribs) |
||
Line 1: | Line 1: | ||
Frequently, one must use or modify sections of another programmer’s code. | Frequently, one must use or modify sections of another programmer’s code. Since the original author is often unavailable to explain his/her code, and documentation is, unfortunately, | ||
not always available or sufficient, it is essential to be able to read and understand an arbitrary program. | |||
= Description of Pseudo-code = | This category presents a program and asks the student to determine that the program does. The programs are written using a pseudocode that | ||
should be readily understandable by all programmers familiar with a high-level programming language, such as Python, Java, or C. | |||
= Description of the ACSL Pseudo-code = | |||
We will use the following constructs in writing this code for this topic in ACSL: | We will use the following constructs in writing this code for this topic in ACSL: |
Revision as of 00:39, 6 September 2018
Frequently, one must use or modify sections of another programmer’s code. Since the original author is often unavailable to explain his/her code, and documentation is, unfortunately, not always available or sufficient, it is essential to be able to read and understand an arbitrary program.
This category presents a program and asks the student to determine that the program does. The programs are written using a pseudocode that should be readily understandable by all programmers familiar with a high-level programming language, such as Python, Java, or C.
Description of the ACSL Pseudo-code
We will use the following constructs in writing this code for this topic in ACSL:
Construct | Code Segment | |||||
---|---|---|---|---|---|---|
Operators | ! (not) , ^ or ↑(exponent), *, / (real division), % (modulus), +, -, >, <, >=, <=, !=, ==, && (and), [math]||[/math] (or) in that order of precedence | |||||
Variables | Start with a letter, only letters and digits | |||||
Sequential statements |
| |||||
Decision statements |
| |||||
Indefinite Loop statements |
| |||||
Definite Loop statements |
| |||||
Arrays: | 1 dimension arrays use a single subscript such as A(5). 2 dimension arrays use (row, col) order such as A(2,3). Arrays can start at location 0 for 1 dimension arrays and location (0,0) for 2 dimension arrays. Most ACSL past problems start with either A(1) or A(1,1). The size of the array will usually be specified in the problem statement. | |||||
Strings: | Strings can contain 0 or more characters and the indexed position starts with 0 at the first character. An empty string has a length of 0. Errors occur if accessing a character that is in a negative position or equal to the length of the string or larger. The len(A) function will find the length of the string which is the total characters. Strings are identified with surrounding double quotes. Use [ ] for identifying the characters in a substring of a given string as follows:
S = “ACSL WDTPD” (S has a length of 10 and D is at location 9) S[:3] = “ACS” (take the first 3 characters starting on the left) S[5:] = “WDTPD” (take the last 5 characters starting on the right) S[2:6] = “SL WD” (take the characters starting at location 2 and ending at location 6) S[0] = “A” (position 0 only). |
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.
Sample Problems
Problem 1
After this program is executed, what is the value of B that is printed if the input values are 50 and 10?
input H, R
B = 0
if H>48 then
B = B + (H - 48) * 2 * R
H = 48
end if
if H>40 then
B = B + (H - 40) * (3/2) * R
H = 40
end if
B = B + H * R
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:
B | H |
---|---|
0 | 50 |
40 | 48 |
160 | 40 |
560 | 40 |
Therefore, the final value of B is 2*2*10 + 8*3/2*10 + 40*10 = 40 + 120 + 400 = 560.
Problem 2
After the following program is executed, what is the final value of NUM?
A = “BANANAS”
NUM = 0: T = “”
for J = len(A) - 1 to 0 step –1
T = T + A[j]
next
for J = 0 to len(A) - 1
if A[J] == T[J] then NUM = NUM + 1
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. Variable NUM is incremented each time a character at position x of A is the same as the character in position x of string T. There are 5 such positions: 1, 2, 3, 4, and 5.
Problem 3
After the following program is executed, what is the final value of C[4]?
A(0) = 12: A(1) = 41: A(2) = 52
A(3) = 57: A(4) = 77: A(5) = -100
B(0) = 17: B(1) = 34: B(20 = 81
J = 0: K = 0: N = 0
while A(J) > 0
while B(K) <= A(J)
C(N) = B(K)
N = N + 1
k = k + 1
end while
C(N) = A(J): N = N + 1: J = J + 1
end while
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.