
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
28.01.2008, 09:57
|
|||
|---|---|---|---|
|
|||
Visual Basic и Фортран |
|||
|
#18+
Переписываю небольшую прогу из Фортрана в Visual Basic, не получается. В принципе там прога на фортране малюсенькая( сама программа и две функции). Может быть кто нибудь сможет перевести на Visual Basic (математические функции, циклы и условия пропускайте, чтоб время не тратить, это я сам знаю). PROGRAM MAIN IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION V(20) EXTERNAL FLAPL N = 6 N = 1 TIME = 0. DT = 10. DO 10 I=1,20 TIME = TIME + DT CALL STEFS(FLAPL,N,TIME,RESLT,V,M) M = N FUN = 1/DSQRT(3.1416*TIME) PRINT 100, TIME,RESLT,FUN 10 CONTINUE STOP END DOUBLE PRECISION FUNCTION FLAPL(S) IMPLICIT DOUBLE PRECISION (A-H,O-Z) FLAPL = 1./DSQRT(S) RETURN END SUBROUTINE STEFS(P,N,T,F,V,M) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION G(20),H(10),V(*) INTEGER N,M,I,K,K1,K2,NH,SN EXTERNAL P IF (M.NE.N) THEN G(1) = 1. NH = N/2 DO 10 I=1,N G(I+1) = G(I)*I 10 CONTINUE H(1) = 2./G(NH) DO 20 I=2,NH H(I) = (I**NH)*G(2*I+1)/(G(NH-I+1)*G(I+1)*G(I)) 20 CONTINUE SN = 2*(NH-(NH/2)*2)-1 DO 40 I=1,N V(I) = 0. K1 = (I+1)/2 K2 = MIN(I,NH) DO 30 K=K1,K2 V(I) = V(I)+H(K)/(G(I-K+1)*G(2*K-I+1)) 30 CONTINUE V(I) = SN*V(I) SN = -SN 40 CONTINUE M = N END IF F = 0. A = 2. A = DLOG(A)/T DO 50 I=1,N F = F+V(I)*P(I*A) 50 CONTINUE F = A*F RETURN END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.01.2008, 11:18
|
|||
|---|---|---|---|
|
|||
Visual Basic и Фортран |
|||
|
#18+
в фортране EXTERNAL FLAPL потом вызывается STEFS CALL STEFS(FLAPL,N,TIME,RESLT,V,M) перед тем как пойти на STEFS идет на функцию FLAPL DOUBLE PRECISION FUNCTION FLAPL(S) IMPLICIT DOUBLE PRECISION (A-H,O-Z) FLAPL = 1./DSQRT(S) RETURN END а потом уже на STEFS SUBROUTINE STEFS(P,N,T,F,V,M) Как мне это на бейсике сделать? плиззз помогижите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.01.2008, 23:21
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
Да, давненько я не заглядывал в фортран! 1. Мне кажется имеет место ошибка Код: plaintext 1. 2. 3. 4. 5. 6. Наверно там в одной из строк должно быть присвоение переменной M 2. И самое интересное это Код: plaintext 1. 2. 3. А теперь разрешите процетировать из книги Брюса Мак-Кинни "Visual Basic. Крепкий орешек" Правда это касается VB4, но я думаю в мире VB ничего не изменилось. По крайней мере я не нашел ничего. "... боги Бейсика не снизошли к нам и не дали этого простого свойства, которое даровано было падшим рабам Фортрана" Так, что решение вашей задачи может быть основано: А) на передаче в функцию STEFS строки с названием функции и анализом названия в STEFS и вызовом соответствующего расчета. например в коде функции STEFS Код: plaintext 1. 2. 3. 4. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.01.2008, 23:23
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
Ну вот сдвинулось. Попробую так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.01.2008, 23:24
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
Все равно сдвинулось. Я хотел показать CALL STEFS( FLAPL ,N,TIME,RESLT,V,M) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2008, 01:23
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
В функцію можно передавать указатель на функцію. Правда её значеніе будет вычесленно до входа. По сіму, убіраем EXTERNAL FLAPL і EXTERNAL P, а вместо P в STEFS прямо пісать FLAPL (I*A) Еслі я правельно понял суть проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2008, 01:35
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
Да нет. В функцию передается именно указатель. А функция вызывается по указателю уже в другом месте (в цикле). Наверно товарищ КРЕАТОР не зря так написал. Вероятно имеется множество функций дл которых вычисляется F. Если же предположение Шыфл верно, то и вообще нет проблемы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2008, 01:56
|
|||
|---|---|---|---|
Visual Basic и Фортран |
|||
|
#18+
Я совершенно не знаком с Фортран, но в VB функція обычно от переменной . Т.е. и вызывается прямо там, где может получить значение переменной. Передавать функцию без переменной, с моей точки зрения, очень странно - она же не сможет вернуть значение, зачем она нужна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2008, 08:49
|
|||
|---|---|---|---|
|
|||
Visual Basic и Фортран |
|||
|
#18+
Хотя к переводу указанной фортран программы в vb это не имеет отношения - с моей точки зрения здесь надо быть проще, но свои 2 копейки по поводу реализации в vb6 указателей добавлю Для реализации в VB(A)6 указателя на функцию можно прибегнуть к интерфейсу с объявленной функцией и ее параметрами. На основе интерфейса реализовать несколько классов с различной реализацией функции. В функции, где требуется указатель на функцию, вместо этого обхявляем переменную типа интерфейса. А в программе в зависимости от условий передаем в эту функцию экземпляры созданных ранее классов, реализовавших указанный интерфейс. Внутри функции дёргаем функцию интерфейса. В зависимости от переданной переменной того или иного класса получается, что дёргаем различные реализации функции А для связей с windows api в vb6 есть такие возможности из публичных как AddressOf, StrPtr(), VarPtr(), ObjPtr() и некоторые другие хакерские, скрытые в недрах vba**.dll функции. Давно это было, уже не помню - стар стал программер.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=60&tablet=1&tid=2162773]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
86ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 430ms |

| 0 / 0 |
