PHY 107 – Programming For Science
Announcements Lectures may not cover all material from readings Material that is most difficult or challenging is focus All material is important & you are responsible for it PPTX slides posted onto D2L for each lecture Also post all solutions to activities, labs, & assignments Grades available on D2L and updated regularly Since submissions electronic, s sent with grades
The Lecture’s Goal
Functions C/C++ actually tries being useful on occasion
Functions C/C++ actually tries being useful on occasion
C/C++ Being Helpful functions Defines built-in functions for use in any program Functions in C/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 at top of file Should go with #include 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. functions sin( 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 data log10( 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 x y 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 ≥ 0 exp( x ) e x must be in range of x ’s type pow( x, y ) x y 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.0 floor( ) returns 78.0 floor( ) returns -1.0 floor(floor( )) returns ceil( x ) takes x & returns nearest larger integer ([ x ]) ceil(2.01) returns 3.0 ceil( ) returns 79.0 ceil( ) returns 0.0 ceil(ceil( )) 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/C++ defines ordering of legal assignments long double double float long int short char Legal to assign to higher type
Type of An Expression Within expression, C/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 if Looks at arguments’ types & promotes if needed
Type of An Expression
Computing Expression Type int whole; double stuff; whole = abs((5 * 3 / 2) + (10 / 2.0)); stuff = (3 + 4 * 1.0) / (3 / (2 * 2) + 1.0);
Computing Expression Type int whole; double stuff; whole = abs((5 * 3 / 2) + (10 / 2.0)); stuff = (3 + 4 * 1.0) / (3 / (2 * 2) + 1.0);
Typecasting Requires typecast to work
Typecasting int i1 = (int)(-1.0); char c1 = (char)(abs(48.3)); float f1 = (float)(48.3); i1 = (int)(f1 * 2); c1 = i1 + 3; c1 = (char)(i ); i1 = (char)(i ); f1 = (char)(f ); i1 = (int)(49.0 * 2);
Typecasting int i1 = (int)(-1.0); char c1 = (char)(abs(48.3)); float f1 = (float)(48.3); i1 = (int)(f1 * 2); c1 = i1 + 3; c1 = (char)(i ); i1 = (char)(i ); f1 = (char)(f ); i1 = (int)(49.0 * 2);
Normal Rounding C/C++ lacks 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 Week #3 weekly assignment due Tuesday at 5PM Read web page for Friday How does the computer store information? Why do we use numbers to represent characters? Why is this funny?