Разветвляющиеся структуры
Для изменения линейного выполнения операторов в программе применяются разветвляющие структуры: Условный оператор. Оператор безусловного перехода
Условный оператор Для примера рассмотрим программу для вычисления выражения: 1 Х
Начало Ввод Х Х = 0 1/Х Ответ Конец Нет решения Обязательное условие – Х не должно быть равно 0 ДаНет
Очевидно, что в зависимости от выполнения условия выбирается путь выполнения последующих операторов. ЕСЛИ Х = 0 ТО НЕТ РЕШЕНИЯ ИНАЧЕ ВЫЧИСЛЯЕТСЯ 1/Х
Формат записи Условного оператора в Паскале: If условие then действие 1 при выполнении условия else действие 2 при не выполнении условия;
Если необходимо задать несколько условий вместе то их объединяют and («и») или or («или») по смыслу. Если надо сделать несколько действий то используется составной оператор – несколько операторов заключенных в программные скобки Begin и End.
Пример программы вычисления 1/Х Program prim1; {имя программы} Var X : integer; {описание переменных} Y : real; Begin {начало раздела операторов} Writeln (введите Х); Readln (X); {ввод значения переменной} If X = 0 then Writeln (нет решения) {вывод при выполнении условия} Else Begin {начало составного оператора при невыполнении условия} Y := 1/X; {вычисление} writeln ( Y =, Y); {вывод значения выражения} end; {конец составного оператора} End. {конец программы}
Оператор безусловного перехода Goto метка Где метка отмечает место в программе, после которой производятся необходимые действия. Этот оператор позволяет изменить последовательный порядок выполнения операторов. Метки могут быть обычным числом от 0 до 9999 или идентификатором.
Все используемые метки должны быть объявлены в разделе описания меток Label. Например: Метка от помеченного оператора отделяется двоеточием. Label 6, 89; …………….. Begin Goto 6 ………….. 6: ……………. 89: ………….. ………….. Goto 89 ………….. End.
Паскаль достаточно гибкий язык и редко нуждается в использовании оператора безусловного перехода.
Пример решение квадратного уравнения ax 2 +bx+c=0 Описательный алгоритм: 1.Найти дискриминант d=b 2 -4ac. 2.Если d0 то 2 корня: x 1 =(-b – d)/2a x 2 =(-b + d)/2a
Program koren; Label 1; Var a, b, c, d, x, x1, x2 : real; Begin Readln(a,b,c); d:= b*b – 4*a*c; If d0 then begin x1:=(-b-sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a); writeln(x1, x2); end else begin x:=-b/(2*a); writeln(x); end; 1: End.