# Exam 1 Review¶

Your first exam will include a written part that you will take in an ACC Testing Center using a “Locked Down Browser”. The exam will be on Blackboard, but not visible except in the Testing Centers. (Make sure you have your ACC ID when you go there!) The exam will be available for one week beginning on Monday, February 19. You need to complete the exam by Monday, February 26.

There will also be an open book Scratch problem for you to complete. That part will be posted on the class website on Sunday of the week you take the exam. This lab project is also due on February 26.

## Written Prepration¶

To get ready for the exam, be sure you have read these sections from the first part of your text (Starting Out with Programming Logic & Design):

• Chapter 1: Introduction to Computers and Programming
• Chapter 2: Input Processing, and Output
• Chapter 3: Modules
• Chapter 4: Decision Structures and Boolean Logic
• Appendix B: The ASCII Character Set

You should also review the lecture materials I have posted.

You do not need to memorize a bunch of detailed facts, just review the concepts we are covering. We are focusing on the tools and techniques we use to break real world problems down so we can solve them precisely, hopefully using a computer!

The review is in the form of a summary of the basic concepts we have studied, and how they fit together to build a solution. The topics in this review are not necessarily in the exact order they are presented in the book. I have organized them based on the phases of problem solving commonly referred to in the literature on this topic.

Note

You will not be asked any questions about Scratch. We are using that tool to let you experience putting together simple solutions to a puzzle using constructs that are exactly like those we are studying. Sequences, Loops, and Decisions!

## Basic Structures¶

We introduced three basic structures used in programming, and in human problem solving. You should know these well enough to discuss them. To show them on the exam, we will use pseudo-code which is mostly English sentences, but as short as you can make them!

I recommend using a notation like this:

```Sequence:
Step 1
Step 2

Decision:

IF something is true THEN
do something
ELSE
do something else
ENDIF

Loop:

WHILE (something is true LOOP
do something
ENDWHILE
```

Warning

When you take the test, be careful not to hit the tab key at any time. Doing so will throw you off the current question and perhaps break your session. The Web Browsers used by the Testing Center are a bit quirky! If you want to indent something just use spaces to do the job! I will not be grading on style.

If you do break a test session, I will have to reset your attempt in Blackboard before you can try again, and that can take a while to get done. Please be careful!

## Problem Solving¶

Our goal is to learn how to think through a problem in a clear, unambiguous way. Perhaps the solution to the problem will lead to a computer program. Perhaps not. What matters is how you train yourself to think clearly.

• You are learning how to understand the problem well

• You are studying that problem looking for things that help you break it down

• You are always thinking about what could go wrong in any part of the solution

• Look for places users can make mistakes

• By accident
• On purpose, trying to break your program! (They will do this, trust me!)
• You are learning how to approach designing a solution:

### Step 1: Define the problem¶

• We always start with a Problem Statement

• Written by human beings and full of ambiguity
• Try to get as much detail as possible to avoid questions later
• Ask the originator of this problem (your boss, or customer) for any additional details if possible.

### Step 2: Analyze the Problem¶

• Break down the problem statement

• Identify key pieces of information

• Input data

• Output data

• Required processing

• How do we convert the input data into the output data?
• Need to fill in details by asking questions

• Eliminate any unknowns in the Problem Statement
• Never assume things, ask the customer for details

### Step 3: Design the Solution¶

• Use Decomposition to carve off pieces of the task, creating smaller tasks

• Compose your solution by combining the pieces in a sequence

• Think about Input - Process - Output as a start
• Use Basic Structures in thinking through the solution

• Sequence

• Do something Step by step
• Decision

• What you need to do depends on the data you have in hand
• loop

• You need to process a set of data items

• While loop

• Getting the loop started ( Preseeded Loops )
• Stopping the loop ( Sentinel Values )
• Counted Loop

• Use a counter variable initialized to zero
• Increment the counter inside the loop
• Test the counter to see if you should stop the loop
• Important characteristics of a structure

• Single Input
• Single Output
• Using Pseudo-Code

• Pick a few Key Words to identify the structure (IF, WHILE, etc)

• Use simple, crisp English phrases to describe tasks to perform

• Use names that make sense for variables (containers that hold your data)
• Program Style

• Indenting shows structure, and nested structure
• Common Programming Patterns

• Reading data from user

• Prompts
• Storing in variables with useful names
• Generating output

• Finding the sum of a set of numbers

• Initialize an accumulator variable to zero (clear the calculator)

• Loop over the items

• Add the item to the accumulator variable
• Stop when you reach the maximum item count, or a sentinel value
• Processing a variable number of items

• Identify a value for the data that is not likely to occur (Sentinel Value)
• Loop until you see the Sentinel Value
• Homing in on a solution (square root)

• Guess the answer

• determine if you are low or high

• Pick a step size

• Loop

• Move toward the solution

• Test to see if you stepped past solution

• if so then

• Reverse direction

• Decrease step size

• Stop if the step is small enough (you are close enough to the answer)
• end loop

• Doing Math

• Arithmetic expressions - produce a numerical value

• Logical expressions - produce a true/false value

• Remember the two different ways computers do calculations:

• If both numbers are integers (no decimal point) the result will not have a fraction. It is simply chopped off!
• If either number )or both) is a floating point number (contains a decimap point), the calculation is dome in floating point, and fractions will be generated
• 1/2 is NOT 0.5, it is zero! Know why!

### Step 4: Building the Program¶

• Set up Data containers

• Places to store information

• Variable Names should help in understanding solution
• Identify innput data from the user

• Determine output data needed to display to the user

• Internal data, needed during processing (temporary variables)

• Take Baby Steps

• Work by making small changes to your scheme
• Test them (in your head if needed) to see that they work
• Fix errors
• Repeat until done
• Deploy your solution

• Don’t Repeat yourself

• If you see the same chunk of code twice, think about how to eliminate this

• Use a loop
• Later, we will build a module
• Why is this important

### Final Steps¶

There are more steps in the process, but we have not covered them yet!

## Common Mistakes¶

It is common for beginners in a class like this to have problems thinking through a problem. Humans leap around trying out ideas in their head until they get something to work, then probably have trouble writing down what they did. To get past this, replay the problem and your solution, this time writing down what you did. You have to visualize yourself finding that solution again, leaving out the stuff that went through your head and got you nowhere!

The real problem is writing down exactly what needs to be done, and not leaving things for the human to fill in. Even something like our square root problem might have a simple statement like this:

When you step over the solution, reverse direction.

How do you do that?

Well, you are probably doing something over and over (that is a loop), and you are adding a small number to a guessed value trying to find a number that is the answer. Each time you add something, your guess gets bigger. When you see that your guess is too big, adding more will not work. We need to subtract something to get smaller. That is “reversing direction” and we now know how to do it.

By the way, when you do this, you need to change the number you added to something smaller, or you will zoom past the answer in the opposite direction, realize you are too small, switch directions again, and go past the solution yet another time! Ugh! If you make the number smaller each time you change direction (cutting it in half is a good approach), eventually you will home in on the solution.

Think this through by visualizing yourself driving your car and needing to stop right on a line on the road. You might overshoot, backup and miss it, then go forward. Eventually you will hit the mark, close enough for you to stop. We need to teach the machine to do the same thing.

If you are faced with a problem on the exam, first think it through as a human. How would you do this task in real life. Then think about explaining it precisely enough that some clueless space alien (who at least understands English!)

Rely on your experience getting through life up to this point. You can solve problems, you just have not tried to explain your solutions as precisely as we need to if we are ever going to get this beast called a computer to do our work for us!

## More Review¶

In looking through my materials, I stumbled on this website. You should read through this and make sure you agree with the answers. It will help make sure you are ready for our first exam!