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

Как правильно структурировать (набирать) текст программ.

Задача – показать структурные элементы алгоритма

=============================

Пример:

ПЛОХО

Структурирование

Lab_MPI СПбГУ 2007г.

кафедра вычислительной физики

program main_mpi

include 'mpif.h'

integer rank, tag, cnt, ierr, status(mpi_status_size)

real sndbuf, rcvbuf

tag = 0

sndbuf = 3.14159

cnt = 1

call mpi_init(ierr)

call mpi_comm_rank(mpi_comm_world, rank, ierr)

if (rank.eq.0) then

call mpi_recv(rcvbuf, cnt, mpi_real, 1, tag, mpi_comm_world, status, ierr)

call mpi_send(sndbuf, cnt, mpi_real, 1, tag, mpi_comm_world, ierr)

else

call mpi_recv(rcvbuf, cnt, mpi_real, 0, tag, mpi_comm_world, status, ierr)

call mpi_send(sndbuf, cnt, mpi_real, 0, tag, mpi_comm_world, ierr)

end if

call mpi_finalize(ierr)

stop

end

! Комменьарий, что за программа

! и кто автор

program main_mpi

IMPLICIT NONE ! упростите себе отладку

include 'mpif.h'

integer rank, tag, cnt, ierr, status(mpi_status_size)

real sndbuf, rcvbuf

tag = 0

sndbuf = 3.14159

cnt = 1

call mpi_init(ierr)

call mpi_comm_rank(mpi_comm_world, rank, ierr)

if (rank.eq.0) then

call mpi_recv(rcvbuf, cnt, mpi_real, 1, tag,

mpi_comm_world, status, ierr)

call mpi_send(sndbuf, cnt, mpi_real, 1, tag,

mpi_comm_world, ierr)

else

call mpi_recv(rcvbuf, cnt, mpi_real, 0, tag,

mpi_comm_world, status, ierr)

call mpi_send(sndbuf, cnt, mpi_real, 0, tag,

mpi_comm_world, ierr)

end if

call mpi_finalize(ierr)

stop

end

5. Условный оператор IF

Условное выполнение блоков операторов (IF THEN ELSE)

В языке Фортран, аналогично другим языкам программирования, имеется конструкция IF THEN ELSE условного выполнения блоков операторов. Простейший вариант такой конструкции имеет вид:

IF(<выражение>) THEN

<Операторы -- тело блока>

END IF

Здесь <выражение> - логическое выражение, а <тело блока> - последовательность выполняемых операторов (возможно, ни одного). Конструкция работает следующим образом. Если выражение истинно, операторы тела блока выполняются. В противном случае они пропускаются, и выполняется оператор, стоящий сразу за "закрывающей скобкой" ENDIF.

В качестве выражения часто используется «Выражения отношения»

Выражение отношения устанавливает отношение типа "больше", "равно", "меньше" результатов вычисления двух арифметических выражений.

Оно имеет вид: Е1 <операция> Е2

где Е1 и Е2 - арифметические выражения, а <операция> - один из следующих знаков операции: Знак операции Значение операции

F90 F77

== .EQ. (equal to) равно

/= .NE. (not equal to) не равно

> .GT. (greater than) больше чем

>= .GE. (greater than or equal to) больше или равно

< .LT. (less than) меньше чем

<= .LE. (less than or equal to) меньше или равно

Выражение отношения имеет значение "истина", если результаты вычисления арифметических выражений Е1 и Е2 удовлетворяют значению операции.

Пример. Если значение I больше J то, переменные меняются значениями:

IF( I .GT. J ) THEN

TEMP = I

I = J

J = TEMP

END IF

Расширением этой конструкции является добавление альтернативных блоков действий:

IF(<выражение>) THEN

<Операторы -- тело блока>

ELSEIF(<выражение>) THEN

<Операторы -- тело блока>

ELSE

<Операторы -- тело блока>

END IF

Задание: Решите задачу 1102

Указания:

Данные во входном файле записаны в одну строку, поэтому следует использовать один оператрор READ для чтения всех 2-х чисел.

В оператор чтения READ добавьте через запятую чтение 2-ой переменной.

6. Логические операции .

В предыдущем разделе логическое выражение получалось с помощью операций отношения. Другие логические выражения строятся спомощью скобок и логических операторов, указанных в таблице

Логический Оператор

Операция

Приоритет

.NOT.

.AND.

.OR.

.EQV.

.NEQV.

Отрицание = НЕ

Конъюнкция = И

Включающая дизъюнкция = ИЛИ

Эквивалентность

Неэквивалентность

Наивысший

Средний

Средний

Низший

Низший

Пример: (A>B) .AND. (A>C) – имеет значение ИСТИНА, тогда и только тогда, когда A – строго наибольшее число из чисел A, B, C

Задание: Решите задачу 1103.

Обратите внимание и проверьте свои программы: Вывод заголовка программы должен предшествовать основной РАБОТЕ программы

!!!Указания к задачам решаемым на занятии: !!!

На занятиях Вам даются учебные задания . Если Вам в течении 5 минут не ясен алгоритм решения, то спросите про алгоритм решения задачи.

Цель занятия – набивка и отладка программ.

Решение задач самостоятельно предполагается – дома.

Показажите преподавателю (по его выбору) задачу 1103 для контроля, что Вы знаете, как правильно ОФОРМЛЯТЬ текст программ.

УДАЛИТЕ ненужные файлы и каталог DEBUG. Фортрановские EXE-файлы имеют большой размер и нам незачем их хранить. Особо это касается тех, кто только начинает работать с компьютером и у них образуется куча EXE-файлов и куча DEBUG каталогов в разных местах.

Что необходимо знать после Lab_F1:

1. Работа с Compaq Visual Fortran Version 6.5:

загрузка исходного модуля

компиляция

поиск места ошибок

компоновка, запуск на исполнение

отладка, пошаговое движение (знакомство)

окна отладчика (знакомство)

2. Структура программы

3. Требования к оформлению программы

4. Выражения отношения и Логические операторы

5. Оператор условия

6. Оператор вывода

Вопросы для «продвинутых»

  • Что в Лабораторной работе написано не правильно?

  • Что в Лабораторной работе написано плохо?

  • Что в Лабораторной работе пропущено и следует добавить?

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