powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Visual Basic и Фортран
9 сообщений из 9, страница 1 из 1
Visual Basic и Фортран
    #35090837
KPEATOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписываю небольшую прогу из Фортрана в 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
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35091074
KPEATOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в фортране

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)

Как мне это на бейсике сделать? плиззз помогижите
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093254
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, давненько я не заглядывал в фортран!

1. Мне кажется имеет место ошибка
Код: plaintext
1.
2.
3.
4.
5.
6.
PROGRAM MAIN 
IMPLICIT DOUBLE PRECISION (A-H,O-Z) 
DIMENSION V( 20 ) 
EXTERNAL FLAPL 
N =  6          <-----
N =  1          <-----

Наверно там в одной из строк должно быть присвоение переменной M

2. И самое интересное это
Код: plaintext
1.
2.
3.
CALL STEFS(FLAPL,N,TIME,RESLT,V,M)
                  -----
                     |
Это указатель на функцию. Т.е. в функцию передается указатель на функцию

А теперь разрешите процетировать из книги Брюса Мак-Кинни "Visual Basic. Крепкий орешек"
Правда это касается VB4, но я думаю в мире VB ничего не изменилось. По крайней мере я не нашел ничего.
"... боги Бейсика не снизошли к нам и не дали этого простого свойства, которое даровано было падшим рабам Фортрана"

Так, что решение вашей задачи может быть основано:
А) на передаче в функцию STEFS строки с названием функции и анализом названия в STEFS
и вызовом соответствующего расчета.
например в коде функции STEFS
Код: plaintext
1.
2.
3.
4.
FOR I= 1  TO N 
     IF fn = "FLAPL" THEN F = F+V(I)*FLAPL(I*A) 
NEXT
F = A*F 
Б) Вызове скрипта (SC это MSScriptControlCtl)
Код: plaintext
1.
    F = SC.Eval( "F+V(I)*" & P & "(I*A)")
Лично мной не проверено :)
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093258
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот сдвинулось. Попробую так
Код: plaintext
1.
2.
3.
CALL STEFS(FLAPL,N,TIME,RESLT,V,M)
                  -----
                     |
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093262
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно сдвинулось.
Я хотел показать
CALL STEFS( FLAPL ,N,TIME,RESLT,V,M)
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093347
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В функцію можно передавать указатель на функцію. Правда её значеніе будет вычесленно до входа.
По сіму, убіраем EXTERNAL FLAPL і EXTERNAL P, а вместо P в STEFS прямо пісать FLAPL
(I*A)

Еслі я правельно понял суть проблемы
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093356
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет. В функцию передается именно указатель. А функция вызывается по указателю уже в другом месте (в цикле). Наверно товарищ КРЕАТОР не зря так написал. Вероятно имеется множество функций дл которых вычисляется F.
Если же предположение Шыфл верно, то и вообще нет проблемы :)
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093371
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я совершенно не знаком с Фортран, но в VB функція обычно от переменной . Т.е. и вызывается прямо там, где может получить значение переменной. Передавать функцию без переменной, с моей точки зрения, очень странно - она же не сможет вернуть значение, зачем она нужна?
...
Рейтинг: 0 / 0
Visual Basic и Фортран
    #35093525
Хотя к переводу указанной фортран программы в vb это не имеет отношения - с моей точки зрения здесь надо быть проще, но свои 2 копейки по поводу реализации в vb6 указателей добавлю

Для реализации в VB(A)6 указателя на функцию можно прибегнуть к интерфейсу с объявленной функцией и ее параметрами. На основе интерфейса реализовать несколько классов с различной реализацией функции. В функции, где требуется указатель на функцию, вместо этого обхявляем переменную типа интерфейса. А в программе в зависимости от условий передаем в эту функцию экземпляры созданных ранее классов, реализовавших указанный интерфейс. Внутри функции дёргаем функцию интерфейса. В зависимости от переданной переменной того или иного класса получается, что дёргаем различные реализации функции

А для связей с windows api в vb6 есть такие возможности из публичных как AddressOf, StrPtr(), VarPtr(), ObjPtr() и некоторые другие хакерские, скрытые в недрах vba**.dll функции. Давно это было, уже не помню - стар стал программер....
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Visual Basic и Фортран
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]