Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3. Цикл с предусловием

.docx
Скачиваний:
23
Добавлен:
23.03.2016
Размер:
80.22 Кб
Скачать
  1. Лабораторная работа № 3

    1. Цикл с предусловием

Задание: Выполнить два задания (простой цикл и трассировка ряда Тейлора) по вариантам с использованием циклов с предусловием.

        1. Теоретический материал

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

Формат записи:

while (условие)

{

команды

}

Условие продолжения цикла – булевское (логическое) выражение, тело цикла – простой или составной опе­ратор. Если тело цикла – простой оператор, операторные скобки не пишутся!

Особенность данного вида цикла состоит в том, что значение выражения условия вычисляется перед каждым выполнением тела цикла. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходят выход из цикла и пере­ход к первому после while оператору.

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

Цикл с предусловием (сокращенная форма).

for (<параметр цикла>; <условие выполнения цикла>; <изменение параметра цикла на каждом шаге>)

{

команды

}

Пример:

for (int i = 0; i < n; i++)

{

команды

}

где i – параметр цикла, i < n – условие выполнения цикла, пока оно истинно, цикл будет выполняться, i++ - изменение параметра цикла при следующем шаге цикла. В данном примере, при каждом следующем шаге цикла значение переменной i будет увеличиваться на единицу, пока это значение не станет больше значения переменной n.

Тело цикла может содержать один оператор или несколько операторов, заключенных в операторные скобки { .. } (составной опе­ратор). Если тело цикла – простой оператор, операторные скобки можно не писать.

На каждом шаге цикла повторяются следующие действия.

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

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

  3. Значение управляющей переменной изменяется, согласно заданному правилу.

На использование управляющей переменной (параметра цикла) в цикле for на­лагаются следующие ограничения.

  1. В качестве параметра должна использоваться простая переменная, опи­санная в текущем блоке.

  2. Управляющая переменная должна иметь дискретный тип (как правило, integer, реже Char, Boolean).

  3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кро­ме вещественного.

        1. Пример выполнения лабораторной работы

Для примера рассмотрим функцию у=, разложенную в сумме ряда (количество слагаемых 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

Задание на простой цикл

  1. В начале года в банк положили X рублей. Банк начисляет на вклады  0,95% каждый месяц. Начисленные проценты присоединяются к основному вкладу. Напечатать таблицу увеличения суммы вклада по месяцам на год. Сумма вклада вводится с клавиатуры.

  2. Напечатать таблицу перевода температуры из градусов по шкале Цельсия в градусы по шкале Фаренгейта для значений от 15С до 38С с шагом 1С (перевод осуществляется по формуле F = 1,8C+32).

  3. Население 2-х стран в 2014 году равно N1 и N2 человек соответственно. Прирост населения этих стран составляет P1 и P2 % в год соответственно. Население N1 < N2, а P1 > P2. Определить, в каком году население первой страны превзойдет население второй страны.

  4. Ежегодный прирост рыбы в пруду составляет 15%. Запасы рыбы оценены в A тонн. Ежегодный план отлова B тонн. Наименьший запас рыбы, ниже которого запас уже не восстанавливается, составляет С тонн. Составить алгоритм и программу, подсчитывающую, сколько лет можно выдержать заданный план.

  5. В банк сделали 2 вклада – один вклад 100000 рублей под 10% годовых, второй 200000 рублей под 2% годовых. Вывести изменение суммы вкладов по годам до тех пор, пока сумма на первом вкладе не превысит сумму на втором.

  6. Каждый год выпуск продукции увеличивается на А%, а спрос падает на В%. В первый год выпускалось 100 единицы продукции при спросе в 150000. Подсчитать в каком году производство превысит спрос.

  7. Вместимость новой тюрьмы 15000 арестантов. Каждый год количество заключенных прибавляется на 5% и каждые два года убавляется на 6%. Посчитать, в каком году тюрьма заполнится полностью.

  8. В одном банке % вклада составляет 4% в год, в другом банке 6%. В обоих банках открыли по вкладу и внесли туда по 50000 руб. Выводить разницу между вкладами за каждый год до момента, когда эта разница станет большей, чем вклад в одном из банков. Вывести год, когда это произойдет.

  9. Ежегодно вылавливают 50 т. крабов. Воспроизводство составляет 30 тонн в год. Известно, что на 2013 г. в запасах находилось 4500 тонн краба. Вывести статистику запасов за каждый год до момента, когда она станет ниже 50 т.

  10. Ежегодный прирост населения составляет 7%, смертность – 5%. В 2014 году количество населения равнялось 300 000. Выводить ежегодный прирост населения, пока численность населения не удвоится по сравнению с 2014 годом.

        1. Задание по рядам Тейлора

N

Сумма S

n

Функция Y

30

40

40

10

20

30

50

40

40

20