PROC nrmethod ( CHAN OF INT fs, ts, []INT m) #INCLUDE "ioserver.inc" #USE "ioserver" #USE "rereal32" CHAN OF KEYBOARD keyboard: CHAN OF SCREEN screen: CHAN OF STOPPER stopper: VAL INT STAGES IS 10: PROTOCOL NRPAIRS IS REAL32; REAL32: [STAGES+1]CHAN OF NRPAIRS values: --{{{ PROC iohandler PROC iohandler ( CHAN OF KEYBOARD keyboard, CHAN OF SCREEN screen, CHAN OF NRPAIRS query, result) REAL32 original, root: BOOL error: SEQ screen ! string; 42 :: "Input a REAL number to find the root of : " read.real32 ( keyboard, screen, original, error) screen ! new.line query ! original; original/2.0(REAL32) result ? original; root screen ! string; 19 :: "The square root of " screen ! real32; original; 5; 5 screen ! string; 4 :: " is " screen ! real32; root; 5; 5 screen ! new.line screen ! string; 27 :: "Any key to force a deadlock" : --}}} --{{{ PROC nrstep PROC nrstep ( VAL INT step, CHAN OF NRPAIRS incoming, outgoing ) REAL32 original, estimate: SEQ original := 1.0 WHILE original > 0.0 SEQ incoming ? original; estimate IF original < 0.0 SKIP TRUE IF original = 0.0 outgoing ! original; original TRUE outgoing ! original; (estimate + (original / estimate)) / 2.0 : --}}} PAR io.server ( fs, ts, keyboard, screen, stopper ) PAR i = 0 FOR STAGES nrstep ( i, values[i], values[i+1] ) SEQ iohandler ( keyboard, screen, values[0], values[STAGES] ) stopper ! TRUE :