CS 1440 Lab 9

Activity 9-1:

Activity Goals

• Review logical expressions
• Review functions that return a logical value

Activity Procedure

Please open a telnet session on the cs machine and log on. Then create a new lab directory and change to it:
```cd 1440
mkdir lab9
cd lab9
```

We'll put some programs in this directory a little later.

You have had lots of opportunities to use conditional and loop structures (e.g. if..else, while) by now. This lab is partly a review of previous techniques and an introduction of a few alternatives. We'll also work with functions which return logical values as a way of cleaning up our logic.

Logical Expressions

Let's review logical expressions first. In C++ when a logical value is expected, 0 means false and anything else means true. You'll see when we cover strings that this interpretation will make our life easier. But this liberal interpretation of true/false can lead to logic errors. For example, what does the following code do?
```int x=5;
if(x=6)cout<<"Equal!";
else cout<<"Not equal!";
```

Surprise! The output is

```Equal!
```

We meant to use the relational expression x = = 6 rather than x = 6. The problem is that the assignment operator "=" returns a value. The value of x = 6 is the value of the left side after the assignment is performed, i.e. 6. Is 6 true or false? Since it's not zero, it is taken as true.

While any nonzero value can be used for true, when a logical expression is calculated as true, its value is 1. For example, the value of the expression 2 > 0 is 1. Sometimes it is important to know this; for example, given the integer variable x, the code

```if(1 < x < 10)cout << "x is between 1 and 10";
else cout << "x is not between 1 and 10";
```

will always print

```x is between 1 and 10
```

Can you figure out why? What should you have said instead of 1 < x < 10?

Let's brush up on evaluating logical expressions. This applet will let you practice for as long as you can stand it.

Functions that Return a Logical Value

Functions can be used to return a logical value. Such functions are declared as bool and return true (1) or false (0) For example:
```bool IsUpper(char c)
{
if(c>='A' && c<='Z')
return true;
else
return false;
}
```

This function returns true if c is an uppercase character, and false otherwise. A sample use:

```char x;
cin >> x;
if(IsUpper(x))
cout << "Uppercase";
else
cout << "Not uppercase";
```

We could actually shorten our function a little:

```bool IsUpper(char c)
{
return c>='A' && c<='Z';
}
```

Actually, we don't need to write this function at all; there's a function isupper declared in ctype.h. If you add

```#include <ctype.h>
```

to the top of your program, you can use isupper and several other character functions (listed on page 266 of our text).

Activity Followup

Write a function IsDigit which returns true if its character argument is a digit and false otherwise. (There's a function isdigit in ctype.h, but please write your own.) Write a program to test this function called digit.C that asks the user to enter a character and uses the IsDigit function to output whether or not the character is a digit.