220 likes | 399 Views
Executable Part. This is an important part of a program This is a list of statements executed by the machine The statements are of two kinds: Those perform operations on the variables control statements : specify the sequence of statement execution
E N D
Executable Part • This is an important part of a program • This is a list of statements executed by the machine • The statements are of two kinds: • Those perform operations on the variables • control statements: specify the sequence of statement execution • The operations are determined by the types of variables operated upon. • A programming language provide a rich set of datatypes for representation of information and manipulation • It also provides a rich set of control statements
Program Operations • Programs discussed so far have three basic operations and control flow • Assignment • Expression Evaluation • Reading and Writing • Sequential Flow of Control
Assignment • Specified by assignment statement, eg. Prod = x * y Tot = Tot + hours * 60 * 60 • It has two parts: • A LHS which is usually a variable • A RHS which is, in general, a mathematical expression
Expressions • Expressions typically appear on the RHS • Fortran Expressions remarkably close to std. Math. expressions common in scientific domain • Major high level feature introduced by early Fortran that gives its the name Fortran (Formula Translation) • Expressions typically involve variables, constants and operators, eg. (Principle * Year * Rate) /100 (arithmetic expressions) "Mr." name // initial // sur_name (character expressions) • 100, Mr are Integer and character constants - called Literals
Expression Types • Variables are typed • Data types specify operators that operate on the data values eg. • REAL specifies +, *(multiplication), / (division), * * (exponentiation), - (minus) • CHARACTER allows // (concatenation) • Only these operators can appear in expressions • Expressions evaluate to a value of definite data type, eg. first expression above is REAL , second is CHARACTER type
Type Conformance • LHS variable has a type • RHS expression • involve operations defined by the types of variables on the RHS also has a type, eg. • Type of x+y is REAL (or INTEGER) when the types of x,y are REAL (INTEGER) • In general, types of LHS variable and the value of the RHS expression should be the same • This restriction relaxed among the group of numeric types (Real, Integer). • More on this later
Execution • Execution of an assignments consists of the following steps: • Evaluate the RHS expression to get a value • Assign (i.e., store) the value of this expression to the (the corresponding memory location of) the LHS variable.
Evaluation • It is similar to mathematical expression evaluation • Any variable in an expression stands for the value stored in the corresponding location • Operations are performed on these values • Complex control flow is abstracted in an expression • Use of parenthesis and implicit precedence rules • More on this later
Assignment • Assignment updates the memory location corresponding to the lhs variable • Variables retain values until updated • Stored values in variables are accessed by using the variables on the rhs in later assignment statements • Beware! Two different interpretations for variables • Lhs occurrence refers to the memory location • Rhs occurrence refers to the value stored
Left and Right Values • Consider the statement x = x + y • The x on the lhs refers to the memory location corresponding to x • The x on rhs refers to the value stored in x • These two values are referred as lvalues and rvalues
Run-Time Errors • Expression evaluation may result in errors • Overflow and underflow • Divide by zero • Evaluation results may be unpredictable • Reference to un-initialized variables on the rhs • Lhs variable may be undefined • So checks have to be made before assignment statement execution • Explicit and implicit checks possible • More on this later
Assignment not equal to equality • The notation = used for assignment is bad and misleading • It resembles conventional equality symbol but different • Example: x = y and x = x + y • New symbol for new concepts • PASCAL is sensible; it uses := for assignment • Fortran needs standard equality symbol too == • more on this later
Arithmetic Expression Evaluation • How to evaluate a * b / c • Two possibilities: • a*b and then divide by c or • b/c and then multiply by a • The results are different • Unique evaluation order should be specified • Use paranthesis, like (a*b)/c or a*(b/c) • An implicit order of evaluation, called PRECEDENCE ORDER is assumed using which sub expressions are evaluated in unique order
Precedence Order • Operators are assigned a precedence • Higher precedence operators are evaluated before lower ones • Given an expression, the precedence suggests the following evaluation order: • First paranthesized sub expressions are evaluated • if more than one, evaluation proceeds from left to right • if one nested inside another, then innermost first **, exponentiation (right to left) * and / (left to right) unary + and unary – + and -- (left to right)
Precedence Order (Example) • Evaluation of i + j / k * * 2 * (3 - m) • expression in brackets evaluated first (3-m) • exponentiation next (k ** 2) • division, multiplication ((j / (k**2)) * (3-m)) • additions and subtractions • expression equivalent to (i + (( j / ( k ** 2) ) * (3-m))) • put brackets to clarify evaluation order • redundant brackets do not harm
Mixing Integers and Reals • Arithmetic expressions may involve both real and integer variables • integer variables and sub expressions are converted to real,eg. in (x + i), where x is real and i integer variable, first i is converted to real and added to x • conversion involves change of internal representation • In x = e, where x is a real variable and e is an integer expression, the integer value of e is converted to real before assigning to x • If x is integer and e is real then the real value is converted to integer and assigned to x • Real to integer can cause overflows
Explicit Conversion • The conversion above is implicit and cause surprise • Better not to mix integer and reals • If cannot be avoided, use explicit conversions • Fortran provides a lot of intrinsic functions for explicit conversions
Intrinsic Functions • real(e) • value of integer expression e changed to real form • real(e) is an expression of type real • int(e) • value of real expression e changed to integer • fractional part is ignored • nint(e) • same as int except that real is converted to the nearest integer
Intrinsic Functions • floor(e) • largest integer <= value of e, which is real • ceiling(e) • smallest integer >= value of e • anint(e) • real converted to nearest integer in real form • same as real(nint(e))
Functions in Expressions • Such functions can appear in expressions • eg. x + real(i), i * ceiling (r) • such functions have the highest precedence • arguments evaluated first and then the functions
READ and PRINT Statements • READ statements reads value of variables from a file or keyboard • PRINT statements outputs the values of specified variables to the printer or a file • Every print statement prints the output in a fresh line • typical examples are: READ *, Temperature, Pressure PRINT *, Volume, Time • The * in both refer to default I/O devices, namely keyboard and printer respectively • The * also refers to a certain default format for printing • How to override the default settings? • will see later
Sequential Control Flow • Programs seen so far contained one or more assignment statements and READ and PRINT statements • Each statement appears in a fresh line • Assignment, READ/PRINT statements direct the control to flow to the following statement. • Hence these statements are executed in the order in which present • Order is important; result may vary if order is changed • There are statements which change the normal sequentialflow which we will see later