Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_po_si.doc
Скачиваний:
13
Добавлен:
12.11.2018
Размер:
11.78 Mб
Скачать

Приближенное значение экспоненты.

Приближенное значение экспоненты. Приведем полный текст программы для приближенного вычисления экспоненты:

В программе переменная b инициализирована (строка 6), т.е. ей еще в процессе выделения памяти присваивается конкретное начальное значение (1.0). При вводе значения переменной eps предусмотрена защита от неверного задания точности (строки 1115), для чего использован цикл do. В соответствии с правилами его работы выполняются операторы из строк 12 и 13, а затем проверяется введенное значение точности. Если значение eps недопустимо (eps<=0.0), то операторы тела цикла (строки 12, 13) выполняются снова. Цикл не закончится до тех пор, пока не будет введено допустимое значение точности.

Результаты выполнения программы:

В последнем варианте вначале введено неверное значение eps = -0.3 и ввод пришлось повторить. Отметим, что в качестве погрешности выводится последнее значение учтенного члена ряда, что не вполне корректно.

Оператор break.

Оператор break. Как видно из предыдущего примера, принятый способ проверки исходных данных с повторным запросом значения точности eps не очень удобен, так как на экране отсутствует сообщение об ошибке. В примере, рассмотренном в предыдущем параграфе (сумма членов ряда Фибоначчи), на экран выводится конкретное указание о сделанной ошибке ("Ошибка! k должно быть > 2 !"), что упрощает ее исправление. Однако в этом случае в программе использованы метки и оператор перехода, что считается некорректным с точки зрения структурного программирования.

Добиться такого же результата можно, не нарушая принципов структурного программирования и применяя оператор цикла, если использовать в его теле оператор прерывания break. Этот оператор (рис. 2.4) прекращает выполнение оператора цикла и передает управление следующему за ним (за циклом) оператору.

Рис. 2.4. Схемы выполнения в циклах операторов break и continue:

а - цикл с предусловием while; б - цикл с постусловием do;

в — параметрический цикл for

Необходимость в использовании оператора прерывания в теле цикла возникает, когда условие продолжения итераций нужно проверять не в начале цикла (как в циклах for и while) и не в конце тела цикла (как в цикле do), а в середине тела цикла. Наиболее естественна в этом случае такая структура тела цикла:

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

Сумма отрезка степенного ряда.

Сумма отрезка степенного ряда. Введя значения переменных n и g, вычислить сумму, где п>0. Задачу решает следующая программа:

Для защиты от неверных исходных данных использован цикл (строки 9 15), в заголовке которого после while записано заведомо истинное выражение 1, т.е. цикл может быть прерван только за счет выполнения операторов его тела. В строке 13 оператор break выполняется в случае истинности условия "n>0". При этом цикл заканчивается, и следует переход к оператору строки 16. Таким образом, сообщение об ошибке, выводимое функцией printf( ) из строки 14, печатается для каждого неположительного значения n.

Вычисляя сумму ряда (строки 16  20), очередной его член получаем, умножая предыдущий на g (строка 18). Тем самым устранена необходимость явного возведения в степень. В выражении_1 оператора for формируются начальные значения переменных, изменяемых при выполнении цикла. В строках 18, 19 использованы составные операции присваивания.

Приведем результаты выполнения программы для Turbo С:

Полученное значение суммы довольно трудно прочесть. По-видимому, в этой задаче следует применять печать результата в экспоненциальной форме, т.е. в printf( ) из строки 21 использовать спецификацию преобразования %е. При этом получится такой результат: