На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Fortran : операторы Type , format
      Появилась необходимость перегнать старую прогу написанную на фортране-4 на Delphi
      Почти всю программу перевел осталась пару мест в которых не могу разобратся , прошу помочь (хоть чемто: советом в какой книге(на каком сайте) про это можно почитать )

      собственно вот эти части кода
      ExpandedWrap disabled
        Type 4,B,B
        4 format(2f10.4)


      ExpandedWrap disabled
        Type 3,ul2,am2,psi,d2k
        3 format (13)


      заранее спасибо
        Цитата RealZ @
        про это можно почитать
        читай про определение производных типов в фортране.
          Насколько я помню, производные типы определяются в декларативной части программы, а здесь подразумевается исполняемая.
          оператор type (не разу им не пользовался) по применению похож на операторы write и print (или read?)
          format указывает формат вывода переменных оператором write, print, read... возможно, и type.
          2f10.4 означает, что нужно вывести два действительных числа по 10 знаков каждое, причем 4 из них после запятой.
          Формата l я не знаю. Может, logical, но вероятно должен содержать 3 символа.
            RealZ, если можно, кинь сюда весь исполняемый блок (функция, процедура, ...) с "Type 4,B,B 4 format(2f10.4)" и "Type 3,ul2,am2,psi,d2k 3 format (13)". Тогда можно будет сказать предметнее. Но Type точно используется для определения производных типов данных.
              вот вся подпрограмма где находятся эти операторы (для удобства выделил type и format )
              Подпрограмма

              выделенное


              Subroutine STG (AL1,B2,E,G,TN,PO,TO,RT,CP,D1K,RK,BB1,BB2,FDU,DEL,TM,POI,TOI,HO,UL1,UL2,RC,ROI,PN,C2,AL2,DL,DLL)
              PI=3.141593
              POL1=1.
              FI=0.96
              PSI=0.940
              AM1=0.97
              AM2=0.950
              RC=RK
              2 UKCF=FI*COS(AL1)/(2.*SQRT(1.-RK))
              CF=PI*D1K*TN/UKCF
              HO=CF**2/2
              T1T=TO-1(1.-RC)*HO/CP
              TYPE 3,PO,TO,TM,RT
              3 FORMAT (4F14.4)
              CALL GAS(PO,TO,TM,RT,T1T,P1,V1T)
              TYPE 3,P1,V1T,RC,G
              A=G*V1T/(AM1*CF*PI*SIN(AL1)*SQRT(1.-RC))
              TYPE 3,A,D1K,AL1,AL1
              UL1=(-D1K+SQRT(D1K**2+4.*A))/2
              RCR=1.-(1.-RK)*(((D1K+UL1)/D1K)**(-1.8))
              TYPE 4,UL1,RCR
              4 FORMAT (2F10.4)
              FI=0.980-0.009*BB1/UL1
              AM1=0.982-0.005*BB1/UL1
              RR=RCR-RC
              RC=RCR
              TYPE 4,RR,RK
              IF (ABS(RR)-0.0005) 1,1,2
              CONTINUE
              F1=PI*(D1K+UL1)*UL1*SIN(AL1)
              C1=FI*CF*SQRT(1.-RC)
              U1=PI*(D1K+UL1)*TN
              TYPE 3,F1,C1,U1,AL1
              CALL TRK(C1,U1,AL1,C1U,W1,B1)
              TYPE 3,C1U,W1,B1,B1
              W2T=SQRT(W1**2+RC*CF**2)
              T2T=TO-HO/CP
              TYPE 4,W2T,T2T
              CALL GAS (PO,TO,TM,RT,T2T,P2,V2T)
              TYPE 4,P2,V2T
              B=G*V2T/(AM2*PI*PSI*SIN(B2)*W2T)
              TYPE 4,B,B
              D2K=D1K-0.001
              UL2=(-D2K+SQRT(D2K**2+4.*B))/2.
              AM2=0.965-0.015*BB2/UL2
              PSI=0.957-0.011*BB2/UL2
              TYPE 3,UL2,AM2,PSI,D2K
              W2=PSI*W2T
              U2=PI*(D2K+UL2)*TN
              CALL TRK (W2,U2,B2,W2U,C2,AL2)
              TYPE 3,W2,U2,B2,W2U
              TYPE 4,C2,AL2
              POL=U2*(C1U+W2U-U2)/HO
              TYPE 3,POL,POL1
              PP=POL1-POL
              POL1=POL
              TYPE 4,PP,PP
              IF (ABS(PP)-0.001) 5,5,1
              5 U2CF=UKCF*(D2K+UL2)/D2K
              ATP=0.0007*(D2K+UL2)*(U2CF**3)/(PI*UL2*SIN(B2))
              ADU=FDU*POL/(AM1*F1)
              RP=1.-(1.-RK)*((1.+2*UL2/D2K)**(-1.8))
              TYPE 3,U2CF,ATP,ADU,RP
              APU=PI*(D2K+2.*UL2)*DEL*POL*SQRT(RP/(1.-RC))/(AM1*F1)
              TYPE 4,APU,PP
              PAUSE
              ROI=POL-ATP-ADU-APU
              PN=G*HO*ROI/1000.
              TOJ=TO-HO*ROI/CP
              TOOJ=TOJ+(C2**2)/(2.*CP)
              CALL GAS (P2,TOJ,TM,RT,TOOJ,POOJ,V)
              POI=POOJ
              TOI=TOOJ
              DL=UL2-UL1
              DLL=(D2K+UL2)/UL2
              RETURN
              END


              Просто код

              ExpandedWrap disabled
                Subroutine STG (AL1,B2,E,G,TN,PO,TO,RT,CP,D1K,RK,BB1,BB2,FDU,DEL,TM,POI,TOI,HO,UL1,UL2,RC,ROI,PN,C2,AL2,DL,DLL)
                  PI=3.141593
                  POL1=1.
                  FI=0.96
                  PSI=0.940
                  AM1=0.97
                  AM2=0.950
                  RC=RK
                2 UKCF=FI*COS(AL1)/(2.*SQRT(1.-RK))
                  CF=PI*D1K*TN/UKCF
                  HO=CF**2/2
                  T1T=TO-1(1.-RC)*HO/CP
                  TYPE 3,PO,TO,TM,RT
                3 FORMAT (4F14.4)
                  CALL GAS(PO,TO,TM,RT,T1T,P1,V1T)
                  TYPE 3,P1,V1T,RC,G
                  A=G*V1T/(AM1*CF*PI*SIN(AL1)*SQRT(1.-RC))
                  TYPE 3,A,D1K,AL1,AL1
                  UL1=(-D1K+SQRT(D1K**2+4.*A))/2
                  RCR=1.-(1.-RK)*(((D1K+UL1)/D1K)**(-1.8))
                  TYPE 4,UL1,RCR
                4 FORMAT (2F10.4)
                  FI=0.980-0.009*BB1/UL1
                  AM1=0.982-0.005*BB1/UL1
                  RR=RCR-RC
                  RC=RCR
                  TYPE 4,RR,RK
                  IF (ABS(RR)-0.0005) 1,1,2
                  CONTINUE
                  F1=PI*(D1K+UL1)*UL1*SIN(AL1)
                  C1=FI*CF*SQRT(1.-RC)
                  U1=PI*(D1K+UL1)*TN
                  TYPE 3,F1,C1,U1,AL1
                  CALL TRK(C1,U1,AL1,C1U,W1,B1)
                  TYPE 3,C1U,W1,B1,B1
                  W2T=SQRT(W1**2+RC*CF**2)
                  T2T=TO-HO/CP
                  TYPE 4,W2T,T2T
                  CALL GAS (PO,TO,TM,RT,T2T,P2,V2T)
                  TYPE 4,P2,V2T
                  B=G*V2T/(AM2*PI*PSI*SIN(B2)*W2T)
                  TYPE 4,B,B
                  D2K=D1K-0.001
                  UL2=(-D2K+SQRT(D2K**2+4.*B))/2.
                  AM2=0.965-0.015*BB2/UL2
                  PSI=0.957-0.011*BB2/UL2
                  TYPE 3,UL2,AM2,PSI,D2K
                  W2=PSI*W2T
                  U2=PI*(D2K+UL2)*TN
                  CALL TRK (W2,U2,B2,W2U,C2,AL2)
                  TYPE 3,W2,U2,B2,W2U
                  TYPE 4,C2,AL2
                  POL=U2*(C1U+W2U-U2)/HO
                  TYPE 3,POL,POL1
                  PP=POL1-POL
                  POL1=POL
                  TYPE 4,PP,PP
                  IF (ABS(PP)-0.001) 5,5,1
                5 U2CF=UKCF*(D2K+UL2)/D2K
                  ATP=0.0007*(D2K+UL2)*(U2CF**3)/(PI*UL2*SIN(B2))
                  ADU=FDU*POL/(AM1*F1)
                  RP=1.-(1.-RK)*((1.+2*UL2/D2K)**(-1.8))
                  TYPE 3,U2CF,ATP,ADU,RP
                  APU=PI*(D2K+2.*UL2)*DEL*POL*SQRT(RP/(1.-RC))/(AM1*F1)
                  TYPE 4,APU,PP
                  PAUSE
                  ROI=POL-ATP-ADU-APU
                  PN=G*HO*ROI/1000.
                  TOJ=TO-HO*ROI/CP
                  TOOJ=TOJ+(C2**2)/(2.*CP)
                  CALL GAS (P2,TOJ,TM,RT,TOOJ,POOJ,V)
                  POI=POOJ
                  TOI=TOOJ
                  DL=UL2-UL1
                  DLL=(D2K+UL2)/UL2
                  RETURN
                  END





              получается ,что format задает формат данных в котором type выведет данные ? я правельно понимаю ? :scratch:
                FORMAT - это оператор задания формата вывода. TYPE (в данном случае): собственно вывод, в котором первый параметр - метка оператора FORMAT, который требуется использовать для вывода.

                P.S. Если не ошибаюсь, такой "диалект" (с TYPE) существовал на VAX'овской реализации Фортрана, формально стандарту языка это противоречит.
                  Цитата RealZ @
                  format задает формат данных
                  да
                  Получается, что в том фортране, на котором была написана твоя программа, type используется для вывода данных, по аналогии с print. Чесно говоря, с таким использованием оператора первый раз встречаюсь. Век живи ...
                    Спасибо всем за помощь
                    терь осталось разобратся что за формат 13 ( format (13) ), попробую найти сам )
                    p.s. если не получится вернусь с вопросом в эту тему :blush:
                      Цитата RealZ @

                      терь осталось разобратся что за формат 13 ( format (13) ),

                      А где это Вы такое нашли?
                        Опс вот это промах =\
                        иммелось ввижу FORMAT (4F14.4)
                          Цитата RealZ @
                          Опс вот это промах =\
                          иммелось ввижу FORMAT (4F14.4)

                          4 числа с плавающей точкой по 14 символов, 4 из которых - после запятой.
                          Похож на паскалевский :14:4 но не расширяет поле вывода, если число не умещается в отведенное число знаков, а заменяет все знаки звездочками.
                          Если оператором print/write выводится больше чисел, то они печатаются по четыре числа в строке.
                            Цитата andriano @
                            4 числа с плавающей точкой по 14 символов, 4 из которых - после запятой.
                            Похож на паскалевский :14:4 но не расширяет поле вывода, если число не умещается в отведенное число знаков, а заменяет все знаки звездочками.
                            Если оператором print/write выводится больше чисел, то они печатаются по четыре числа в строке.

                            Стоит, наверное, добавить пару деталей. Во-первых, символов будет не более 14 (но может быть и менее - тогда "лишние" позиции слева заменяются пробелами). Во-вторых, если в каждом случае будут заняты все 14 позиций, то между числами не окажется пробелов (или каких-либо других разделителей).
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0341 ]   [ 16 queries used ]   [ Generated: 25.04.24, 14:19 GMT ]