Лабораторная работа №3. Цикл с предусловием
.docx-
Лабораторная работа № 3
-
Цикл с предусловием
-
Задание: Выполнить два задания (простой цикл и трассировка ряда Тейлора) по вариантам с использованием циклов с предусловием.
-
Теоретический материал
Цикл с предусловием используется тогда, когда число повторений заранее неизвестно – надо выполнять цикл, пока не произойдет некоторое событие (пользователь нажмет на кнопку, точность вычислений уложится в заданный порог и т. д.). В операторе while проверка условия выполнения тела цикла производится в самом начале оператора.
Формат записи:
while (условие)
{
команды
}
Условие продолжения цикла – булевское (логическое) выражение, тело цикла – простой или составной оператор. Если тело цикла – простой оператор, операторные скобки не пишутся!
Особенность данного вида цикла состоит в том, что значение выражения условия вычисляется перед каждым выполнением тела цикла. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходят выход из цикла и переход к первому после while оператору.
Еще один важный момент, о котором нельзя забывать программисту – зацикливание (бесконечное выполнение цикла). Чтобы не происходило зацикливание программы, нужно, чтобы в теле цикла присутствовал либо оператор, изменяющий значение, проверяемого в условии продолжения цикла, либо оператор безусловного выхода из цикла (break).
Цикл с предусловием (сокращенная форма).
for (<параметр цикла>; <условие выполнения цикла>; <изменение параметра цикла на каждом шаге>)
{
команды
}
Пример:
for (int i = 0; i < n; i++)
{
команды
}
где i – параметр цикла, i < n – условие выполнения цикла, пока оно истинно, цикл будет выполняться, i++ - изменение параметра цикла при следующем шаге цикла. В данном примере, при каждом следующем шаге цикла значение переменной i будет увеличиваться на единицу, пока это значение не станет больше значения переменной n.
Тело цикла может содержать один оператор или несколько операторов, заключенных в операторные скобки { .. } (составной оператор). Если тело цикла – простой оператор, операторные скобки можно не писать.
На каждом шаге цикла повторяются следующие действия.
-
Проверяется условие выполнения цикла.
-
Если условие выполнено, то оператор for продолжает работу (выполняется оператор в теле цикла), если условие не выполнено, то оператор for завершает работу, и управление в программе передается на оператор, следующий за циклом.
-
Значение управляющей переменной изменяется, согласно заданному правилу.
На использование управляющей переменной (параметра цикла) в цикле for налагаются следующие ограничения.
-
В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
-
Управляющая переменная должна иметь дискретный тип (как правило, integer, реже Char, Boolean).
-
Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
-
Пример выполнения лабораторной работы
Для примера рассмотрим функцию у=, разложенную в сумме ряда (количество слагаемых n=40). Заметим, что значения s и y при одинаковых значениях x будут приблизительно равными.
В подсчете суммы s можно увидеть закономерность. Например, следующее слагаемое суммы будет выглядеть: . А сумма для n слагаемых можно записать в виде:
Подобную сумму легко посчитать, используя цикл. На каждом шаге цикла к s будет прибавляться новое слагаемое и по окончанию цикла в s будет храниться итоговая сумма всех n слагаемых
Блок-схема решения:
Ввести
x
Код программы будет следующим:
setlocale(LC_ALL, "Russian");
double x = 0; // объявляем переменную x для получения от пользователя числа
printf(“Введите x:”) scanf(“%lf”, x); // запрашиваем у пользователя значение
double y = log(abs(2.0 * sin(x / 2))) * (-1); // высчитываем значение y по полученному значению x
double s = 0; int i = 1; int n = 40; // задаем начальные значения для цикла
while (i <= n)
{
s += cos(i * x) / i;// к s прибавляем слагаемое на i-м шаге
i++; // увеличиваем счетчик i на единицу
}
printf(“y = %lf s = %lf”, y, s); // выводим что получилось на экран
Разбиение задач по вариантам
Вариант |
Задание на простой цикл |
Задание по рядам Тейлора |
1 |
5 |
1 |
2 |
1 |
5 |
3 |
9 |
9 |
4 |
8 |
7 |
5 |
4 |
3 |
6 |
6 |
10 |
7 |
2 |
4 |
8 |
7 |
6 |
9 |
3 |
8 |
10 |
10 |
2 |
11 |
9 |
9 |
12 |
4 |
1 |
13 |
3 |
7 |
14 |
1 |
3 |
15 |
10 |
5 |
16 |
6 |
4 |
17 |
5 |
8 |
18 |
8 |
6 |
19 |
2 |
2 |
20 |
7 |
10 |
21 |
4 |
6 |
22 |
8 |
4 |
23 |
6 |
7 |
24 |
2 |
3 |
25 |
1 |
1 |
26 |
5 |
8 |
27 |
9 |
9 |
28 |
10 |
2 |
29 |
7 |
10 |
30 |
3 |
5 |
Задание на простой цикл
-
В начале года в банк положили X рублей. Банк начисляет на вклады 0,95% каждый месяц. Начисленные проценты присоединяются к основному вкладу. Напечатать таблицу увеличения суммы вклада по месяцам на год. Сумма вклада вводится с клавиатуры.
-
Напечатать таблицу перевода температуры из градусов по шкале Цельсия в градусы по шкале Фаренгейта для значений от 15С до 38С с шагом 1С (перевод осуществляется по формуле F = 1,8C+32).
-
Население 2-х стран в 2014 году равно N1 и N2 человек соответственно. Прирост населения этих стран составляет P1 и P2 % в год соответственно. Население N1 < N2, а P1 > P2. Определить, в каком году население первой страны превзойдет население второй страны.
-
Ежегодный прирост рыбы в пруду составляет 15%. Запасы рыбы оценены в A тонн. Ежегодный план отлова B тонн. Наименьший запас рыбы, ниже которого запас уже не восстанавливается, составляет С тонн. Составить алгоритм и программу, подсчитывающую, сколько лет можно выдержать заданный план.
-
В банк сделали 2 вклада – один вклад 100000 рублей под 10% годовых, второй 200000 рублей под 2% годовых. Вывести изменение суммы вкладов по годам до тех пор, пока сумма на первом вкладе не превысит сумму на втором.
-
Каждый год выпуск продукции увеличивается на А%, а спрос падает на В%. В первый год выпускалось 100 единицы продукции при спросе в 150000. Подсчитать в каком году производство превысит спрос.
-
Вместимость новой тюрьмы 15000 арестантов. Каждый год количество заключенных прибавляется на 5% и каждые два года убавляется на 6%. Посчитать, в каком году тюрьма заполнится полностью.
-
В одном банке % вклада составляет 4% в год, в другом банке 6%. В обоих банках открыли по вкладу и внесли туда по 50000 руб. Выводить разницу между вкладами за каждый год до момента, когда эта разница станет большей, чем вклад в одном из банков. Вывести год, когда это произойдет.
-
Ежегодно вылавливают 50 т. крабов. Воспроизводство составляет 30 тонн в год. Известно, что на 2013 г. в запасах находилось 4500 тонн краба. Вывести статистику запасов за каждый год до момента, когда она станет ниже 50 т.
-
Ежегодный прирост населения составляет 7%, смертность – 5%. В 2014 году количество населения равнялось 300 000. Выводить ежегодный прирост населения, пока численность населения не удвоится по сравнению с 2014 годом.
-
-
Задание по рядам Тейлора
N |
Сумма S |
n |
Функция Y |
|
|
30 |
|
|
|
40 |
|
|
|
40 |
|
|
|
10 |
|
|
|
20 |
|
|
|
30 |
|
|
|
50 |
|
|
|
40 |
|
|
|
40 |
|
|
|
20 |
|