Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.doc
Скачиваний:
0
Добавлен:
04.11.2018
Размер:
450.56 Кб
Скачать

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

Схема алгоритма конструкции оператора цикла do while приведена на рис. 3.7

Рисунок 3.7 Схема алгоритма конструкции оператора цикла do. while

Синтаксис оператора цикла do while имеет следующий вид:

do while (logical_expr)

[операторы]

enddo

Тело цикла, аналогичное для цикла с постусловием, будет выполняться до тех пор, пока истинно логическое выражение logical_expr. Как только выражение становится ложно, происходит переход к выполнению операторов после enddo. Т.е. величины, входящие в состав логического выражения, должны изменяться в теле цикла. При этом с каждым изменением они должны стремиться к тому, чтобы логическое выражение стало ложным. В противном случае цикл станет бесконечным.

Если в теле цикла используется конструкция if, Select case, то они должны содержаться целиком внутри цикла.

Решение задачи о табулировании функции с использование оператора цикла do while будет выглядеть следующим образом (схема алгоритма рис. 3.8).

Рис. 3.8

X=a

Do while (x<=b)

Y=x**2

X=x+dx

enddo

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

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

Пример 1. Вывести на экран 10 единиц, так что на нечетных позициях стоят отрицательные, а на четных положительные.

Program edenitsa

Integer I,p

P=1

Do I,10

P=-p

Write(*,’(i2,&)’), p

Enddo

end

Результат работы программы:

-1 1 -1 1 -1 1 -1 1 -1 1

Пример 2. Вывести на экран все числа, которые кратны 5 в диапазоне от 10 до 50.

Здесь диапазон удобно использовать как начальное и конечное значение счетчика цикла с параметром с шагом 1. То есть сами проверяемые значение будут выступать в качестве параметра. Число кратно 5, если делится на него без остатка. То есть если остаток от деления числа на 5 равен нулю, то оно выводится на экран.

Program kratnost

Integer k !проверяемое число

Do k=10,50

If (mod(k,5) == 0) then

Print ‘(i4,$)’, k

Endif

Enddo

End

Результат:

10 15 20 25 30 35 40 45 50

Пример 3. Задача подсчета количества значений, удовлетворяющих определенному условию. Рассматривается на примере предыдущей задачи. В программе применяется целочисленная переменная-счетчик s. Перед использованием в цикле счетчику присваивается начальное значение, как правило 0. Эта операция называется обнулением или сбросом счетчика.

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

Program kratnost_count

Integer k, s

S=0 ! переменная счетчик количества найденных чисел

Do k=10,50

If (mod(k,5) == 0) then

Print ‘(i4,$)’, k

S=s+1

Endif

Enddo

Print ‘(a,i2)’, ‘Vsego = ’, s

End

Результат:

10 15 20 25 30 35 40 45 50

Vsego = 9

Пример 5. Просуммировать значений чисел от 1 до 10, т.е. найти следующую сумму 1+2+3+…+10.

Program summa

Integer k, s

S=0 ! переменная накапливающая сумму

Do k=1,10

S=s+k

Enddo

Print ‘(a,i2)’, ‘Vsego = ’, s

End

При подсчете количества переменная счетчик увеличивается на 1 на каждом шаге цикла, а переменная-сумматор на каждом шаге последовательно увеличивается на значения, которые нужно просуммировать.

Если рассмотреть работу цикла пошагово, то значения в переменной s будут меняться следующим образом:

Перед началом цикла s=0.

При k=1, s=0+1=1;

При k=2, s=1+2=3;

При k=3, s=3+3=6;

При k=9, s=36+9=45;

При k=10, s=45+10=55;

Результат работы программы:

Vsego = 55

Пример 6. Например найти сумму ряда с точностью 0,001. Здесь количество повторений заранее неизвестно. Суммировать элементы ряда до тех пор, пока с добавлением последующего элемента сумму не будет увеличиваться больше чем на 0,001. Как видно каждый элемент ряда меньше предыдущего. Значит суммировать надо до тех пор, пока прибавляемый элемент станет меньше 0,001. Чтобы наложить условие на элемент ряда нужно определить зависимость по которой он вычисляется. Очевидно что в данном случае элемент равен , где k – номер элемента в ряде. Если воспользоваться циклом do while, то условие выхода из цикла будет . В теле цикла производится суммирование элементов и подсчет порядкового номера суммируемого элемента, равный количеству повторений цикла.

Program row_summa

Integer :: k=1 ! номер элемента ряда

Real :: sum=0, slag

! sum –сумма ряда

! slag – значение текущего єлемента

Slag=1.0/(k*k+1) ! первый элемент ряда

Do while (slag > 0.001) ! проверка условия выхода из цикла

Sum = sum + slag ! накапливаем сумму

K = k+1 ! считаем номер следующего элемента ряда

Slag = 1.0/(k*k+1) ! вычисляем значение следующего элемента ряда

enddo

print ‘(a, f9.6)’, ‘summa=’, sum

print ‘(a, i4)’, ‘kol-vo elementov=’, k

print ‘(a, f9.6)’, ‘poslednee slagaenoe=’, slag

end

Последовательно начиная с k=1 вычисляется и проверяется каждый элемент ряда. Если элемент больше значения 0,001, то он добавляется в переменную sum. Если нет, то происходит выход из цикла и в переменной sum будет находится искомая сумма.

Результат:

Summa = 1.044941

kol-vo elementov= 32

poslednee slagaenoe= 0.000976

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]