Когда используется оператор цикла с параметром

Здравствуйте. Оператор цикла с параметром используется в тех случаях, когда некоторое однообразное действие надо повторить определенное количество раз. Особенно, если это количество достаточно велико. Бывают же такие задачи, когда необходимо, например, вычислить сумму каких-либо величин, каждая из которых вычисляется по формуле. Ведь если непосредственно вычислять сумму 1 + 2 + 3 + … + 1000, то программа разрастется до невообразимых масштабов.

Оператор цикла с параметром в народе ещё называют “оператор For”, и в Pascal он бывает двух типов (второй тип смотрите ниже). Первый записывается так:

for i := N1 to N2 do
<ОПЕРАТОР>

Всё, что находится между for и do, называется заголовком цикла, после do – телом цикла. Переменная i зазывается параметром цикла и имеет порядковый тип (целые числа, логический тип, символы, перечислимый и диапазонный тип). Слова for, to и do – это служебные слова Pascal, которые использовать в своих программах для обозначения переменных нельзя. Индекс i, которым обозначаются номера действий в операторе цикла, изменяется от меньшего N1 к большему N2 (N1 ≤ N2). Первый номер N1 по значению не должен превышать второй N2, иначе цикл не запустится и ОПЕРАТОР ни разу не выполнится.

Важно помнить: ИЗМЕНЯТЬ ПАРАМЕТР ЦИКЛА i В ТЕЛЕ ЦИКЛА НЕЛЬЗЯ! — это вызовет ошибку.

Оператор цикла этого типа действует как:

— сначала индекс i приравнивается N1 – минимальному возможному значению;
— потом проверяется, не превышает ли i второго номера N2 (i ≤ N2). Если это условие выполняется, то идем на следующий пункт, иначе (то есть при i > N1) – выходим из цикла;
— выполняется ОПЕРАТОР в теле цикла;
— далее увеличивается i на 1, и повторяем со второго пункта (т.е. проверяем истинность условия i ≤ N2, выполняем оператор, увеличиваем i на 1, и т.д).

В роли начального значения N1 наиболее часто используют 1 или 0 (это зависит от задачи).

Приведем пример с вычислением упомянутой ранее суммой 1 + 2 + 3 + … + 1000 первых 1000 натуральных чисел. Поскольку нужно сложить числа от 1 до 1000 включительно, то было бы естественно изменять индекс i от 1 до 1000. Тогда на каждой итерации цикла (при каждом выполнении) искомую сумму, которую мы обозначим sum, будем увеличивать на i. Вот, что у нас получится.

Посчитать сумму первых 1000 натуральных чисел

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
var
i, sum: integer;

begin
sum := 0; //Начальное значение суммы
for i := 1 to 1000 do
sum := sum + i; //К сумме прибавляем i
writeln(‘Результат: ‘, sum);
readln
end.

После запуска программы вы должны увидеть результат: 500500. Что делает наша программа?

2 строка. Описываем переменные i (параметр цикла) и sum (конечная сумма) как целые;

5 строка. Начальному значению суммы sum присваиваем 0. Это называется инициализация начальной переменной;

6 строка. Числа будем складывать от 1 до 1000;

7 строка. На каждой последующей итерации цикла к сумме прибавляем i;

8 строка. После выхода из цикла (когда будет i = 1000) выводим конечный результат суммы.

Решим ещё одну простенькую задачку:

Напечатать ряд чисел 20 в виде: 20 20 20 20 20 20 20 20 20 20.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
var
i: byte;

begin
for i := 1 to 10 do write(‘ ‘, 20);
readln
end.

Мы видим, что количество выводимых чисел равно 10, поэтому запускаем цикл от 1 до 10, и выводим число 20 оператором вывода write(). Обратите внимание, что величина индекса изменяется лишь в пределах [1, 10], поэтому не имеет смысла использовать целый тип integer – достаточно обойтись типом byte (8 бит, или 1 байт). Особенность этого примера в том, что код программы не содержит переменной i в теле цикла (напоминаю, тело цикла – часть программы после do) – мы просто выводили несколько раз число 20. Бывает, когда параметр цикла используется в теле цикла, но во многих простеньких программах его использование лишнее.

А вот пример простой задачи, когда параметр цикла используется:

Напечатать “столбиком” все целые числа от 12 до 25.

Если промежуточное выводимое число обозначить n, то изменяя его с 12 по 25 включительно, выведем все числа. Только здесь нужно задействовать оператор вывода writeln – с переводом курсора на следующую строку.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
var
n: byte;

begin
for n := 12 to 25 do writeln(n);
readln
end.

И ещё один пример:

Напечатать таблицу умножения на 7.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
var
i: byte;

begin
for i := 1 to 10 do
writeln(‘7 × ‘, i, ‘ = ‘, 7 * i);
readln
end.

Вместо “крестика” (знак умножения) можете использовать что-либо другое например, клавиатурные “звездочку” или букву “x”. После запуска программы у вас должно получится так:

7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70

Если вместо ОПЕРАТОРА в теле цикла необходимо выполнить несколько операторов, то их нужно заключить в операторные скобки BEGIN … END, и разделить между собой точкой с запятой (в конце последнего оператора, перед закрывающим end, точку с запятой ставить не обязательно). Образованая таким образом конструкция из нескольких операторов называется составным оператором:

for i := N1 to N2 do
begin
<ОПЕРАТОР 1>;
<ОПЕРАТОР 2>;
<ОПЕРАТОР 3>;
…………
<ОПЕРАТОР k>
end.

Операторы в составном операторе в цикла выполняются один за другим, после чего по возможности производится переход на следующую итерацию. Наведем примеры.

Рассчитать значения y для значений х, равных 4, 5, …, 28: y = 2t2 + 5.5t – 2, если t = x + 2.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
var
x, t: integer;
y: real;

begin
for x := 4 to 28 do
begin
t := x + 2;
y := 2 * t * t + 5.5 * t – 2;
writeln(‘ x = ‘, x:2, ‘, y = ‘, y)
end;
readln
end.

2, 3 строки. Описываем x, t как целые, а y – вещественную;

6 строка. Изменяем x в указаных в условии пределах [4, 28];

8 строка. Предварительно вычисляем t, используя значение x;

9 строка. Вычисляем y, подставляя найденное ранее t;

10 строка. Выводим значения x и y.

Синтаксис другого типа оператора цикла с параметром задается следующим образом:

for i := N1 downto N2 do
<ОПЕРАТОР>

Отличие этого цикла от первого только в том, что значение индекса i не увеличивается, а уменьшается (на это указывает английское слово down, означающе “вниз”). Таким образом, начальное значение N1 параметра цикла i должно быть НЕ МЕНЬШЕ конечного N2 (N1 ≥ N2), ибо в противном случае цикл ни разу не выполнится.

Для примера решим такую задачу:

Вычислить сумму первых 1000000 членов гармонического ряда.

Гармоническим рядом в математике называют ряд, составленный из чисел, обратных к натуральным: 1 + 1/2 + 1/3 + … + 1/n + … . По условию нужно сложить первые 1000000 (один миллион) членов, только мы это сделаем в обратоном по отношению к указанному выше порядке: 1/1000000 + 1/999999 + … + 1/3 + 1/2 + 1.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
var
i: integer;
sum: real;

begin
sum := 0; //Начальное значение суммы
for i := 1000000 downto 1 do
sum := sum + 1/i; //К сумме прибавляем 1/i
writeln(‘Результат: ‘, sum);
readln
end.

А вот как эта задача решается с циклом первого типа, посмотрите на странице for 10-14. Только нужно иметь ввиду, что, хотя гармонический ряд и является расходимым – его частичные суммы стремятся к бесконечности при неограниченном возрастании членов) – но растет гармонический ряд очень медленно.

Вообще, в каждом отдельном случае нужно решать, какой цикл с параметром использовать лучше – с возрастающим или убывающим параметром. В разделе Задачника в группе “for” есть много примеров на тему цикла с параметром, например, Функции с использованием факториала. А пока на этом все, если есть вопросы или пожелания, пишите в комментариях.

Источник

        Цикл с параметром был уже рассмотрен нами в разделе “Алгоритм” в теме “Виды алгоритмов”.
        Цикл с параметром
используется,  когда заранее известно
сколько раз должен выполниться цикл. 

Формат записи цикла: 

For  <пар.цикла> :=
<нач.знач> to <кон.знач.> do <оператор>

        Здесь for, to, do –
зарезервированные слова (для, до, выполнить); 


<пар. цикла>
– параметр цикла – переменная целочисленного типа (типа integer); 

<нач. знач.>
– начальное значение – число или переменная целочисленного типа (типа integer); 

<кон. знач.>
– конечное значение – число или переменная целочисленного типа (типа integer); 

<оператор>
– произвольный оператор Паскаля. 

Пример:  For i:=1 to n do <оператор>
здесь i – параметр цикла
         1 – начальное значение
         n – конечное значение        
        Если в теле цикла используется несколько операторов, тогда, используются
операторные скобки: begin … end. 
        При выполнении оператора for вначале вычисляется выражение <нач .знач.> и осуществляется присваивание его значения переменной цикла <пар .цикла> := <нач. знач.>. Далее сравниваются <пар .цикла> и  <кон.знач.>. До тех пор, пока они не станут равными будет выполняться оператор (операторы). Значение переменной цикла <нач.знач> автоматически увеличивается на единицу в ходе выполнения цикла. Надо сразу заметить, что задать шаг цикла, отличный от 1 в этом операторе нельзя.
Пример:
        Возможны такие записи
оператора цикла:

1) for i:= 1 to n do s1;

2) for i:= 3 to 10 do s1;  

3) for i :=
a to b do s1;

4) for i := a to b do
                      begin 

        s1; 
        s2;
        … 
        sn 

end;

        Здесь s1,
s2, s3, … sn – операторы цикла. 

Пример: 
        Составить программу вывода на экран чисел от 1 до 10.

 Блок-схема:

 Программный код:
Program Problem; {Вывод чисел}
var i : integer; 
    begin 
    for i:=1 to 10 do   
    writeln (i);
    redaln;
end.

Пример:
        Составить программу вычисления факториала числа n, т. е. n!. (0! = 1)

 Блок-схема:

 Программный код:

Program Problem1; {Вычисление факториала числа n!}
var 
n, f, i : integer; 
    begin 
    write(‘Введите натуральное число’); 
    readln(n);
    f := 1; 
    if n <> 0 then for i := 1 to n do f := f*i; 
    writeln (‘Факториал числа ‘, n, ‘ равен ‘, f);
    redaln;
end.

Объяснение
программы:

        Переменная n – для вводимого пользователем числа, факториал которого надо
найти; f – переменная, в которой будет “накапливаться” значение
факториала числа n; i – переменная цикла. 
        Устанавливается первоначальное значение переменной f := 1. 
        Далее начинается цикл. Переменной i присваивается начальное значение 1; оно
сравнивается с конечным – n (1 <= n), если условие
истинно, тогда выполняется оператор (в этой программе он один): f :=
f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным:
i := i + 1, 1 + 1 = 2  и цикл повторяется. 
        Когда значение i станет равным n, тогда цикл выполнится
последний раз, потому что следующее значение i будет n + 1, что больше
конечного значения n, условие i <= n – ложно, цикл не
выполняется.

Существует другая форма оператора цикла For: 
Формат записи цикла: 

For  <пар.цикла> :=
<нач.знач> downto <кон.знач.> do <оператор>

        Замена зарезервированного
слова to на downto означает, что шаг параметра цикла
равен (-1).
        Изменение значения
параметра идет от большего значения к меньшему, т. е. <нач. знач.>  <кон. знач.>.

Пример:
Возможны такие записи оператора цикла:

1) for i:= n downto 1 do s1;

2) for i:= 10 downto 3 do s1;  

3) for i := b downto a do s1; (при условии, что b>a)

4) for i := b downto a do
                                      begin 

                    s1; 
                    s2;
                    … 
                    sn 

            end;            (при условии, что b>a)

        Здесь s1, s2, s3, … sn – операторы цикла. 

Пример: Программу вычисления факториала числа можно составить, используя этот оператор
цикла. 

Блок-схема

 Программный код:
var 
n, i, f : longint;
    begin 
    write(“Введите натуральное число “);
    readln(n); 
    f := 1;
    if n <> 0 then for i := n downto 1 do f := f*i;
    writeln(“Факториал числа “, n, ” равен “, f);
end.

Задачи  

  1. Даны 10 чисел, вывести те из них, которые являются полными квадратами. Составить блок-схему и программу.
  2. Даны 10 чисел, найти их произведение. Составить блок-схему и программу.
  3. Даны 10 чисел, найти сумму четных. Составить блок-схему и программу.
  4. Даны 10 чисел, найти количество отрицательных. Составить блок-схему и программу.
  5. Даны n действительных чисел. Найти максимум и минимум. Составить блок-схему и программу.
  6. Даны n действительных чисел. Найти среднее арифметическое всех элементов. Составить блок-схему и программу.
  7. Даны n действительных чисел. Найти среднее арифметическое отрицательных и положительных элементов. Составить блок-схему и программу.
  8. Даны n натуральных чисел. Найти сумму и произведение элементов, кратных 3 и 5. Составить блок-схему и программу.
  9. Даны n натуральных чисел. Вывести те числа, значения которых являются степенями двойки (1, 2, 4, 8, 16, …). Составить блок-схему и программу.
  10. Даны n натуральных чисел. Вывести те числа, значения которых находятся в отрезке [a, b]. Составить блок-схему и программу.
  11. Даны n натуральных чисел. Вывести на экран те числа, значения которых являются квадратами какого-либо числа.Составить блок-схему и программу.
  12. Дано натуральное число n. Найти n2. Составить блок-схему и программу.
  13. Даны натуральные числа a, n. Найти an. Составить блок-схему и программу.
  14. Дано натуральное число n. Определить его разрядность, цифру старшего разряда числа увеличить на 2
  15. Дано натуральное число n. Поменять местами первую и последнюю цифры числа
  16. Дано натуральное число n. Цифры числа, кратные 2 заменить на 0.
  17. Дано натуральное число n. Цифры числа, кратные 3 заменить на 1.
  18. Дано натуральное число n. Вычислить произведение (2n-1)*(3n-1)*(4n-1)*…*(10n-1). Составить блок-схему и программу.
  19. Вычислить сумму 2+4+6+…+100.  Составить блок-схему и программу.
  20. Дано натуральное число n, действительное x. Вычислить произведение x+x/2+x/3+…+x/n. Составить блок-схему и программу.
  21. Дано натуральное число n. Вычислить P=(1-1/2)(1-1/3)…(1-1/n), где n>2. Составить блок-схему и программу.
  22. Дано натуральное число n. Вычислить P=(1+x)/n+(2+x)/(n-1)+…+(n+x)/1. Составить блок-схему и программу.
  23. Даны n натуральных чисел. Вычислить сумму ряда 1+x/1!+x2/2!+x3/3!+ …+xn/n!. Составить блок-схему и программу.

Наверх

Источник

Оператор цикла с параметром начинается со слова for и вызывает повторяющееся выполнение оператора цикла, пока переменной цикла присваивается последовательно возрастающие или убывающие значения. Оператор тела цикла может быть составным оператором.

Оператор for имеет два варианта записи:

– инкрементный (с возрастанием переменной цикла):

for <переменная цикла>:=<начало> to <конец> do

<оператор>;

– декрементный (с убыванием переменной цикла):

for <переменная цикла>:=<начало> downto <конец> do

<оператор>;

В качестве переменной цикла должна использоваться переменная порядкового типа, объявленная в том блоке, где содержится оператор for. Параметры <начало> и <конец> задаются выражениями, типы которых должны быть совместимы по присваиванию с типом переменной цикла. Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for. Оператор, который содержится в теле цикла, выполняется один раз для каждого значения в диапазоне между начальным и конечным значением.

Переменная цикла всегда инициализируется начальным значением.

Когда работает оператор for, значение переменной цикла (счетчика циклов) увеличивается (в случае инкрементного варианта) при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле цикла оператор не выполнятся. (Операторы в теле цикла не выполняются ни разу, если конечное значение меньше начального).

В случае декрементного варианта цикла значение переменной цикла

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

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

Пример 5 Инкрементный вариант

Вычислить сумму первых N членов разложения в ряд экспоненты ex ,где N и X – заданные числа соответственно целого и вещественного типа.

Экспонента раскладывается в ряд по формуле

Напишем следующий фрагмент программы:

Sum:=1;

Prod:=1;

Fact:=1; {Начальные значения}

for I:=1 to N-1 do

Begin

Fact:=Fact*I; {Факториал I}

Prod:=Prod*X; {X в степени I}

{Сумма (I+1) члена разложения}

Sum:= Sum + Prod/Fact;

End;

Пример 6 Декрементный вариант

Обратный отсчет времени при запуске ракет:

WriteLn(‘Начинается обратный отсчет времени’);

for Seconds:=10 downto 1 do

WriteLn(‘Осталось’,Seconds,’ сек.’);

WriteLn(‘Пуск !’);

Программа выведет числа 10, 9,…, 1 и слово “Пуск”.

Контрольные вопросы

1 Какие операторы цикла применяются в языке Pascal?

2 Что такое переменная цикла, тело цикла, оператор цикла?

3 Формат и действие оператора цикла с пост условиемrepeat.

4 Формат и действие оператора цикла с предусловием while.

5 Формат и действие оператора цикла с параметром for. Декрементный и инкрементный структуры оператора.

Задание

Вычислить сумму и произведение полученных значений функции. Составить три варианта программы – с операторами repeat, while, for.

.

№ вар. Выражение Данные
t=|sin(ax2+bx-c)| 1<=x<=5; ∆x=0,2 a=2,1; b=3; c=-14,2
t=2х3sin(e3x – 450+a)-lnс 10<=x<=25; ∆x=0,2; a=2,22
c=-14,2
11<=x<=15; ∆x=0,5; a=0,2712;
c=-14,2
D = lg|x-a| 4<=x<=5; ∆x=0,2; a=2,22;
1<=x<=15; ∆x=2; a=2,22; b=3; c=-14,2
W = cos(-ax2+600) 1<=x<=3; ∆x=0,2; a=2,22;
V = ln(sin x5)ab 3<=x<=5; ∆x=0,2; a=2,22; b=3;
1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2
Z = + |(ax2-c8+50)| 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 
P = ln(4ax5+c-140) 1<=x<=5; ∆x=0,2; a=2,22; c=-1 
1<=x<=2 ∆x=0,5; a=2,22; b=3; c=-14,2 
∙3|tg xa+b+c| 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 
F = 24|arctg xa+b| 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 
5<=x<=15; ∆x=0,2; a=2,22; b=3; c=-14,2 
5<=x<=50; ∆x=10; a=2,22;
c=-14,2
 
 
F = tg4(x5+c-190)
1<=x<=5; ∆x=0,2;
c=-14,2
 
 
L = ln3(4ax5c-140)
1<=x<=5; ∆x=0,2; a=2,22;
c=-14,2
 
8<=x<=5; ∆x=1; a=2,22; b=3; c=-14,2 
M = |ln(3bx5-270)| 22<=x<=33; ∆x=1.5;
b=3
 
      
10<=x<=20 ∆x=2; a=2,22; b=3; c=-14,2 
      

Содержание отчета

1 Название работы.

2 Цель работы.

3 Содержание работы.

4 Постановка задачи для своего варианта.

5 Три программы с разными операторами цикла.

7 Результаты расчёта суммы и произведения – один раз.

8 Письменные ответы на контрольные вопросы.

9 Выводы по работе.

Лабораторная работа № 4

Итерационные циклы

Цель работы:изучение алгоритмов и программ, реализующих

итерационные циклы.

Содержание работы:

1 Итерационные циклы

2 Программа итерационного цикла

Итерационные циклы

Циклическая структура программы позволяет производить многократные вычисления группы операторов при изменении одного или нескольких параметров одновременно. В языке Паскаль имеются для этого операторы цикла for, repeat, while. В лабораторной работе №3 были рассмотрены эти операторы для решения задач с арифметическими циклами, в которых известны начальное, конечное значения аргумента и его шаг (приращение). Кроме того, число повторений цикла также было известно или его можно было определить.

Существует обширный ряд циклических задач, которые нельзя отнести к арифметическим циклам, т.к. в них не задаются начальное и конечное значения аргумента функции и шаг его приращения. В них окончание цикла (повторения) вычислений производится по контролю не значения аргумента, а другого параметра, например, точности вычислений, времени решения задачи и др. Такие циклы называются итерационными (iteration – повторение).

Для вычислений с заранее неизвестным количеством повторений (итераций) оператор for не пригоден, поскольку в нём нужно задавать начальное и конечное значения аргумента, поэтому используются только операторы repeat и while.

Источник

Читайте также:  Предметы эстетического цикла музыка изо труд физическая культура