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 data types 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 sequential flow which we will see later