. , . .
CF Pascal, TEXT, . .
: TEXT, , REWRITE, RESET.
.
INPUT OUTPUT ; .
CF Pascal , TEXT. TEXT FILE OF CHAR. , , , , CHAR. VAR c TEXT. :
VAR
Ch: CHAR;
Chars: TEXT;
TEXT , REWRITE, :
REWRITE(Chars)
, , RESET.
RESET(Chars)
REWRITE RESET, WRITE , :
WRITE(Chars, Ch, #);
WRITELN(Chars, Ch, Ch)
RESET, REWRITE, READ , :
READ(Chars, Ch);
TEXT, , INPUT OUTPUT. . REWRITE , , OUTPUT . RESET , , INPUT .
OUTPUT WRITE.
WRITE(Ch)
WRITE(OUTPUT, Ch)
. , INPUT :
READ(Input, Ch)
.
CFPascal, 7, 12 13 29.
|
|
SR7.
<>::= VAR < >: <>
| <>;< >:<>
SR12.
< READ>::= READ(< >)
| RESET(<>)
SR13.
< WRITE>::= WRITE(< >)
| WRITELN(< >)
| WRITELN
| REWRITE(<>)
SR29.
<>::= CHAR | TEXT
:
CR6.
TEXT <> <> TEXT. TEXT < WRITE> < READ>, < > < >. TEXT, INPUT OUTPUT <>. TEXT, INPUT OUTPUT, RESET REWRITE.
TEXT READ WRITE. REWRITE, . REWRITE , CHAR. REWRITE , . WRITELN, RESET, . , REWRITE, RESET. - , . , WRITELN, . READ . RESET .
. CopyTwice INPUT OUTPUT Chars. INPUT Chars, Chars OUTPUT.
DP 1
PROGRAM CopyTwice (INPUT, OUTPUT);
{ , # INPUT OUTPUT
, INPUT #}
VAR
Ch: CHAR;
Chars: TEXT; { }
BEGIN {CopyTwice}
{ INPUT Chars}
{ Chars OUTPUT}
END. {CopyTwice}
DP 1.1
BEGIN { INPUT Chars}
REWRITE(Chars); { Chars }
READ(INPUT, Ch);
WHILE Ch <> #
DO
BEGIN
WRITE(Chars, Ch);
READ(INPUT, Ch)
END;
WRITELN(Chars, #) { Chars }
END
DP 1.2
BEGIN { Chars OUTPUT}
RESET(Chars); { Chars }
READ(Chars, Ch);
WHILE Ch <> #
DO
BEGIN
WRITE(OUTPUT, Ch);
READ(Chars, Ch)
END;
WRITELN(OUTPUT)
END
, DP 1.1 , DP 1.2 .
|
|
.
DP 1A
PROGRAM CopyTwice (INPUT, OUTPUT);
{ , # INPUT OUTPUT}
VAR
Ch: CHAR;
Chars: TEXT; { }
BEGIN {CopyTwice}
BEGIN { INPUT Chars}
REWRITE(Chars); { Chars }
READ(INPUT, Ch);
WHILE Ch <> '#'
DO
BEGIN
WRITE(Chars, Ch);
READ(INPUT, Ch)
END;
WRITELN(Chars, '#') { Chars }
END
BEGIN { Chars OUTPUT}
RESET(Chars); { Chars }
READ(Chars, Ch);
WHILE Ch <> '#'
DO
BEGIN
WRITE(OUTPUT, Ch);
READ(Chars, Ch)
END;
WRITELN(OUTPUT)
END
END. {CopyTwice}
:
INPUT: ABCD#
OUTPUT: ABCD
INPUT: 1#ABCD
OUTPUT: 1
INPUT: Four score and seven years ago#
OUTPUT: Four score and seven years ago
[ ]
, CopyTwice
{ , # INPUT OUTPUT
, INPUT #}
CHAR. , , . . :
.
, .
.
INPUT | OUTPUT | Chars | Ch | ||
REWRITE(Chars) READ(INPUT, Ch) WHILE Ch <> # BEGIN WRITE(Chars, Ch) READ(INPUT, Ch) END WHILE Ch <> # BEGIN WRITE(Chars, Ch) READ(INPUT, Ch) END WHILE Ch <> # WRITELN(Chars, '#') RESET(Chars) READ(Chars, Ch); WHILE Ch <> # DO BEGIN WRITE(OUTPUT, Ch) READ(Chars, Ch) END WHILE Ch <> # DO BEGIN WRITE(OUTPUT, Ch) READ(Chars, Ch) END WHILE Ch <> # WRITELN(OUTPUT) END. | TRUE TRUE FALSE TRUE TRUE FALSE | A B# A B # A B # A B # A B # AB # AB # AB # AB # AB # AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB# | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ A_ A_ A_ A_ A_ A_ AB_ AB_ AB_ AB_ AB/_ AB | _ _ _ _ A_ A_ A_ A_ A_ AB_ AB_ AB_ AB_ AB#/_ A B#/ A B #/ A B #/ A B #/ A B #/ A B #/ AB # / AB # / AB # / AB # / AB # / AB # / AB# / AB# / AB# / AB# / | ? A A A A B B B B B # # # # # A A A A A B B B B B B # # # # |
.
INPUT . , Odds Evens . OUTPUT. Split .
DP 2
PROGRAM Split (INPUT, OUTPUT);
{ INPUT OUTPUT, , .
, INPUT #}
VAR
Ch: CHAR;
Odds, Evens: TEXT;
BEGIN {Split}
{ INPUT Odds Evens}
{ Odds OUTPUT}
{ Evens OUTPUT}
END. {Split}
|
|
, .
DP 2.1
BEGIN { INPUT Odds Evens}
REWRITE(Odds);
REWRITE(Evens);
Next:= O;
READ(INPUT, Ch);
WHILE Ch <> #
DO
{ Ch Next,
Next, Ch}
WRITELN(Odds, #);
WRITELN(Evens, #);
END
DP 2.1.1
BEGIN { Ch Next,
Next, Ch}
IF Next = O
THEN
BEGIN
WRITE(Odds, Ch);
Next:= E;
END
ELSE
BEGIN
WRITE(Evens, Ch);
Next:= O;
END;
READ(INPUT, Ch);
END
DP 2.2 { Odds OUTPUT} DP 2.3 { Evens OUTPUT} DP 1.2 CopyTwice Chars Odds Evens.
.
.
: , , .
SelectSort
IF, , , . . . MinSort , .. . , .
, . , , , . , , , , .
N? N , . , .
{ INPUT F1 }
WHILE { F1 }
DO
BEGIN
{ F1}
{ F1 F2}
{ F2 F1}
END
F1 , OUTPUT .
, :
DP 3
PROGRAM SelectSort (INPUT, OUTPUT);
{ , # INPUT OUTPUT.
, INPUT #}
VAR
Ch, Min: CHAR;
F1, F2: TEXT;
BEGIN {SelectSort}
{ INPUT F1 OUTPUT}
{ F1 OUTPUT SelectSort}
END. {SelectSort}
DP 3.1
BEGIN { INPUT F1 OUTPUT}
REWRITE(F1);
WRITE(OUTPUT, INPUT DATA:);
READ(INPUT, Ch);
WHILE Ch <> #
DO
BEGIN
WRITE(F1, Ch);
WRITE(OUTPUT, Ch);
READ(INPUT, Ch)
END;
WRITELN(OUTPUT);
WRITELN(F1, #)
END
DP 3.2
BEGIN { F1 OUTPUT SelectSort}
|
|
WRITE(OUTPUT, SORTED DATA:);
RESET(F1);
READ(F1, Ch);
WHILE Ch <> #
DO { Ch <> # Ch1 F1}
BEGIN
{ F1 b F1 F2}
WRITE(OUTPUT, Min);
{ F2 F1}
RESET(F1);
READ(F1, Ch)
END;
WRITELN(OUTPUT);
END
() DO
{ Ch <> # Ch1 F1}
DP 3.2 DP 3.2.1, BEGIN DO. DO TRUE, Ch <> # DO. TRUE, , , :
RESET(F1);
READ(F1, Ch)
, Ch F1. , Min 3.2.1.
DP 3.2.1
BEGIN { F1 b F1 F2}
REWRITE(F2);
Min:= Ch;
READ(F1, Ch);
WHILE Ch <> #
DO { Ch <> # Ch1 F1}
BEGIN
{ (Ch, Min)
F2}
READ(F1, Ch)
END;
WRITELN(F2, #);
END
DP 3.2.2
BEGIN { F2 F1}
RESET(F2);
REWRITE(F1);
READ(F2, Ch);
WHILE Ch <> #
DO
BEGIN
WRITE(F1, Ch);
READ(F2, Ch)
END;
WRITELN(F1, #);
END
DP 3.2.1.1
BEGIN { (Ch, Min)
F2}
IF Ch < Min
THEN {Ch (Ch, Min)}
BEGIN
WRITE(F2, Min);
Min:= Ch;
END
ELSE {Min (Ch, Min)}
WRITE(F2, Ch);
END
, DP 3.2 4 ( WRITE ). , F1 #, F1 F1 . Min F1 F2.
DP 3.2, F1
OUTPUT | F1 | F2 | Ch | Min | |
RESET(F1) READ(F1, Ch) WHILE Ch <> # WRITELN(OUTPUT) | _ /_ | # / # / # / | ? # | ? | ? |
DP 3.2, F1
OUTPUT | F1 | F2 | Ch | Min | |
RESET(F1) READ(F1, Ch) WHILE Ch <> # BEGIN BEGIN {3.2.1} REWRITE(F2) Min:= Ch; READ(F1, Ch); WHILE Ch <> # WRITELN(F2, #) END {3.2.1} WRITE (OUTPUT, Min) BEGIN {3.2.2} RESET(F2) REWRITE(F1) READ(F2, Ch) WHILE Ch <> # WRITELN(F1, #) END {3.2.2} RESET(F1) READ(F1, Ch) END WHILE Ch <> # WRITELN(OUTPUT) | _ A_ A/_ | A# / A #/ A # / A# / _ #/_ # / # / | ? _ #/_ # / # / | ? A # # # | ? A |
, ,
OUTPUT | F1 | F2 | Ch | Min | |
RESET(F1) | _ | A #/ | ? | ? | ? |
OUTPUT | F1 | F2 | Ch | Min | |
WRITELN(OUTPUT) | A/_ | # / | # / | # | A |
, F1 Min OUTPUT F2, Ch Min.
DP 3.2, F1
OUTPUT | F1 | F2 | Ch | Min | |
RESET(F1) READ(F1, Ch) WHILE Ch <> # BEGIN BEGIN {3.2.1} REWRITE(F2) Min:= Ch; READ(F1, Ch); WHILE Ch <> # BEGIN BEGIN {3.2.1.1} IF Ch < Min THEN BEGIN WRITE(F2,Min) Min:= Ch END END READ(F1, Ch) END WHILE Ch <> # WRITELN(F2, #) END {3.2.1} WRITE (OUTPUT, Min) { F2 F1} RESET(F1) READ(F1, Ch) END WHILE Ch <> # BEGIN BEGIN {3.2.1} REWRITE(F2) Min:= Ch; READ(F1, Ch); WHILE Ch <> # WRITELN(F2, #) END {3.2.1} WRITE (OUTPUT, Min) { F2 F1} RESET(F1) READ(F1, Ch) END WHILE Ch <> # WRITELN(OUTPUT) | _ A_ A_ AC_ AC/_ | CA# / C A#/ C A #/ CA # / CA# / C#/_ C #/ C # / C# / #/ _ # / # / | ? _ C_ C#/_ C_ _ #/_ | ? C A # # # C # # # | ? C A A C |
|
|
DP 3.2.2 .
RESET(F1) F1 OUTPUT . F2, Ch Min , F1 ( C) Min OUTPUT. , :
OUTPUT | F1 | F2 | Ch | Min | |
WRITELN(OUTPUT) | A/_ | # / | # / | # |
.
, .
DP 3.2, F1
OUTPUT | F1 | F2 | Ch | Min | |
RESET(F1) READ(F1, Ch) WHILE Ch <> # BEGIN BEGIN {3.2.1} REWRITE(F2) Min:= Ch; READ(F1, Ch); WHILE Ch <> # BEGIN BEGIN {3.2.1.1} IF Ch < Min THEN BEGIN WRITE(F2,Min) Min:= Ch END END READ(F1, Ch) END WHILE Ch <> # WRITELN(F2, #) END {3.2.1} WRITE (OUTPUT, Min) { F2 F1} RESET(F1) { } | _ A_ A_ AC/_ | CA# / C A#/ C A #/ CA # / CA# / C#/_ C #/ # / | ? _ C_ C#/_ C_ #/_ | ? C A # # # # | ? C A A C |
, , , F1 2 . F1 Min, F2. F2 , Min. F2 .
SelectSort . , , 3, 3.1, 3.2, 3.2.1 . 3.2.2 , # F1, .
DP 3A
PROGRAM SelectSort (INPUT, OUTPUT);
{ , # INPUT OUTPUT.
, INPUT #}
VAR
Ch, Min: CHAR;
F1, F2: TEXT;
BEGIN {SelectSort}
BEGIN { INPUT F1 OUTPUT}
REWRITE(F1);
WRITE(OUTPUT, 'INPUT DATA:');
READ(INPUT, Ch);
WHILE Ch <> '#'
DO
BEGIN
WRITE(F1, Ch);
WRITE(OUTPUT, Ch);
READ(INPUT, Ch)
END;
WRITELN(OUTPUT);
WRITELN(F1, '#')
END
BEGIN { F1 OUTPUT SelectSort}
WRITE(OUTPUT, 'SORTED DATA:');
RESET(F1);
READ(F1, Ch);
WHILE Ch <> '#'
DO { Ch <> '#' Ch1 - F1}
BEGIN
BEGIN { F1, F1 F2}
REWRITE(F2);
Min:= Ch;
READ(F1, Ch);
WHILE Ch <> '#'
DO { Ch <> '#' Ch1 - F1}
BEGIN
{ (Ch, Min)
F2}
READ(F1, Ch)
END;
WRITELN(F2, '#');
END
WRITE(OUTPUT, Min);
{ F1}
REWRITE(F1);
WRITELN(F1, #);
{ }
{ F2 F1}
RESET(F1);
READ(F1, Ch)
END;
WRITELN(OUTPUT);
END
END. {SelectSort}
:
INPUT: XBZA#
OUTPUT: INPUT DATA:XBZA#
SORTED DATA:X
: INPUT OUTPUT, .
, . , OUTPUT.
, .
DP 3B
PROGRAM SelectSort (INPUT, OUTPUT);
{ , # INPUT OUTPUT.
, INPUT #}
VAR
Ch, Min: CHAR;
F1, F2: TEXT;
BEGIN {SelectSort}
BEGIN { INPUT F1 OUTPUT}
REWRITE(F1);
WRITE(OUTPUT, 'INPUT DATA:');
READ(INPUT, Ch);
WHILE Ch <> '#'
DO
BEGIN
WRITE(F1, Ch);
WRITE(OUTPUT, Ch);
READ(INPUT, Ch)
END;
WRITELN(OUTPUT);
WRITELN(F1, '#')
END
BEGIN { F1 OUTPUT SelectSort}
WRITE(OUTPUT, 'SORTED DATA:');
RESET(F1);
READ(F1, Ch);
WHILE Ch <> '#'
DO { Ch <> '#' Ch1 - F1}
BEGIN
BEGIN { F1, F1 F2}
REWRITE(F2);
Min:= Ch;
READ(F1, Ch);
WHILE Ch <> '#'
DO { Ch <> '#' Ch1 - F1}
BEGIN
BEGIN { (Ch, Min)
F2}
IF Ch < Min
THEN {Ch - (Ch, Min)}
BEGIN
WRITE(F2, Min);
Min:= Ch;
END
ELSE {Min - (Ch, Min)}
WRITE(F2, Ch);
END;
READ(F1, Ch)
END;
WRITELN(F2, '#');
END
WRITE(OUTPUT, Min);
BEGIN { F2 F1}
RESET(F2);
REWRITE(F1);
READ(F2, Ch);
WHILE Ch <> '#'
DO
BEGIN
WRITE(Ch) {}
WRITE(F1, Ch);
READ(F2, Ch)
END;
WRITELN('#(F1)'); {}
WRITELN(F1, '#');
END
RESET(F1);
READ(F1, Ch)
END;
WRITELN(OUTPUT);
END
END. {SelectSort}
:
INPUT: CEDAR#
OUTPUT: INPUT DATA: CEDAR #
SORTED DATA: A(Min) EDCR#(F1)
C(Min) EDR#(F1)
D(Min) ER#(F1)
E(Min) R#(F1)
R(Min) #(F1)
. , A, C ..
SelectSort WRITE DP 3B.
, , BEGIN, , .
, , , . , , , - , .. , .
, Edsger Dijkstra , .
, , .
. , . : , , , . , , , .
, . , , , , . , .
DP 3A XBZA. , , WHILE, FALSE.
3B CEDAR# . WHILE DO, THEN ELSE DP 3.2.1.1 F2, , IF.
THEN , CEDAR#, A 3.2.1.1. , ELSE , C E. , CEDAR . , XHB# , ELSE 3.2.1.1 .
SelectSort
IFSort MinSort, , SelectSort . , IFSort4 MinSort6, SelectSort . , SelectSort . . , WHILE, DP 3.1, 3.2, 3.2.1, 3.2.2. , WHILE SelectSort .
WHILE | |
BEGIN WHILE { INPUT F1} WHILE {, F1 } BEGIN WHILE { . F1 F2} WHILE { F2 F1} END END |
, N . WHILE 1 N . WHILE N , F1 1 . WHILE WHILE 2.
WHILE 2, WHILE 3 N , WHILE 4 N-1 . WHILE 2, WHILE 3 N-1 , WHILE 4 N-2 .. , :
WHILE | |
N N N + N-1+ + 1 N-1 + N-2 + + 1 + 0 |
, READ WRITE WHILE
WHILE | READ/WRITE |
, READ/WRITE SelectSort, :
Nrw = 2N + N + 2(N + (N-1) + + 1) + 2((N-1) + (N-2) + + 0)
= 5N + 4((N-1) + + 1)
= 5N + 4N(N-1)/2
= 5N + 2N2 2N
= 2N2+3N
READ/WRITE
N | Nrw | 2N2 |
20 300 2 003 000 | 20 000 2 000 000 |
, Nrw 2N2. , - 2N2. .. 1000- 100 , 100-, .. .