Лишь немногие программы могут быть записаны в виде длинной последовательности выполняемых друг за другом операторов. Часто в задачах встречаются условия, от выполнения которых зависит последующий ход вычислений. Чтобы изменить естественный порядок выполнения операторов программы, используют операторы передачи управления:
а) оператор безусловного перехода
GOTO N
Где N- метка оператора, которому передается управление.
При записи в строке с несколькими операторами GOTO должен быть последним в строке. Если это правило не соблюдено, то следующие за ним операторы никогда не будут выполняться, так как на них нельзя передать управление. Например, в следующем фрагменте программы оператор GOTO обеспечивает дважды исполнение операторов с выводом на печать, после чего будет выдано сообщение об ошибке “Quit of DATA” (“Нет данных”).
DATA 5,7
а1:
REАD R
PRINT "R="; R;
S=3. 1416*R^2
PRINT "S="; S
GOTO a1:
R=5 S=78.5
R=7 S=153.86
Out of DTA
б) Оператор условного перехода IF L THEN S
Где L - некоторое условие, которое может быть истинным, или ложным;
S – оператор или несколько операторов, разделенных двоеточием.
Действие оператора IF заключается в следующем: если L -" истина ', то выполняется S; е с ли L - ' 'ложь ', то S не выполняется, а выполняется следующий за IF оператор. Например,
INPUT A, В
IF A>В THEN PRINT "А>В"
IF A<В THEN PRINT "A<B"
IF A=B THEN PRINT "Числа равны"
END
если действие IF—ТHEN задаётся оператором GOTO, то можно опустить либо THEN, либо GOTO, но не оба сразу. Например, вместо
IF Х<>У AND В<>0 THEN GOTO m1
можно написать один из следующих вариантов:
IF X<>Y AND B<>0 THEN m1
IF X<>Y AND B<>O GOTO m1
Как указывалось выше, действие в операторе IF—THEN можно задавать последовательностью нескольких операторов, разделённых двоеточием. Например,
INPUT А, В, С
D=B*B-4*А*C
IF D<0 THEN PRINT "Корней нет": GOTO m1
X1= (-B + SQR (D)) / (2 *А)
X2 = (-B -SQR (D))/(2 *A)
PRINT XI, X2
M1:
END
Условный оператор I F - Т Н ЕN может быть дополнен ключевым словом ЕLSЕ, после которого указываются действия (S1), подлежащие выполнению, если выражение L этого оператора имеет значение "ложь ".
IF L THEN S ELSE S1
В результате в одном операторе, называемом полным условным оператором, указаны все действия, выполняемые при любом значении выражения. Например,
IF M<>N THEN m5 ELSE PRINT "Равенство"
4) Записать полный условный оператор, который выводит на печать 1 в случае если точка A(X0,YO) принадлежит графику функции Y=2*X^2-3*X+4 и 0 в противном, случае.
5) Записать полный условный оператор, который выводит на печать "Да", если число Х удовлетворяет неравенству а. < X<b и "Нет" в противном случае.
Программирование разветвляющихся алгоритмов.
Вычислительный процесс, которыйв зависимости от выполнения определённых условий реализуется по одному из нескольких заранее предусмотренных (возможных) направлений, называется разветвляющимся. Каждое направление вычислений называется ветвью. Выбор ветви осуществляется в результате проверки некоторого логического условия. В качестве примера рассмотрим решение нескольких задач.
1) Составить программу вычисления и печати квадратов натуральных чисел от 1 до 10.
Вычисление квадратов чисел
DEFINT N, S
N=1
M1:
S=N^2
PRINT "N="; N,"S="; S
N=N+1
IF N<=10 THEN m1
END
2) Составить программу, для определения какой четверти принадлежит точка Т(х, у).
INPUT х, у
IF х>0 AND у>0 THEN PRINT 1: STOP
IF" x<0 AND y>0 THEN PRINT 2: STOP
IF x<0 AND y<0 THEN PRINT 3: STOP
IF x>0 AND y<0 THEN PRINT 4: STOP
3) Проверить, принадлежит ли точка А (хО, уО) отрезку КМ, если К(х1,у1), М(x2, y2).
INPUT х0,у0,х1,у1,х2,уand 2
DEF FNRAS (XL, El, x2, y2)=SQR ((xl-x2)^2+(yl-y2)^2)
KM=FNRAS (XL, yl, x2, y2)
AK=FNRAS (xO, yO, x1,уI)
AM=FNRAS (xO, yO, x2, y2)
IFkm=Ak+Am THEN PRINT "Да" ELSE PRINT "Нет"
END
УПРАЖНЕНИЯ
1) Запишите полный условный оператор, который обеспечивает переход к оператору с меткой а1, если абсолютная величина числа А больше 3, и к оператору с меткой b1 в противном случае.
2) Укажите метку оператора, которому будет передано управление в результате выполнения фрагмента программы
READ A, B
DATA 5., 6.
IF A\B>0 THEN V1 ELSE GOTO M2
3) Вычислите значение переменной А, которое она примет в результате выполнения фрагмента программы
A=. 4
IF 3*A+1>0 THEN h1 ELSE n2
A=A+0.8
N1:
A=A-1
GOTO n3
N2:
A=A/2
N3:
A=A+1
4)Вывести на печать отрицательные значения функции
у=0.5— sin x при изменении аргумента х от нуля до 1 с шагом 0,1.
х=0.
M1:
y=. 5-sin (х)
If у<О. Then ргInt "х ="; х, "у= ";у
х=х+0.1
ifx<=1.thenm1
end
Операторы цикла
При решении многих задач возникает необходимость многократного повторения одних и тех же действии, но над различными значениями переменных, определяющих эти действия. Такие вычислительные процессы называются циклическими, в многократно повторяемые участки – циклами. Циклический алгоритм может быть реализован с помощью оператора IF (см. программу вычисления отрицательных значений функции). BASIC существуют специальные операторы цикла, синтаксическая структура которых имеет вид:
FOR V=A1 ТО A2 STEP A3
операторы
области (тела)
цикла
NEXT V
где V - параметр или счётчик цикла;A1,A2,A3 – выражения определяющие соответственно начальное А1, конечное A2 значения счетчика и шаг изменения параметра циклаA3.
Такая структура предписывает выполнить все операторы, расположенные между операторами FOR и NЕХТ, для всех значений параметра цикла V, удовлетворяющих условию
(A2-V)*A3>=0.
Количество повторений цикла определяется по формуле
K=[(A2-A1)/A3]+1.
где [ ] - целая часть частного.
Конструкция SТЕР А3 может быть опущена, если А3=1. Например, при выполнении программы
For x%=1 to 8 step 2
Print 2^x%;
Next x%
End
на печать будет выведена последовательность 2, 8, 32, 128. В качестве шага цикла разрешается использовать любые значения, в том числе отрицательные и дробные. Например,
Fог1=3.5to1step-.5
pгint1;
next1
На экран будет выведена строка 3.5 3 2.5 2 1.5 1.
Переменная, являющаяся счётчиком цикла, может использоваться внутри цикла как любая другая переменная, в частности, можно изменять её значение, что, однако делать не рекомендуется, так как это может повлиять на число повторений операторов цикла. Например, программа
For x=1 to 99 step 2
Print x;
X=2*x
Next x
End
выдаёт на печать только шесть значений х: 1, 4, 10, 22, 46, 94.
При выходе из цикла, по какому - либо оператору условного или безусловного перехода значение счётчика равно последнему значению внутри цикла. Например, рассмотрим программу, реализующую вывод на печать первого положительного значения Функции у=х^2-5*x+6 при изменении аргумента от 2.5 до 4 с шагом 0,2.
Fоr х=2.5 to 4 step 0.2
у=X^2-5*x+6
If y>0 then h1
Next x
H1:
Print "x= "; x, "y="; y
End
В отличие от счетчика цикла начальное (А1) и конечное (А2) значение параметра цикла и шаг его изменения (А3) являются неизменными в течении выполнения цикла.
Разрешается использование циклов в цикле (вложенных циклов).
В этом случае внутренний цикл должен полностью находиться в теле внешнего цикла. Например,
For =...
ForB =...
NexfВ
ForС =...
NextС
next
Рассмотрим пример. Пусть, необходимо составить программу вычисления значений. Функции двух переменных Z= (х^2 + у^2)*(sinx + cosy) при изменении х от 1 до 3 с шагом 0,4 и у от нуля до 4 с шагом 0, 5.
INPUT x0, xk, hx, y0, yk, hy
For y=y0 to yk step hy
For x=x0 to xk step hx
Z=(x^2+Y^2)*(sin (x)+cos (y))
Print “x=”; x, ”y=”; y,”z=”; z
Next x
Next y
End
УПРАЖНЕНИЯ
1) Определить количество повторения цикла
For i=0.2 to 5.6 step 0.2
2) чему равно последнее значение параметра цикла при выполнении оператора
For k=7 to 20 step 4
3) какое значение примет переменная M в результате выполнения фрагмента программы
For i=1 to 2
M=i\4
For j=1 to 3
M=M+j
Next j
Next I
4) укажите значение переменной L после выполнения программы
L=3
For i=1 to 6 step 2
L=L+i
Next I
If L>20 then L=2
5)Найти сумму элементов массива KS (2,3), если
OPTION BASE 1
DIM KS%(2,3)
For k=1 to 2
For j=1 to 3
KS%(kJ)=k-j
Next j
Next k
End