- •Информатика 1курс
- •2. Разбор работы программы f1.For
- •Implicit none
- •6 Колонка - Build- компиляция и компоновка программы
- •3. Ошибки компиляции
- •Как правильно структурировать (набирать) текст программ.
- •Задание Lab_f1 (на дом)
- •- Иметь структуированный вид
- •2) Подготовьтесь к следующей лабораторной работе, прочитайте Lab_f2.Doc и условия -
Как правильно структурировать (набирать) текст программ.
Задача
– показать структурные элементы
алгоритма
=============================
Пример:
ПЛОХО |
Структурирование |
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. Оператор вывода
Вопросы для «продвинутых»
Что в Лабораторной работе написано не правильно?
Что в Лабораторной работе написано плохо?
Что в Лабораторной работе пропущено и следует добавить?