|
|
|
VlTag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.10.2010 Репутация: нет Всего: нет |
Программа FHT.
Этот код из старой книги. Программа редкая и ценная. Я попробовал набрать этот код в среде Fortran_Force_2. Не идёт компиляция и непонятно что выдаёт комплятор. Помогите оживить эту замечательную программу! c ******************************************* PROGRAM FHT c ----- PEREMENNUE OPISANIE ----------------- DIMENSION F(0:8,0:256), R(0:256), X(0:256), M(0:20) DIMENSION S(64), C(64) INTEGER D,E,I,K,L,M0,N,N2,N4 INTEGER N7,P,P0,P7,Q,S0,S1,S2,S4,U FIN(I)=I+1 P=8 N4=2**(P-2) N2=N4+N4 N=N2+N2 N7=N-1 P7=P-1 c ----- INSERT DAATA --------------------- DO I=0,N7 F(0,I)=FIN(I) F(1,I)=F(0,I) END DO c ----- GET POWERS OF 2 --------------------- I=1 M(0)=1 M(1)=2 10 M(I+1)=M(I)+M(I) I=I+1 IF (I.LT.P) GO TO 10 c ----- GET SINES AND COSINES --------------- PI=3.14159265 W=2*PI/N A=0 DO I=1,N4 A=A+W S(I)=SIN(A) C(I)=COS(A) END DO c ----- PERMUTE ----------------------------- J=-1 I=-1 20 I=I+1 P0=P 30 P0=P0-1 J=J-M(P0) IF (J.GE.-1) GO TO 30 J=J+M(P0+1) IF (I.LE.J) GO TO 20 T=F(0,I+1) F(0,I+1)=F(0,J+1) F(0,J+1)=T IF (I.LT.(N-3)) GO TO 20 c ----- GET F(I,1), 2-ELEMENT DHTs DO I=0,N-2,2 F(1,I)=F(0,I)+F(0,I+1) F(1,I+1)=F(0,I)-F(0,I+1) END DO IF (P.EQ.1) GO TO 40 c ----- GET F(2,I), 4-ELEMENT DHTs L=2 M0=2 DO I=0,N-4,4 F(2,I)=F(1,I)+F(1,I+2) F(2,I+1)=F(1,I+1)+F(1,I+3) F(2,I+2)=F(1,I)-F(1,I+2) F(2,I+3)=F(1,I+1)-F(1,I+3) END DO IF (P.EQ.2) GO TO 40 c ----- STAGES 3,4 .... ------------------- U=P7 S1=4 DO L=2,P7 S2=S1+S1 U=U-1 S0=M(U-1) DO Q=0,N7,S2 I=Q D=I+S1 F(L+1,I)=F(L,I)+F(L,D) F(L+1,D)=F(L,I)-F(L,D) K=D-1 DO J=S0,N4,S0 I=I+1 D=I+S1 E=K+S1 Y=F(L,D)*C(J)+F(L,E)*S(J) Z=F(L,D)*S(J)-F(L,E)*C(J) F(L+1,I)=F(L,I)+Y F(L+1,D)=F(L,I)-Y F(L+1,K)=F(L,K)+Z F(L+1,E)=F(L,K)-Z K=K-1 END DO E=K+S1 END DO S1=S2 END DO c ----- GET DFT --------------------------- R(0)=(F(L,0)+F(L,0))/2 X(0)=0 DO I=1,N7 B=F(L,N-1) R(I)=(F(L,I)+B)/2 X(I)=(F(L,I)-B)/2 END DO 40 CONTINUE c ----- WRRITTE RESULTS ------------------- TYPE 50 50 FORMAT (' Input H( ) R( ) X( ) ') DO I=0,N7 TYPE 60, I,FIN(I),F(L,I)/N,R(I)/N,X(I)/N 60 FORMAT (16,4 F9.3) END DO END |
|||
|
||||
Фантом |
|
|||
Вы это прекратите! Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
В строке с меткой "60" в самом конце файла явная ошибка, оператор формата (точнее, его "начинка") так выглядеть не может. Похоже, Вы ошиблись при перепечатке (или текст неудачно распознался при сканировании). В остальном вроде все в порядке, она компилируется и даже работает (правда, не в этой среде, в ней проверить не могу).
P.S. Что-то тут еще не то. Синтаксически все корректно, но вот смысл у первого исполнимого оператора (это 8-я строка программы) отсутствует начисто. Либо там было что-то другое, либо где-то в книге есть указание, что именно должно быть туда вставлено. Это сообщение отредактировал(а) Фантом - 12.11.2012, 19:23 |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |