Written Response 2: Algorithms, errors and testing, and abstraction
Image row compression
- Units 2 and 3
- 3 points
- About 45 minutes
Three prompts about the program's code. (a) Algorithm development: explain how a loop or condition works, such as how many times a loop runs or what makes it stop. (b) Errors and testing: describe a call, input or change that causes an error or wrong behavior and explain why. (c) Data and procedural abstraction: explain how the list or procedure manages complexity, or explain, step by step, an algorithm that uses the list. On the exam: Question 2 of 2 (3 points: parts (a), (b) and (c) are worth 1 point each). Section II has 2 written-response questions (4 prompts) in 60 minutes, taken in Bluebook at the end-of-course exam; no calculator. On the real exam the questions are about your own Create performance task program, and you can see your Personalized Project Reference (screenshots of your procedure and list code). The Create task is 30% of the AP score, scored on 6 one-point rows: video, program requirements, WR1, WR2(a), WR2(b) and WR2(c). On this site you answer the same kinds of prompts about a short sample program given with the question.
The question and its sources
Answer parts (a), (b) and (c) about the sample program below. On the exam these prompts are about your own Create task program and your Personalized Project Reference; here, the code segments below play that role. Refer to the specific code in every answer, and write in complete sentences.
About the program
A drawing app saves black-and-white images one row at a time. Each pixel is stored as "W" (white) or "B" (black). To save space, compressRow uses run-length encoding: it replaces each run of identical pixels with the color followed by how many times it repeats in a row.
The user first enters the width of the row, then each pixel in order.
Example: entering 6, then W, W, W, B, B, W displays W 3 B 2 W 1.
Source: Sample program written for this practice question (hypothetical)
Procedure: compressRow
PROCEDURE compressRow(row)
{
result ← []
count ← 1
index ← 2
REPEAT UNTIL(index > LENGTH(row))
{
IF(row[index] = row[index - 1])
{
count ← count + 1
}
ELSE
{
APPEND(result, row[index - 1])
APPEND(result, count)
count ← 1
}
index ← index + 1
}
APPEND(result, row[LENGTH(row)])
APPEND(result, count)
RETURN(result)
}Source: Sample program written for this practice question (hypothetical)
List: storing the pixels in pixels
rowWidth ← INPUT()
pixels ← []
REPEAT rowWidth TIMES
{
APPEND(pixels, INPUT())
}Source: Sample program written for this practice question (hypothetical)
Calling the procedure and using the list
encoded ← compressRow(pixels)
FOR EACH item IN encoded
{
DISPLAY(item)
}Source: Sample program written for this practice question (hypothetical)
Suggested time: 45 minutes
Your answers are saved in this browser as you type.
Part (a)
1 pointConsider the iteration statement in compressRow. Identify the variable(s) that determine when it stops repeating, and give the specific value(s) that make it stop for the example row of 6 pixels. Explain why those value(s) cause it to stop.
0 / 2,500 characters
Part (b)
1 pointWrite a call to compressRow with specific argument(s) that the procedure accepts but that cause it to behave incorrectly. Describe the incorrect behavior, and explain why it happens as a result of your call. If no call with accepted arguments can make compressRow behave incorrectly, explain why.
0 / 2,500 characters
Part (c)
1 pointAnother part of the app needs to rebuild the original row from the list that compressRow returns. Using the list encoded, explain in detailed steps an algorithm that creates a new list holding the original pixels, in order. Your explanation must be detailed enough for someone else to write the program code.
0 / 2,500 characters
Checking scoring…
Scoring it yourself shows you the rubric, examples and a model answer. Try writing your answer first.