Операторы цикла цикл с параметром оператор цикла

Цикл с параметром был уже рассмотрен нами в разделе “Алгоритм” в теме “Виды алгоритмов”.
Цикл с параметром используется, когда заранее известно сколько раз должен выполниться цикл.
Формат записи цикла:
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. |
Задачи
- Даны 10 чисел, вывести те из них, которые являются полными квадратами. Составить блок-схему и программу.
- Даны 10 чисел, найти их произведение. Составить блок-схему и программу.
- Даны 10 чисел, найти сумму четных. Составить блок-схему и программу.
- Даны 10 чисел, найти количество отрицательных. Составить блок-схему и программу.
- Даны n действительных чисел. Найти максимум и минимум. Составить блок-схему и программу.
- Даны n действительных чисел. Найти среднее арифметическое всех элементов. Составить блок-схему и программу.
- Даны n действительных чисел. Найти среднее арифметическое отрицательных и положительных элементов. Составить блок-схему и программу.
- Даны n натуральных чисел. Найти сумму и произведение элементов, кратных 3 и 5. Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести те числа, значения которых являются степенями двойки (1, 2, 4, 8, 16, …). Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести те числа, значения которых находятся в отрезке [a, b]. Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести на экран те числа, значения которых являются квадратами какого-либо числа.Составить блок-схему и программу.
- Дано натуральное число n. Найти n2. Составить блок-схему и программу.
- Даны натуральные числа a, n. Найти an. Составить блок-схему и программу.
- Дано натуральное число n. Определить его разрядность, цифру старшего разряда числа увеличить на 2
- Дано натуральное число n. Поменять местами первую и последнюю цифры числа
- Дано натуральное число n. Цифры числа, кратные 2 заменить на 0.
- Дано натуральное число n. Цифры числа, кратные 3 заменить на 1.
- Дано натуральное число n. Вычислить произведение (2n-1)*(3n-1)*(4n-1)*…*(10n-1). Составить блок-схему и программу.
- Вычислить сумму 2+4+6+…+100. Составить блок-схему и программу.
- Дано натуральное число n, действительное x. Вычислить произведение x+x/2+x/3+…+x/n. Составить блок-схему и программу.
- Дано натуральное число n. Вычислить P=(1-1/2)(1-1/3)…(1-1/n), где n>2. Составить блок-схему и программу.
- Дано натуральное число n. Вычислить P=(1+x)/n+(2+x)/(n-1)+…+(n+x)/1. Составить блок-схему и программу.
- Даны n натуральных чисел. Вычислить сумму ряда 1+x/1!+x2/2!+x3/3!+ …+xn/n!. Составить блок-схему и программу.
Наверх
Источник
Урок из серии: «Язык программирования Паскаль«
На предыдущем уроке Вы познакомились с оператором выбора Select Case.
В этом уроке будет описано использование оператора цикла с параметром For.
Циклический процесс, или просто цикл, это повторение одних и тех же действий.
Операторы, предназначенные для организации повторения одних и тех же действий, называются операторами цикла.
Они всегда имеют заголовок цикла, определяющий число повторений, и тело цикла – повторяющиеся действия.
Переменная, которая изменяются внутри цикла и влияют на его окончание, называется параметром цикла.
Величина, на которую изменяется переменная цикла, называется шагом цикла.
Различают два вида циклов: циклы с известным числом повторений (циклы с параметром) и циклы с неизвестным числом повторений (циклы с условием).
Опишем первый из них.
Оператор цикла for
Оператор цикла с параметром (цикл for) применяется тогда, когда заранее известно количество повторений одного и того же действия.
Для записи оператора цикла с параметром в языке Паскаль используется две формы записи.
for <параметр> := <начальное значение> to <конечное значение> do <тело цикла>;
или
for <параметр> := <начальное значение> downto <конечное значение> do <тело цикла>;
В первом операторе, с ключевым словом to в заголовке, параметр цикла изменяется от начального значения до конечного значения, увеличиваясь всякий раз на единицу.
Во втором операторе, с ключевым словом downto, параметр цикла уменьшаясь на единицу.
здесь:
<параметр> – переменная цикла (счетчик цикла);
<начальное значение> – начальное значение переменной цикла;
<конечное значение> – конечное значение переменной цикла.
В языке Паскаль шаг цикла всегда равен единице.
Если тело цикла состоит из нескольких операторов, то оно заключается в операторные скобки Begin – End.
Рассмотрим пример с использованием оператора цикла For.
Пример. Из чисел от 10 до 99 вывести те, сумма цифр которых равна n (0<n<=18).
Вопросы для обсуждения
- Каким действием можно выделить последнюю цифру числа?
- Каким действием можно выделить первую цифру числа?
Обозначим:
k – это просматриваемое число;
p1 – это первая цифра числа k;
p2 – это вторая цифра числа k;
s – это сумма цифр данного числа k.
Число k будем выписывать только в том случае, когда сумма p1 и p2 будет равна n.
Program Primer9_1; Var k,n,p1,p2,s : Integer; Begin Writeln(‘Введите целое число n (0 < n <= 18): ‘); Readln(n); For k:=10 To 99 Do {Для(For) k от 10 до (To) 99 делать(Do)} Begin p2:=k Mod 10; {Выделяем вторую цифру} p1:=k Div 10; {Выделяем вторую цифру} s:=p1+p2; If s = n Then Writeln(k); {Если сумма равна n, то выводим k} End; End.
Коротко о главном
1. Если нужно многократно повторять одни и те же действия, то в программе организуют цикл.
2. Когда заранее известно число повторений и шаг цикла равен 1 (или -1), для организации циклов используют оператор for.
3. Оператор for имеет две формы записи. Если в заголовке цикла используется ключевое слово to, значение переменной цикла увеличивается на 1, если слово downto – переменная цикла уменьшается на 1.
4. Количество повторений цикла определяется по формуле:
<конечное значение> – <начальное значение> +1.
5. Нельзя изменять параметр цикла в теле цикла.
На следующем уроке мы рассмотрим циклы с неизвестным числом повторений.
Следующий урок: Операторы цикла с условием While и Repeat
Источник
Циклы чрезвычайно важны в программирования на C++, да и в остальных языках. Начнем с теории.
Цикл – это повторение одного и того же участка кода в программе. Последовательность действий, которые повторяются, называют телом цикла. Один проход цикла – это шаг или итерация. Переменные, изменяющиеся внутри цикла и влияющие на его окончание, называются параметрами цикла.
В C++ предусмотрены три оператора, реализующих циклический процесс: while, do..while и for. Рассмотрим каждый из них.
Оператор с предусловием (while)
Он работает следующим образом. Вычисляется значение выражения. Если оно истинно, то выполняется оператор. В противном случае цикл заканчивается. Если состоит более чем из одного оператора, необходимо использовать составной оператор:
while условие
{
оператор_1;
оператор_2;
…
оператор_n;
}
Рассмотрим пример. Пусть нам необходимо составить программу, которая в зависимости от возраста пользователя определяла сколько лет ему осталось до выхода на пенсию. При условии, что пенсионный возраст наступает в 56 лет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include “stdafx.h” #include <iostream> using namespace std; int main () { int x, y, i, pen; //описаваем нужные переменные x=0; //стартовое значение переменной y=56; //определяем пенсионный возраст while (x<=3) //пока параметр цикла не превышает конечное значение. //выполнять тело цикла { cout<<“How old are you? n”; cin>>i; pen=y-i; cout<<“Remained until retirement (years) = “<<pen<<endl; x++; //изменение параметра цикла (аналогично x=x+1 (расмотрим в последующих уроках)) } system (“pause”); return 0; } |
Вот результат работы программы:
Цикл с постусловием (do…while)
Иногда возникает необходимость, чтобы тело цикла выполнилось хотя бы один раз, но условие не позволяет этому случится. Вот именно тут нам поможет цикл с постусловие do…while. Который реализован следующей конструкцией:
do оператор while (выражение);
Работает цикл следующим образом. В начале выполняется оператор, затем вычисляется значение выражения. Если оно истинно, оператор тела цикла выполняется еще раз.
Рассмотрим код на примере прошлой программы, изменив некоторые строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include “stdafx.h” #include <iostream> using namespace std; int main () { int x, y, i, pen; //описаваем нужные переменные x=0; //стартовое значение переменной y=56; //определяем пенсионный возраст do { cout<<“How old are you? n”; cin>>i; pen=y-i; cout<<“Remained until retirement (years) = “<<pen<<endl; x++; //изменение параметра цикла (аналогично x=x+1) } while (x<=-1); //условие ложно, но цикл выполняется 1 раз system (“pause”); return 0; } |
Цикл с параметром (for)
Данный цикл можно представить такой конструкцией;
for (начальные_присваивания; выражение; приращение) оператор;
Здесь начальные_присваивания – оператор или группа операторов, применяемые для присвоения начальных значений величинам используемым в цикле; выражение – определяет условие выполнения цикла, если оно истинно, то цикл выполняется; приращение – оператор, который выполняется после каждого шага (прохода) по телу цикла; оператор – любой оператор.
Давайте на примере задачи рассмотрим цикл с параметром. Нам необходимо посчитать сумму чисел от 1 до 500. Делаем:
#include “stdafx.h” #include <iostream> using namespace std; int main () { int i; //определяем переменную int sum = 0; for (i=1; i<=500; i=i+1) // задаем начальное значение, конечное 500, шаг цикла { sum = sum + i; } cout << “The sum of the numbers from 1 to 500 = ” <<sum<<endl; system (“pause”); return 0; } |
Ответ будет 125250.
Похожие записи:
- Условные операторы if и switch в C++
- Классы в C++. Общие сведения
- Строки и структуры в C++. Уроки программирования
- Hellow, Word, первая программа на языке C++
- Ввод и вывод данных C++
Источник
Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.
Если вы читали этот урок, то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать линейные и разветвляющиеся алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.
В языке Pascal, как и в большинстве языков программирования, существует три типа циклических конструкций.
Любой цикл состоит из тела и заголовка. Тело цикла – это набор повторяющихся операторов, а условие – это логическое выражение, в зависимости от результата которого и происходит повторное выполнение цикла.
Возьмем одну задачу, которую будем решать, используя различные виды циклов.
Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.
While, или цикл с предусловием
Как вы, наверное, уже поняли из названия, while – это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.
While имеет формат:
while < условие> do <оператор 1>; {Пока … делай ….}
Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки – begin и end;.
Решение задачи.
program example_while; var i, N: integer; { объявляем переменные } begin i := 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, ‘ ‘); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.
Repeat, или цикл с постусловием
Repeat – полная противоположность while. Repeat – это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.
Repeat имеет формат:
repeat { повторяй … }
<оператор 1>;
< оператор 2>;
…
until {до…} <условие>
Begin и end не требуются.
Решение задачи.
program example_repeat; var i, N: integer;{ объявляем переменные } begin i := 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } repeat {после repeat не требуется begin и end } write(i, ‘ ‘); {Выводим i} Inc(i); {увеличиваем i на один.} until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.} end.
For, или цикл с параметром
For – это цикл, в котором тело выполняется заданное количество раз.
Существует две формы записи этого цикла:
Первая форма
for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик1> будет увеличиваться на 1.
<значение1> – это начальное значение счетчика. Это может быть переменная или число.
<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>, выполнение цикла прекратится.
Если требуется написать несколько операторов в теле цикла, используем begin и end.
И <счетчик1>, и <конечное_значение>, и <значение1> – переменные целого типа.
Чаще всего в качестве счетчика используется переменная i.
Вторая форма
for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик2> будет уменьшатся на 1.
<значение2> – это начальное значение счетчика.
<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.
Два важных примечания:
- Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
- Изменять значение счетчика внутри тела нельзя! Вот что выводит компилятор:
Решение задачи:
program example_for; var i, N: integer; begin read(N); {предположим, что мы ввели 10} for i := 1 to N do write(i, ‘ ‘); {количество итераций – 10 – 1 + 1 = 10} end.
Согласитесь, данный код проще и лаконичнее, чем все предыдущие. И цикл for – не совсем обычный цикл, в нем нет логического условия. Поэтому цикл с параметром в программировании называют синтаксическим сахаром. Синтаксический сахар – это дополнения синтаксиса языка программирования, которые не добавляют новых возможностей, а делают использование языка более удобным для человека.
Давайте решим пару задач.
For1. Даны целые числа K и N (N > 0). Вывести N раз число K.
Организовываем простой цикл от 1 до требуемого числа.
program for1; var K, N, i: integer; begin read(K, N); for i := 1 to N do write(K, ‘ ‘); {Пишем К через пробел } end.
For2. Даны два целых числа A и B (A < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.
Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> – <начальное_значение> + 1.
program for2; var A, B, i, count: integer; begin read(A, B); for i := A to B do write(i, ‘ ‘); {выписываем числа от меньшего к большему} count := B – A + 1; {считаем количество чисел} writeln; write( ‘Количество чисел – ‘, count); end.
For9. Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.
Организовываем такой же цикл, как и в предыдущей задаче, но одновременно суммируем квадраты всех чисел. Чтобы высчитать квадрат, используем функцию Sqr.
program for9; var A, B, i, S: integer; begin read(A, B); S := 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную} for i := A to B do S := S + Sqr(i); {складываем все квадраты} writeln; write( ‘Сумма квадратов – ‘, S); end.
For13°. Дано целое число N (> 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.
Для того, чтобы поменять знак, каждую итерацию цикла меняем значение специальной переменной на противоположное.
program for13; var N, A, i: integer; S: real; begin Write(‘N = ‘); readln(N); S := 1.1; A := 1; {Сначала положительное} for i := 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2} begin A := -A; {Теперь отрицательное} S := S + A * (1 + i / 10); {Складываем} end; Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо} end.
While1°. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.
Каждый раз вычитаем B из А, пока А – В >= 0.
program while1; var A, B: integer; begin readln(A, B); while (A – B) >= 0 do A := A – B; {Пока разница положительная, вычитаем. Необходимо предусмотреть вариант с кратностью А и B, поэтому >=} write(A); end.
While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является – вывести False.
Действуем следующим образом: пока N делится нацело на три, делим N нацело. Затем, если N = 1 – число является степенью тройки; если N <> 1, тогда число – не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое div и mod, и как работают логические выражения.
program while4; var N: integer; begin readln(N); while N mod 3 = 0 do N := N div 3; {Пока остаток от деления на три равен нулю, делим N нацело } writeln(N = 1); {логическое выражение} end.
На сегодня все! Не забывайте почаще заходить на наш сайт и кликать по кнопочкам, которые расположены перед комментариями.
Источник