CFPascal.
SR 27. <>::= < >; < BEGIN>
SR 28. < >::= <>
| <>(< >)
SR 30. < >::= < >
SR 31. < >::= PROCEDURE <>
| PROCEDURE <>(< >)
SR 32. < >::= VAR < >: <>
| < >; VAR < >: <>
CR4. , < > < > <>, < > < > < >. < > < > .
CR6. , < > < BEGIN> . .
.
4.1.5 INPUT OUTPUT (odd), (even).
, #.
:
PROGRAM Split(INPUT, OUTPUT);
{ INPUT to OUTPUT, , }
VAR
Odds, Evens: TEXT;
BEGIN {Split}
{ INPUT }
{ OUTPUT}
{ OUTPUT}
END. {Split}
{ OUTPUT}
{ OUTPUT}
CopyOut, , Odds, Evens.
PROGRAM Split(INPUT, OUTPUT);
{ INPUT to OUTPUT, , }
VAR
Odds, Evens: TEXT;
PROCEDURE CopyOut(VAR F1: TEXT; VAR Ch1: CHAR);
{ F1 OUTPUT, }
BEGIN {Split}
{ INPUT }
CopyOut(Odds, Ch);
CopyOut(Evens, Ch);
END. {Split}
CopyOut
PROCEDURE CopyOut(VAR F1: TEXT; VAR Ch1: CHAR);
{ F1 OUTPUT, }
BEGIN {CopyOut}
RESET(F1);
WHILE NOT EOF(F1)
DO
BEGIN
WHILE NOT EOLN(F1)
DO
BEGIN
READ(F1, Ch);
WRITE(Ch)
END;
READLN(F1)
END
END {CopyOut}
BEGIN CopyOut F1 Ch, . , , . . , , . .
|
|
.
BEGIN . . , , . . :
PROGRAM Sample(INPUT, OUTPUT);
VAR
Vin: CHAR;
PROCEDURE Bump(VAR Vin: CHAR);
BEGIN {Bump}
IF Vin = A
THEN
Vin:= B
END; {Bump}
BEGIN {Sample}
Vin:= Q;
Bump(Vin)
END. {Sample}
PROCEDURE Bump END (s)
= s È {<Bump, BEGIN IF Vin = A THEN Vin:= B END>}
..
Bump(Vin) (s) = s(Bump) (s) = BEGIN IF Vin = A THEN Vin:= B END (s)
.
, , . Bump
IF Vin = A THEN Vin:= B = (Vin = A -> Vin:= B) | ()
Vin , .
, , , . ,
Bumo(DiffV)
DiffV CHAR, DiffV Bump, c Vin. ,
Bumo(DiffV) = BEGIN IF DiffV = A THEN DiffV:= B END
, P , X, Y,
P (Y) (s) = s (P) X<-Y (s)
X <- Y , s(P) X Y. : .
Bump . ..
Bump(DiffV) = (Vin = A -> Vin:= B) Vin <-DiffV | ()
= (DiffV = A -> DiffV:= B) | ()
. , . ,
|
|
PROGRAM Alias(INPUT, OUTPUT);
VAR
One, Two: CHAR;
PROCEDURE SwitchThese2(VAR V1, V2, Temp: CHAR);
{ V1, V2, Temp:= V2, V1, V1 }
BEGIN { SwitchThese2}
Temp:= V1;
V1:= V2;
V2:= Temp
END; {SwitchThese2}
BEGIN {Alias }
SwitchThese2(One, Two, Two);
END. {Alias}
SwitchThese2(One, Two, Two) = Two:= One; One:= Two, Two:= Two; = (Two:= One)
.
(Two, Two, One):= (Two, One:= One, Two)
, , Two V2 Temp.
, , .
, , , , , . .
{ }
.
, . , , , .
.
, , . , . . .
: , , , , .
, , . , , , . , , .
, , . ,
PROCEDURE SwitchThese2(VAR V1, V2, temp: CHAR);
BEGIN
Temp:= V1;
V1:= V2;
V2:= Temp
END
Temp . , , One Two, , ,
SwitchThese2(One, Two, Ch)
One Two Ch One.
CF Pascal Temp . :
PROCEDURE Exchange(VAR Ch1, Ch2: CHAR);
{ Ch1 Ch2}
VAR
Temp: CHAR;
BEGIN
Temp:= Ch1;
Ch1:= Ch2;
Ch2:= Temp
END
Ch1 Ch2, Temp Exchange.
Exchange(One, Two)
One Two. Exchange , .
. , .
|
|
, . ,
PROGRAM Copy2(INPUT, OUTPUT);
{ INPUT OUTPUT}
PROCEDURE CopyChar(VAR F1, F2: TEXT);
{ F2 F1}
VAR
Ch: CHAR;
BEGIN {CopyChar}
IF NOT EOF(F1)
THEN
BEGIN
READ(F1, Ch);
WRITE(F2, Ch)
END
END; {CopyChar}
BEGIN {Copy2}
CopyChar(INPUT, OUTPUT);
CopyChar(INPUT, OUTPUT);
WRITELN
END. {Copy2}
.
INPUT | OUTPUT | Ch | EOF | |
PROGRAM Copy2(INPUT, OUTPUT); BEGIN {Copy2} CopyChar (INPUT, OUTPUT) VAR Ch: CHAR; BEGIN {CopyChar} IF NOT EOF(INPUT) READ(INPUT, Ch); WRITE(OUTPUT, Ch) END; { CopyChar} CopyChar (INPUT, OUTPUT) VAR Ch: CHAR; BEGIN {CopyChar} IF NOT EOF(INPUT) READ(INPUT, Ch); WRITE(OUTPUT, Ch) END; { CopyChar} WRITELN END. {Copy2} | ABC A BC/ A B C/ AB C / ABC | _ A_ AB_ AB/_ AB | ? A ? B | FALSE FALSE FALSE |
Ch . CopyChar , Ch , CopyChar.
, . , , . , . , , .