Вы находитесь на странице: 1из 16

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

Операторы цикла и передачи управления


1 Цель и порядок работы

Цель работы – изучить операторы, используемые при организации программ


циклических вычислительных процессов, получить практические навыки в составлении
программ.
Порядок выполнения работы:
 ознакомиться с описанием лабораторной работы;
 получить задание у преподавателя, согласно своему варианту;
 написать программу и отладить ее на ЭВМ;

2 Краткая теория
2.1 Язык программирования С++

Операторы цикла
Многократно повторяемые действия могут быть заданы с помощью операторов цикла.
Язык C++ поддерживает три вида циклов:
- цикл с предусловием;
- цикл с постусловием;
- цикл с параметром (итерационный цикл).
Цикл с предусловием (while)
Цикла с предусловием задается при помощи оператора while. Он имеет следующую
форму записи:
while (условие) тело_цикла;
Условие – это скалярное выражение, определяющее условия продолжения
выполнения операций. Оно принимает логическое значение "истина" (true или любое не
нулевое или не пустое значение) или "ложь" (fasle, ноль или пустое значение (null)).
Выполнение оператора повторяется до тех пор, пока значением условия является "истина".
Тело цикла не может быть описанием или определением. Это либо отдельный (в том
числе пустой) оператор, либо блок (один или несколько операторов помещенных в фигурные
скобки). Условие вычисляется заново перед каждой итерацией.


условие

тело цикла

Блок-схема оператора цикла с предусловием

1
Пример: подсчитать количество цифр входящих в запись натурального
положительного числа.

int digits = 0;
while (N > 0)
{
digits = digits + 1;
N = N / 10;
}

Цикл с постусловием (do while)


Оператор цикла с постусловием начинается со служебного слова do и заканчивается
служебным словом while, между которыми располагается тело цикла.
Синтаксис записи оператора:

do
тело_цикла;
while (условие);

Отличие от предыдущей формы цикла while заключается в том, что условие


проверяется после выполнения тела цикла.

тело цикла

+ –
услов
ие

Блок-схема оператора цикла с постусловием

Пример: вычислить произведение нечетных чисел от 1 до 10 включительно.

int i = 1, p = 1;
do
{
p *= i; // умножим произведение на i (p = p * i)
i += 2; // перейдем к следующему нечетному числу (i = i + 2)
} while (i < 10);

В операторах циклов while и do while можно использовать операторы break и


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

Цикл с параметром (for)


Цикл с параметром или итерационный цикл реализует фундаментальный принцип
вычислений в программировании – итерацию. Во время работы данного оператора, тело цикла

2
будет повторяться, а повторение называют итерацией. Т.е. при этом выполняется перебор
значений переменной, которая используется для работы операторов, входящих в тело цикла.
Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор,
который будет повторно выполняться. Заголовок – это ключевое слово for, после которого в
круглых скобках записаны три выражения, разделенные точкой с запятой. Первое выражение
(инициализация цикла) вычисляется один раз до начала выполнения цикла. Второе – это
условие цикла. Тело цикла будет повторяться до тех пор, пока условие цикла истинно. Третье
выражение, последовательность скалярных выражений разделенных запятыми ",",
вычисляется после каждого повторения тела цикла.

for (инициализация; условие; модификация)


тело_цикла;

Первое выражение обычно используется для установления начального значения


переменных, управляющих циклом. Второе выражение – это выражение, определяющее
условие, при котором тело цикла будет выполняться. Третье выражение определяет изменение
переменных, управляющих циклом после каждого выполнения тела цикла.
Схема выполнения оператора for:
1. Вычисляется первое выражение.
2. Вычисляется второе выражение.
3.1. Если значения второго выражения отлично от нуля (истина), выполняется тело
цикла, вычисляется третье выражение и осуществляется переход к пункту 2.
3.2. Если второе выражение равно нулю (ложь), то управление передается на
оператор, следующий за оператором for.
Существенно то, что проверка условия всегда выполняется в начале цикла. Это
значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет
ложным.
Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100. Для этого
воспользуемся оператором цикла for:

int sum = 0;
int i;
for (i = 1; i <= 100; i = i + 1) // заголовок цикла
sum = sum + i; // тело цикла

Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все
три). То же самое можно записать следующим образом:

int sum = 0;
int i = 1;
for ( ; i <= 100; )
{
sum = sum + i;
i = i + 1;
}

Заметим, что вместо одного оператора в теле цикла записано несколько операторов,
заключенных в фигурные скобки – блок.
Еще один вариант:
int sum = 0;
int i = 1;
for ( ; ; )
{
if (i > 100)

3
break;
sum = sum + i;
i = i + 1;
}

В последнем примере был использован оператор break, который завершает


выполнение цикла.
Еще одно полезное свойство цикла for: в первом выражении заголовка цикла можно
объявить переменную. Эта переменная будет действительна только в пределах цикла.

Операторы передачи управления


К операторам передачи управления относят оператор безусловного перехода goto,
оператор возврата из функции return, оператор выхода из цикла или переключателя break и
оператор перехода к следующей итерации цикла continue.
Оператор безусловного перехода (goto)
Оператор безусловного перехода имеет вид:

goto идентификатор;

Идентификатор - имя метки расположенной в той же функции, где используется goto.


Передача управления разрешается на любой помеченный оператор в теле функции. Запрещено
перескакивать через описания, содержащие инициализацию объектов. Это ограничение не
распространяется на вложенные блоки, которые можно обойти циклом. Применение
оператора goto необходимо свести к минимуму. Если же применяете его, то
придерживайтесь следующих правил:
- не входить внутрь блока извне;
- не входить внутрь условного оператора;
- не входить внутрь переключателя;
- не передавать управление внутрь цикла.

Оператор возврата из функции (return)


Оператор возврата из функции имеет вид:

return выражение;

или

return;

Выражение может быть только скалярным.


Например, функция вычисляет и возвращает куб значения своего аргумента:

float cube(float z) { return i*i*i; }

Выражение в операторе return не может присутствовать, если возвращенное


функцией значение имеет тип void.

Оператор выхода из цикла (break)


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

4
Например, если необходимо применить дополнительное условие выхода из цикла:

while(i < j)
{
i++;
if (i == j)
break;
j=--;
}
Циклы и переключатели могут быть вложенными, break позволяет выйти только из
самого внутреннего цикла или переключателя.

Оператор перехода к следующей итерации цикла (continue)


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

int sum = 0;
for (int i = 1; i <= 100; i = i+1)
{
if ( i % 7 == 0)
continue;
sum = sum + i;
}

2.2 Язык программирования Паскаль

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

В языке программирования Паскаль существует три вида циклических конструкций.

5
Оператор цикла с предусловием WHILE

Применяется для организации циклов с неизвестным заранее числом повторений,


логика которых предполагает выполнение цикла пока истинно некоторое условие.

Синтаксис оператора WHILE:

WHILE Условие DO Оператор;

Конструкция WHILE…DO переводится как “пока…делать”. Оператор (простой или


составной), стоящий после служебного слова DO и называемый телом цикла, будет
выполнятся циклически, пока значение “Условия” равно TRUE (истина). Условие цикла
должно быть логическим выражением.
Условие выполнения тела цикла WHILE проверяется до начала каждой итерации.
Поэтому если условие сразу не выполняется, то тело цикла игнорируется и будет выполнятся
оператор, стоящий сразу за телом цикла.
Оператором в теле цикла может быть другой циклический оператор, т.е. циклы могут
быть вложенными.
При написании циклов с предусловием необходимо предусмотреть возможность
корректного завершения цикла.

Пример цикла WHILE: Вычисление факториала 10! = 1·2·3·4·5·6·7·8·9·10

VAR
Factorial, N : Integer;
BEGIN
Factorial := 1; {стартовое значение факториала =0! }
N := 1; {стартовое значение для условия цикла }
WHILE N<=10 DO {заголовок цикла, условие }
begin {начало тела цикла }
Factorial := Factorial*N; {вычисление факториала N! }
N := N + 1 {N должно меняться в цикле}
end; {конец тела цикла }
WriteLn(’10!= ’,Factorial); {вывод результата расчета }
END.

Обратите внимание на присваивание N:=1 пред циклом. Без него значение N может
быть любым, и условие может оказаться некорректным, не говоря уже о самом значении
факториала. Значение N меняется внутри цикла. При этом гораздо безопаснее чтобы оператор,
влияющий на условие, был бы последним. Это гарантирует от нежелательных переборов.
Если, в рассмотренном выше примере, поставить строку N:=N+1; перед вычислением
факториала, то результатом программы будет значение 11!. Исправить это можно, заменив
стартовое значение N на 0, а условие – на N<10.

Оператор цикла с постусловием REPEAT…UNTIL

Применяется для организации циклов с неизвестным заранее числом повторений,


логика которых предполагает выполнение цикла до тех пор, пока не станет истинным
некоторое условие.

Синтаксис оператора REPEAT…UNTIL:

6
REPEAT
Оператор1;
Оператор2;
···
ОператорN;
UNTIL Условие;

Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут


выполнятся циклически, до тех пор, пока значение “Условия” не станет равно TRUE (истина).
Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является
невыполнение “Условия” (его значение FASLE – ложь).
Условие цикла должно быть логическим выражением.
Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и
завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело
цикла. Поэтому в данном цикле при использовании составного оператора операторные скобки
(begin end) не пишут.
Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том,
что проверка условия производится не перед началом выполнения тела цикла, а после его
выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла
всегда выполняется по крайней мере один раз.

Пример 1. Проверка ввода

VAR
N : Integer;
BEGIN
. . .
REPEAT
Write(‘Введите целое число от 0 до 10: ’);
ReadLn(N);
UNTIL (N>=0) and (N<=10);
. . .
END.

В этом примере программа будет запрашивать ввод числа до тех пор, пока
пользователь не введет “правильное” число.

Пример 2. “Вечный цикл”

REPEAT UNTIL False;

Этот цикл пустой и никогда не прекращающийся. Обычно так организуют программы


с повторяющимися действиями: вначале программы ставят REPEAT, а в конце – UNTIL False.
А прервать цикл можно специальными операторами EXIT и HALT). Это имеет смысл, если
условий завершения программы много или они очень сложны.)

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

Оператор цикла с параметром вводится для организации “строгих” циклов, которые


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

7
Синтаксис оператора FOR:

FOR ПараметрЦикла := МладшееЗначение TO СтаршееЗначение DO


Оператор;

или

FOR ПараметрЦикла := СтаршееЗначение DOWNTO МладшееЗначение DO


Оператор;

Оператор, представляющий собой тело цикла, может быть, как простым, так и
составным. Параметр цикла, а также диапазон его значений (от стартового до конечного
включительно) может быть только порядкового типа! Параметр цикла это обычная
переменная, описанная в текущем блоке. Шаг изменения значения параметра цикла всегда
постоянный (в случае целочисленного типа равен единице).
Изменение параметра цикла может быть, как возрастающим, так и убывающим. В
первом случае МладшееЗначение должно быть больше чем Старшее, а во втором – наоборот.

Примеры оформления циклов с параметром.

VAR i : integer;
BEGIN
FOR i := 1 TO 10 DO Write(i:5);
FOR i := 5 DOWNTO 0 DO Write(i:5)
END.

На месте младших и старших значений могут стоять константы, а могут и переменные


или выражения, совместимые по присваиванию с параметром цикла. Например,

CONST n = 10;
m = 3;
VAR i,
k : integer;
BEGIN
k := 1;
FOR i := k TO n DO Write(i:5);
FOR i := (m+2) DOWNTO 0 DO Write(i:5)
END.

Выполнение цикла начинается с присваивания параметру стартового значения. Затем


следует проверка, не превосходит ли параметр конечное значение (случай с TO) или не
является ли он меньше конечного значения (случай с DOWNTO). Если результат проверки
утвердительный, то цикл считается завершенным. В противном случае выполняется тело
цикла (оператор, следующий за словом DO), и после этого параметр цикла меняет свое
значение на следующее. Далее снова производится проверка значения параметра цикла, т.е.
алгоритм повторяется.
Запрещается изменять параметр цикла и его старшее и младшее значения внутри тела
цикла. Кроме того, параметр цикла не может участвовать в построении диапазонов этого же
цикла.
Операторы FOR могут быть вложенными друг в друга, например

VAR
i,j : integer;
BEGIN

8
WriteLn(‘Таблица умножения’);
FOR i := 1 TO 10 DO begin
FOR j := 1 TO 10 DO Write((i*j):5);
WriteLn;
end;
END.

Процедуры BREAK, CONTINUE, EXIT и HALT

Процедура BREAK применяется для досрочного прекращения циклов WHILE,


REPEAT…UNTIL и FOR.

Пример: Определение номера первого нулевого элемента в массиве А

VAR
i, num : Integer;
A : array[1..10] of Integer;
BEGIN
. . . { Ввод элементов массива А }
num := 0;
FOR i:=1 TO 10 DO { Цикл для i от 1 до 10 }
IF A[i]=0 THEN begin { если найден нулевой элемент }
num := i; { запоминаем его номер }
BREAK { прекращаем цикл }
end;
IF num <> 0 THEN WriteLn(num)
ELSE WriteLn(‘Нулевых элементов нет’);
END.

Процедура CONTINUE вызывает переход к следующей циклической итерации


игнорируя расположенные ниже операторы, составляющие тело цикла.

Пример: Определение наибольшего общего делителя (НОД) двух чисел

VAR
CommDiv, { кандидат в НОД }
num1, { первое число }
num2 : Integer; { второе число }
BEGIN
Write(‘Введите первое число: ’); ReadLn(num1);
Write(‘Введите второе число: ’); ReadLn(num2);
FOR CommDiv := num1 DOWNTO 1 DO begin
IF (num2 mod CommDiv)<> 0 THEN CONTINUE;
IF (num1 mod CommDiv) = 0 THEN begin
WriteLn(‘Наибольший общий делитель: ’, CommDiv);
BREAK
end {if}
end {for}
END.

В примере применен цикл FOR, в котором по убывающий перебираются возможные


кандидаты в наибольший общий делитель. Критерий делимости – равенство нулю остатка от
деления (операция mod). Если кандидат (значение переменной CoomDiv) не является
делителем числа num2, по команде CONTINUE начинается следующий проход цикла, а
операторы, оставшиеся в теле цикла, не выполняются. Если число (CommDiv) оказывается
9
делителем числа num2 и num1, что проверяется вторым оператором IF тела цикла, значит, оно
– общий делитель. А поскольку перебор идет от больших к меньшим значениям, первый
найденный общий делитель – наибольший. Выводим его на печать и прерываем цикл
командой BREAK.

EXIT

Процедура EXIT завершает работу своего программного блока. Если EXIT


вызывается внутри процедуры или функции, то их работа завершается. Если EXIT вызывается
в основном блоке программы, то это приводит к ее завершению.

HALT

Процедура HALT, или более полно HALT(n), завершает работу программы с кодом
завершения n. Вызов процедуры HALT без параметра эквивалентен вызову HALT(0).

2.3 Язык программирования C#

Операторы цикла
while
while (выражение)
{
операторы
}

Правило выполнения этого итеративного опера состоит в следующем: сначала


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

Невозможно построить оператор WHILE на основе одиночного оператора объявления.


Оператор

while (true) int XXX = 0;

С самого первого момента своего существования (ещё до начала трансляции!)


сопровождается предупреждением:

Embedded statement cannot be a declaration or labeled statement.

do … while
do
{
операторы
} while (выражение)

Разница с ранее рассмотренным оператором цикла состоит в том, что здесь сначала
выполняется оператор (блок операторов), а затем проверяется условие продолжения
оператора.

for
for (Инициализация;УсловиеПродолжения;изменение переменных)

10
Оператор

Инициализация, УсловиеПродолжения, изменение переменных в заголовке оператора


цикла for могут быть пустыми. Однако наличие пары символов ';' в заголовке цикла for
обязательно.

Список выражений представляет собой разделённую запятыми последовательность


выражений.

Следует иметь в виду, что оператор объявления также строится на основе списка
выражений (выражений объявления), состоящих из спецификаторов типа, имён и, возможно,
инициализаторов. Этот список завершается точкой с запятой, что позволяет рассматривать
список выражений инициализации как самостоятельный оператор в составе оператора цикла
for. При этом область видимости имён переменных, определяемых этим оператором,
распространяется только на операторы, относящиеся к данному оператору цикла. Это значит,
что переменные, объявленные в операторе инициализации данного оператора цикла НЕ
МОГУТ быть использованы непосредственно после оператора до конца блока, содержащего
этот оператор. А следующие друг за другом в рамках общего блока операторы МОГУТ
содержать в заголовках одни и те же выражения инициализации.

foreach
foreach (тип имя__переменной in коллекция) инструкци

имя__переменной обозначает переменную которая представляет элемент коллекции.

коллекция объект, представляющий массив или коллекцию.

Этим оператором обеспечивается повторение множества операторов, составляющих


тело цикла, для каждого элемента массива или коллекции. После перебора ВСЕХ элементов
массива или коллекции и применения множества операторов для каждого элемента массива
или коллекции, управление передаётся следующему за Оператор FOREACH оператору
(разумеется, если таковые имеются).

Область видимости имён переменных, определяемых этим оператором,


распространяется только на операторы, относящиеся к данному оператору цикла.

// Объявили и определили массив


int[] array = new int[10];
// Для каждого элемента массива надо сделать…
foreach (int i in array) {/*:::::*/};

Специализированный оператор, приспособленный для работы с массивами и


коллекциями. Обеспечивает повторение множества (единичного оператора или блока
операторов) операторов для КАЖДОГО элемента массива или коллекции.

Предполагает выполнение примитивных последовательностей действий над массивами


и коллекциями (начальная инициализация или просмотр ФИКСИРОВАННОГО количества
элементов). Действия, связанные с изменениями размеров и содержимого коллекций в рамках
этого оператора могут привести к непредсказуемым результатам.

11
Операторы передачи управления

goto, break, continue

Объявляется метка (правильнее, оператор с меткой). Оператор может быть пустым.


Метка – идентификатор отделяется от оператора двоеточием. В качестве дополнительного
разделителя могут быть использованы пробелы, символы табуляции и перехода на новую
строку. Метка, как и любое другое имя, подчиняется правилам областей видимости. Она видна
в теле метода только в одном направлении: из внутренних (вложенных) блоков. Поэтому
оператор перехода

goto ИмяПомеченногоОператора;

позволяет ВЫХОДИТЬ из блоков, но не входить в них.

Обычно об этом операторе обычно говорится много нехороших слов как о главном
разрушителе структурированного программного кода и его описание сопровождается
рекомендациями к его НЕИСПОЛЬЗОВАНИЮ.

Операторы

break;
и
continue;

используются как вспомогательные средства управления в операторах цикла.

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

1. Какие виды операторов цикла существуют.


2. Опишите оператор цикла с предусловием.
3. Опишите оператор цикла с постусловием.
4. Опишите оператор цикла с параметром.
5. Перечислите операторы передачи управления.
6. Какое назначение оператора break.
7. Какое назначение оператора continue.
8. Какое назначение оператора return.
9. Какое назначение оператора goto.
10. Какое назначение оператора exit.
11. Какое назначение оператора halt.

4 Задание

1. Изучите теоретический материал, представленный в лабораторной работе.


2. Ответьте на теоретические вопросы.
3. Напишите программы на языке С++ и Паскаль в соответствии с вариантом
задания из пункта 5.1 и на языке С++ из пункта 5.2. Вариант определяется по
12
номеру студента в общем списке группы. И по одному заданию на выбор задания
из пунктов 6.1 и 6.2 на языке C#.
1 вариант – 5.1.1, 5.2.1
2 вариант – 5.1.2, 5.2.2
3 вариант – 5.1.3, 5.2.3
4 вариант – 5.1.4, 5.2.4
5 вариант – 5.1.5, 5.2.5
6 вариант – 5.1.6, 5.2.6
7 вариант – 5.1.7, 5.2.7
8 вариант – 5.1.8, 5.2.8
9 вариант – 5.1.9, 5.2.9
10 вариант – 5.1.10, 5.2.10
11 вариант – 5.1.11, 5.2.1
12 вариант – 5.1.12, 5.2.2
13 вариант – 5.1.13, 5.2.3
14 вариант – 5.1.14, 5.2.4
15 вариант – 5.1.15, 5.2.5
16 вариант – 5.1.16, 5.2.6
17 вариант – 5.1.17, 5.2.7
18 вариант – 5.1.18, 5.2.8
19 вариант – 5.1.19, 5.2.9
20 вариант – 5.1.20, 5.2.10
21 вариант – 5.1.21, 5.2.1
22 вариант – 5.1.22, 5.2.2
23 вариант – 5.1.23, 5.2.3
24 вариант – 5.1.24, 5.2.4
25 вариант – 5.1.25, 5.2.5
26 вариант – 5.1.26, 5.2.6
27 вариант – 5.1.27, 5.2.7
28 вариант – 5.1.28, 5.2.8
29 вариант – 5.1.29, 5.2.9
30 вариант – 5.1.30, 5.2.10

4. Проверьте работоспособность программ.


5. Отладьте и протестируйте программы.
6. Сдайте работу преподавателю. При выставлении баллов за работу учитывается:
правильность написания кода, полнота и правильность ответов учащегося на
вопросы преподавателя.

5 Варианты заданий

5.1 Оператор цикла for


1. Составить программу возведения натурального числа в квадрат, используя
следующую закономерность:
12  1
22  1  3

n 2  1  3  5  7    (2n  1) .

13
2. Определить количество трехзначных чисел сумма цифр которых равна заданному
числу N.
3. Найти количество делителей натурального числа. Сколько из них четные?
4. Среди двухзначных чисел найдите те, сумма квадратов цифр которых делится на
13.
5. Напишите программу поиска двухзначных чисел, таких, что если к сумме цифр
этого числа прибавить квадрат этой суммы, получится это число.
6. Напишите программу поиска трехзначных чисел, таких, что сумма трех цифр на
которые оканчивается квадрат этого числа, равняется этому числу.
7. Найдите сумму положительных четных чисел меньших 100.
8. Найдите сумму целых чисел из промежутка от A до B, кратных 4 (значения A и B
вводятся с клавиатуры).
9. С клавиатуры последовательно вводятся числа n, a1 , a2 ,an . Определить число
членов ak последовательности a1 , a2 ,an , имеющих четные порядковые номера и
являющихся нечетными числами.
10. Среди четырехзначных чисел выбрать те, у которых цифры различны.
11. Дано натуральное n. Написать программу вычисления аn.
12. Дана функция y=tg(x)+1. Написать программу для поиска максимального
значения y в промежутке x[2;2.8] с шагом 0,1.
13. Составить алгоритм для расчета функции у при х=0..15:
 x 3  3x, если x  1, x  0,2;

y   ( x  3) 3
 , если x  1, x  0,5.
 x
14. Дано целое число K. Найти сумму цифр числа К.
15. Программа ждет ввода числа и в зависимости от количества цифр в числе выдает
сообщение об их разрядности: трехзначное, пятизначное и т.д.
16. Написать программу нахождения суммы чисел по правилу (n-нечетно):
a1+a3+a5+…+an.
17. Дано целое число K. Найти произведение цифр числа К.
18. Дано вещественное число a, целое n. Вычислить: a (a-1) (a-2)...(a-n).
19. Составить алгоритм для расчета функции y= ln(sin(x)+1)*0.15 при изменении x
от 0 до 12 с шагом х=0.2.
20. Написать программу нахождения суммы чисел по правилу (n-четно):
a2+a4+a6+…+an.
21. Вычислить (1-sin (0.1))+(1+sin (0.2))+ (1-sin (0.3))+ ...+(1+sin (1.0)).
22. Дана функция y=0.5+sin(5x), причем х изменяется от 0 до 2 с шагом х=/6.
23. Найти все натуральные числа от 1 до 1000, которые совпадают с последними
разрядами своих квадратов, например: 252 = 625, 762 = 5676.
24. Дана функция y=2x3+1 Написать программу для поиска максимального значения
y в промежутке x[-1;1] с шагом 0,2.
25. Составить программу вычисления суммы кубов чисел от 25 до 125.
26. Найти сумму целых положительных чисел из промежутка от А до В, кратных 3
(А и В вводятся с клавиатуры).
27. Найти сумму десяти чисел кратных 3.
28. Используя алгоритм Евклида, найти наименьшее общее кратное (НОК) m и n.
29. Даны два натуральных числа. Получить их наибольший общий делитель (НОД),
используя алгоритм Евклида.
30. Найти сумму четных делителей натурального числа.

14
5.2 Оператор цикла с предусловием (while) и с постусловием (do .. while)
Задание необходимо выполнить в двух вариантах (используя два вида циклов)
n!
1. Найти сумму ряда с точностью  , общий член которого равен an  n . Точность
n
считается достигнутой, если следующий член последовательности меньше
заданного  .
1 1
2. Найти сумму ряда с точностью  , общий член которого равен an  n  n .
2 3
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .
(1) n1
3. Найти сумму ряда с точностью  , общий член которого равен an  .
nn
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .
1
4. Найти сумму ряда с точностью  , общий член которого равен an  .
(3n  2)(3n  1)
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .
5. Найти сумму ряда с точностью  , общий член которого равен an  n 2 e  n .
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .
n!
6. Найти сумму ряда с точностью  , общий член которого равен a n  . Точность
(2n)!
считается достигнутой, если следующий член последовательности меньше
заданного  .
3  n!
7. Найти сумму ряда с точностью  , общий член которого равен an  . Точность
(3n)!
считается достигнутой, если следующий член последовательности меньше
заданного  .
ln( n!)
8. Найти сумму ряда с точностью  , общий член которого равен an  2 . Точность
n
считается достигнутой, если следующий член последовательности меньше
заданного  .
(2n  1)
9. Найти сумму ряда с точностью  , общий член которого равен an  .
2n
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .
10 n
10. Найти сумму ряда с точностью  , общий член которого равен a n  .
(2n)!
Точность считается достигнутой, если следующий член последовательности
меньше заданного  .

6 Дополнительные задания

6.1 Оператор цикла for


1. Напечатайте таблицу умножения на 5. предпочтительно печатать 1 x 5 = 5, 2 x 5 =
10, а не просто 5, 10 и т.д.

15
2. Напечатайте в столбик нечетные числа от 3 до 25.
3. Выведите на экран таблицу значений синуса от 0 до 2*Pi. В каждой строке должны
стоять один аргумент и одно значение. Количество значений аргумента пусть
задает пользователь.
4. Напишите программу, которая вычисляет сумму квадратов чисел т 1 до N. Число
N программа должна запрашивать у пользователя.
5. Напишите программу, перемножающую целые числа без использования операции
«*». Например, при умножении целых чисел n*m число m надо сложить само с
собой n раз (m+m+…+m).
6. Найдите сумму нечетных чисел от 1 до N. Число N программа должна запрашивать
у пользователя.
7. Выведите на экран последовательность сумм чисел от 1 до n. n меняется от 1 до 10.
То есть первые члены последовательности: 1, 3 (1+2), 6 (1+2+3), 10 (1+2+3+4) и т.д.
8. Найдите сумму 100 синусов от аргументов в диапазоне от 0 до 2*Pi (из задачи 1.4).
9. Вычислите сумму ряда:

10. Вычислите сумму ряда

6.2 Оператор цикла с предусловием (while) и с постусловием (do while)


1. Найдите сумму цифр произвольного натурального числа.
2. Найдите самую большую цифру в записи произвольного целого числа.
3. Составить программу, проверяющую, является ли заданное натуральное число
совершенным, т.е. равным сумме своих положительных делителей, кроме самого
этого числа.
4. Задается натуральное число q равное площади некоторого прямоугольника.
Напишите программу, определяющую количество прямоугольников имеющих
площадь q, стороны которых выражены натуральными числами.
5. Создайте программу, играющую с пользователем в орлянку. Программа должна
спрашивать у пользователя орел или решка. Если пользователь вводит 0, то
выбирает орла, 1 – решку, любое другое число – конец игры. Программа должна
вести учет выигрышей и проигрышей и после каждого раунда сообщать
пользователю о состоянии его счета. Пусть вначале на счету 1 рубль и ставка в
каждом коне тоже 1 рубль. Если денег у пользователя не осталось игра
прекращается.
6. Вычислите золотое сечение по формуле

Сделайте 20 итераций. В каком знаке будут наблюдаться изменения, если


сделать 30 итераций?
7. Пользователь вводит 10 чисел. Определить, образуют ли они возрастающую
последовательность.

16