operations and expressions chapter 3. c++ an introduction to computing, 3rd ed. 2 objectives further...

53
Operations and Expressions Chapter 3

Post on 21-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Operations and Expressions

Chapter 3

C++ An Introduction to Computing, 3rd ed. 2

Objectives

Further work with Object-Centered Design

Detailed look at numeric types

Work with bool expressions

Consider the processing of characters

Study assignment operator

Use increment, decrement operators

First look at class constructors

C++ An Introduction to Computing, 3rd ed. 3

Problem

Use Einstein's equation to calculate the amount of energy released by a quantity of mass given in the problem

General

Behavior

For energy released, enter mass

(Must be non-negative): 123

Energy released = 999.99 units

C++ An Introduction to Computing, 3rd ed. 4

Objects

DescriptionSoftware Objects

Type Kind Namescreen ostream varying cout

prompt string constant

quantity of matter double varying mass

keyboard istream varying cin

qty of energy double varying energy

descriptive label string constant

C++ An Introduction to Computing, 3rd ed. 5

Operations

i. Display a string (the prompt) on the screen

ii. Read a nonnegative number (mass) from the keyboard

iii. Compute energy from mass

iv. Display a number (energy) and a string on the screen

C++ An Introduction to Computing, 3rd ed. 6

Additional Elements

We note that step iii. requires Einstein's equation

This implies a few more operations

And additional objects

2e m c

v. Exponentiationvi. Multiplication of realsvii. Storage of a real

DescriptionSoftware Objects

Type Kind NameSpeed of light double constant SPEED_OF_LIGHT

2 int constant

C++ An Introduction to Computing, 3rd ed. 7

Algorithm

We organize the objects and operations into an algorithm:

1. Declare the constant SPEED_OF_LIGHT.

2. Display to cout a prompt for the mass to be converted into energy.

3. Read a nonnegative number from cin into mass.

4. Compute

5. Display to cout a descriptive label and energy.

2energy = mass SPEED_OF_LIGHT

C++ An Introduction to Computing, 3rd ed. 8

Coding, Execution, Testing

Figure 3.1 shows the source code

Sample execution runs are also shown• Two runs with simple test data for easy

checking• One run with more realistic data

C++ An Introduction to Computing, 3rd ed. 9

Expressions

Definition: any sequence of objects and operations that combine to produce a value is called an expression.Example:

double pressure = ((depth / FEET_PER_ATM) + 1) * LBS_PER_SQ_IN_PER_ATM;

C++ An Introduction to Computing, 3rd ed. 10

Numeric Expressions

C++ provides four familiar arithmetic operators:• + for performing addition• - for performing subtraction• * for performing multiplication• / for performing division

Each of these four can be applied to either real (double) or integer (int) operands.

C++ An Introduction to Computing, 3rd ed. 11

Division

Division behaves differently for int and double operands• Note the results of the following

3/40 3.0/4.00.753.0/4 0.75 3/4.00.75

If both operands are integers• Integer division performed• Otherwise real division performed

C++ An Introduction to Computing, 3rd ed. 12

Integer vs. Real Division

Recall division from grade school. Teacher: “4 goes into 3 how many times?” Pupils: “0 times with a remainder 4”

The expression 3 / 4 returns the quotient.• This is integer division

The expression 3 % 4 returns the remainder.• This is read, "3 mod 4"

C++ An Introduction to Computing, 3rd ed. 13

Type Conversions

Combining an int and a real in the same expression• 2 + 3.0 5.0

C++ automatically converts narrow values into wider values• An integer is converted to a real• Result of the expression is a real

Often called "promotion"

C++ An Introduction to Computing, 3rd ed. 14

Precedence

Consider the possible value of the expression

2 + 3 * 4 (2 + 3) * 4 24 or 2 + (3 * 4) 14 ?Operator precedence governs evaluation order.

* has higher precedence than +

* is applied first

C++ An Introduction to Computing, 3rd ed. 15

Operator Precedence

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

*, /, %

<, <=, >, >=

==, !=

&&

|| LOWER

See Appendix C for a complete list...

C++ An Introduction to Computing, 3rd ed. 16

Associativity

Consider the possible value of the expression 8 - 4 - 2

(8 - 4) - 2 4

or 8 - (4 - 2) 6 ?

Precedence doesn’t help us

Associativity tells us. • Subtraction is left-associative, the left - is evaluated

first, giving us 4.

Most (but not all) C++ operators associate left.• See Appendix C in the text for a complete list...

C++ An Introduction to Computing, 3rd ed. 17

Numeric Functions

The library <cmath> contains a variety of mathematical functions, including:sin(x) asin(x)cos(x) acos(x)tan(x) atan(x)sqrt(x) log10(x)log(x) pow(x, y)floor(x) ceiling(x)abs(x)

C++ An Introduction to Computing, 3rd ed. 18

Using <cmath> functions

#include <iostream>#include <cmath>using namespace std;int main(){ double base,

exponent, result;

// INPUT DATA cout << “\nEnter base and exponent: “; cin >> base >> exponent;

//CALCULATE result = pow(base, exponent);

//OUTPUT DATA cout << base << “ raised to the power “ << exponent << “ is “ << result << endl;}

C++ An Introduction to Computing, 3rd ed. 19

Type Conversions

Possible to explicitly convert a value from one type to another

Syntax to use:

type (expression) or (type) expression

Conversion can cause loss of datadouble x = 3.456;cout << (int) x;

What gets output?3

C++ An Introduction to Computing, 3rd ed. 20

Boolean Expressions

C++ type bool has two literals•false and true

Relational operators produce boolean expressions

C++ An Introduction to Computing, 3rd ed. 21

Relational Operations

Use operators for comparisons• Each takes two operands • Produces a bool value (true or false):

x == y x != y

x < y x >= y

x > y x <= y

Warning:• Do NOT confuse = (assignment) • With == (equality).

C++ An Introduction to Computing, 3rd ed. 22

Compound Boolean Expressions

Logical operators

C++ An Introduction to Computing, 3rd ed. 23

Compound Boolean Expressions

More complex boolean expressions can be built using the logical operators:a && b // true iff a, b are both true

a || b // true iff a or b is true

!a // true iff a is false

Example:cin >> score;assert (0 <= score && score <= 100);

C++ An Introduction to Computing, 3rd ed. 24

Short-Circuit Evaluation

Consider the boolean expression( n != 0 ) && ( x < 1.0 / n )• If n == 0 the right hand expression causes a

program crash

C++ will evaluate the original expression from left to right• If n == 0, the left expression evaluates false• Since it is an &&, this makes the whole

expression false• Thus it does not proceed to the right

expression

C++ An Introduction to Computing, 3rd ed. 25

Preconditions

Definition: When a program makes assumptions about its input values • Example: that they’re positive

Preconditions are boolean expressions • Must be true in order for the program to

work correctly.

To check preconditions, C++ provides the assert() mechanism...

C++ An Introduction to Computing, 3rd ed. 26

Assertions

#include <iostream>#include <cassert>using namespace std;int main(){ int age;cout << “\nEnter your age: “;

cin >> age; assert(age > 0); // ...}

Required to use the assert command

assert() will halt the program if age <= 0

C++ An Introduction to Computing, 3rd ed. 27

Character Expressions

Character variables can be …

Declared and initialized• char middleInitial = 'Q';

Assigned• middleInitial = 'Z';

Used for I/O• cout << middleInitial;• cin >> middleInitial;

Compared• assert (middleInitial != 'X');

C++ An Introduction to Computing, 3rd ed. 28

Character FunctionsBoolean character-processing functions found in <ctype> library:isalpha(ch) isalnum(ch)isdigit(ch) iscntrl(ch)islower(ch) isupper(ch)isspace(ch) ispunct(ch)isprint(ch) isgraph(ch)

Case-conversion functions:toupper(ch) tolower(ch)

C++ An Introduction to Computing, 3rd ed. 29

Assignment

Syntax:variable = expression;• Expression is evaluated• Value placed in memory location associated

with variable

Example:xCoord = 4.56;code = 'T';

C++ An Introduction to Computing, 3rd ed. 30

Assignment

Given the sequence of three assignment statements, note the results

Note that previous variable values are gone after execution of assignment

C++ An Introduction to Computing, 3rd ed. 31

AssignmentThe assignment operator =• Right-associative, • Supports expressions like:

int w, x, y, z;

w = x = y = z = 0;

The rightmost = is applied first, • assigning z zero, • then y is assigned the value of z (0), • then x is assigned the value of y (0)• finally w is assigned the value of x (0).

C++ An Introduction to Computing, 3rd ed. 32

Assignment Shortcuts

Some assignments are so common:var = var + x; // add x to var var = var - y; // sub y from var

C++ provides shortcuts for them:var += x; // add x to var var -= y; // sub y from var

C++ An Introduction to Computing, 3rd ed. 33

In General

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

can be written in the “shortcut” form:

var = value;

Examples:double x, y;cin >> x >> y;x *= 2.0; // double x’s valuey /= 2.0; // decrease y by half

C++ An Introduction to Computing, 3rd ed. 34

Increment and Decrement

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

C++ provides shortcuts for them, too:var++; // add 1 to var

var--; // sub 1 from var

C++ An Introduction to Computing, 3rd ed. 35

Prefix Increment

The prefix form of increment produces the final (incremented) value as its result:int x, y = 0;

x = ++y;

cout << x; // 1 is displayed

The prefix decrement behaves similarly...

C++ An Introduction to Computing, 3rd ed. 36

Postfix Increment

The postfix form of increment produces the original (unincremented) value as its result:int x, y = 0;

x = y++;

cout << x; // 0 is displayed

// y now holds value of 1

The prefix decrement behaves similarly...

C++ An Introduction to Computing, 3rd ed. 37

Prefix vs. Postfix

So long as the increment (or decrement) operator is used as a separate statement:int y = 0, x = 0;

++x; // x == 1

y++; // y == 1

… it makes no difference which version is used.

C++ An Introduction to Computing, 3rd ed. 38

Expressions into Statements – Semicolons

An expression followed by a semicolon becomes an expression statement• x = y + z;• 'A';• cos (z);

All are expression statements

This expression statement has the added side effect of

changing the value of x

C++ An Introduction to Computing, 3rd ed. 39

I/O Streams

C++ has no I/O as part of the language• I/O streams are provided by istream and ostream

cout cin

C++ An Introduction to Computing, 3rd ed. 40

Input Expressions

Form• input_stream >> variable;

May be chained togethercin >> x >> y;

Adapts to whatever type variable is• User must enter correct type

Best to prompt user for input expected• cout << "Enter choice (1 – 10) : "

C++ An Introduction to Computing, 3rd ed. 41

Output Expressions

Form• output_stream << expression;

May be chained • cout << "The sum = " << sum;

The expression can be a variable, a constant or a combination using operators• cout << "Sum = " << v1 + v2 + v3;

The expression adapts to whatever types are used

C++ An Introduction to Computing, 3rd ed. 42

Output FormattingPossible to specify appearance of output

From iostream:• showpoint Display decimal point and trailing zeros for all real

numbers.• noshowpoint Hide decimal point and trailing zeros for whole

real numbers (default).• fixed Use fixed-point notation for real values.• scientific Use scientific notation for real values.• boolalpha Display boolean values as strings “true” and “false”.• left Display values left justified within a field.• right Display values right justified within a field (default).

From iomanip:• setw(w) Display the next value in a field of size w (default 1).• setprecision(p) Display p fractional digits for all subsequent

output of real values (common default is 6).

Must specify the proper include files to use these.

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

C++ An Introduction to Computing, 3rd ed. 43

Objected-Centered Design

Problem:

A manufacturing company uses trucks for delivery. For each trip, the driver records mileage, gallons of fuel, cost of fuel, etc.

The accountants want a report for miles per gallon, total trip cost, cost per mile.

The controller wants a program to assist in recording and calculating these statistics

C++ An Introduction to Computing, 3rd ed. 44

Behavior

For trip statistics:Enter miles traveled: 99Enter gallons fuel: 99.99Enter cost per gallon : 99.99Enter per mile cost for this truck: 9.99

Mileage for this trip : 99.99Total trip cost : 99.99Trip cost per mile: 99.99

C++ An Introduction to Computing, 3rd ed. 45

Objects

DescriptionSoftware Objects

Type Kind Namescreen ostream variable cout

total miles traveled double variable miles

total gallons used double variable gallonsOfFuel

fuel cost per gallon double variable unitFuelCost

operating cost/mi double variable unitOperatingCost

keyboard istream variable cin

miles per gallon double variable milesPerGallon

total cost of trip double variable totalTripCost

cost per mile double variable costPerMile

C++ An Introduction to Computing, 3rd ed. 46

Operationsi. Display prompt on screen for input

ii. Read sequence of four reals from keyboard

iii. Compute mpg• divide miles by number of gallons

iv. Compute total cost of trip: add ..• cost of fuel = gallons * price / gallon• operating costs = miles * cost / mile

v. Compute cost of trip per mile• Divide total cost by number of miles traveled

vi. Output real values

C++ An Introduction to Computing, 3rd ed. 47

Algorithm

1. Display a prompt via cout for miles, gallonsOfFuel, unitFuelCost, and unitOperatingCost.

2. Read values from cin into miles, gallonsOfFuel, unitFuelCost, and unitOperatingCost.

3. Check that each of these values is positive.4. Compute milesPerGallon = miles / gallonsOfFuel.5. Compute fuelCost = gallonsOfFuel * unitFuelCost.6. Compute operatingCost = unitOperatingCost * miles.7. Compute totalTripCost = fuelCost + operatingCost.8. Compute costPerMile = totalTripCost / miles.9. Via cout, display milesPerGallon, totalTripCost and

costPerMile, with descriptive labels.

C++ An Introduction to Computing, 3rd ed. 48

Coding, Execution, Testing

View source code Figure 3.2

Note use of• prompting• input expressions• formatting of output

View sample runs

C++ An Introduction to Computing, 3rd ed. 49

OBJECTive Thinking:Initializing and Constructors

Constructor: special mechanism to initialize instance variables of a class object• Uses assignment statements• Can have default values or pass values to the

constructor

Constructor called when a class object is declared• Sphere bigSphere, littleSphere;

C++ An Introduction to Computing, 3rd ed. 50

A Sphere Constructorclass Sphere{public:

Sphere();... other Sphere-operation declarations go here

private:double myRadius,myDensity,myWeight;

};

inline Sphere::Sphere(){

myRadius = myDensity = myWeight = 0.0;}

Declaration of the constructor

Definition of the constructor

C++ An Introduction to Computing, 3rd ed. 51

A Sphere Constructor

When Sphere object called:#include "Sphere.h"

int main(){

Sphere oneSphere, anotherSphere;

}

Private variables of each are initialized

C++ An Introduction to Computing, 3rd ed. 52

A Name Constructor

Possible to pass parameters to the constructor

#include <string> // the string classusing namespace std;class Name{public: Name(); Name(string first, string middle, string last); ... other Name-operation declarations go hereprivate: string myFirstName, myMiddleName, myLastName;};

inline Name::Name(string first, string middle, string last){ myFirstName = first; myMiddleName = middle; myLastName = last;}

inline Name::Name(string first, string middle, string last){ myFirstName = first; myMiddleName = middle; myLastName = last;}

C++ An Introduction to Computing, 3rd ed. 53

A Name ConstructorNow declaration can include specific initial values #include "Name.h"

int main()

{

Name hisName("John", "Paul", "Jones"),

herName("Mary", "Anne", "Smith"),

itsName;

}