![]() |
|
Модераторы: Poseidon |
![]()
|
|
| stanger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.1.2009 Репутация: нет Всего: нет |
Доброе время суток!!
Помогите, пожалуйста! есть процедура на фортране, которую нужно перевести в си. никак не получается.. наверчено с три короба... вот текст процедуры: SUBROUTINE NLOGN(N,X,SGN) DIMENSION X(1),M(12) COMPLEX X,WK,T,Q DO 3 I=1,N 3 M(I)=2**(N-I) LX=2**N DO 10 L=1,N NMASS=2**(L-1) LMASS=LX/NMASS LBHALF=LMASS/2 K=0 DO 19 IMASS=1,NMASS FK=K FLX=LX V=SGN*6.2831853*FK V=V/FLX BR=SIN(V) AR=COS(V) WK=CMPLX(AR,BR) ISTART=LMASS*(IMASS-1) KI=LBHALF DO 5 I=1,KI J=ISTART+I JH=J+LBHALF AR=REAL(X(J)) BR=AIMAG(X(J)) X(J)=CMPLX(AR,BR) AR=REAL(X(JH)) BR=AIMAG(X(JH)) X(JH)=CMPLX(AR,BR) A1=REAL(WK) B1=AIMAG(WK) A2=A1*AR B2=B1*BR A3=A1*BR B3=AR*B1 A4=A2-B2 A5=B3+A3 Q=CMPLX(A4,A5) X(JH)=X(J)-Q X(J)=X(J)+Q 5 CONTINUE IR=0 DO 7 I=2,N II=I IF(K.LT.M(I)) GoTo 9 K=K-M(I) 7 CONTINUE 9 K=K+M(II) 19 CONTINUE 10 CONTINUE K=0 DO 15 J=1,LX IF(K.LT.J) GoTo 11 T=X(J) X(J)=X(K+1) X(K+1)=T 11 DO 13 I=1,N II=I IF(K.LT.M(I)) GoTo 155 K=K-M(I) 13 CONTINUE 155 K=K+M(II) 15 CONTINUE IF(SGN.LT.0) GoTo 35 DO 17 I=1,LX AR=REAL(X(I))/FLX BR=AIMAG(X(I))/FLX X(I)=CMPLX(AR,BR) 17 CONTINUE 35 CONTINUE RETURN END |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 7 Всего: 49 |
А в чем проблема-то?
P.S. Перелопачивать все с нуля как-то лень (и, думаю, не мне одному), поэтому лучше бы понять, в каком конкретном месте трудности. |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
| stanger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.1.2009 Репутация: нет Всего: нет |
как я предполагаю, там проблема в индексах массива, но не уверен. скорее всего вот тут что-то не проходит, все остальное вроде норм должно быть...
DO 15 J=1,LX IF(K.LT.J) GoTo 11 T=X(J) X(J)=X(K+1) X(K+1)=T 11 DO 13 I=1,N II=I IF(K.LT.M(I)) GoTo 155 K=K-M(I) 13 CONTINUE 155 K=K+M(II) 15 CONTINUE Это то, что у меня получилось.. Это сообщение отредактировал(а) stanger - 10.1.2009, 13:12 Присоединённый файл ( Кол-во скачиваний: 6 )
NLOGN_cpp.txt 1,81 Kb |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 2 Всего: 183 |
Для домашних заданий, курсовых, существует "Центр Помощи".
Тема перенесена! -------------------- ... |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 7 Всего: 49 |
Ну, первая ошибка стандартна и очевидна.
Массивы в Фортране по умолчанию нумеруются от 1. Т.е. запись DIMENSION M(12) означает, что индекс меняется от 1 до 12 включительно. Самое простое решение - если не очень жалко памяти, сделайте размеры массивов в C-варианте на единицу больше (нулевые элементы при этом использоваться не будут). |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |