1 operations chapter 4 & section 5.2. 2 expressions as we've seen, in a c++ program, any...

32
1 Operations Operations Chapter 4 Chapter 4 & & Section 5.2 Section 5.2

Upload: brook-lindsey-horton

Post on 18-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

1

OperationsOperations

Chapter 4Chapter 4&&

Section 5.2Section 5.2

Page 2: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

2

ExpressionsExpressions

As we've seen, in a C++ program, any finite As we've seen, in a C++ program, any finite sequence of sequence of objectsobjects and and operationsoperations that that combine to produce a value is called an combine to produce a value is called an expressionexpression..

A temperature conversion example:A temperature conversion example: fahrenheit = 1.8 * celsius + 32;

We now consider C++ We now consider C++ operationsoperations..Why not

fahrenheit = 9/5 * celsius + 32; ?

Page 3: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Numeric ExpressionsNumeric Expressions

C++ provides four familiar arithmetic operators:

+ for performing addition

- for performing subtraction

* for performing multiplication

/ for performing division

Each can be applied to either real (double) or integer (integer (int) [or character () [or character (char)] )] operandsoperands. 3

C++ provides more than 50operations (See Appendix C)

Page 4: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

4

DivisionDivisionHowever, / behaves differently for However, / behaves differently for int than for than for double operands: operands:

Type of Operands Kind of Division Performed

intdouble

__________________________

Integer division calculates the quotient, but it also calculates the remainder. To find it we can use the modulus operator %; for example, 9 % 5 = ____.

Page 5: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

56 / 10 =

56 % 10 =

1 / 2 =

1 % 2 =

2 / 3 =

2 % 3 =

5

456 / 100 =

456 % 100 =

More examples:

Keep in mind for Project 3

What about mixed-mode (i.e., mixed-type) expressions?

Automatic Type Conversion (p. 73): Promotion: "Narrower" types (fewer storage bits) "widened" e.g., int double; 9/3.0 9.0/3.0;

Explicit Type Conversion (p. 73-4): Type Casting

Use type name to convert an expression:

double(intVal) or (double)intValFunctional Notation Cast Notation

Page 6: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Numeric FunctionsNumeric Functions

The library <cmath> contains a variety The library <cmath> contains a variety of mathematical functions, including:of mathematical functions, including:

sin(x) asin(x)cos(x) acos(x)tan(x) atan(x)sqrt(x) abs(x)exp(x) pow(x, y)log(x) floor(x)log10(x) ceil(x)

6

Hyperbolic functions: cosh(x), sinh(x), tanh(x)

See Appendix Dfor other mathfunctions andother libraries.

Page 7: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Using <cmath> functionsUsing <cmath> functions

7

#include <iostream>

________________________

using namespace std;

int main()

{

cout << "\nEnter base and exponent: ";

double base, exponent;

cin >> base >> exponent;

double result = ________________________;

cout << base << " raised to the power "

<< exponent << " is " << result << endl;

}

C++ libraries whose namesstart with 'c' are C libraries.Their C-names do not havethe 'c' but have .h appended;

e.g., <math.h>

Essentiallysame as '\n'

Page 8: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

PrecedencePrecedence

Issue: Is the value of the expressionIssue: Is the value of the expression

2 + 3 * 4

(2 + 3) * 4 (2 + 3) * 4 24 or 2 + (3 * 4) 24 or 2 + (3 * 4) 14 ? 14 ?

Operator __________________Operator __________________ governs governs evaluation order.evaluation order.

* has * has higher precedencehigher precedence than +, so it is than +, so it is applied first, making the answer ______.applied first, making the answer ______.

8

Page 9: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

AssociativityAssociativity

Does the expressionDoes the expression

8 - 4 - 28 - 4 - 2

evaluate (8 - 4) - 2 evaluate (8 - 4) - 2 2 or 8 - (4 - 2) 2 or 8 - (4 - 2) 6 ? 6 ?

Precedence doesnPrecedence doesn’’t help us.t help us.

AssociativityAssociativity does. Since - is does. Since - is ______________________________________, the left - is evaluated , the left - is evaluated first.first.

Most C++ operators that we use associate left.Most C++ operators that we use associate left.

See Appendix C for a complete list.See Appendix C for a complete list.9

Page 10: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

AssignmentAssignment

Assignment is one operator that is right-Assignment is one operator that is right-associative, which allows expressions like:associative, which allows expressions like:

int w, x, y, z;

____________________________

10

The rightmost = is applied first, assigning z zero, then y is assigned the value of z (0),

w = (x = (y = (z = 0)));

then x is assigned the value of y (0), and finally w is assigned the value of x (0).

Assignment operatorreturns the valuebeing assigned.

Mixed-mode assignments convert the value to type of variable and assign it.

Page 11: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Assignment ShortcutsAssignment Shortcuts

Certain assignments are very common:Certain assignments are very common:var = var + x; // add x to var

var = var - y; // sub y from var

C++ provides shortcuts for them:C++ provides shortcuts for them:

______________________________; // add x to var

______________________________; // sub y from var

11

Page 12: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

In GeneralIn General

Most arithmetic expressions of the form:Most arithmetic expressions of the form:var = var value;

can be written in the "shortcut" form:can be written in the "shortcut" form:var = value;

Examples:Examples:double x, y;

cin >> x >> y;

________________________; // double x’s value

________________________; // decrease y by half12

Page 13: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Increment and DecrementIncrement and Decrement

Other common assignments include:Other common assignments include:var = var + 1; // add 1 to var

var = var - 1; // sub 1 from var

so C++ provides shortcuts for them, too:so C++ provides shortcuts for them, too:

________________________; // add 1 to var

_____________;

________________________; // sub 1 from var

________________________;13

Integer variables

only!

Page 14: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Prefix vs. PostfixPrefix vs. Postfix

As long as the increment (or decrement) operator is used as a separate statement:

int y = 0, x = 0;

. . .

++x; // x becomes ____

y++; // y becomes ____

it makes no difference which version is used.

14

Page 15: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

15

If the increment operator is used within another expression, it does make a difference whether it is prefix or postfix.

The prefix form of increment produces the final (incremented) value as its result:

int x, y = 0;

x = 2 * (++y);

cout << x << " " << y; //

The prefix decrement behaves similarly.

2 1 is displayed

Page 16: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

16

The postfix form of increment produces the original (unincremented) value as its result:

int x, y = 0;

x = 2 * (y++);

cout << x << " " << y; //

The prefix decrement behaves similarly.

0 1 is displayed

Page 17: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

I/OI/O

•17

In most programming languages, input and output are performed by functions with names like read() and print(). In C++, however, (but not C) they are performed by ____________ >> and <<:•input_stream >> variable

•output_stream << expression.

Page 18: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

18

But these are _____________. Because >> and <<

are operators, these i/o expessions must alsoproduce a ___________.cin >> variable returns ______ as its value;

cout << expression returns _______ as its value.

We know that:

cin >> variable reads a value from the keyboard and assigns it to variable

cout << expression outputs the value of expression to the screen.

Page 19: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

19

Arithmetic operators can be chained together in expressions like a + b + c and a - b - c.

Input and output operators can also be chained; for example:

cout << "Width =" << width << " ft.\n";

and

cin >> length >> width;

These work because of the values returned by >> and << and both are ________-associative.

Why???

Page 20: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

20

Example:

cout << "Width =" << width << " ft.\n";

_cout << "Width ="_ << width << " ft.\n";

______ << width << " ft.\n";

_cout << width_ << " ft.\n";

______ << " ft.\n";

______; Width = 8.5 ft.

Page 21: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Relational OperationsRelational Operations

C++ provides six operators for comparisons. C++ provides six operators for comparisons.

Each has two operands and produces a Each has two operands and produces a

______________ value ( value (______________________________________):):

x == y x != y

x < y x >= y

x > y x <= y

21Warning: 1 < x < 2

Page 22: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

22

C, the parent language of C++, has no bool type. Instead, it uses _____ to represent false

and ______________ values to represent true.

For upward compatibility, C++ also does this:• 0 is interpreted as false• nonzero is interpreted as trueFor input and output, 0 is used for false, 1 for true (see program on Slide #29)unless_____________ is inserted in an I/O statement (see modification of program on Slide #29). It remains in effect for rest of program (unless noboolalpha is used in an I/O statement).

Page 23: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Also, it can be dangerous to compare reals

with _____ and _____ when one or both of the reals may have roundoff error.

See the program on Slide #25.

One of the easiest mistakes to make

in C++ is using __________________

in place of ________________

See the program on Slide #24.

23

Page 24: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

#include <iostream>using namespace std;

int main(){ int x; cout << "Enter an integer: "; cin >> x;

if (x = 99) cout << "Yes\n"; else cout << "No\n";}}

24

Executions:

Enter an integer: 99Yes

Enter an integer: -99Yes

Enter an integer: 0Yes

With change:

if (x if (x == 99) 99)

Enter an integer: 99

Yes

Enter an integer: -99

No

Enter an integer: 0

No

Page 25: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

//-- Effect of roundoff error//-- Effect of roundoff error#include <iostream>#include <iostream>#include <cmath>#include <cmath>using namespace std;using namespace std;

int main()int main(){{ for (float x = 0; for (float x = 0; x != 50.0; x = x + 0.1); x = x + 0.1) {{ float y = x * sqrt(1 + sin(x));float y = x * sqrt(1 + sin(x)); cout << x << " " << y << endl;;cout << x << " " << y << endl;; }}} }

25

Execution:

0 0

0.1 0.104873

0.2 0.218968

. . .

49.9998 42.937

50.0998 45.782650.1998 48.5246 . . .100.099 76.3241 . . .

With change:

for (float x = 0; x < 50.0; x = x + 0.1)

Enter an integer: 10 0

0.1 0.104873

0.2 0.218968

. . .

49.7998 36.9654

49.8998 39.9954

49.9998 42.937

orabs(x - 50) >= 1E-10

Page 26: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

PreconditionsPreconditions

Sometimes values must satisfy certain Sometimes values must satisfy certain requirements for a program to process them requirements for a program to process them (e.g., they must be positive) . (e.g., they must be positive) .

Such requirements are called Such requirements are called preconditionspreconditions or or ______________________________ . They are boolean . They are boolean expressions that must be true in order for expressions that must be true in order for the program to work correctly.the program to work correctly.

A convenient way to check preconditions is A convenient way to check preconditions is to use C++to use C++’’s s assert() mechanism. mechanism. if statement

later

e.g., Project 2.3

26

Page 27: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

AssertionsAssertions#include <iostream>#include _________________using namespace std;int main(){

cout << "\nEnter the current month number: "; int month; cin >> month; _______________________________________; // ...}

assert() will halt the program if will halt the program if month < 1 or month > 12 and display a message.

27

Page 28: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

NOTE

Logical OperatorsLogical Operators

More complex boolean expressions can be More complex boolean expressions can be built using the logical operators:built using the logical operators:

b1 && b1 // true iff b1, b2 are both true

b1 || b2 // true iff b1 or b2 is true

!b // true iff b is false

Example:Example:cin >> month;

______________________________________

28NOT: assert(1 <= month <= 12);

Page 29: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

#include <iostream>#include <iostream>using namespace std;using namespace std;

int main()int main(){{ bool input1, input2, output;bool input1, input2, output; cout << "Enter inputs: ";cout << "Enter inputs: "; cin >> input1 >> input2;cin >> input1 >> input2;

output = (input1 || input2) && !(input1 && input2);output = (input1 || input2) && !(input1 && input2); cout << "Output for inputs " << input1 cout << "Output for inputs " << input1 << " and " << input2 << " is " << output << '\n';<< " and " << input2 << " is " << output << '\n';}}

29

Executions:

Enter inputs: 0 1Output for inputs 0 and 1 is 1

Enter inputs: 1 1Output for inputs 1 and 1 is 0

With change:

cout << "Output for inputs " << boolalpha << input1

<< " and " << input2 << " is " << output << '\n';

Enter inputs: 0 1Output for inputs false and true is true

With change: cin >> boolalpha >> input1 >> input2;

Enter inputs: false true

Output for inputs false and true is true

Binary Half-Adder: (§5.3)Full Adder: (ProgrammingProblems)

Page 30: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Character FunctionsCharacter FunctionsThe library <cctype> contains an assortment The library <cctype> contains an assortment of boolean character-processing functions:of boolean character-processing functions:

isalpha(ch) isalnum(ch)

isdigit(ch) iscntrl(ch)

islower(ch) isupper(ch)

isspace(ch) ispunct(ch)

isprint(ch) isgraph(ch)

and two case-conversion functions:and two case-conversion functions:toupper(ch) tolower(ch)

30

SeeApp. D

Page 31: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Examples:Examples:

Write an assertion that will halt the program if a char object named ch is not an uppercase letter:

31

Write an assertion that will halt the program if ch is not one of ‘A ’ through ‘G ’:

assert('A' <= ch && ch <= 'G');

assert('A' <= ch && ch <= 'Z'); oror assert(isupper(ch));

Page 32: 1 Operations Chapter 4 & Section 5.2. 2 Expressions As we've seen, in a C++ program, any finite sequence of objects and operations that combine to produce

Operator PrecedenceOperator Precedence

( ) HIGHERHIGHER

+ (positive), (positive), - (negative), (negative), ! (NOT) (NOT)

*, , /, , %

+ (addition), (addition), -- (subtraction) (subtraction)

<, , <=, , >, , >=

<<, >>

==, , !=

&&

||

= LOWERLOWER

See Appendix C for a complete list.See Appendix C for a complete list.

54 operators18 precedence

levels

32

When in doubt,use parentheses!