..

Сайт города Попасная.
 

 

 

Интернет издания:

ПОПАСНЯНСКАЯ ПРАВДА

 



 

 

 

 

В операторе цикла третьего типа выполнение оператора осуществляется заданное количество раз, определяемое соотношением между начальным и конечным значением переменной, называемой параметром цикла. Он содержит зарезервированные слова For, To (либо DownTo) и Do и имеет следующий вид:
For param:=begin_param To end_param Do Оператор;
где переменная param, нпазываемая параметром цикла, должна принадлежать к одному из порядковых типов. В качестве параметра цикла используется любая подходящая по типу переменная, объявленная в разделе описаний. Оператор выполняется ровно столько раз, сколько последовательных значений принимает параметр, начиная со значения begin_param и заканчивая значением end_param. Оба граничных значения должны быть заданы выражениями того же типа, что и параметр цикла. Выведем на экран таблицу из десяти значений углов в диапазоне от 6° до 60°, а также синусов, косинусов, тангенсов и котангенсов для этих значений углов.

Программа 3.9.

Const k=pi/180;
Var i:Byte;
fi,sn,csn:Real;
Begin
Writeln('Angle':6,'Sin':6,'Cos':6,'Tg':6,'Ctg':6);
For i:=1 To 10 Do
Begin fi:=i*k*6;
sn:=Sin(fi);
csn:=Cos(fi);
Writeln(i*6:6,Sn:6:2,Csn:6:2,Sn/Csn:6:2,Csn/Sn:6:2);
End;
End.

Оператор цикла повторяет расчет тригонометрических функций и их вывод на экран 10 раз для значений параметра цикла от 1 до 10. Изменяющееся значение параметра цикла используется для вычисления текущего значения угла с помощью оператора присваивания fi:=i*k*6. Константа к предназначена для перевода угла из градусов в радианы. Оператор цикла с параметром выполняется следующим образом. Сначала вычисляются начальное и конечное значения. Вычисленные значения фиксируются и далее не изменяются. После этого начальное и конечное значения сравниваются. Если выполняется условие Begin_param>End_param, выполнение цикла на этом завершается. В противном случае параметру цикла присваивается начальное значение и выполняется оператор. Затем проверяется соотношение между текущим значением параметра и конечным значением. При выполнении условия param=End_param цикл завершается. В противном случае параметру присваивается следующее по порядку возрастания значение, и цикл повторяется. Если параметр является переменной целого типа, то он увеличивается на единицу. Таким образом, в следующем операторе цикла вывод будет выполняться 6 раз:
For i:=1 To 6 Do
Writeln(i);

Приведенный ниже оператор цикла не выполнит ни одного повтора, так как Begin_param>End_param:
For i:=6 To 1 Do Writeln(i);
В следующем фрагменте программы вывод будет выполняться 8 раз, а не 5, как было бы, если бы конечное значение на каждом шаге вычислялось заново:
i :=2;
For i:=l To 10-i Do Writeln(i);

Необходимо помнить, что параметр цикла предназначен только для определения количества повторов цикла. Его значение увеличивается автоматически, и хотя использование внутри цикла операторов, изменяющих значение параметра цикла, и не запрещается, это не рекомендуется, так как может привести к ошибке. Например, в следующей программе либо цикл выполняется бесконечно, либо программа завершается аварийно:

Программа 3.10.

Var i:Byte
Begin
For i:=1 to 5 do
Begin
I:=i+I;
Writeln(i);
End;
End.

Изменение параметра цикла i с помощью оператора i:=i+i приводит к тому, что он уже на первом шаге увеличивается на 2 вместо 1. Перед выполнением проверки i будет принимать значения 2, 4, 6, 8,... Поскольку ни одно из них не совпадает с конечным значением, равным 5, цикл никогда не завершится, если в настройке компилятора не установлена проверка на границы диапазона значений переменных порядковых типов. В противоположном случае выполнение программы будет принудительно завершено, когда значение параметра превысит 255. В TurboPascal определено две разновидности оператора цикла с параметром. Вторая разновидность оператора имеет вид:
For param:=Begin_param DownTo End_param Do Оператор;
При его использовании начальное значение Begin_param должно быть не меньше конечного значения End_param, в процессе выполнения цикла параметр принимает последовательные значения в диапазоне от Begin_param до End_param в порядке убывания. В TurboPascal 7.0 введены две процедуры, Break и Continue, которые могут использоваться во всех операторах цикла. Процедура Break досрочно завершает выполнение оператора цикла. Процедура Continue позволяет начать новый шаг цикла без завершения предшествующего. Рассмотрим применение этих процедур при решении следующей задачи: вводится последовательность положительных и отрицательных целых чисел; необходимо найти минимальное число среди вводимых положительных чисел; анализ последовательности заканчивается после ввода 100 чисел либо после ввода нуля.

Программа 3.11.

Var i,min,inp:Integer;
Begin
min:=maxint;
For i:=l To 100 Do
Begin
Writelnf'?');
Readln(inp);
If inp=0 Then Break;
If inp<0 Then Continue;
If inp<min Then min:=inp;
End;
Writeln('min = ',min);
End.

В программе объявлены три переменные: i используется как параметр цикла, min - для записи текущего минимального значения, inp - для записи введенного числа. В качестве начального значения переменной min присваивается значение стандартной константы maxint, которое равно максимальному значению, принимаемому переменной типа Integer, то есть 32767. На каждом шаге вводится число. Если оно равно 0, то выполнение цикла заканчивается и найденный минимум выводится на экран. Если вводится отрицательное число, то выполняется переход к следующему шагу цикла. При вводе положительного числа оно сравнивается с текущим найденным минимальным значением. Если введенное число меньше текущего минимума, то оно записывается в качестве нового текущего минимума.

Задания:

1. Выведите на экран все простые числа из заданного диапазона. Простым называется натуральное число, которое без остатка делится только на 1 и само на себя.
Вариант решения: чтобы найти все простые числа из заданного диапазона, нужно перебрать их все. Для этого проще всего использовать оператор цикла с параметром. Чтобы определить, простое число или нет, будем его делить на все числа от 2 до половины этого числа и анализировать остаток от деления. Если мы получим остаток, равный нулю, это будет означать, что число не является простым.

Var N_Beg,N_End, i, j:Word;
Simple:Boolean;
Begin
Write('Введите начало и конец диапазона');
Readln(N_Beg,N_End);
{Организуем перебор всех чисел из диапазона N_Beg,N_End }
For i:=N_Beg To N_End Do
Begin
{Устанавливаем значение переменной Simple}
Simple:=True; \
{Анализируем каждое число}
For j:=2 To i div 2 Do Begin
{Вычисляем остаток от деления} If i mod j =0 Then
Begin
{Если остаток от деления равен 0, изменяем значение переменной Simple и прерываем цикл}
Simple:=False;
Break;
End;
End; {Если число простое, выводим его на экран}
If Simple Then Write(i,' End;
Writeln;
End.

 

Вернуться к оглавлению

 
Popasnaya.com.ua Web-Source 2003 - 2004 / babelyuk jr / All Rights Reserved