Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 15:26 15-05-2024
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
zdn9  
 
zadanie что ли?

Zadnitsa, zadnitsa!

Всего записей: 2487 | Зарегистр. 21-06-2005 | Отправлено: 21:27 12-09-2007
Hryundel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zd, да задание =)
 
а нащёт задачи, что означают "С" и строка " get/filling in the array, 14 numbers separated by space or comma "

Всего записей: 7 | Зарегистр. 11-09-2007 | Отправлено: 01:05 13-09-2007
DeadVillage



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
означают "С" и строка " get/filling in the array, 14 numbers separated by space or comma "

строка начинающаяся с С считается комментарием, делающим чтение кода менее нудным занятием, но при этом никак не влияющим на работу самой программы )
а далее следует сам комментарий - "заполнение массива 14-ю числами разделёнными пробелом или запятой"

только для чего же там и элементы суммируются? Задача про индексы (если верить автору постинга). В таком разе ввод массива (как и суммирование его нечётных элементов.... эээ, как и сам массив) излишни )))

Всего записей: 652 | Зарегистр. 05-12-2003 | Отправлено: 06:04 13-09-2007 | Исправлено: DeadVillage, 06:09 13-09-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
массив в любом случае нужен, т.к. считать всё-таки надо его элементы,
а автору не помешало бы прочесть вебхелп:
http://webhelp.ru/

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 13:14 13-09-2007 | Исправлено: akaGM, 13:15 13-09-2007
Hryundel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
блин, я не правильно написал задание, нужно найти сумму чисел с нечётными индексами, а не сами индексы
 
тоесть как я понял если убрпть строки с "С" то программа будет работать так же как и была??

Всего записей: 7 | Зарегистр. 11-09-2007 | Отправлено: 14:34 13-09-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hryundel

Цитата:
 тоесть как я понял если убрпть строки с "С" то программа будет работать так же как и была??

тебе же объяснили...
ты такое понятие как комментарий в программе знаешь?
и вообще, если задают такие zadaniya, то на кого ты учишься в своём университете?

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 17:17 13-09-2007
Hryundel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
понятно всё)
 
учусь на специальности Стандартизация и Сертификация. Предмет програмирование у меня как подочный эффект, никому не нужно, но ты с ним мучаешься... надо сдать экзамен, и всё, забываю о нем навсегда

Всего записей: 7 | Зарегистр. 11-09-2007 | Отправлено: 17:31 13-09-2007
Dremuchiy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извените за оффтоп.Помогите достать
Мудров А.Е.
Численные методы для персональных ЭВМ: Бейсик, Паскаль, Фортран
Заранее благодарен.

Всего записей: 702 | Зарегистр. 16-10-2004 | Отправлено: 14:48 14-09-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dremuchiy
неизвеним
шапку вверху видишь? там ссылка есть для таких запросов...
 
блин яндекс по первой же ссылке даёт:
_http://djvu.504.com1.ru:8019/WWW/6cea70ee51bcec8ec6219f6df70a80c8.djvu
 
лень, да?

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 16:21 14-09-2007 | Исправлено: akaGM, 16:27 14-09-2007
Dremuchiy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Спасибо за линк.Родина не забудет.

Всего записей: 702 | Зарегистр. 16-10-2004 | Отправлено: 16:40 14-09-2007
duende84

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Будте добры, подскажите, как можно заменить в Fortran 5.1 (Microsoft) функцию RUNQQ, которая, насколько я знаю, есть в Fortran Power Station. Проблема в том что мне нужно написать програмку на Fortran 5.1 (насколько я понимаю это то же самое что и Fortran IV), которая запускает *.exe-шник, он генерирует определённый массив данных и сохраняет их в файле, который нужно потом прочитать с помощью этой же програмки на Fortran-е. Если что, извините за безграмотность, я в основном програмирую на C++ или Delphi...
Заранее премного благодарен за все ответы!

Всего записей: 2 | Зарегистр. 21-09-2007 | Отправлено: 21:25 21-09-2007
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
duende84
Посмотрите команду SYSTEM, что-то вроде
i=SYSTEM('start something here')
кажется есть в MS Fortran, под рукой нету попробовать

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 04:53 22-09-2007
MSM

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте уважаемые.
Подскажите.  
Кто-нибудь устанавливал интеловский фортран на VS 2005 Express версию.
Какие ограничения.
Работает ли отладка.

Всего записей: 24 | Зарегистр. 06-10-2004 | Отправлено: 09:45 25-09-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
duende84
не очень понятно чтО тебе и на чём надо написать, но из того что я понял
может вообще можно ограничиться bat-файлом?
 
а вообще, вот тебе дема от 5.1, правильно тов. FuzzyLogic говорит...

Код:
 
CC       DEMOEXEC.FOR - Demonstration program for calling C system and
CC       spawnp library functions. These functions are included in the
CC       FORTRAN library. They are discussed in Chapter 3 of the Advanced
CC       Topics manual.
CC
CC       To compile and link DEMOEXEC.FOR type the command:
CC
CC              FL DEMOEXEC.FOR
 
C
C       Include file containing interfaces for system and spawnlp.
C
 
$INCLUDE: 'EXEC.FI'
 
C
C       Declare return types
C
        INTEGER*2 SYSTEM, SPAWNLP
 
C
C       Invoke COMMAND.COM with the command line:
C
C               dir *.for
C
        I = SYSTEM( 'dir *.for'C )
        IF( I .EQ. -1 ) STOP 'Could not run COMMAND.COM'
 
C
C       Invoke a child process:
C
C               EXEHDR DEMOEXEC.EXE
C
        I = SPAWNLP( 0, LOC( 'exehdr'C ), LOC( 'exehdr'C ),
     +                  LOC( 'demoexec.exe'C ), INT4( 0 ) )
        IF( I .EQ. -1 ) STOP 'Could not spawn EXEHDR program'
        END
 

 
MSM
ссылка из шапки
вопросы совместной работы VS и Visual FORTRAN
там вроде это обсуждают...

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 12:23 27-09-2007
duende84

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM:
Спасибо большое за пример...Но почемуто не работает так как я хотел...
Мне нужна для начала програмка которая работает следующим образом:
При запсуке она запускает другой exe-шник... Как это можно реализовать?

Всего записей: 2 | Зарегистр. 21-09-2007 | Отправлено: 18:59 27-09-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
duende84
ну вроде вот так:

Код:
 
$INCLUDE: 'EXEC.FI'
        INTEGER*2 SYSTEM, I
         external SYSTEM
 
        I = SYSTEM( 'myexe.exe'C )
        IF( I .EQ. -1 ) STOP 'не могу снять копию COMMAND.COM'
 

 
у меня встречный вопрос:
почему именно MS 5.1, а не 32-битная версия?
думаю, что под хр этот пример не будет работать...
 
ещё про бат, как я понял твою задачу:

Цитата:
что мне нужно написать програмку на Fortran 5.1, которая запускает *.exe-шник

myexe.exe

Цитата:
он генерирует определённый массив данных и сохраняет их в файле

test.dat

Цитата:
который нужно потом прочитать с помощью этой же програмки на Fortran-е

myforexe.exe test.dat
 
 
собираем всё вместе и получаем следующее:

Код:
 
echo usage: bat1.bat
myexe.exe test.dat
myforexe.exe test.dat
 

или даже

Код:
 
echo usage: bat2.bat file_name
myexe.exe %1
myforexe.exe %1
 

 
это не решение твоей задачи?

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 21:43 27-09-2007
Eugeen



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые знатоки фортрана и С!
Есть подпрограмма, являющаяся критической в общем комплексе по времени выполнения:
     
Код:
 S U B R O U T I N E  GLBQRT
C##################################################
C#     ПOДПPOГPAMMA-ФУHKЦИЯ ДЛЯ PACЧETA           #
C#     ФУHKЦИИ Q(RO,TAU) И EE ЧACTHЫX             #
C#     ПPOИЗBOДHЫX ПO RO И TAU                    #
C#     ( RO  = R/1000                             #
C#       TAU = 1000/T , ГДE                       #
C#       R-ПЛOTHOCTЬ , KГ/KУБ.M                   #
C#       T-TEMПEPATУPA , ГPAД.K                   #
C#       JDR-УMEHЬШEHHЫЙ HA 1 ПOPЯДOK             #
C#       ЧACTHOЙ ПPOИЗBOДHOЙ Q(RO,TAU) ПO RO      #
C#       JDT-УMEHЬШEHHЫЙ HA 1 ПOPЯДOK             #
C#       ЧACTHOЙ ПPOИЗBOДHOЙ Q(RO,TAU) ПO TAU )   #
C#     Автор: Катковский Е.А. Москва, 1975 г.     #
C##################################################
      I M P L I C I T  R E A L * 8  ( A - H , O - Z )
      D I M E N S I O N  AK( 36 ) , BK( 14 ) , DK( 7 )
      C O M M O N  /PROPTY/ VAR , TAU , RO , JDT , JDR
      D A T A  AK
     *        / +3.9636085D+0 , -5.1028070D+0
     *        , +2.7407416D+0 , -6.9048554D-1
     *        , +2.9568796D+1 , -2.9142470D+1
     *        , +1.5453061D+1 , -3.9661401D+0
     *        , +5.6323130D+1 , -4.7740374D+1
     *        , +2.6409282D+1 , -6.3972405D+0
     *        , +4.3125840D+0 , -9.2734289D+0
     *        , -7.2546108D-1 , -1.5641040D-1
     *        , -2.6181978D+1 , +6.5326396D+1
     *        , -2.6149751D+1 , +6.8335354D+0
     *        , +1.5597836D+2 , +1.3746153D+2
     *        , +1.2748742D+2 , -1.7731074D+2
     *        , -1.6254622D+1 , -3.3301902D+1
     *        , +7.7779182D+0 , -5.1985860D+0
     *        , +5.9728487D+0 , +1.5518535D+2
     *        , -2.4450042D+2 , +3.4218431D+2
     *        , -3.6093828D+2 , +2.7464632D+2
     *        , -1.3213917D+2 , +2.9492937D+1 /
      D A T A  BK
     *        / +7.1531353D+1 , +1.3041253D+1
     *        , +3.9917570D+2 , +7.9847970D+1
     *        , +6.4581880D+2 , +1.3687317D+2
     *        , +1.0401717D+1 , +6.7874983D+0
     *        , -7.3396848D+2 , -1.3746618D+2
     *        , -2.0988866D+2 , +3.3731180D+2
     *        , -4.1605860D+2 , -4.1030808D+2 /
C############################################
C#     BЫЧИCЛEHИE ФУHKЦИИ Q(RO,TAU)         #
C#     ДЛЯ ЗAДAHHЫX  ЗHAЧEHИЙ RO И TAU      #
C############################################
      TCR = TAU-1.D0/6.47286D-1
      T25 = TAU- 2.5D0
      RX1 = RO-1.D0
      XE = DEXP ( -4.8D0*RO )
      N = 1
      M = 4
      LABL = 0
      DO 1 K = 1,5
      X = 4.D0
      IF ( JDR ) 9 , 12 , 14
 1000 N = N+4
    1 M = N+3
      IF ( JDT ) 1001 , 1001 , 6
 1001 M = M+4
      LABL = 1
      K = 6
      X = 8.D0
      IF ( JDR ) 9 , 12 , 14
 2000 IF ( JDT ) 2001, 4 , 2001
 2001 N = N+8
      M = N+7
      RX1 = RO-0.634D0
      LABL = -1
      K = 7
      X = 8.D0
      IF ( JDR ) 9 , 12 , 14
      E N T R Y  GLBQUT
C########################################
C#     BXOД ДЛЯ ПOBTOPHOГO PACЧETA      #
C#     ФУHKЦИИ Q(RO,TAU)                #
C#     И EE ЧACTHЫX ПPOИЗBOДHЫX ПO TAU  #
C#     ПPИ HEИЗMEHHOM ЗHAЧEHИИ RO       #
C########################################
      T25 = TAU-2.5D0
      TCR = TAU-1.D0/6.47286D-1
      IF ( JDT ) 2 , 4 , 6
      E N T R Y  GLBQ1T
C########################################
C#     BXOД ДЛЯ ПOBTOPHOГO PACЧETA      #
C#     ФУHKЦИИ Q(RO,TAU)                #
C#     ПPИ HEИЗMEHHЫX RO И TAU          #
C########################################
   2  VAR = ( ( ( ( ( DK( 1 )*T25
     *      +DK( 2 ) )*T25+DK( 3 ) )*T25
     *      +DK( 4 ) )*T25+DK( 5 ) )*T25
     *      +DK( 6 ) )*TCR+DK( 7 )
      R E T U R N
      E N T R Y  GLBQ2T
C########################################
C#     BXOД ДЛЯ ПOBTOPHOГO PACЧETA      #
C#     ПEPBOЙ ЧACTHOЙ ПPOИЗBOДHOЙ OT    #
C#     Q(RO,TAU) ПO TAU                 #
C#     ПPИ HEИЗMEHHЫX RO И TAU          #
C########################################
    4 X = TCR+T25
      VAR = ( ( ( ( ( ( 4.D0*TCR+X )*DK( 1 ) )*T25
     *      +( 3.D0*TCR+X )*DK( 2 ) )*T25
     *      +( TCR+TCR+X )*DK( 3 ) )*T25
     *      +( TCR+X )*DK( 4 ) )*T25
     *      +X*DK( 5 ) )+DK( 6 )
      R E T U R N
      E N T R Y  GLBQ3T
C########################################
C#     BXOД ДЛЯ ПOBTOPHOГO PACЧETA      #
C#     BTOPOЙ ЧACTHOЙ ПPOИЗBOДHOЙ OT    #
C#     Q(RO,TAU) ПO TAU                 #
C#     ПPИ HEИЗMEHHЫX RO И TAU          #
C########################################
    6 X = T25+T25+TCR
      VAR = ( ( ( ( 3.D0*TCR+X )*5.D0*DK( 1 ) )*T25
     *      +( TCR+TCR+X )*4.D0*DK( 2 ) )*T25
     *      +( TCR+X )*3.D0*DK( 3 ) )*T25
     *      +X*( DK( 4 )+DK( 4 ) )
     *      +DK( 5 )+DK( 5 )
      R E T U R N
    9 BX = AK( N )
      JM = N+1
      DO 10 J = JM,M
   10 BX = BX*RX1+AK( J )
      BJ = BK( 2*K-1 )*RO+BK( 2*K )
   11 BJ = BJ*XE+BX
      DK( K ) = BJ
      IF ( LABL )  2 , 1000 , 2000
   12 JM = M-1
      BX = 0.D0
      DO 13 J = N,JM
      X = X-1.D0
   13 BX = BX*RX1+X*AK( J )
      BJ = ( BK( 2*K-1 )*RO+BK( 2*K ) )*( -4.8D0 )+BK( 2*K-1 )
      GO TO 11
   14 JM = M-2
      BX = 0.D0
      DO 15 J = N,JM
      X = X-1.D0
   15 BX = BX*RX1+( X*X-X )*AK( J )
      BJ = ( BK( 2*K-1 )*RO+BK( 2*K ) )*23.04D0
     *      -9.6D0*BK( 2*K-1 )
      GO TO 11
      E N D

 
Мой сын сказал мне что я уже отстал от жизни и ".. Фортран - полный отстой", а он легко ускорит это в 2 раза на С.  Он сделал:

Код:
 /*********************************************************************/
/*                                                                   */
/*                   GLBQRT.C   October,2th,1994                     */
/*                           Version 1.10                            */
/*                         Katkovsky Sergei                          */
/*                                                                   */
/*********************************************************************/
 
 
/*********************************************************************/
/*                                                                   */
/*           Подпрограмма для расчета функции Q(RO,TAU)              */
/*           и ее частных производных по RO и TAU.                   */
/*           RO=R/1000;TAU00/T;                                   */
/*           R-плотность , Кг/Куб.М;T-Температура , Град.К           */
/*           JDR-уменьшенный на 1 порядок частной                    */
/*           производной Q(RO,TAU) по RO                             */
/*           JDT-уменьшенный на 1 порядок частной                    */
/*           производной Q(RO,TAU) по TAU                            */
/*                                                                   */
/*********************************************************************/
 
#pragma optimize("acegltz",on)
#pragma loop_opt(on)
#pragma check_stack(off)
#pragma check_pointer(off)
#include"prop.h"
#include<math.h>
#include<stdio.h>
#pragma intrinsic(exp)
static void _fastcall f9(int,int,int);
static void _fastcall f12(int,int,int,double);
static void _fastcall f14(int,int,int,double);
static const double ak[36]={
      3.9636085E+0 , -5.1028070E+0
    , 2.7407416E+0 , -6.9048554E-1
    , 2.9568796E+1 , -2.9142470E+1
    , 1.5453061E+1 , -3.9661401E+0
    , 5.6323130E+1 , -4.7740374E+1
    , 2.6409282E+1 , -6.3972405E+0
    , 4.3125840E+0 , -9.2734289E+0
    ,-7.2546108E-1 , -1.5641040E-1
    ,-2.6181978E+1 ,  6.5326396E+1
    ,-2.6149751E+1 ,  6.8335354E+0
    , 1.5597836E+2 ,  1.3746153E+2
    , 1.2748742E+2 , -1.7731074E+2
    ,-1.6254622E+1 , -3.3301902E+1
    , 7.7779182E+0 , -5.1985860E+0
    , 5.9728487E+0 ,  1.5518535E+2
    ,-2.4450042E+2 ,  3.4218431E+2
    ,-3.6093828E+2 ,  2.7464632E+2
    ,-1.3213917E+2 ,  2.9492937E+1
    };
static const double bk[14]={
      7.1531353E+1 , 1.3041253E+1
    , 3.9917570E+2 , 7.9847970E+1
    , 6.4581880E+2 , 1.3687317E+2
    , 1.0401717E+1 , 6.7874983E+0
    ,-7.3396848E+2 ,-1.3746618E+2
    ,-2.0988866E+2 , 3.3731180E+2
    ,-4.1605860E+2 ,-4.1030808E+2
    };
static double dk[7],tcr,t25,rx1,xe;
 
/* Вычисление функции Q(RO,TAU) для заданных RO и TAU */
 
void fortran glbQrt()
{
double x;
int n=1,m=4,k;
tcr=propty.tau-1/0.647286;
t25=propty.tau-2.5;
rx1=propty.ro-1;
xe=exp(-4.8*propty.ro);
for(k=1;k<=5;k++){
  x=4;
  if(propty.jdr<0)f9(k,m,n);
  if(!propty.jdr)f12(k,m,n,x);
  if(propty.jdr>0)f14(k,m,n,x);
  n=n+4;m=n+3;
  }
if(propty.jdt>0){glbQ3t();return;}
m=m+4;k=6;x=8;
if(propty.jdr<0)f9(k,m,n);
if(!propty.jdr)f12(k,m,n,x);
if(propty.jdr>0)f14(k,m,n,x);
if(!propty.jdt){glbQ2t();return;}
n=n+8;m=n+7;
rx1=propty.ro-0.634;
k=7;x=8;
if(propty.jdr<0)f9(k,m,n);
if(!propty.jdr)f12(k,m,n,x);
if(propty.jdr>0)f14(k,m,n,x);
glbQ1t();
return;
}
 
/* Функция для повторного расчета функции Q(RO,TAU) и ее */
/* частных производных по TAU при неизменном значении RO */
 
void fortran glbQut()
{
t25=propty.tau-2.5;tcr=propty.tau-1/0.647286;
if(propty.jdt<0)glbQ1t();
if(!propty.jdt)glbQ2t();
if(propty.jdt>0)glbQ3t();
return;
}
 
/* Функция для повторного расчета Q(RO,TAU) при неизменных RO и TAU */
 
void fortran glbQ1t()
{
propty.var=(((((dk[0]*t25+dk[1])*t25
  +dk[2])*t25+dk[3])*t25
  +dk[4])*t25+dk[5])*tcr+dk[6];
return;
}
 
/* Функция для повторного расчета первой частной производной */
/* от Q(RO,TAU) по TAU при неизменных RO и TAU               */
 
void fortran glbQ2t()
{
double x=tcrn;
propty.var=((((((4*tcr+x)*dk[0])*t25
  +(3*tcr+x)*dk[1])*t25+(2*tcr+x)*dk[2])*t25
  +(tcr+x)*dk[3])*t25+x*dk[4])+dk[5];
return;
}
 
/* Функция для повторного расчета второй частной производной */
/* от Q(RO,TAU) по TAU при неизменных RO и TAU               */
 
void fortran glbQ3t()
{
double x=2*(t25К);
propty.var=((((2*tcr+x)*5*dk[0])*t25
  +(tcr+x)*4*dk[1])*t25
  +x*3*dk[2])*t25
  +(x-tcr)*(2*dk[3])
  +2*dk[4];
return;
}
static void _fastcall f9(int k,int m,int n)
{
double bx=ak[n-1],bj;
int j,jm=n+1;
for(j=jm;j<=m;j++)bx=bx*rx1+ak[j-1];
bj=bk[2*k-2]*propty.ro+bk[2*k-1];
bj=bj*xe+bx;
dk[k-1]=bj;
return;
}
static void _fastcall f12(int k,int m,int n,double x)
{
double bx=0,bj;
int j,jm=m-1;
for(j=n;j<=jm;j++){x--;bx=bx*rx1+x*ak[j-1];}
bj=-4.8*(bk[2*k-2]*propty.ro+bk[2*k-1])+bk[2*k-2];
bj=bj*xe+bx;
dk[k-1]=bj;
return;
}
static void _fastcall f14(int k,int m,int n,double x)
{
double bx=0,bj;
int j,jm=m-2;
for(j=n;j<=jm;j++){x--;bx=bx*rx1+(x*x-x)*ak[j-1];}
bj#.04*(bk[2*k-2]*propty.ro+bk[2*k-1])-9.6*bk[2*k-2];
bj=bj*xe+bx;
dk[k-1]=bj;
return;
}  

 
Но видимого ускорения не получилось.
Может быть кто-то скажет почему?
Плохой код на С? Или вообще нет смысла тягаться с Фортраном?

----------
С нами БОГ и Крестная сила!

Всего записей: 234 | Зарегистр. 24-07-2005 | Отправлено: 08:00 03-10-2007
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eugeen
Ускорить что-то расчетное переписав с Фортрана на Си можно лишь в том случае если код на Фортране написан криво, или изменив сам алгоритм, либо можно что-то выиграть за счет компилятора (есть море жутких реализаций Фортрана) а так код написанный на Фортране будет в большинстве случаев работать не медленее. Происходит это хотя бы за счет более простой структуры языка и следовательно более эффективной оптимизации кода. А сын ваш хоть и молодец что попытался, но матчасть знает слабо, не зря Фортран до сих пор остается основным инструментом в научной среде.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 10:31 03-10-2007 | Исправлено: FuzzyLogic, 10:35 03-10-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eugeen
твой сын хитрец...
он уже на уровне кода включил чуть ли не максимальную оптимизацию,  
здесь есть свои "+", но "-" больше -- например, теперь вы привязаны к определённому компилятору (визуальник, афаик?). и вообще, это не оптимизация кода, а использование средств компилятора...
особенно меня умиляют директивы "fortran"...
используй фортран, лучше вряд ли что-нибудь получится...
 

Цитата:
Или вообще нет смысла тягаться с Фортраном?

для расчётов ответ однозначный -- нет...
особенно если фортран-программы уже есть и прошли проверку временем/использованием

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 14:39 03-10-2007 | Исправлено: akaGM, 14:43 03-10-2007
Eugeen



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем!
Хотя прошло больше 30-и лет а реализация (еще с БЭСМ-6!) не устарела и конкурентна с другими, новомодными языками. Интересно что тогда была реализация этой П/П на Ассемблере БЭСМ-6 и ускорение было всего на 5-6%. Видно трансляторы с Фортрана всегда писали грамотные программисты.  
Я помню что для IBM/360/370 оптимизирующий транслятор (FORTRAN H) сам был написан на Фортране!

Всего записей: 234 | Зарегистр. 24-07-2005 | Отправлено: 17:34 03-10-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru