Home Random Page


CATEGORIES:

BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism






Repetitive-statements

Repetitive-statements shall specify that certain statements are to be executed repeatedly.

repetitive-statement = repeat-statement ½ while-statement ½ for-statement .

 

Repeat-statements

repeat-statement = 'repeat' statement-sequence 'until' Boolean-expression .

The statement-sequence of the repeat-statement shall be repeatedly executed, except as modified by the execution of a goto-statement, until the Boolean-expression of the repeat-statement yields the value true on completion of the statement-sequence. The statement-sequence shall be executed at least once, because the Boolean-expression is evaluated after execution of the statement-sequence.

 

Example:

repeat

k := i mod j;

i := j;

j := k

until j = 0

 

While-statements

while-statement = 'while' Boolean-expression 'do' statement .

The while-statement

while b do body

shall be equivalent to

begin if b then repeat body until not (b) end

 

Examples:

while i > 0 do

begin if odd(i) then z := z * x;

i := i div 2;

x := sqr(x)

end

while not eof(f) do begin process(f­); get(f) end

 

For-statements

The for-statement shall specify that the statement of the for-statement is to be repeatedly executed while a progression of values is attributed to a variable denoted by the control-variable of the for-statement.

for-statement = 'for' control-variable ':=' initial-value ( 'to' ½ 'downto' ) final-value 'do' statement .

control-variable = entire-variable .

initial-value = expression .

final-value = expression .

The control-variable shall be an entire-variable whose identifier is declared in the variable-declaration-part of the block closest-containing the for-statement. The control-variable shall possess an ordinal-type, and the initial-value and final-value shall be of a type compatible with this type. The initial-value and the final-value shall be assignment-compatible with the type possessed by the control-variable if the statement of the for-statement is executed. After a for-statement is executed, other than being left by a goto-statement, the control-variable shall be undefined. Neither a for-statement nor any procedure-and-function-declaration-part of the block that closest-contains a for-statement shall contain a statement threatening the variable denoted by the control-variable of the for-statement.

A statement S shall be designated as threatening a variable V if one or more of the following statements is true.

a) S is an assignment-statement and V is denoted by the variable-access of S.

b) S contains an actual variable parameter that denotes V.

c) S is a procedure-statement that specifies the activation of the required procedure read or the required procedure readln, and V is denoted by variable-access of a read-parameter-list or readln-parameter-list of S.

d) S is a statement specified using an equivalent program fragment containing a statement threatening V.



Apart from the restrictions imposed by these requirements, the for-statement

for v := e1 to e2 do body

shall be equivalent to

begin

temp1 := e1; temp2 := e2;

if temp1 <= temp2 then

begin

v := temp1; body;

while v <> temp2 do

begin v := succ(v); body end

end

end

 

and the for-statement

for v := e1 downto e2 do body

shall be equivalent to

begin

temp1 := e1; temp2 := e2;

if temp1 >= temp2 then

begin

v := temp1; body;

while v <> temp2 do

begin v := pred(v); body end

end

end

where temp1 and temp2 denote auxiliary variables that the program does not otherwise contain, and that possess the type possessed by the variable v if that type is not a subrange-type; otherwise the host-type of the type possessed by the variable v.

 

Examples:

for i := 2 to 63 do if a[i] > max then max := a[i]

for i := 1 to 10 do

for j := 1 to 10 do

begin

x := 0;

for k := 1 to 10 do

x := x + m1[i,k] * m2[k,j];

m[i,j] := x

end

for i := 1 to 10 do for j := 1 to i - 1 do m[i][j] := 0.0

for c := blue downto red do q(c)

 

With-statements

with-statement = 'with' record-variable-list 'do' statement .

record-variable-list = record-variable { ',' record-variable } .

field-designator-identifier = identifier .

A with-statement shall specify the execution of the statement of the with-statement. The occurrence of a record-variable as the only record-variable in the record-variable-list of a with-statement shall constitute the defining-point of each of the field-identifiers associated with components of the record-type possessed by the record-variable as a field-designator-identifier for the region that is the statement of the with-statement; each applied occurrence of a field-designator-identifier shall denote that component of the record-variable that is associated with the field-identifier by the record-type. The record-variable shall be accessed before the statement of the with-statement is executed, and that access shall establish a reference to the variable during

the entire execution of the statement of the with-statement.

The statement

with v1,v2,...,vn do s

shall be equivalent to

with v1 do

with v2 do

...

with vn do s

 

Example:

with date do

if month = 12 then begin month := 1; year := year + 1 end

else month := month+1

has the same effect on the variable date as

if date.month = 12 then

begin date.month := 1; date.year := date.year+1 end

else date.month := date.month+1

 

Input and output

 

The procedure read

The syntax of the parameter list of read when applied to a textfile shall be

read-parameter-list = '(' [ file-variable ',' ] variable-access { ',' variable-access } ')' .

If the file-variable is omitted, the procedure shall be applied to the required textfile input, and the program shall contain a program-parameter-list containing an identifier with the spelling input.

The requirements of this subclause shall apply for the procedure read when applied to a textfile; therein, f shall denote the textfile. The effects of applying read(f,v) to the textfile f shall be defined by pre-assertions and post-assertions within the requirements of 6.6.5.2. The pre-assertion of read(f,v) shall be the pre-assertion of get(f). Let t denote a sequence of components having the char-type; let r, s, and u each denote a value of the sequence-type defined by the structure of the type denoted by text; if u = S( ), then let t = S( ); otherwise, let u.first = end-of-line; let w = f0­ or w = f0.R.first, where the decision as to which shall be implementation-dependent; and let r ~s ~t ~u = w ~f0.R.rest. The post-assertion of read(f,v) shall be

(f.M = f0.M) and (f.L ~ f.R = f0.L ~ f0.R) and (f.R = t ~ u) and

(if f.R = S( ) then (f­ is totally-undefined) else (f­ = f.R.first)).

 

NOTE --- 1 The variable-access is not a variable parameter. Consequently, it may be a component of a packed structure, and the value of the buffer-variable need only be assignment-compatible with it.

 

a) For n>=1, read(f,v1 ,...,vn) shall access the textfile and establish a reference to that textfile for the remaining execution of the statement; each of v1 ,...,vn shall be a variable-access possessing a type that is the real-type, is a string-type, or is compatible with the char-type or with the integer-type. For n>=2, the execution of read(f,v1 ,...,vn) shall be equivalent to

begin read(ff,v1); read(ff,v2 ,...,vn) end

where ff denotes the referenced textfile.

b) If v is a variable-access possessing the char-type (or subrange thereof), the execution of read(f,v) shall be equivalent to

begin v := ff­; get(ff) end

where ff denotes the referenced textfile.

 

NOTE --- 2 To satisfy the post-assertions of get and of read(f,v) requires r = S( ) and length(s) = 1.

 

c) If v is a variable-access possessing the integer-type (or subrange thereof), read(f,v) shall satisfy the following requirements. No component of s shall equal end-of-line. The components of r, if any, shall each, and (s ~t ~u).first shall not, equal either the char-type value space or end-of-line. Either s shall be empty or s shall, and s ~S(t.first) shall not, form a signed-integer according to the syntax of 6.1.5. It shall be an error if s is empty. The value of the signed-integer thus formed shall be assignment-compatible with the type possessed by v and shall be attributed to v.

 

NOTE --- 3 The sequence r represents any spaces and end-of-lines to be skipped, and the sequence s represents the signed-integer to be read.

 

d) If v is a variable-access possessing the real-type, read(f,v) shall satisfy the following requirements. No component of s shall equal end-of-line. The components of r, if any, shall each, and (s ~t ~u).first shall not, equal either the char-type value space or end-of-line. Either s shall be empty or s shall, and s ~S(t.first) shall not, form a signed-number according to the syntax of 6.1.5. It shall be an error if s is empty. The value denoted by the number thus formed shall be attributed to the variable v.

 

NOTE --- 4 The sequence r represents any spaces and end-of-lines to be skipped, and the sequence s represents the number to be read.

 


Date: 2015-12-24; view: 1009


<== previous page | next page ==>
Procedure-statements | The procedure readln
doclecture.net - lectures - 2014-2024 year. Copyright infringement or personal data (0.009 sec.)