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

Упражнения

1. Вычислить значения логических выражений:

а) x * <> 0 .and. x при = 2, = 1;

б) a .or. .not. b при a = .false., b = .true.

2. Если = .true. и x = 1, то какое значение получит логическая переменная d после выполнения оператора присваивания:

а) d := < 2; б) := .not. a .and. x==1 ?

3. Написать оператор присваивания, в результате выполнения которого логическая переменная t получит значение .true., если высказывание истинно, и значение .false. в противном случае:

а) из чисел x, y, z только два равны между собой;

б) x – положительное число;

в) каждое из чисел x, y, z положительно;

г) только одно из чисел x, y, z положительно;

д) p делится нацело на q;

е) цифра 5 входит в десятичную запись трехзначного целого числа k.

4. Составить программу полного решения квадратного уравнения (алгоритм см. в разделе 1.3).

3.8. Программирование циклов

Цикл – многократное выполнение последовательности операторов (тела цикла) при соблюдении некоторого условия. В Фортране, как и в большинстве других процедурных языков программирования, различают три способа программирования циклов:

  • цикл "с предусловием" или «цикл-пока»;

  • цикл "с постусловием" или «цикл-до»

  • цикл "с параметром".

Цикл "с предусловием" реализуется конструкцией DO WHILE ENDDO:

[имя:]DO WHILE (логическое _выражение)

БОК

END DO [имя]

Цикл "с предусловием" выполняется, пока истинно логическое выражение, определяющее условие повторения цикла. БОК образует тело цикла. Проверка истинности логического выражения происходит каждый раз перед выполнением тела цикла.

Оператор END DO можно писать как с пробелом, так слитно: ENDDO.

Пример 1. Табулирование функции y=sin(x) + x2 с использованием цикла с предусловием.

program Tabfunct1

real a,b,h,x,y

integer n

print *,'INPUT a,b,n: '

read *, a,b,n ! n шагов по Х на отрезке от a до b

write(*,'(6x,"x",16x,"y")')! Вывод шапки таблицы

x=a; h=(b-a)/n

do while (x<=b+1.0e-7) ! Цикл с предусловием

y=sin(x)+x*x

print *,x,' ',y

x=x+h ! Изменение аргумента функции

end do

end program

Цикл "с постусловием" отличается от цикла "с предусловием" тем, что проверка истинности логического выражения происходит после очередного выполнения тела цикла. Логическое выражение является условием окончания выполнения цикла. В Фортране не существует специальной конструкции цикла "с постусловием", но его можно реализовать, используя бесконечный цикл конструкции DO ... END DO следующим образом:

[имя:]DO

БОК

IF( логическое_выражение) EXIT

END DO [имя]

Здесь для прерывания работы цикла и передачи управления на следующий за циклом выполняемый оператор применяется оператор выхода из цикла EXIT. Если нужно про­пустить часть операторов цикла и перейти к началу тела цикла, то используется оператор возврата к началу цикла CYCLE. При этом управление передается операторам DO или DO WHILE. Операторы EXIT и CYCLE отдельно не применяются, а встраиваются в конструкции DO.

Пример 2. Табулирование функции y=sin(x) + x2 с использованием цикла с постусловием.

program Tabfunct2

real a,b,h,x,y

integer n

print *,'INPUT a,b,n: '

read *, a,b,n

write(*,'(6x,"x",16x,"y")')! Вывод шапки таблицы

x=a; h=(b-a)/n

do ! Начало цикла

y=sin(x)+x*x

print *,x,' ',y

x=x+h

if (x>b+1.0e-7) exit !Условие выхода из цикла

end do

end program

Цикл "с параметром" в Фортране реализуется следующей конструкцией:

[имя:]DO р = рs, ре [, h]

БОК

END DO [имя]

Параметр р также называют переменной цикла, которая может иметь целый тип, стандартный вещественный или вещественный тип двойной точности. Здесь ps –начальное значение параметра цикла, pe – конечное значение параметра цикла, h – шаг изменения параметра цикла. Параметры рs, рe и шаг h могут быть арифметическими выражениями, которые приводятся к типу параметра цикла р. При отсутствии шага h его значение устанавливается равным единице.

Исполнение цикла с параметром происходит следующим образом:

  1. вычисляются значения ps, ре и h;

  2. параметру p присваивается значение ps;

  3. если при h > 0 истинно отношение р <= ре (при h<pe истинно отношение р >= ре), то выполняется тело цикла (БОК) иначе происходит выход из цикла;

  4. значение параметра цикла изменяется на величину шага, происходит возврат на выполнение п.3.

При использовании цикла с параметром необходимо учитывать следующие обстоятельства:

- значения ps, ре и h вычисляются только один раз при входе в цикл и внутри цикла меняться не могут;

- в теле цикла нельзя изменять значение параметра p;

- не следует входить внутрь цикла, минуя его заголовок (оператор DO).

Пример 3. Табулирование функции y=sin(x) + x2 с использованием цикла с параметром.

program Tabfunc

real a,b,x,y

integer n

print *,'INPUT a,b,n:

read *, a,b,n write(*,'(6x,"x",16x,"y")')

do x=a,b,(b-a)/n

y=sin(x)+x*x

print *,x,' ',y

end do

end program