• Aucun résultat trouvé

8. 1 ASSignment Statements

Dans le document FORTRAN-a6 USER'S GUIDE (Page 89-99)

Assignment statements give values to variables, arrays, or array elements. There are three kinds of assignment statements:

Arithmetic

• Logical Character

8. 1. 1 Arithmetic Assignment Statements

An arithmetic assignment statement resembles a conventional arithmetic formula. Its syntax is as follows:

name ,. exp where

name exp

is the name you give to a variable, array, or array element.

is an arithmetic expression.

means "is assigned the value" rather than "is equal to".

Therefore, the statement that follows:

I ,. I + 1

is legal in Fortran.

Execution of an arithmetic assignment statement causes Fortran to evaluate exp according to the rules for arithmetic expressions (see Table 7-2). It then converts the result to the type of name and assigns it to name. Table 8-1 shows this process for different Fortran-86 data types. In Table 8-1, the functions in the CONVERSION column are the generic type conversion functions described in Section 6.1.2.2,

"Intrinsic Functions."

If the length of name is longer than the result of exp, Fortran converts the length of result to the length of name while preserving its value.

8-1

Executable Statements

8-2

Table 8-1. Type Conversions in Arithmetic Assignment Statements

Type of Target Variable

INTEGER

Type Conversion INT(exp}

: ····"INTEGER·1.

/;" "':""',"U= ~~.:" ":; ~':.~~

'-NJJ;GER~~r INTEGER'4 REAL REAL*4

~··REAL*8

DOUBLE PRECISION TEMPRE/\L

*Note that conversions on COMPLEX data in arithmetic assignment statements take place on the component data types.

8. 1.2 Character Assignment Statements

The character assignment statement assigns a character value to a character variable or array element. Its syntax is as follows:

name • exp where

name

exp

is the name you give to a character variable or character array element. Name may be a substring, but must not contain or overlap any string referenced in expression.

is a character expression (see Section 7.2).

The two sides of a character assignment statement can have different lengths. If name is longer than the result of exp, Fortran pads the result on the right with blanks. If name is shorter than the result of exp, Fortran truncates exp on the right until it fits into name.

8. 1.3 Logical Assignment Statements

The logical assignment statement assigns the value .TRUE. or .FALSE. to a logical variable or array element. Its syntax is as follows:

name • exp where

name exp

is the name you give to a logical variable or logical array element.

is a logical expression (see Section 7.4).

Fortran-86

Fortran-86 Executable Statements

8.2 IF Statements

An IF statement transfers control from one part of the program to another under certain specified (~onditions. It can also provide alternative actions for the program to perform if these conditions are not met. There are three basic IF constructs:

• Block IF

• Logical IF

• Arithmetic IF

8.2.1 Block IF

A block IF construct is introduced by a block IF statement, and terminated by an END IF statement. The intervening statem(~nts form the IF block, any number of ELSE IF blocks, and at most one ELSE block, in that order. The first statement of each of these blocks must be IF, ELSE IF, or ELSE statements, respectively; the block is terminated by the next ELSE IF, ELSE, or END IF statement.

These blocks can be nested. For example, an IF block may contain another IF block, which may contain another IF block, etc. These blocks can also be empty, meaning that there need not be any executable statements between the first statement of a block and its corresponding terminating statement.

You cannot transfer control into an IF, ELSE IF, or ELSE block from outside the IF block.

Figure 8-1 illustrates a possible nesting of IF, ELSE IF, and ELSE blocks.

8.2. 1 . 1 Block IF Statement

The block IF statement introduces an IF block and must be the first statement of that block. Its syntax is as follows:

I F ( exp) THE H where

exp is a logical expression (see Section 7.4). If the value of exp is true, Fortran executes the statements of the IF block. As soon as an ELSE IF or ELSE statement on the same nesting level as the block IF is encountered, control passes to the END IF statement of the block IF statement. If exp is false, Fortran passes control to the first ELSE IF, ELSE, or END IF state-ment on the same nesting level as the block IF statestate-ment.

Each block IF statement must have a corresponding END IF statement in the same program unit.

8.2. 1 .2 ELSE IF Statement

The ELSE IF statement introduces an ELSE IF block and must be the first state-ment in that block. Its syntax is as follows:

E L 5 ElF ( exp) THE H

8-3

Executable Statements

8-4

where exp

IF • • •

IF BLOCK ELSE I F·· •

IF •••

=:]

: IF BLOCK ELSE IF BL

ENDIF

OCK

ELSE

IF • • •

· ·

IF •••

=:]

IF IF

BLOCK BLOCK

ENDIF

ELSE BLOCK

· ·

ENDIF

ENDIF

Figure 8-1. Nesting Levels of IF, ELSRfF, and ELSE Blocks

!

121570-6

is a logical expression. If exp is true, execution continues with the first statement of the ELSE IF block. If exp is false, Fortran passes control to the next ELSE IF, ELSE, or END IF statement on the same nesting level as the ELSE IF statement.

An ELSE block must be immediately preceded by an IF or another ELSE IF block of the same nesting level and is terminated by another ELSE IF, ELSE, or END IF statement. No statement can reference the statement label of an ELSE IF statement.

8.2. 1 .3 ELSE Statement

An ELSE statement introduces an ELSE block. Its syntax is as follows:

E L 5 E

An ELSE block must be immediately preceded by an IF or ELSE IF block, and is terminated by the END IF statement.

No statement can reference the statement label of an ELSE statement.

Fortran-86

Fortran-86 Executable Statements

8 .2. 1 .4 END

IF

Statement

The END IF statement terminates the last IF, ELSE IF, or ELSE block of a block IF construct. Its syntax is as follows:

END I F

Each block IF statement must have a corresponding END IF statement.

8.2.2 Logical IF Stat.ement

The logical IF statement executes a statement in the program depending on the value of a controlling expression. Its syntax is as follows:

I F ( exp) stmt where

exp stmt

is a logical expression.

is any executable statement except a DO or another IF statement.

If exp is true, Fortran executes stmt next. If it is false, Fortran executes the statement following the logical IF and ignores stmt.

A function reference in the controlling logical expression can affect the operands in stmt.

8.2.3 Arithmetic IF Statement

The arithmetic IF statement transfers control of the program to one of four possible statements depending on the value of a controlling expression. Its syntax is as follows:

I F ( exp) s 1 I s2 I s3 where

exp

s1, s2, and s3

is any expression (see Section 7.1). If the value of exp is less than zero, control passes to the first statement listed. If exp equals zero, control passes to the second statement. If exp is greater than zero, control passes to the third statement. If the result of exp is unordered (see Chapter 7), control continues with the next executable statement following the arithmetic IF statement.

are statement labels of any executable statements in the same program unit as the arithmetic IF. The same statement label can appear more than once in the same arithmetic IF statement.

8.3 DO Statement

Frequently, you will want to repeat a series of operations several times. Rather than copy the statements that perform these operations many times, you can create a loop that causes the program to perform the same statements over and over a specified

8-5

Executable Statements

8-6

number of times. This is the concept of a DO loop. The DO statement introduces and defines a DO loop. Its syntax is as follows:

D 0 stl [ ) ] var· e 1 ) e2 [ ) e3]

where stl

var

e1, e2, and e3

is the statement label of an executable statement that is the last statement in the DO loop.

is an integer variable that acts as the index value of the DO loop.

are integer expressions. In this format, e1 is the initial index value, e2 is the loop termination value, and e3 is the optional loop increment/decrement value. If you do not specify e3, the compiler assumes an increment of one. The values of e1 and e2 may be such that no iterations are performed. (See Section 11.4.3, D066 D077 Controls for details.)

The last statement of a DO loop must not be an unconditional GO TO, assigned GO TO, arithmetic IF, block IF, ELSE IF, ELSE, END IF, RETURN, STOP, END, or DO statement. If the last statement of the DO loop is a logical IF statement, it can contain any executable statement except a DO, block IF, ELSE IF, ELSE, END IF, END, or another logical IF statement.

DO loops can be nested. For example, a DO loop can contain another DO loop which can contain another DO loop, etc. If a DO statement appears within the range of another DO loop, the entire inner DO loop must be within the range of the outer DO loop. DO loops can share the same last statement.

If a DO statement appears within an IF, ELSE IF, or ELSE block, the range of the DO loop must be entirely within that block.

If a block IF statement is within the range of a DO loop, its corresponding END IF statement must also be within the range of the DO loop.

You cannot transfer program control into a DO loop.

8.4 CONTINUE Statement

The CONTINUE statement has no effect on program execution. Execution simply continues with the next executable statement. Its syntax is as follows:

CONTINUE

8.5 CALL Statement

The CALL statement invokes a subroutine. The main program or any subprogram can reference a subroutine using the CALL statement. Its syntax is as follows:

CAL L name [ ( [arg [ ) arg] ... ] ) ]

Fortran-86

Fortran-86 Executable Statements

where name arg

is the name of the subroutine.

is an actual argument. The actual arguments in the CALL statement must agree in order, number, type, and length with the corresponding dummy argument list of the referenced subroutine. (See Section 6.1 for a complete description of subroutines and arguments.)

8.6 RETURN Statement

The RETURN statement transfers control back to the calling program unit. Its syntax is as follows:

RETURti

The RETURN statement may appear only in FUNCTION or SUBROUTINE subprograms. These subprograms may have one or more RETURN statements, or none at all. An END statement terminating such a program unit has the same effect as a RETURN statement.

When Fortran executes a RETURN statement in a FUNCTION subprogram, a return value of the function must already have been defined.

When Fortran executes a RETURN statement, it terminates the association between the dummy arguments of the procedure and the current actual arguments (see Section 6.1, "Subroutines and Functions").

8.7 ASSIGN Statement

The ASSIGN statement is the only way you can assign a statement label to a symbolic name. A GO TO statement or a format identifier in an I/O statement can then refer-ence this symbolic name .. To use the symbolic name in another context, you must redefine it with an integer value in an arithmetic assignment statement. Its syntax is as follows:

ASS I G ti stl T 0 name where

stl

name

is a statement label. The statement label must be the label of an executable statement or a FORMAT statement in the same program unit as the ASSIGN statement.

is an integer variable name. You cannot declare name to be of length INTEGER

*

1.

8.8 GO TO Statements

The GO TO statements pass program control to another part of the program, either conditionally or unconditionally. There are three GO TO statements:

Unconditional GO TO Computed GO TO Assigned GO TO

8-7

Executable Statements

8-8

8.8. 1 Unconditional GO TO Statement

The unconditional GO TO statement transfers control to a specified statement. Its syntax is as follows:

GOT 0 stl where

stl is a statement label of an executable statement in the same program unit as the GO TO statement.

8.8.2 Computed GO TO Statement

The computed GO TO statement branches to one of several executable statements based on the value of a controlling expression. Its syntax is as follows:

GOT 0 (stl [ I stl]. .. ) exp where

stl

exp

is the statement label of an executable statement in the same program unit as the computed GO TO statement. The same statement label can appear more than once in the same computed GO TO statement.

is an integer expression. If exp has a value in the range 1 <

exp < n (where n is the number of statement labels in the list), control passes to the statement that corresponds to this value. If exp is outside of this range, execution continues with the statement following the GO TO and all the statement labels in the list are ignored.

8.8.3 Assigned GO TO Statement

The assigned GO TO statement transfers control to one of several executable state-ments based on an integer variable name. You use it with the ASSIGN statement.

Its syntax is as follows:

GOT 0 name [( stl [ I stl] ... ) ] where

name

stl

is an integer variable name. Before the assigned GO TO statement can be executed, an ASSIGN statement in the same program unit must have defined the variable name with the value of a statement label.

is the statement label of an executable statement in the same program unit as the assigned GO TO statement. The same statement label may appear more than once in the statement.

If the parenthesized list of statement labels is present, the statement label assigned to name must be one of the labels in the list.

Fortran-86

Fortran-86 Executable Statements

8.9 Program Halt Statements

Fortran provides the following three statements for halting or terminating program execution:

PAUSE STOP END

For details on the END statement, see Section 4.3.

8.9. 1 PAUSE Statenlent

The PAUSE statement suspends program ex(!cution and allows execution to continue or terminate depending on an external signal. Its syntax is as follows:

P A U S E[msg]

where

msg is either a string of not more than five digits or a character constant.

When the PAUSE statement is executed, a message in the following form:

* * *

PRO G RAM P A USE. [msg]

is written to the file connected to Unit 6 (see Section 14.5, "Preconnecting Files"), and program execution is suspended. By ent(~ring anything starting with an S (either upper or lower case) on Unit 5, the operator can cause execution of the program to terminate; any other input causes execution to continue with the statement following the PAUSE statement.

8.9.2 STOP Statement

The STOP statement terminates program execution from within a program. Its syntax is as follows:

STOP [msg]

where

msg is either a string of not more than five digits or a character constant.

When the STOP statement is executed, a message in the form

* * *

PRO G RAM S TOP. [msg]

is written to the file connected to Unit 6 (st!e Section 14.5), and program execution is terminated.

The STOP statement is intended as a means to terminate program execution abnor-mally, that is, to inform the operator of a special program-detected condition that makes further execution undesirable or impossible. For normal program termination, execution of the END statement of the main program is preferred for reasons of run-time efficiency.

8-9

(R)

CHAPTER 9 INPUT AND OUTPUT

n

Fortran input/output statements direct the transfer of data between the processor and some external unit or within the processor itself. There are two categories of statements: file handling and data transfer. The file-handling statements connect and disconnect, position, and mark the end of files. The data-transfer statements supply the external or internal unit and the list of input or output variables including any necessary formatting information. This chapter describes each of these statements.

Dans le document FORTRAN-a6 USER'S GUIDE (Page 89-99)