Вопрос по Фортрану - возвращаемое значение не присваивается
От: Аноним  
Дата: 14.06.05 09:31
Оценка:
Не рубите с плеча — ну некуда задать вопрос подобного плана.
В принципе здась решает опыт программирования.
Сам вопрос:
функция возвращает значение Res:
real(8) function Minimize(xbeg, eps, over)
        ...
    Res = HJmin(nPar, MainEnergy, Par, eps)
    Minimize = Res
end

в отладчике (MS VisualStudio 6.0) оно видно нормально.
Но дальше при возврате в "родительскую" функцию
 ...
 real(8) MinEnrg
 ...
 MinEnrg = Minimize(Params, eps, over)
 print (*), 'Min energy = ',MinEnrg

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



14.06.05 16:15: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: Вопрос по Фортрану - возвращаемое значение не присваивае
От: Privalov  
Дата: 14.06.05 09:50
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Не рубите с плеча — ну некуда задать вопрос подобного плана.

А>В принципе здась решает опыт программирования.
А>Сам вопрос:
А> функция возвращает значение Res:
А>
А>real*8 function Minimize(xbeg, eps, over)
А>        ...
А>    Res = HJmin(nPar, MainEnergy, Par, eps)
А>    Minimize = Res
А>end 
А>

А> в отладчике (MS VisualStudio 6.0) оно видно нормально.
А>Но дальше при возврате в "родительскую" функцию
А>
А> ...
А>real*8 MinEnrg
А> ...
А> MinEnrg = Minimize(Params, eps, over)
А> print (*), 'Min energy = ',MinEnrg
А>

А> получаю фигню
А>Все другие функции в других случаях возвращают все правильно.
А>В чем может быть дело?

Исправления выделены жирным.
REAL(8) — объявление массива из 8 элементов.
Re: Вопрос по Фортрану - возвращаемое значение не присваивае
От: Аноним  
Дата: 14.06.05 11:23
Оценка:
Все, разобрался!
Просто нужно было явно описать интерфейс функции Minimize в той процедуре, где Minimize вызывается:
    interface 
        real(8) function Minimize(xbeg, eps, over)
            use shareddata
            real(8) xbeg(nPar), eps, over
        end function
    end interface

Извините за вторжение в форум
Re[2]: Вопрос по Фортрану - возвращаемое значение не присваи
От: Sasparella США  
Дата: 14.06.05 23:16
Оценка:
P>REAL(8) — объявление массива из 8 элементов.

в корне неверно.
Re[2]: Вопрос по Фортрану - возвращаемое значение не присваи
От: Sasparella США  
Дата: 14.06.05 23:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Все, разобрался!

А>Просто нужно было явно описать интерфейс функции Minimize в той процедуре, где Minimize вызывается:
А>
А>    interface 
А>        real(8) function Minimize(xbeg, eps, over)
А>            use shareddata
А>            real(8) xbeg(nPar), eps, over
А>        end function
А>    end interface
А>

А>Извините за вторжение в форум

На самом деле даже интерфейсность не причем. Нужно просто ВСЕГДА описывать типы данных а не полагаться на умолчания.
То есть вначале блока — IMPLICIT NONE после чего компилятор будет слушать с открытым ртом и глупых предположений не делать. А то онг увидел что Minizize на M начинается и решил что она — целое (а не вещественное)число, а не ф-ия.
получилась каша.


И еще. Лучше писать real(8) а не real*8 — потому что первое — спецификация точности, типа float/double а второе указание РАЗМЕРА занимаемого переменной. На других системах double не обязательно 8. может быть 4 или 16

А real(8) — это всегда двойная точность.

ВОт.
Re[3]: Вопрос по Фортрану - возвращаемое значение не присваи
От: Privalov  
Дата: 16.06.05 05:06
Оценка:
Здравствуйте, Sasparella, Вы писали:

S>И еще. Лучше писать real(8) а не real*8 — потому что первое — спецификация точности, типа float/double а второе указание РАЗМЕРА занимаемого переменной. На других системах double не обязательно 8. может быть 4 или 16


Покопавшись в оставшихся от прошлого материалах по Фортрану, я не нашел таких объявлений. Такой стиль очень похож на PL/1. Не подкинете ссылку или книжку?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.