Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ« ў 5. Љ®ҐзлҐ ўв®¬ вл ў § ¤ з е ®Ўа Ў®вЄЁ ⥪бв®ў
5.1. ‘®бв ўлҐ бЁ¬ў®«л, Є®¬¬Ґв аЁЁ Ё в.Ї.
5.1.1. ‚ ⥪б⥠ў®§ўҐ¤ҐЁҐ ў б⥯Ґм ®Ў®§ з «®бм ¤ўг¬п
Ё¤гйЁ¬Ё Ї®¤ап¤ §ўҐ§¤®зЄ ¬Ё. ђҐиҐ® § ¬ҐЁвм нв® ®Ў®§ 票Ґ
'^' (в Є зв®, Є ЇаЁ¬Ґаг, 'x**y' § ¬ҐЁвбп 'x^y'). Љ Є нв®
Їа®йҐ ўбҐЈ® ᤥ« вм? €бе®¤л© вҐЄбв а §аҐи Ґвбп зЁв вм бЁ¬ў®« §
бЁ¬ў®«®¬, Ї®«гз ойЁ©бп ⥪бв вॡгҐвбп ЇҐз в вм бЁ¬ў®« § бЁ¬ў®-
«®¬.
ђҐиҐЁҐ. ‚ Є ¦¤л© ¬®¬Ґв Їа®Ја ¬¬ 室Ёвбп ў ®¤®¬ Ё§
¤ўге б®бв®пЁ©: "®б®ў®Ґ" Ё "Ї®б«Ґ §ўҐ§¤®зЄЁ"
‘®бв®пЁҐ ЋзҐаҐ¤®© Ќ®ў®Ґ „Ґ©бвўЁҐ
ўе®¤®© бЁ¬ў®« б®бв®пЁҐ
®б®ў®Ґ * Ї®б«Ґ Ґв
®б®ў®Ґ x <> '*' ®б®ў®Ґ ЇҐз в вм x
Ї®б«Ґ * ®б®ў®Ґ ЇҐз в вм '^'
Ї®б«Ґ x <> '*' ®б®ў®Ґ ЇҐз в вм *, x
‡ ¬Ґз ЁҐ. ЏаЁ н⮬ '***' § ¬ҐЁвбп '^*' (® Ґ '*^'). ‚
гб«®ўЁЁ § ¤ зЁ ¬л Ґ ®Ј®ў аЁў «Ё ¤Ґв «Ґ©, Є Є нв® з бв® ¤Ґ« Ґвбп
- ЇаҐ¤Ї®« Ј Ґвбп, зв® Їа®Ја ¬¬ "¤®«¦ ¤Ґ©бвў®ў вм а §г¬®". ‚
¤ ®¬ б«гз Ґ, Ї®¦ «г©, б ¬л© Їа®бв®© бЇ®б®Ў ®ЎкпбЁвм, Є Є
Їа®Ја ¬¬ ¤Ґ©бвўгҐв - нв® ®ЇЁб вм ҐҐ б®бв®пЁп Ё ¤Ґ©бвўЁп ў Ёе.
5.1.2. Ќ ЇЁб вм Їа®Ја ¬¬г, г¤ « ойго Ё§ ⥪бв Ї®¤б«®ў ўЁ-
¤ 'abc'.
5.1.3. ‚ Ї бЄ «Ґ Є®¬¬Ґв аЁЁ § Є«оз овбп ў дЁЈгалҐ бЄ®ЎЄЁ:
begin { з «® жЁЄ« }
i:=i+1; {㢥«ЁзЁў Ґ¬ i 1}
Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п г¤ «п« Ўл Є®¬¬Ґв аЁЁ Ё ўбв ў«п«
Ўл ў¬Ґбв® ЁбЄ«о祮Ј® Є®¬¬Ґв аЁп Їа®ЎҐ« (зв®Ўл '1{®¤Ё}2'
ЇаҐўа вЁ«®бм Ўл Ґ ў '12', ў '1 2').
ђҐиҐЁҐ. Џа®Ја ¬¬ Ё¬ҐҐв ¤ў б®бв®пЁп: "®б®ў®Ґ" Ё "ўгв-
аЁ Є®¬¬Ґв аЁп".
‘®бв®пЁҐ ЋзҐаҐ¤®© Ќ®ў®Ґ „Ґ©бвўЁҐ
ўе®¤®© бЁ¬ў®« б®бв®пЁҐ
®б®ў®Ґ { ўгваЁ Ґв
®б®ў®Ґ x <> '{' ®б®ў®Ґ ЇҐз в вм x
ўгваЁ } ®б®ў®Ґ ЇҐз в вм Їа®ЎҐ«
ўгваЁ x <> '}' ўгваЁ Ґв
‡ ¬Ґз ЁҐ. ќв Їа®Ја ¬¬ Ґ ў®бЇаЁЁ¬ Ґв ў«®¦ҐлҐ Є®¬¬Ґ-
в аЁЁ: бва®Є ўа®¤Ґ
'{{Є®¬¬Ґв аЁ© ўгваЁ} Є®¬¬Ґв аЁп}'
ЇаҐўа вЁвбп ў
' Є®¬¬Ґв аЁп}'
(ў з «Ґ бв®пв ¤ў Їа®ЎҐ« ). ЋЎа Ў®вЄ ў«®¦Ґле Є®¬¬Ґв аЁҐў
Є®Ґзл¬ ўв®¬ ⮬ Ґў®§¬®¦ (㦮 "Ї®¬Ёвм зЁб«® бЄ®Ў®Є" -
Їа®Ё§ў®«м®Ґ вга «м®Ґ зЁб«® Ґ Ї®¬Ґй Ґвбп ў Є®Ґзго Ї ¬пвм).
5.1.4. ‚ Ї бЄ «ҐўбЄЁе Їа®Ја ¬¬ е Ўлў ов в Є¦Ґ бва®ЄЁ, § Є-
«озҐлҐ ў Є ўлзЄЁ. …б«Ё дЁЈга п бЄ®ЎЄ бваҐз Ґвбп ўгваЁ бва®-
ЄЁ, в® ® Ґ ®§ з Ґв з « Ё«Ё Є®ж Є®¬¬Ґв аЁп. ‚ бў®о ®зҐ-
।м, Є ўлзЄ ў Є®¬¬Ґв аЁЁ Ґ ®§ з Ґв з « Ё«Ё Є®ж бва®ЄЁ.
Љ Є Ё§¬ҐЁвм Їа®Ја ¬¬г, зв®Ўл нв® гзҐбвм?
“Є § ЁҐ. ‘®бв®пЁ© Ўг¤Ґв ваЁ: ®б®ў®Ґ, ўгваЁ Є®¬¬Ґв -
аЁп, ўгваЁ бва®ЄЁ.
5.1.5. …йҐ ®¤ ў®§¬®¦®бвм ¬®ЈЁе ॠ«Ё§ жЁ© Ї бЄ «п - нв®
Є®¬¬Ґв аЁЁ ўЁ¤
i:=i+1; (* here i is increased by 1 *)
ЇаЁ н⮬ § Єалў ой п бЄ®ЎЄ ¤®«¦ ᮮ⢥вбвў®ў вм ®вЄалў о襩
(в® Ґбвм { ... *) Ґ а §аҐи Ґвбп). Љ Є г¤ «пвм в ЄЁҐ Є®¬¬Ґв -
аЁЁ?
5.2. ‚ў®¤ зЁбҐ«
Џгбвм ¤ҐбпвЁз п § ЇЁбм зЁб« Ї®¤ Ґвбп ўе®¤ Їа®Ја ¬¬л
бЁ¬ў®« § бЁ¬ў®«®¬. Њл е®вЁ¬ "Їа®зҐбвм" нв® зЁб«® (Ї®¬ҐбвЁвм ў
ЇҐаҐ¬Ґго вЁЇ real ҐЈ® § 票Ґ). Ља®¬Ґ в®Ј®, ¤® б®®ЎйЁвм ®Ў
®иЁЎЄҐ, Ґб«Ё зЁб«® § ЇЁб ® ҐўҐа®.
Ѓ®«ҐҐ Є®ЄаҐв®, ЇаҐ¤бв ўЁ¬ ᥡҐ в Єго бЁвг жЁо. Џ®б«Ґ¤®ў -
⥫м®бвм бЁ¬ў®«®ў ўе®¤Ґ ¤Ґ«Ёвбп Їа®зЁв го Ё ®бв ўигобп
з бвЁ. Њл ¬®¦Ґ¬ Ї®«м§®ў вмбп дгЄжЁҐ© Next:char, Є®в®а п ў®§ўа -
й Ґв ЇҐаўл© бЁ¬ў®« ®б⠢襩 з бвЁ, в Є¦Ґ дгЄжЁҐ© Move, Є®в®-
а п ЇҐаў®¤Ёв § ЎЁа Ґв ЇҐаўл© бЁ¬ў®« Ё§ ®б⠢襩бп з бвЁ, ЇҐаҐў®-
¤п ҐЈ® ў Є ⥣®аЁо Їа®зЁв ле.
---------------------|--------------------------
Їа®зЁв п з бвм | Next | ? | ? | ? |
---------------------|--------------------------
Ѓг¤Ґ¬ §лў вм ¤ҐбпвЁз®© § ЇЁбмо в Єго Ї®б«Ґ¤®ў ⥫м®бвм бЁ¬-
ў®«®ў:
<0 Ё«Ё Ў®«ҐҐ Їа®ЎҐ«®ў> <1 Ё«Ё Ў®«ҐҐ жЁда>
в Є¦Ґ в Єго:
<0 Ё«Ё Ў®«ҐҐ Їа®ЎҐ«®ў> <1 Ё«Ё Ў®«ҐҐ жЁда>.<1 Ё«Ё Ў®«ҐҐ жЁда>
‡ ¬ҐвЁ¬, зв® б®Ј« б® н⮬㠮ЇаҐ¤Ґ«ҐЁо '1.', '.1', '1. 1',
'-1.1' Ґ пў«повбп ¤ҐбпвЁзл¬Ё § ЇЁбп¬Ё. ‘д®а¬г«Ёа㥬 ⥯Ґам § -
¤ зг в®з®:
5.2.1. Џа®зҐбвм Ё§ ўе®¤®© бва®ЄЁ ¬ ЄбЁ¬ «мго з бвм, Є®в®-
а п ¬®¦Ґв Ўлвм з «®¬ ¤ҐбпвЁз®© § ЇЁбЁ. ЋЇаҐ¤Ґ«Ёвм, пў«пҐвбп
«Ё нв з бвм ¤ҐбпвЁз®© § ЇЁбмо Ё«Ё Ґв.
ђҐиҐЁҐ. ‡ ЇЁиҐ¬ Їа®Ја ¬¬г Ї бЄ «Ґ (ЁбЇ®«м§гп "ЇҐаҐзЁб-
«Ё¬л© вЁЇ" ¤«п Ј«п¤®бвЁ § ЇЁбЁ: ЇҐаҐ¬Ґ п state ¬®¦Ґв ЇаЁЁ-
¬ вм ®¤® Ё§ § 票©, гЄ § ле ў бЄ®ЎЄ е).
var state:
(Accept, Error, Initial, IntPart, DecPoint, FracPart);
state := Initial;
while (state <> Accept) or (state <> Error) do begin
| if state = Initial then begin
| | if Next = ' ' then begin
| | | state := Initial; Move;
| | end else if Digit(Next) then begin
| | | state := IntPart; {Ї®б«Ґ з « 楫®© з бвЁ}
| | | Move;
| | end else begin
| | | state := Error;
| | end;
| end else if state = IntPart then begin
| | if Digit (Next) then begin
| | | state := IntPart; Move;
| | end else if Next = '.' then begin
| | | state := DecPoint; {Ї®б«Ґ ¤ҐбпвЁз®© в®зЄЁ}
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if state = DecPoint then begin
| | if Digit (Next) then begin
| | | state := FracPart; Move;
| | end else begin
| | | state := Error; {¤®«¦ Ўлвм е®вм ®¤ жЁда }
| | end;
| end else if state = FracPart then begin
| | if Digit (Next) then begin
| | | state := FracPart; Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if
| | {в Є®Ј® Ўлвм Ґ ¬®¦Ґв}
| end;
end;
‡ ¬ҐвмвҐ, зв® ЇаЁбў Ёў Ёп state:=Accept Ё state:=Error Ґ б®Ї-
а®ў®¦¤ овбп б¤ўЁЈ®¬ (бЁ¬ў®«, Є®в®ал© Ґ ¬®¦Ґв Ўлвм з бвмо зЁб« ,
Ґ § ЎЁа Ґвбп).
ЏаЁўҐ¤Ґ п Їа®Ја ¬¬ Ґ § Ї®¬Ё Ґв § 票Ґ Їа®зЁв ®Ј®
зЁб« .
5.2.2. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг б ¤®Ї®«ЁвҐ«мл¬ вॡ®ў Ё-
Ґ¬: Ґб«Ё Їа®зЁв л© Єгб®Є пў«пҐвбп ¤ҐбпвЁз®© § ЇЁбмо, в® ў ЇҐ-
६Ґго val:real б«Ґ¤гҐв Ї®¬ҐбвЁвм ҐҐ § 票Ґ.
ђҐиҐЁҐ. ЏаЁ з⥨Ё ¤а®Ў®© з бвЁ ЁбЇ®«м§гҐвбп ЇҐаҐ¬Ґ п
step - ¬®¦ЁвҐ«м ЇаЁ б«Ґ¤го饩 ¤ҐбпвЁз®© жЁдаҐ.
state := Initial; val:= 0;
while (state <> Accept) or (state <> Error) do begin
| if state = Initial then begin
| | if Next = ' ' then begin
| | | state := Initial; Move;
| | end else if Digit(Next) then begin
| | | state := IntPart; {Ї®б«Ґ з « 楫®© з бвЁ}
| | | val := DigitValue (Next);
| | | Move;
| | end else begin
| | | state := Error;
| | end;
| end else if state = IntPart then begin
| | if Digit (Next) then begin
| | | state := IntPart; val := 10*val + DigitVal(Next);
| | | Move;
| | end else if Next = '.' then begin
| | | state := DecPoint; {Ї®б«Ґ ¤ҐбпвЁз®© в®зЄЁ}
| | | step := 0.1;
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if state = DecPoint then begin
| | if Digit (Next) then begin
| | | state := FracPart;
| | | val := val + DigitVal(Next)*step; step := step/10;
| | | Move;
| | end else begin
| | | state := Error; {¤®«¦ Ўлвм е®вм ®¤ жЁда }
| | end;
| end else if state = FracPart then begin
| | if Digit (Next) then begin
| | | state := FracPart;
| | | val := val + DigitVal(Next)*step; step := step/10;
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if
| | {в Є®Ј® Ўлвм Ґ ¬®¦Ґв}
| end;
end;
5.2.3. ’ ¦Ґ § ¤ з , Ґб«Ё ЇҐаҐ¤ зЁб«® ¬®¦Ґв бв®пвм § Є
"¬Ёгб" Ё«Ё § Є "Ї«об" ( ¬®¦Ґв ЁзҐЈ® Ґ бв®пвм).
”®а¬ в зЁбҐ« ў нв®© § ¤ зҐ ®Ўлз® Ё««обваЁагов в Є®© Є а-
вЁЄ®©:
----- ---------
---| + |---->-| жЁда |-------->--------------------->
| ----- | | --------- | | |
| ----- | | | | ----- --------- |
|-| - |--| |----<------| |-| . |->---| жЁда |--|
| ----- | ----- | --------- |
| | |-----<-----|
|--->----|
5.2.4. ’ ¦Ґ § ¤ з , Ґб«Ё Є ⮬㠦Ґ Ї®б«Ґ зЁб« ¬®¦Ґв бв®-
пвм Ї®Є § ⥫м б⥯ҐЁ ¤ҐбпвЁ, Є Є ў 254E-4 (=0.0254) Ё«Ё ў
0.123E+9 (=123000000). Ќ аЁбг©вҐ ᮮ⢥вбвўгойго Є авЁЄг.
5.2.5. —в® ¤® Ё§¬ҐЁвм ў Їа®Ја ¬¬Ґ § ¤ зЁ 5.2.2, зв®Ўл
а §аҐиЁвм ЇгбвлҐ жҐ«го Ё ¤а®Ўго з бвЁ (Є Є ў '1.', '.1' Ё«Ё ¤ -
¦Ґ '.' - Ї®б«Ґ¤ҐҐ зЁб«® бзЁв Ґ¬ а ўл¬ г«о)?
Њл ўҐаҐ¬бп Є Є®Ґзл¬ ўв®¬ в ¬ ў Ј« ўҐ 10 (‘а ўҐЁҐ б
®Ўа §ж®¬).
5.1. ‘®бв ўлҐ бЁ¬ў®«л, Є®¬¬Ґв аЁЁ Ё в.Ї.
5.1.1. ‚ ⥪б⥠ў®§ўҐ¤ҐЁҐ ў б⥯Ґм ®Ў®§ з «®бм ¤ўг¬п
Ё¤гйЁ¬Ё Ї®¤ап¤ §ўҐ§¤®зЄ ¬Ё. ђҐиҐ® § ¬ҐЁвм нв® ®Ў®§ 票Ґ
'^' (в Є зв®, Є ЇаЁ¬Ґаг, 'x**y' § ¬ҐЁвбп 'x^y'). Љ Є нв®
Їа®йҐ ўбҐЈ® ᤥ« вм? €бе®¤л© вҐЄбв а §аҐи Ґвбп зЁв вм бЁ¬ў®« §
бЁ¬ў®«®¬, Ї®«гз ойЁ©бп ⥪бв вॡгҐвбп ЇҐз в вм бЁ¬ў®« § бЁ¬ў®-
«®¬.
ђҐиҐЁҐ. ‚ Є ¦¤л© ¬®¬Ґв Їа®Ја ¬¬ 室Ёвбп ў ®¤®¬ Ё§
¤ўге б®бв®пЁ©: "®б®ў®Ґ" Ё "Ї®б«Ґ §ўҐ§¤®зЄЁ"
‘®бв®пЁҐ ЋзҐаҐ¤®© Ќ®ў®Ґ „Ґ©бвўЁҐ
ўе®¤®© бЁ¬ў®« б®бв®пЁҐ
®б®ў®Ґ * Ї®б«Ґ Ґв
®б®ў®Ґ x <> '*' ®б®ў®Ґ ЇҐз в вм x
Ї®б«Ґ * ®б®ў®Ґ ЇҐз в вм '^'
Ї®б«Ґ x <> '*' ®б®ў®Ґ ЇҐз в вм *, x
‡ ¬Ґз ЁҐ. ЏаЁ н⮬ '***' § ¬ҐЁвбп '^*' (® Ґ '*^'). ‚
гб«®ўЁЁ § ¤ зЁ ¬л Ґ ®Ј®ў аЁў «Ё ¤Ґв «Ґ©, Є Є нв® з бв® ¤Ґ« Ґвбп
- ЇаҐ¤Ї®« Ј Ґвбп, зв® Їа®Ја ¬¬ "¤®«¦ ¤Ґ©бвў®ў вм а §г¬®". ‚
¤ ®¬ б«гз Ґ, Ї®¦ «г©, б ¬л© Їа®бв®© бЇ®б®Ў ®ЎкпбЁвм, Є Є
Їа®Ја ¬¬ ¤Ґ©бвўгҐв - нв® ®ЇЁб вм ҐҐ б®бв®пЁп Ё ¤Ґ©бвўЁп ў Ёе.
5.1.2. Ќ ЇЁб вм Їа®Ја ¬¬г, г¤ « ойго Ё§ ⥪бв Ї®¤б«®ў ўЁ-
¤ 'abc'.
5.1.3. ‚ Ї бЄ «Ґ Є®¬¬Ґв аЁЁ § Є«оз овбп ў дЁЈгалҐ бЄ®ЎЄЁ:
begin { з «® жЁЄ« }
i:=i+1; {㢥«ЁзЁў Ґ¬ i 1}
Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п г¤ «п« Ўл Є®¬¬Ґв аЁЁ Ё ўбв ў«п«
Ўл ў¬Ґбв® ЁбЄ«о祮Ј® Є®¬¬Ґв аЁп Їа®ЎҐ« (зв®Ўл '1{®¤Ё}2'
ЇаҐўа вЁ«®бм Ўл Ґ ў '12', ў '1 2').
ђҐиҐЁҐ. Џа®Ја ¬¬ Ё¬ҐҐв ¤ў б®бв®пЁп: "®б®ў®Ґ" Ё "ўгв-
аЁ Є®¬¬Ґв аЁп".
‘®бв®пЁҐ ЋзҐаҐ¤®© Ќ®ў®Ґ „Ґ©бвўЁҐ
ўе®¤®© бЁ¬ў®« б®бв®пЁҐ
®б®ў®Ґ { ўгваЁ Ґв
®б®ў®Ґ x <> '{' ®б®ў®Ґ ЇҐз в вм x
ўгваЁ } ®б®ў®Ґ ЇҐз в вм Їа®ЎҐ«
ўгваЁ x <> '}' ўгваЁ Ґв
‡ ¬Ґз ЁҐ. ќв Їа®Ја ¬¬ Ґ ў®бЇаЁЁ¬ Ґв ў«®¦ҐлҐ Є®¬¬Ґ-
в аЁЁ: бва®Є ўа®¤Ґ
'{{Є®¬¬Ґв аЁ© ўгваЁ} Є®¬¬Ґв аЁп}'
ЇаҐўа вЁвбп ў
' Є®¬¬Ґв аЁп}'
(ў з «Ґ бв®пв ¤ў Їа®ЎҐ« ). ЋЎа Ў®вЄ ў«®¦Ґле Є®¬¬Ґв аЁҐў
Є®Ґзл¬ ўв®¬ ⮬ Ґў®§¬®¦ (㦮 "Ї®¬Ёвм зЁб«® бЄ®Ў®Є" -
Їа®Ё§ў®«м®Ґ вга «м®Ґ зЁб«® Ґ Ї®¬Ґй Ґвбп ў Є®Ґзго Ї ¬пвм).
5.1.4. ‚ Ї бЄ «ҐўбЄЁе Їа®Ја ¬¬ е Ўлў ов в Є¦Ґ бва®ЄЁ, § Є-
«озҐлҐ ў Є ўлзЄЁ. …б«Ё дЁЈга п бЄ®ЎЄ бваҐз Ґвбп ўгваЁ бва®-
ЄЁ, в® ® Ґ ®§ з Ґв з « Ё«Ё Є®ж Є®¬¬Ґв аЁп. ‚ бў®о ®зҐ-
।м, Є ўлзЄ ў Є®¬¬Ґв аЁЁ Ґ ®§ з Ґв з « Ё«Ё Є®ж бва®ЄЁ.
Љ Є Ё§¬ҐЁвм Їа®Ја ¬¬г, зв®Ўл нв® гзҐбвм?
“Є § ЁҐ. ‘®бв®пЁ© Ўг¤Ґв ваЁ: ®б®ў®Ґ, ўгваЁ Є®¬¬Ґв -
аЁп, ўгваЁ бва®ЄЁ.
5.1.5. …йҐ ®¤ ў®§¬®¦®бвм ¬®ЈЁе ॠ«Ё§ жЁ© Ї бЄ «п - нв®
Є®¬¬Ґв аЁЁ ўЁ¤
i:=i+1; (* here i is increased by 1 *)
ЇаЁ н⮬ § Єалў ой п бЄ®ЎЄ ¤®«¦ ᮮ⢥вбвў®ў вм ®вЄалў о襩
(в® Ґбвм { ... *) Ґ а §аҐи Ґвбп). Љ Є г¤ «пвм в ЄЁҐ Є®¬¬Ґв -
аЁЁ?
5.2. ‚ў®¤ зЁбҐ«
Џгбвм ¤ҐбпвЁз п § ЇЁбм зЁб« Ї®¤ Ґвбп ўе®¤ Їа®Ја ¬¬л
бЁ¬ў®« § бЁ¬ў®«®¬. Њл е®вЁ¬ "Їа®зҐбвм" нв® зЁб«® (Ї®¬ҐбвЁвм ў
ЇҐаҐ¬Ґго вЁЇ real ҐЈ® § 票Ґ). Ља®¬Ґ в®Ј®, ¤® б®®ЎйЁвм ®Ў
®иЁЎЄҐ, Ґб«Ё зЁб«® § ЇЁб ® ҐўҐа®.
Ѓ®«ҐҐ Є®ЄаҐв®, ЇаҐ¤бв ўЁ¬ ᥡҐ в Єго бЁвг жЁо. Џ®б«Ґ¤®ў -
⥫м®бвм бЁ¬ў®«®ў ўе®¤Ґ ¤Ґ«Ёвбп Їа®зЁв го Ё ®бв ўигобп
з бвЁ. Њл ¬®¦Ґ¬ Ї®«м§®ў вмбп дгЄжЁҐ© Next:char, Є®в®а п ў®§ўа -
й Ґв ЇҐаўл© бЁ¬ў®« ®б⠢襩 з бвЁ, в Є¦Ґ дгЄжЁҐ© Move, Є®в®-
а п ЇҐаў®¤Ёв § ЎЁа Ґв ЇҐаўл© бЁ¬ў®« Ё§ ®б⠢襩бп з бвЁ, ЇҐаҐў®-
¤п ҐЈ® ў Є ⥣®аЁо Їа®зЁв ле.
---------------------|--------------------------
Їа®зЁв п з бвм | Next | ? | ? | ? |
---------------------|--------------------------
Ѓг¤Ґ¬ §лў вм ¤ҐбпвЁз®© § ЇЁбмо в Єго Ї®б«Ґ¤®ў ⥫м®бвм бЁ¬-
ў®«®ў:
<0 Ё«Ё Ў®«ҐҐ Їа®ЎҐ«®ў> <1 Ё«Ё Ў®«ҐҐ жЁда>
в Є¦Ґ в Єго:
<0 Ё«Ё Ў®«ҐҐ Їа®ЎҐ«®ў> <1 Ё«Ё Ў®«ҐҐ жЁда>.<1 Ё«Ё Ў®«ҐҐ жЁда>
‡ ¬ҐвЁ¬, зв® б®Ј« б® н⮬㠮ЇаҐ¤Ґ«ҐЁо '1.', '.1', '1. 1',
'-1.1' Ґ пў«повбп ¤ҐбпвЁзл¬Ё § ЇЁбп¬Ё. ‘д®а¬г«Ёа㥬 ⥯Ґам § -
¤ зг в®з®:
5.2.1. Џа®зҐбвм Ё§ ўе®¤®© бва®ЄЁ ¬ ЄбЁ¬ «мго з бвм, Є®в®-
а п ¬®¦Ґв Ўлвм з «®¬ ¤ҐбпвЁз®© § ЇЁбЁ. ЋЇаҐ¤Ґ«Ёвм, пў«пҐвбп
«Ё нв з бвм ¤ҐбпвЁз®© § ЇЁбмо Ё«Ё Ґв.
ђҐиҐЁҐ. ‡ ЇЁиҐ¬ Їа®Ја ¬¬г Ї бЄ «Ґ (ЁбЇ®«м§гп "ЇҐаҐзЁб-
«Ё¬л© вЁЇ" ¤«п Ј«п¤®бвЁ § ЇЁбЁ: ЇҐаҐ¬Ґ п state ¬®¦Ґв ЇаЁЁ-
¬ вм ®¤® Ё§ § 票©, гЄ § ле ў бЄ®ЎЄ е).
var state:
(Accept, Error, Initial, IntPart, DecPoint, FracPart);
state := Initial;
while (state <> Accept) or (state <> Error) do begin
| if state = Initial then begin
| | if Next = ' ' then begin
| | | state := Initial; Move;
| | end else if Digit(Next) then begin
| | | state := IntPart; {Ї®б«Ґ з « 楫®© з бвЁ}
| | | Move;
| | end else begin
| | | state := Error;
| | end;
| end else if state = IntPart then begin
| | if Digit (Next) then begin
| | | state := IntPart; Move;
| | end else if Next = '.' then begin
| | | state := DecPoint; {Ї®б«Ґ ¤ҐбпвЁз®© в®зЄЁ}
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if state = DecPoint then begin
| | if Digit (Next) then begin
| | | state := FracPart; Move;
| | end else begin
| | | state := Error; {¤®«¦ Ўлвм е®вм ®¤ жЁда }
| | end;
| end else if state = FracPart then begin
| | if Digit (Next) then begin
| | | state := FracPart; Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if
| | {в Є®Ј® Ўлвм Ґ ¬®¦Ґв}
| end;
end;
‡ ¬ҐвмвҐ, зв® ЇаЁбў Ёў Ёп state:=Accept Ё state:=Error Ґ б®Ї-
а®ў®¦¤ овбп б¤ўЁЈ®¬ (бЁ¬ў®«, Є®в®ал© Ґ ¬®¦Ґв Ўлвм з бвмо зЁб« ,
Ґ § ЎЁа Ґвбп).
ЏаЁўҐ¤Ґ п Їа®Ја ¬¬ Ґ § Ї®¬Ё Ґв § 票Ґ Їа®зЁв ®Ј®
зЁб« .
5.2.2. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг б ¤®Ї®«ЁвҐ«мл¬ вॡ®ў Ё-
Ґ¬: Ґб«Ё Їа®зЁв л© Єгб®Є пў«пҐвбп ¤ҐбпвЁз®© § ЇЁбмо, в® ў ЇҐ-
६Ґго val:real б«Ґ¤гҐв Ї®¬ҐбвЁвм ҐҐ § 票Ґ.
ђҐиҐЁҐ. ЏаЁ з⥨Ё ¤а®Ў®© з бвЁ ЁбЇ®«м§гҐвбп ЇҐаҐ¬Ґ п
step - ¬®¦ЁвҐ«м ЇаЁ б«Ґ¤го饩 ¤ҐбпвЁз®© жЁдаҐ.
state := Initial; val:= 0;
while (state <> Accept) or (state <> Error) do begin
| if state = Initial then begin
| | if Next = ' ' then begin
| | | state := Initial; Move;
| | end else if Digit(Next) then begin
| | | state := IntPart; {Ї®б«Ґ з « 楫®© з бвЁ}
| | | val := DigitValue (Next);
| | | Move;
| | end else begin
| | | state := Error;
| | end;
| end else if state = IntPart then begin
| | if Digit (Next) then begin
| | | state := IntPart; val := 10*val + DigitVal(Next);
| | | Move;
| | end else if Next = '.' then begin
| | | state := DecPoint; {Ї®б«Ґ ¤ҐбпвЁз®© в®зЄЁ}
| | | step := 0.1;
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if state = DecPoint then begin
| | if Digit (Next) then begin
| | | state := FracPart;
| | | val := val + DigitVal(Next)*step; step := step/10;
| | | Move;
| | end else begin
| | | state := Error; {¤®«¦ Ўлвм е®вм ®¤ жЁда }
| | end;
| end else if state = FracPart then begin
| | if Digit (Next) then begin
| | | state := FracPart;
| | | val := val + DigitVal(Next)*step; step := step/10;
| | | Move;
| | end else begin
| | | state := Accept;
| | end;
| end else if
| | {в Є®Ј® Ўлвм Ґ ¬®¦Ґв}
| end;
end;
5.2.3. ’ ¦Ґ § ¤ з , Ґб«Ё ЇҐаҐ¤ зЁб«® ¬®¦Ґв бв®пвм § Є
"¬Ёгб" Ё«Ё § Є "Ї«об" ( ¬®¦Ґв ЁзҐЈ® Ґ бв®пвм).
”®а¬ в зЁбҐ« ў нв®© § ¤ зҐ ®Ўлз® Ё««обваЁагов в Є®© Є а-
вЁЄ®©:
----- ---------
---| + |---->-| жЁда |-------->--------------------->
| ----- | | --------- | | |
| ----- | | | | ----- --------- |
|-| - |--| |----<------| |-| . |->---| жЁда |--|
| ----- | ----- | --------- |
| | |-----<-----|
|--->----|
5.2.4. ’ ¦Ґ § ¤ з , Ґб«Ё Є ⮬㠦Ґ Ї®б«Ґ зЁб« ¬®¦Ґв бв®-
пвм Ї®Є § ⥫м б⥯ҐЁ ¤ҐбпвЁ, Є Є ў 254E-4 (=0.0254) Ё«Ё ў
0.123E+9 (=123000000). Ќ аЁбг©вҐ ᮮ⢥вбвўгойго Є авЁЄг.
5.2.5. —в® ¤® Ё§¬ҐЁвм ў Їа®Ја ¬¬Ґ § ¤ зЁ 5.2.2, зв®Ўл
а §аҐиЁвм ЇгбвлҐ жҐ«го Ё ¤а®Ўго з бвЁ (Є Є ў '1.', '.1' Ё«Ё ¤ -
¦Ґ '.' - Ї®б«Ґ¤ҐҐ зЁб«® бзЁв Ґ¬ а ўл¬ г«о)?
Њл ўҐаҐ¬бп Є Є®Ґзл¬ ўв®¬ в ¬ ў Ј« ўҐ 10 (‘а ўҐЁҐ б
®Ўа §ж®¬).
Соседние файлы в папке Шень