## CS107 - Lab 9

Due Tuesday 11/23.

Overview: C++ functions and recursion.

As you write your program please remember to pay attention to issues of style, including:

• descriptive naming of variables
• indentation
• separating logical blocks of code with with space

### Problems

1. Binary search

Write a program that allows the user to search for a target value in an array using binary search. Your program should ask the user to enter a sorted array and a target value and then call a binary search function. Write your binary search function such that it is recursive.

```
//search for target in array a[] between positions start and
//end. return the index where it is found, or -1 if not found

int binarySearch(int a[], int start, int end, int target) {

}

}

void provideFeedback(parameter-list) {

}

int main() {

int a[100], n, target;

//read the array from user and set n to its size

cout << "Enter target: ";
cint >> target;

int index;
index = binarySearch(a, 0, n-1, target);

//let the user know whether the target has been found or not
provideFeedback(index);
}

```
Remember how binary search works: you compare the target with a[middle], and depending on the result of the comparison you search for it left or right. How would you express this recursively? That is, can you express the problem of searching left (right) as another binary search problem?

2. I'm thinking of a number...

Write a program that implements a binary-search-like guessing game: the program picks a random number and asks the user to guess it; the user is told, for each guess, whether it is too high or too low.

• explain the game to the user
• generate a random number from 1 to 1024
• allow the user to play the guessing game
• report the result

Design your program so that your main program looks exactly as below:

```int main() {

const int GUESS_LIMIT = 1024;
const int NB_GUESSES = 10;

//seed the random number generator with the current time so that you
//get different numbers each time you run it (you don't need to do
//anything further with this).
srand(clock());

//explain the program to the user. you do not need to ask whether
//they want to use it --- assume they do.
explainProgram();

//generate a target from 1 to GUESS_LIMIT
int target = generateTarget(GUESS_LIMIT);

//allow the user to play the guessing game; if the user does not
//guess te answer in GUESS_LIMIT guesses they lose
int won = playGuessingGame(GUESS_LIMIT, target, NB_GUESSES);

//let them know whether they won or not
provideFeedback(won);

}
```
Note that the way the functions are used in main tells you exactly what the function header (the first line of a function that specifies the return type, function name and parameter list) should look like. For example, given this function:
```int target = generateTarget(GUESS_LIMIT);
```
you know that the function returns an integer value and has a single parameter which must be an integer. So the function will look like this:
```int generateTarget(int upperLimit) {

//generate a random number in the range 1..upperLimit and return this
//value

}

```

### Turning in:

Email me the programs or put them in the drop box. If you work in a team submit only one file per team. Make sure you include your name on the top line of all your .cpp programs!!