среда, 28 декабря 2011 г.

Осторожно! Оператор data

Задача: избежать "run-time" и скрытых семантических ошибок при использовании оператора data
Методы решения: fortran

"В Фортране существует две возможности задания начальных значений переменных: в операторах объявления типа и оператором DATA. Начальные значения присваиваются переменным на этапе компиляции программы."
О.В. Бартеньев "Современный ФОРТРАН", стр. 63

Рассмотрим следующий код:

program test_data

real a

do i = 1,3
  call a1
  print*, a
enddo

end program

subroutine a1

real a
data a/36.6/

print*, '1',a
a = -10.4
print*, '2',a

return
end subroutine

В  этой программе мы объявляем действительную переменную a, в цикле печатаем значение a и вызываем подпрограмму a1. В подпрограмме a1 переменная a (локальная, в основной программе её "не видно", т. к. мы её не передаём) задается через оператор data (a = 36.6), значение а выводится на экран (1), затем изменяется на отрицательное значение и снова печатается на экран (2). В результате выполнения программы на экране появляется следующее:

1  36.5999998
2  -10.400000
NaN
1  -10.400000
2  -10.400000
NaN
1  -10.400000
2  -10.400000
NaN

Таким образом, оператор data в составе подпрограммы не восстанавливает начальное значение переменной на каждом шаге цикла, но сохраняет в памяти изменившееся значение переменной для последующих шагов цикла. Переменные и массивы, заданные оператором data, по умолчанию имеет атрибут save: "переменные, неявно ставшие автоматическими и появившиеся в операторе DATA или инициализированные в операторе объявления типа, получат атрибут SAVE и будут помещены в статическую память." (О.В. Бартеньев, Современный Фортран, стр. 278). Это важно помнить, чтобы не допустить досадных run-time ошибок.

1 комментарий:

  1. ВСЕ ПРОЧИТАЙТЕ НАСТОЯЩЕЕ ОТЗЫВ О том, КАК Я ПОЛУЧИЛ СВОЙ КРЕДИТ ОТ КОМПАНИИ LEGIT И ДОВЕРЕННОЙ КРЕДИТНОЙ СРЕДИ Меня зовут Kjerstin Lis, я искал кредит для погашения своих долгов, все, кого я встречал, мошенничали и брали свои деньги, пока я наконец не встретил мистера Бенджамина Брейл Ли Он смог дать мне кредит в размере 450 000 рублей. Он также помог другим моим коллегам. Я говорю как самый счастливый человек во всем мире сегодня, и я сказал себе, что любой кредитор, который спасает мою семью от нашей бедной ситуации, я скажу имя всему миру, и я так счастлив сказать, что моя семья вернулся навсегда, потому что я нуждался в кредите, чтобы начать свою жизнь заново, потому что я одинокая мама с 3 детьми, и весь мир, казалось, висел на мне, пока я не имел в виду, что БОГ послал кредитора, который изменил мою жизнь и член моей семьи, БОЖИЙ кредитор, мистер Бенджамин, он был Спасителем БОГом, посланным для спасения моей семьи, и сначала я подумал, что это будет невозможно, пока я не получу кредит, я пригласил его к себе в семью -все вечеринка, от которой он не отказался, и я посоветую всем, кто действительно нуждается в кредите, связаться с г-ном Бенджамином Брейлом Ли по электронной почте (lfdsloans@outlook.com), потому что он самый понимающий и добрый кредитор. когда-либо встречал с заботливым сердцем. Он не знает, что я делаю это, распространяя свою добрую волю ко мне, но я чувствую, что должен поделиться этим со всеми вами, чтобы освободить себя от мошенников, пожалуйста, остерегайтесь подделок и свяжитесь с правильной кредитной компанией. com или whatsapp + 1-989-394-3740. ,

    ОтветитьУдалить

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...