Skip to main content

Written Response 2: Algorithms, errors and testing, and abstraction

Two processors in parallel

  • Units 3 and 4
  • 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

This program estimates how long a batch of tasks takes on a computer with two processors that work in parallel. The user enters the number of tasks and then each task's time in seconds. Each task runs on one processor from start to finish.

twoProcessorTime is meant to return the shortest possible time to finish every task using both processors. It gives each task, in the order entered, to whichever processor has less work so far (processor A when they're tied).

The program displays the time on one processor (sequential), the time on two (parallel), and the speedup. Example: 4 tasks of 40, 30, 20 and 10 seconds display 100 50 2.

Source: Sample program written for this practice question (hypothetical)

Procedure: twoProcessorTime

Pseudocode
PROCEDURE twoProcessorTime(taskTimes)
{
    timeA ← 0
    timeB ← 0
    index ← 1
    REPEAT UNTIL(index > LENGTH(taskTimes))
    {
        IF(timeA ≤ timeB)
        {
            timeA ← timeA + taskTimes[index]
        }
        ELSE
        {
            timeB ← timeB + taskTimes[index]
        }
        index ← index + 1
    }
    IF(timeA > timeB)
    {
        RETURN(timeA)
    }
    RETURN(timeB)
}

Source: Sample program written for this practice question (hypothetical)

List: storing the task times in taskTimes

Pseudocode
taskTimes ← []
count ← INPUT()
REPEAT count TIMES
{
    APPEND(taskTimes, INPUT())
}

Source: Sample program written for this practice question (hypothetical)

Calling the procedure and using the list

Pseudocode
sequential ← 0
FOR EACH t IN taskTimes
{
    sequential ← sequential + t
}
parallel ← twoProcessorTime(taskTimes)
DISPLAY(sequential)
DISPLAY(parallel)
DISPLAY(sequential / parallel)

Source: Sample program written for this practice question (hypothetical)

Suggested time: 45 minutes

Your answers are saved in this browser as you type.

Something wrong with this question?

What's wrong?

Please don't include personal details.

Part (a)

1 point

Explain how the selection inside the iteration statement in twoProcessorTime decides which processor gets each task. Show, task by task, the values of timeA and timeB for the example, and identify the value returned.

0 / 2,500 characters

Part (b)

1 point

Write a call to twoProcessorTime 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 twoProcessorTime behave incorrectly, explain why.

0 / 2,500 characters

Part (c)

1 point

Explain how the list taskTimes uses abstraction to manage complexity in this program. Then suppose the program did not use a list. Describe how the code that uses the list would have to change to keep the same behavior, or explain why the same behavior would not be possible without a list.

0 / 2,500 characters

Checking scoring…

Scoring it yourself shows you the rubric, examples and a model answer. Try writing your answer first.