3. управление ходом выполнения программы. блочные операторы

advertisement
Управление ходом выполнения программы. Блочные операторы.
Для управления ходом выполнения программы используют две группы операторов:
операторы условных переходов (операторы ветвления) и операторы циклов.
Условные переходы позволяют выполнять различные последовательности операций в
зависимости от результатов проверки условия. В Visual FoxPro существуют две команды,
допускающие условный переход: IF ... ELSE ... ENDIF и DO CASE ... ENDCASE.
Если требуется осуществить проверку более чем двух условий, то выгоднее
воспользоваться блоком DO CASE ... ENDCASE, который позволяет избежать
использования многочисленных выражений IF, за которыми трудно уследить.
Вля процедурном программировании применяют два типа операторов цикла: безусловный
цикл – FOR … ENDFOR и условный цикл DO WHILE … ENDDO. Существует еще
специальный цикл для обработки таблиц – цикл SCAN … ENDSCAN.
Организация ветвления. Оператор IF … ELSE … ENDIF
Осуществляет условное выполнение группы команд исходя из значения логического
выражения.
Синтаксис
IF lExpression
Commands
[ELSE
Commands]
ENDIF
Параметры
lExpression
Задает вычисляемое логическое выражение. Если его значение ѕ "истина" (.T.), будут
выполнены все команды, расположенные между IF и оператором ELSE или ENDIF
(тем из двух, который стоит раньше).
• Если значение lExpression ѕ "ложь" (.F.) и задан оператор ELSE, выполняются все
команды между ELSE и ENDIF.
• Если значение lExpression ѕ "ложь" (.F.) и оператор ELSE не задан, все команды
между IF и ENDIF игнорируются. В этом случае выполнение программы
продолжается с первой команды, следующей за оператором ENDIF.
Комментарии
Блоки IF ... ENDIF можно вкладывать друг в друга.
В строках с операторами IF, ELSE и ENDIF можно задавать комментарии. Они будут
игнорироваться во время компиляции и выполнения программы.
Выполняет первую группу команд, для которых заданное условное выражение имеет
значение "истина" (.T.).
Множественное ветвление. Оператор DO CASE … ENDCASE
Выполняет первую группу команд, для которых заданное условное выражение имеет
значение "истина" (.T.).
Синтаксис
DO CASE
CASE lExpression1
Commands
[CASE lExpression2
Commands
1
...
CASE lExpressionN
Commands]
[OTHERWISE
Commands]
ENDCASE
Параметры
CASE lExpression1 Commands ...
Когда обнаруживается первое выражение CASE, имеющее значение "истина" (.T.),
выполняется группа следующих за ним команд. Выполнение продолжается до тех
пор, пока не встретится следующее предложение CASE или ENDCASE. После этого
управление передается первой команде, следующей за ENDCASE.
Если выражение CASE имеет значение "ложь" (.F.), то следующие за ним команды,
вплоть до следующего предложения CASE, игнорируются.
Выполняется только одна группа команд. Это будет первая группа команд, для
которых выражение CASE имеет значение "истина" (.T.). Все последующие
выражения CASE игнорируются, даже если они истинны (.T.) .
OTHERWISE Commands
Если все выражения CASE имеют значение "ложь" (.F.), то в зависимости от
предложения OTHERWISE может выполняться альтернативный набор команд:
• Если предложение OTHERWISE задано, выполняется группа следующих за ним
команд, после чего управление передается первой команде, стоящей после
ENDCASE.
• Если предложение OTHERWISE опущено, выполнение продолжается с первой
команды, следующей за предложением ENDCASE.
Комментарии
Команда DO CASE используется в тех случаях, когда требуется выполнить группу команд
Visual FoxPro в зависимости от значения некоторого логического выражения. При
выполнении DO CASE последовательно вычисляются логические выражения; их значения
определяют, какой именно набор команд следует выполнить.
После команды DO CASE и предложения ENDCASE в одной строке с ними можно
задавать комментарии. Эти комментарии игнорируются во время компиляции и
выполнения программы.
Безусловные циклы. Оператор FOR … ENDFOR.
Выполняет группу команд заданное число раз.
Синтаксис
FOR MemVarName = nInitialValue TO nFinalValue [STEP nIncrement]
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT
Параметры
MemVarName
Задает переменную памяти или элемент массива, выступающий в роли счетчика. Эта
переменная или элемент массива могут и не существовать до выполнения цикла FOR
... ENDFOR.
nInitialValue TO nFinalValue
nInitialValue ѕ начальное значение счетчика, а nFinalValue ѕ его конечное значение.
2
STEP nIncrement
nIncrement ѕ величина приращения счетчика. Если значение nIncrement отрицательно,
счетчик будет уменьшаться. Если предложение STEP опущено, счетчик будет
увеличиваться на 1.
Commands
Задает команды Visual FoxPro, которые нужно выполнять. Аргумент Commands может
включать любое число команд.
EXIT
Передает управление из цикла FOR ... ENDFOR команде, непосредственно следующей
за оператором ENDFOR. Можно поставить EXIT в любом месте между FOR и
ENDFOR.
LOOP
Возвращает управление непосредственно предложению FOR, не выполняя операторы,
расположенные между LOOP и ENDFOR. Счетчик увеличивается или уменьшается,
как если бы был достигнут оператор ENDFOR. Можно поставить LOOP в любом
месте между FOR и ENDFOR.
Комментарии
Переменная памяти или элемент массива используются в качестве счетчика, который
задает количество выполнений для команд Visual FoxPro, входящих в тело цикла FOR ...
ENDFOR.
Команды Visual FoxPro, идущие после FOR, выполняются одна за другой, пока не
встретится оператор ENDFOR или NEXT. После этого к счетчику MemVarName
прибавляется значение nIncrement. Если предложение STEP опущено, счетчик
увеличивается на 1. После этого он сравнивается с величиной nFinalValue. Если значение
счетчика меньше или равно nFinalValue, то команды, следующие за предложением FOR,
выполняются вновь. Если значение счетчика больше, чем nFinalValue, осуществляется
выход из цикла FOR ... ENDFOR и выполнение программы продолжается с первой
команды, следующей за ENDFOR или NEXT.
Замечание
Значения аргументов nInitialValue, nFinalValue и nIncrement считываются только в самом
начале. Однако изменение значения счетчика MemVarName внутри цикла влияет на число
выполнений цикла.
Если значение приращения nIncrement отрицательно и начальное значение nInitialValue
больше конечного значения nFinalValue, счетчик при каждом прохождении цикла будет
уменьшаться.
Условные Циклы. Оператор DO WHILE … ENDDO.
Выполняет группу команд, входящих в условный цикл.
Синтаксис
DO WHILE lExpression
Commands
[LOOP]
[EXIT]
ENDDO
Параметры
lExpression
Задает логическое выражение, значение которого определяет, будут ли выполняться
команды, размещенные между DO WHILE и ENDDO. Пока значение lExpression
остается "истиной" (.T.), команды этой группы будут выполняться.
3
Commands
Задает группу команд Visual FoxPro, которые следует выполнять, пока значением
выражения lExpression остается "истина" (.T.).
LOOP
Возвращает управление непосредственно оператору DO WHILE. LOOP можно
размещать в любом месте между DO WHILE и ENDDO.
EXIT
Передает управление из цикла DO WHILE первой команде, стоящей после ENDDO.
EXIT можно размещать в любом месте между DO WHILE и ENDDO.
ENDDO
Обозначает конец оператора DO.
Комментарии
Группа команд, расположенных между DO WHILE и ENDDO, выполняется, пока
значением логического выражения lExpression остается "истина" (.T.). Каждый оператор
DO WHILE должен иметь соответствующий ему оператор ENDDO.
После операторов DO WHILE и ENDDO в той же строке можно вставлять комментарии.
Во время компиляции и выполнения программы комментарии игнорируются.
Примеры:
1. Напишем фрагмент программы, выводящий на экран таблицу значений функции
f(x)=x^2+4 для x в интервале от –5 до 5.
x=-5
do while x<=5
f=x^2+4
? x, f
x=x+0.2
enddo
2. Вычислим сумму числового ряда состоящего из нечетных чисел от 1 до N –
1+3+5+7+…+N для N=50
N = 50
S=0
I=1
Do while I<= N
S=S+I
I=I+2
Enddo
?S
∞
3. Вычислим сумму ряда
S0=1
S1=0
N=1
Eps=0.001
x=1.1
Do while abs(s1-s0)>eps
S0=s1
S1=s1+1/x^n
4
s=∑ 1
n =1
x n , при x=1.1 с точностью 0.001
?n,abs(s0-s1),s1
N=n+1
Enddo
? "s=",s1
Здесь переменные S1 и S0 служат для хранения текущей величины суммы и величины
суммы с предыдущего шага. Текущее значение погрешности определяется выражением
abs(s1-s0). Цикл повторяется до тех пор, пока текущая погрешность не станет меньше
либо равной точности eps.
5
Download