![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Procedure-declarationsprocedure-declaration = procedure-heading ';' directive ½ procedure-identification ';' procedure-block ½ procedure-heading ';' procedure-block . procedure-heading = 'procedure' identifier [ formal-parameter-list ] . procedure-identification = 'procedure' procedure-identifier . procedure-identifier = identifier . procedure-block = block . The occurrence of a formal-parameter-list in a procedure-heading of a procedure-declaration shall define the formal-parameters of the procedure-block, if any, associated with the identifier of the procedure-heading to be those of the formal-parameter-list. The occurrence of an identifier in the procedure-heading of a procedure-declaration shall constitute its defining-point as a procedure-identifier for the region that is the block closest-containing the procedure-declaration. Each identifier having a defining-point as a procedure-identifier in a procedure-heading of a procedure-declaration in which the directive forward occurs shall have exactly one of its applied occurrences in a procedure-identification of a procedure-declaration, and this applied occurrence shall be closest-contained by the procedure-and-function-declaration-part closest-containing the procedure-heading. The occurrence of a procedure-block in a procedure-declaration shall associate the procedure-block with the identifier in the procedure-heading, or with the procedure-identifier in the procedure-identification, of the procedure-declaration. There shall be at most one procedure-block associated with a procedure-identifier.
Examples of procedure-and-function-declaration-parts:
Example 1: NOTE --- This example is not for level 0.
procedure AddVectors (var A, B, C : array [low..high : natural] of real); var i : natural; begin for i := low to high do A[i] := B[i] + C[i] end {of AddVectors};
Example 2: procedure readinteger (var f : text; var x : integer); var i : natural; begin while f = ' ' do get(f); {The buffer-variable contains the first non-space char} i := 0; while f in ['0'..'9'] do begin i := (10 * i) + (ord(f) - ord('0')); get(f) end; {The buffer-variable contains a non-digit} x := i {Of course if there are no digits, x is zero} end;
procedure bisect (function f(x : real) : real; a, b : real; var result : real); {This procedure attempts to find a zero of f(x) in (a,b) by the method of bisection. It is assumed that the procedure is called with suitable values of a and b such that (f(a) < 0) and (f(b) >= 0) The estimate is returned in the last parameter.} const eps = 1e-10; var midpoint : real; begin {The invariant P is true by calling assumption} midpoint := a; while abs(a - b) > eps * abs(a) do begin midpoint := (a + b) / 2; if f(midpoint) < 0 then a := midpoint else b := midpoint {Which re-establishes the invariant: P = (f(a) < 0) and (f(b) >= 0) and reduces the interval (a,b) provided that the value of midpoint is distinct from both a and b.} end; {P together with the loop exit condition assures that a zero is contained in a small subinterval. Return the midpoint as the zero.} result := midpoint end;
procedure PrepareForAppending (var f : FileOfInteger); { This procedure takes a file in any state suitable for reset and places it in a condition for appending data to its end. Simpler conditioning is only possible if assumptions are made about the initial state of the file.} var LocalCopy : FileOfInteger; procedure CopyFiles (var from, into : FileOfInteger); begin reset(from); rewrite(into); while not eof(from) do begin into := from; put(into); get(from) end end {of CopyFiles}; begin {of body of PrepareForAppending } CopyFiles(f, LocalCopy); CopyFiles(LocalCopy, f) end {of PrepareForAppending};
Date: 2015-12-24; view: 920
|