csc 107 – programming for science. announcements lectures may not cover all material from book ...

26
LECTURE 6: COMPUTERS AS CALCULATORS CSC 107 – Programming For Science

Upload: bartholomew-jefferson

Post on 26-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

LECTURE 6:COMPUTERS AS CALCULATORS

CSC 107 – Programming For Science

Announcements

Lectures may not cover all material from book Material that is most difficult or challenging

is focus All material is important & you are

responsible for it This is one reason why using book & post

all solutions PPTX slides posted onto Angel for each

lecture For reasons unclear to me, IE may treat file

as ZIP Could rename ZIP to PPTX & use with

PowerPoint Or, for many reasons, just use Firefox to

download file

The Lecture’s Goal

At end of today’s lecture, you will be able to

Write (small, less useless) C++ programs

Take something boring and make it less boring

Functions

C++ actually tries being useful on occasion

Functions

C++ actually tries being useful on occasion

C++ Being Helpful

Defines built-in functions for use in any program Functions in C++ work similar to algebraic

functions Consider black-box that takes value &

returns another (Will discuss other types of functions later)

Functions must be declared before using it Just like variables, computer needs some

warning For built-in functions, use #include

statements

Mathematical Functions

Add #include <cmath> at top of file Should go with #include <iostream> and

others Order does not matter, can list however

you want All of these mathematical functions

return value Will NOT change arguments’ value(s), so

safe to use

Mathematical Functions

Function result is ignored unless you take action Use within an expression your program is

computing Result of the function can be assigned to

variable Could be ignored, but why bother calling

function?

Mathematical Functions

Function result is ignored unless you take action Use within an expression your program is

computing Result of the function can be assigned to

variable Could be ignored, but why bother calling

function?

Using These Functions

abs(x) returns absolute value of number Result’s type matches type of expression x

int i1 = abs(-1);double d1 = abs(-56.54);double d2 = abs(i1);int i2 = abs(i1 + 1 * d2);double d3 = d2 * abs(d1);i2 = 46 * abs(i1);d3 = abs(abs(d2));

Using These Functions

abs(x) returns absolute value of number Result’s type matches type of expression x

int i1 = abs(-1);double d1 = abs(-56.54);double d2 = abs(i1);int i2 = abs(i1 + 1 * d2);double d3 = d2 * abs(d1);i2 = 46 * abs(i1);d3 = abs(abs(d2));

Other Functions

Decimal data only returned by trig. functionssin(x), cos(x), tan(x), asin(x), atan(x)… Whether float or double depends on x’s

type Measure angle in radians for these to work

(2π = 360˚) Exponent functions also return decimal

datalog10(x), sqrt(x), log(x), exp(x)… x’s type also specifies if float or double

returned Decimals needed since results could be

decimal pow(x, y) computes xy

x’s (decimal) type determines type of value computed

Errors In Functions

Some values may cause errors in function Nothing output, but result appears funny if

printed If assigned to variable, variable used

without error Using funny value yields funny value for all

equations

acos(x), asin(x) x must be in range [-1, 1]sqrt(x) x must be number ≥

0exp(x) ex must be in range of x’s

typepow(x, y) xy must fit in x’s type; y

≥ 0

Rounding Functions

Safely convert decimal numbers into integers floor(x) returns x to nearest smaller

integer ([x])floor(2.01) returns 2.0floor(78.999999) returns 78.0floor(-0.0001) returns -1.0floor(floor(-65.561)) returns -66.0

ceil(x) takes x & returns nearest larger integer ([x])ceil(2.01) returns 3.0ceil(78.999999) returns 79.0ceil(-0.0001) returns 0.0ceil(ceil(-65.561)) returns -65.0

What Planet Are [They] From? Why do floor(x) & ceil(x) return

decimals

What Planet Are [They] From? Why do floor(x) & ceil(x) return

decimals

Data Types

Assignments are legal only if always safe C++ defines ordering of legal assignments

long doubledoublefloatlongintshortchar

Lega

l to

assi

gn to

hig

her

type

Type of An Expression

Within expression, C++ tracks types computed Uses simple rules and cannot apply

common sense As seen in integer division, this can have

big impact Computers are stupid & cannot think

ahead Type of expression computed step-by-step

as it goes Only examines current operation & ignores

future Looks at arguments’ types & promotes if

needed

Type of An Expression

COMPUTE 1 OPERATION AT A

TIME

TYPES MATTER; VALUES DO NOT

Computing Expression Type

int whole;double stuff;stuff = (3 + 4 * 1.0) / (3 / (2 * 2) + 1.0);

whole = abs((5 * 3 / 2) + (10 / 2.0));

Typecasting

Allow performing otherwise illegal assignments

This is not safe - removes parts that do not fit

long doubledoublefloatlongintshortchar

Req

uire

s ty

peca

st to

wor

k

Typecasting

int i1 = static_cast<int>(-1.0);char c1 = static_cast<char>(abs(48.3));float f1 = static_cast<float>(48.3);i1 = static_cast<int>(f1 * 2);c1 = i1 + 3;c1 = static_cast<char>(i1 + 256);i1 = static_cast<char>(i1 + 256);f1 = static_cast<char>(f1 + 256);i1 = (int)(49.0 * 2);

Typecasting

int i1 = static_cast<int>(-1.0);char c1 = static_cast<char>(abs(48.3));float f1 = static_cast<float>(48.3);i1 = static_cast<int>(f1 * 2);c1 = i1 + 3;c1 = static_cast<char>(i1 + 256);i1 = static_cast<char>(i1 + 256);f1 = static_cast<char>(f1 + 256);i1 = (int)(49.0 * 2);

Normal Rounding

C++ does not have function for typical rounding floor(x + 0.5) works with numbers > -0.5 ceil(x + 0.5) works with numbers < -0.5

We will revisit this problem later…

Your Turn

Get in groups & work on following activity

For Next Lecture

Read section 1.9 for Wednesday How does the computer store information? What does “100101” mean? What is its

value? Why do we use numbers to represent

characters?

Week #2 weekly assignment due Tuesday at 5PM Problems available on Angel If problem takes more than 10 minutes,

TALK TO ME!