Команда выбора
Команда выбора
Задача: вычисление абсолютной величины х.
If x ≥ 0 then z:=x else z:=-x
if
x ≥ 0 ® z:=x
□ x ≤ 0 ® z:=-x
fi
if
B1 ® S1
Рекомендуемые материалы
□ B2 ® S2
....
□ Bn ® Sn
fi
B®S – охраняемая команда.
В – служит охраной входа (®) - условие
S – выполняется только при истинности В.
Знак нестрогого неравенства ставится т.к. при х=0 выполняется одна из команд, но не известно какая.
Введем обозначения ВВ=В1 Ú В2 Ú … Ú Вn .
Все условия должны быть вычислены.
Аварийная остановка:
- если не выполнилось ни одно выражение
- какое-либо выражение не вычислимо.
Определение
wp(IF,R)=domain(BB) Ù BB Ù
Ù (B1Þwp(S1,R) Ù B2Þwp(S2,R) Ù .... BnÞwp(Sn,R))
wp(IF,R) = ($ i:1£ i £n:Bi)Ù(" i:1£ i £n:Bi Þ wp(Si;R))
wp(IF,R) = BB Ù B1 Þ wp(S1,R) Ù B2 Þ wp(S2,R)
if
B1®S1
B2®S2
fi
BB=B1ÚB2
Находим абсолютные величины.
Wp(“if x≥0®z:=x x≤0®z:=-x fi”,z=abs(x))=
=(x≥0Úx≤0)Ù //BB
Ù(x≥0wp(“z:=x”,z=abs(x))) Ù //B1®wp(S1,R)
Ù(x≤0wp(“z:=-x”,z=abs(x)))= //B2®wp(S2,R)
=( T Ù ( x≥0x=abs(x)) Ù ( x≤0-x=abs(x)) )=(TÙTÙT)=T
Пример: В цикле вычисляется число положительных элементов массива В.
If
b[i]>0 ® P, i:=p+1, i+1.
b[i]<0 ® i:=i+1.
fi
{i<n Ù p=N j: 0£j<i:b[j]>0}
Wp(“if” ,i≤m Ù p=(Nj:0≤j<i:b[j]>0))=
=(b[i]>0Úb[i]<0) Ù //BB
Ù((b[i]>0)Þwp(“p,i:=p+1,i+1”,R))Ù
Ù(b[i]<0Þwp(“i:=,i+1”,R)=
=(b[i]=0)Ù((b[i]>0)Þi+1£mÙp+i=(Nj:0≤j<i+1:b[j]>0))Ù Ù(b[i]<0Þ i+1£mÙp=(Nj:0≤j<i+1:b[j]>0)))=
=(b[i]=0)Ù((b[i]>0)Þi+1£mÙp=(Nj:0≤j<i:b[j]>0))Ù Ù(b[i]<0Þ i+1£mÙp=(Nj:0≤j<i:b[j]>0)))=
= (b[i]=0)Ù(p=(Nj:0≤j<i:b[j]>0))Ù(i£m)
Пример: x=abs(x)
Вам также может быть полезна лекция "Левое предсердие".
if
x³0 ® skip
x£0 ® x:=-x
fi
if x<0 then x:=-x
Явное появление в тексте всех охран помогает читателю. Кроме этого каждая альтернатива представлена во всех деталях. И возможность упустить из вида какую-нибудь ситуацию уменьшается.