Difference between revisions of "Basic Pascal Tutorial/Chapter 3/IF/bg"
Alpinistbg (talk | contribs) (Created page with "{{IF}} {{TYNavigator|Boolean_Expressions|CASE}} Обратно в Резервирани думи. 3Ca - IF (author: Tao Yue, state: changed) Опер...") |
Alpinistbg (talk | contribs) |
||
Line 17: | Line 17: | ||
Ако булевия израз '''BooleanExpression''' се изчисли като <tt>true</tt>, операторът '''StatementIfTrue''' ще се изпълни. В противен случай ще се пропусне. | Ако булевия израз '''BooleanExpression''' се изчисли като <tt>true</tt>, операторът '''StatementIfTrue''' ще се изпълни. В противен случай ще се пропусне. | ||
− | Операторът <tt>IF</tt> приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в <tt>begin-end</tt> [[Frame|блок]], за да | + | Операторът <tt>IF</tt> приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в <tt>begin-end</tt> [[Frame|блок]], за да изпълните всички оператори: |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 27: | Line 27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Двойното разклонение изглежда така: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 36: | Line 36: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Забележете, че няма <tt>;</tt> преди <tt>else</tt>, дори и в случая на съставен оператор <tt>begin-end</tt>. | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 52: | Line 52: | ||
− | + | Ако '''BooleanExpression''' се пресметне като <tt>FALSE</tt>, тогава ще се изпълни операторът след <tt>else</tt>. Не <u>трябва</u> да използвате <tt>;</tt> след оператора, който е предшества <tt>else</tt>. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото <tt>else</tt>. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка. | |
− | + | Ако имате нужда от повече разклонения, можете да вложите няколко <tt>if</tt> оператора: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 66: | Line 66: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 76: | Line 76: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Приема се, че <tt>else</tt> винаги се отнася за последния <tt>if</tt>, така че компилатора интерпретира предишните редове като: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 86: | Line 86: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Може да коригирате с празен оператор: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 96: | Line 96: | ||
Statement1; | Statement1; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Или може да използвате <tt>begin-end</tt> блок. | |
+ | |||
+ | Следващото доказва как <tt>;</tt> е ''абсолютно забранено'' преди else: | ||
− | |||
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
// Paul Robinson 2020-12-16 | // Paul Robinson 2020-12-16 | ||
Line 105: | Line 106: | ||
// tests the proposition that ; is | // tests the proposition that ; is | ||
// never legal before ELSE | // never legal before ELSE | ||
− | |||
program err03; | program err03; | ||
Var | Var | ||
Test,test2: Boolean; | Test,test2: Boolean; | ||
− | |||
− | |||
Begin | Begin | ||
− | |||
Test := True; | Test := True; | ||
Test2 := true; | Test2 := true; | ||
− | |||
if test then | if test then | ||
if test2 then | if test2 then | ||
Line 122: | Line 118: | ||
else | else | ||
Writeln('Reached Part 2'); | Writeln('Reached Part 2'); | ||
− | |||
end. | end. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
+ | Най-добрия начин да се изчисти проблема е да се пренапише условието. | ||
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 135: | Line 131: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: <tt>(not(a < b) or (c + 3 > 6)) and g</tt>, "обръщането" на израза е доста по-сложно от отрицанието му с <tt>NOT</tt>. | |
− | + | Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи. | |
{{TYNavigator|Boolean_Expressions|CASE}} | {{TYNavigator|Boolean_Expressions|CASE}} |
Revision as of 22:21, 21 April 2021
│
български (bg) │
English (en) │
français (fr) │
日本語 (ja) │
中文(中国大陆) (zh_CN) │
Обратно в Резервирани думи.
3Ca - IF (author: Tao Yue, state: changed)
Операторът IF ви позволява да разклонявате програмата въз основа на резултата от булева операция. Простото разклоняване изглежда така:
if BooleanExpression then
StatementIfTrue;
Ако булевия израз BooleanExpression се изчисли като true, операторът StatementIfTrue ще се изпълни. В противен случай ще се пропусне.
Операторът IF приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в begin-end блок, за да изпълните всички оператори:
if BooleanExpression then
begin
Statement1;
Statement2;
end;
Двойното разклонение изглежда така:
if BooleanExpression then
StatementIfTrue
else
StatementIfFalse;
Забележете, че няма ; преди else, дори и в случая на съставен оператор begin-end.
if BooleanExpression then
begin
Statement1;
Statement2;
end
else
begin
Statement3;
Statement4;
end;
Ако BooleanExpression се пресметне като FALSE, тогава ще се изпълни операторът след else. Не трябва да използвате ; след оператора, който е предшества else. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото else. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.
Ако имате нужда от повече разклонения, можете да вложите няколко if оператора:
if Condition1 then
Statement1
else
if Condition2 then
Statement2
else
Statement3;
Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите:
if Condition1 then
if Condition2 then
Statement2
else
Statement1;
Приема се, че else винаги се отнася за последния if, така че компилатора интерпретира предишните редове като:
if Condition1 then
if Condition2 then
Statement2
else
Statement1;
Може да коригирате с празен оператор:
if Condition1 then
if Condition2 then
Statement2
else
else
Statement1;
Или може да използвате begin-end блок.
Следващото доказва как ; е абсолютно забранено преди else:
// Paul Robinson 2020-12-16
// Compiler test program Err03.pas
// tests the proposition that ; is
// never legal before ELSE
program err03;
Var
Test,test2: Boolean;
Begin
Test := True;
Test2 := true;
if test then
if test2 then
Writeln('Reached Part 1'); // semi-colon here should be illegal
else
Writeln('Reached Part 2');
end.
Най-добрия начин да се изчисти проблема е да се пренапише условието.
if not Condition1 then
Statement1
else
if Condition2 then
Statement2;
Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: (not(a < b) or (c + 3 > 6)) and g, "обръщането" на израза е доста по-сложно от отрицанието му с NOT.
Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи.