Рекомендации

  1. Осмысленные имена переменных
  2. Либо Implicit none, либо привычка описывать все в соответствии с правилом умолчания
  3. Разбивать длинные выражения на более короткие, вводить промежуточные временные переменные, ибо длинные выражения – потенциальный источник ошибок при наборе и сложность при отладке.
  4. Для облегчения читабельности в выражения вводить дополнительные смысловые скобки.
  5. Отступы во всех блоках, пропуски строк между смысловыми модулями и т.д.

 

Все это поможет при написании, отладке, а также при чтении текста программы в дальнейшем вами и другими.

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

Отладка программ

Или охота на тараканов

Все программисты – оптимисты, т.к. хотя бы внутренне , набрав программу, надеются, что там нет ошибок. ОШИБКИ ЕСТЬ ВСЕГДА!!! И вот поиск этих ошибок и называется отладкой. Это искусство. Исследовательская, экспериментальная работа.
Основные методы отладки:

  1. Трассировка – вывод информации о прохождении определенных операторов программы
  2. Контроль значения переменных
  3. Проверка индексов массивов на выход за границы
  4. Дамп – значения переменных после останова программы (нормального или аварийного)

Понятно, что основным инструментом отладки является печать. Она должна быть достаточно информативной и ясной. В большинстве случаев необходимо выводить признак места печати, название переменной, ее значение. Также бывают необходимы дополнительные данные, например индекс цикла, кол-во повторений выполнения данного блока и др. Для этого может потребоваться введение дополнительных отладочных  переменных (например, счетчиков).
В современных пакетах разработки программ обычно присутствуют средства для проведения отладки без внесения изменений в текст программы. Это, обычно, точки останова, просмотр значений переменных в ходе выполнения программы, пошаговая трассировка выполнения программы. Но для больших комплексов и для сложных ошибок их применение бывает затруднено. Существуют также и отдельные дебаггеры.

Искусство, опытность программиста определяются умением предвидеть ошибки, умением по косвенным признакам определить возможный тип и месторасположение ошибки. Например, перед выполнением выражения a=b/c необходимо проверить c!=0. Если компилятор не проверяет индексы, то стоит их проверять самому, например, при входе в подпрограмму.
Как вы понимаете, нет необходимости сохранять отладочную печать и отладочные переменные в рабочем варианте программы.  Можно хранить два варианта – но это потенциальный источник ошибок. Это допустимо ТОЛЬКО для проверки одной конкретной гипотезы и возврата потом к основному варианту.  Поэтому правильным будет внесение отладочных изменений в основной комплекс. Но для последующего их легкого обнаружения необходимо их выделять, например, форматированием и комментариями.
С only for DEBUG
 if (vDebug) then
            dCounter= dCounter+1
            print *,’123 dCounter=’, dCounter
end if
С only for DEBUG
Здесь переменная vDebug  логического типа, мы присваиваем ей значение ИСТИНА, если  нужно провести отладку.
Возможно и более сложное решение – позиционный переключатель. Переменная vDebug может быть целой и принимать разные значения, в зависимости от необходимого уровня глубины отладки. Например, 1 – только печать значений переменных при выходе из подпрограмм, 2 – печать дополнительно значений в ключевых точках, 3 – печать на каждом шаге циклов и т.д.
Значение этих признаков – флагов  можно ввести в исходные данные и менять уровень отладки не перекомпилируя программу. В исходную информацию можно ввести и имена подпрограмм, отладку которых нужно провести.

Также возможна отладка назад – откат от какой-то точки, в которой известны значения переменных. Программист просматривает исходный код в обратном порядке, чтобы определить, где эти значения были присвоены или изменены.

Важно помнить, что правильно составленный алгоритм отладить значительно проще и быстрее. Поэтому возникает правило:
БОЛЬШЕ ВРЕМЕНИ ДОЛЖНО ТРАТИТЬСЯ НА ОТЛАДКУ АЛГОРИТМА

Эффективность программ

 

Машинное время, память, внешняя память, время разработки.

Наибольшее время тратится на вычисления в циклах! Поэтому все, независящие от индекса цикла, операции надо выносить:
Do i=1,10000
A(i)=b(i)/(c**2- 4*d)
End do

rTmp=1/(c**2- 4*d)

Do i=1,10000
A(i)=b(i)*rTmp
End do

Потери времени могут возникнуть из-за преобразования типов
1 вариант
do i=1,1000000
r1=i*5.
Enddo
И 2 вариант – выполняется в 2 раза дольше!
do i=1,1000000
r1=i*5
enddo

Размерности массивов! – не больше 3!!!
Оптимизация компилятора – плюсы и минусы

Структурность программы


Hosted by uCoz