Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Tools] Помогите скомпилировать старую программу, ...ошибочки компиляции подправить 
:(
    Опции темы
MetalHeart
Дата 15.5.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Дело для меня очень важноеsmile Раньше я в Паскале програмировал, но только сам для себя. На Fortran написал только одну прогу, но, на мой взгляд довольно сложную. Мне передали код программы и подпрограмм, раньше у них все это работало, а у меня компилируется с ошибками. Опыта не хватает, уже больше недели промучался, решил обратиться к помощи более опытных людей.

Итак, имею такие файлы: 

output.for - сама программа, дальше подрограммы

pinread.for
pureread.for
ABEOS10.for
Initial.for
multifac.for
SETEOS10.for

Логически pinread.for должна выполняться первой, поэтому с нее и начал. Она берет данные из внешнего файла.

Так вот при компиляции возникают такие ошибки:

--------------------Configuration: pinread - Win32 Debug--------------------
Linking...
pinread.obj : error LNK2001: unresolved external symbol _TRIMLEN@8
pinread.obj : error LNK2001: unresolved external symbol _STRINT@20
pinread.obj : error LNK2001: unresolved external symbol _LEFT@8
pinread.obj : error LNK2001: unresolved external symbol _CASEFOLD@8
pinread.obj : error LNK2001: unresolved external symbol _LENCHAR@8
pinread.obj : error LNK2001: unresolved external symbol _SHIFT@12
pinread.obj : error LNK2001: unresolved external symbol _PUTINKOM@8
pinread.obj : error LNK2001: unresolved external symbol _KOM2IV@20
pinread.obj : error LNK2001: unresolved external symbol _KOM2R8V@20
pinread.obj : error LNK2001: unresolved external symbol _STRREAL8@20
dfor.lib(DFORMAIN.OBJ) : error LNK2001: unresolved external symbol _MAIN__
Debug/pinread.exe : fatal error LNK1120: 11 unresolved externals
Error executing link.exe.

pinread.exe - 12 error(s), 0 warning(s)

В чем проблема, куда копать? Может кто-нибудь подсказать?

P.S. Исходный код pinread прикрепил файлом


Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  pinread.for 5,08 Kb
PM MAIL   Вверх
Sartorius
Дата 15.5.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



Компилируется она без ошибок. Это ошибки линковщика. Так и должно быть, ведь ты не указал ему остальные объектники. (Они соответственно из других for-ов получаются). 
PM MAIL ICQ   Вверх
MetalHeart
Дата 15.5.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Ну да, Точно, компилируется, но экзешник не создается и программа не запускается. А как указать ему объектники?

Кстати, для каждой подпрограммы и программы нужно создавать отдельный проект в Fortran? Или все в один проект и вместе компилировать? Если в один, то в какой структуре и как это правильней сделать?
PM MAIL   Вверх
FCM
Дата 16.5.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Файл с основной программой и файлы с подпрограммами включи в один проект. Если подразумевается фортран-проект в рамках какой-либо IDE, то "нажатие кнопки" компоновки (Build) проекта приведет к компиляции всех (нескомпилированных) исходников  +  компоновка(линковка) полученных при компиляции объектников. Можно отдельные файлы проекта компилить по отдельности, а потом компоновать.
( Можно конечно компилить подпрограммы в разных проектах а затем объектные файлы включать в проект с главной программой - но это делается, как правило, если подпрограммы большие и/или над ними работают разные программисты и/или они часто используются в разных проектах. Также можно часто используемые подпрограммы оформить в виде статических или динамических библиотек) 


Это сообщение отредактировал(а) FCM - 16.5.2009, 13:21
PM MAIL   Вверх
MetalHeart
Дата 20.5.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Спасибо за объяснение. Собрал все в один проект, теперь ошибки линковщика пропали.
Сейчас обнаружил ошибки программного кода в файлах output.for и pureread.for.
В output.for 4 ошибки:
output.for(118) : Error: Syntax error, found '.' when expecting one of: <LABEL> <END-OF- 
output.for(135) : Error: Syntax error, found '.' when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM TYPE COMPLEX BYTE CHARACTER ...
output.for(65) : Warning: A jump into a block from outside the block may have occurred.   [9999]
output.for(107) : Warning: A jump into a block from outside the block may have occurred.   [9000]
output.for(120) : Error: An unterminated block exists.
 if(nkomp.eq.2)then
output.for(111) : Error: An unterminated block exists.
 if (find.eq.'H') then
Error executing df.exe.
output.obj - 4 error(s), 3 warning(s)

С незаконченными блоками IF понятно, только интересно куда могли деться их ENDIF? И что за многоточия, что под ними кроется? Или там действительно куска кода не хватает?
А вот с BLOCK BLOCKDATA мне совсем не понятно, я с этим не сталкивался. Нашел кое-что в Бартеньеве, но мало что понял.

И еще в pureread есть ошибки в коде. Но с ними позже, может  с ними станет яснее, когда с output получится разобраться.


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  output.for 6,72 Kb
PM MAIL   Вверх
FCM
Дата 20.5.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Про многоточие спроси у авторов. (на фортране вроде как нет многоточия)
Одного endif, по-видимому, не хватает.
Может так?

Код

     IF (FIND.EQ.'H') THEN
          MODG1=11
          CALL SETEOS10 (NKOMP,1,5,1,11)
          CALL HENRY (NKOMP,NAG)
          IF(NKOMP.EQ.2)THEN
              WRITE(NUG,1049)
              IF(FIND(1:1).EQ.'P') THEN
                  IDX=1
                  IXD=2
                  WRITE(NUG,1050)JKFSTR,YXAUS(1,IDX),JKFSTR
                  WRITE(NUG,1051)JKFSTR
                  WRITE(NUG,1052)JKFSTR
              ELSE
                  IDX=2
                  IXD=1
                  WRITE(NUG,1053)JKFSTR,YXAUS(1,IDX),JKFSTR
                  WRITE(NUG,1051)JKFSTR
                  WRITE(NUG,1054)JKFSTR
              ENDIF
          ENDIF                     
      
          DO 4000 I=1,ICOUNT
                     <тело цикла>
 4000     CONTINUE
 4001     WRITE(POLY,1057)    0., 0. 
          WRITE(POLYAKT,1057) 0., 0. 
          WRITE(NUG,1049)
          ICOUNT=0
      ENDIF


А на самом деле, чтобы надежно ловить подобные и другие опусы нужно иметь для всей программы результаты тестового расчета !!!

Это сообщение отредактировал(а) FCM - 20.5.2009, 17:27
PM MAIL   Вверх
MetalHeart
Дата 22.5.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Вы имеете ввиду тестовый расчет программы, с того времени когда она работала? Ведь сейчас не сделать, т.к. не компилируется.

Ну а вот эта ошибка

Error: Syntax error, found '.' when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM TYPE COMPLEX BYTE CHARACTER ...

о чем говорит? И как от нее избавиться можно?
PM MAIL   Вверх
MetalHeart
Дата 22.5.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



А, все, разобрался -  эта ошибка от этих многоточий. Убрал их, все ушло.
Так, теперь последний файл pureread.for

Тут интересуют вот эти две ошибки и им подобные

C:\pureread.for(61) : Error: This name has already been used as an external function name.   [TM]
     TM(I)=TMJA
------------^
C:\pureread.for(61) : Error: This function, which is specified as the left side of an assignment statement, is invalid.   [TM]
     TM(I)=TMJA


Чаго это он ругается?

И еще вот эти

C:\pureread.for(35) : Error: This label has not been defined as a FORMAT label.   [903]
 IF (NEG.NE.0) READ(NEG,903)  KUERZ(I),TKR(I),PKR(I),
-------------------------------^
C:\pureread.for(35) : Error: Constants and expressions are invalid in read-only I/O lists.   [KUERZ]
 IF (NEG.NE.0) READ(NEG,903)  KUERZ(I),TKR(I),PKR(I),
-------------------------------------^
C:\pureread.for(36) : Error: Constants and expressions are invalid in read-only I/O lists.   [INK]
     >    OMEGA(I),(AM(J,I),J=1,3),(ink(j,i),j=1,8),NAM(I)


Остальные ошибки (неопределенная ссылка, незаконченный блок и опять эти многоточия) вроде понятны.

Файлик прикрепил.



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  pureread.for 2,69 Kb
PM MAIL   Вверх
FCM
Дата 22.5.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Прежде всего, следует иметь ввиду, что программы на старом фортране интенсивно используют  всякие неявно выполняемые вещи, среди которых самую большую неприятность (источник трудно диагностируемых ошибок) представляет  неявное присвоение типов. (В современном фортране рекомендуется отсекать это безобразие инструкцией IMPLICIT NONE) 

Цитата(MetalHeart @  22.5.2009,  16:10 Найти цитируемый пост)
C:\pureread.for(61) : Error: This name has already been used as an external function name.   [TM]
     TM(I)=TMJA
------------^
C:\pureread.for(61) : Error: This function, which is specified as the left side of an assignment statement, is invalid.   [TM]
     TM(I)=TMJA


Массив TM не определен в программе, но поскольку TM неявно присвоен тип REAL*8, то компилятор думает, что TM(I) это функция, но не может найти определение функции  с таким именем.
Еще не определены массивы INK, DHM.
Надо до исполняемых инструкций вставить что-нибудь типа

REAL*4    DHM(NKOMP), TM(NKOMP)
INTEGER  INK(MK,NKOMP)

(размеры  и типы массивов я выбрал исходя из контекста - перепроверь)





Это сообщение отредактировал(а) FCM - 23.5.2009, 12:04
PM MAIL   Вверх
FCM
Дата 22.5.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Цитата(MetalHeart @  22.5.2009,  16:10 Найти цитируемый пост)
C:\pureread.for(35) : Error: This label has not been defined as a FORMAT label.   [903]
 IF (NEG.NE.0) READ(NEG,903)  KUERZ(I),TKR(I),PKR(I),


Под меткой 903 должен быть определен формат считывания инструкцией FORMAT.
Но таковой в исходнике нет. В приципе можно попробовать в READ вместо 903 указать * .


Цитата(MetalHeart @  22.5.2009,  16:10 Найти цитируемый пост)
C:\pureread.for(35) : Error: Constants and expressions are invalid in read-only I/O lists.   [KUERZ]
 IF (NEG.NE.0) READ(NEG,903)  KUERZ(I),TKR(I),PKR(I),
-------------------------------------^
C:\pureread.for(36) : Error: Constants and expressions are invalid in read-only I/O lists.   [INK]
     >    OMEGA(I),(AM(J,I),J=1,3),(ink(j,i),j=1,8),NAM(I)


Наверное потому, что
1) KUERZ является параметром процедуры, а тут вдруг считывается из файла.
2) Явное опрделение INK, предложенное выше, должно устранить эту ошибку.

Кроме того непонятно откуда READ производит считывание. Нужно же предварительно открыть файл, а после считывания закрыть. Возможно, это READ создатели планировали к удалению из программы?

Ну и для цикла  DO 3000 должен быть указана инструкция 
 3000 CONTINUE
причем по -видимому предпоследней (перед END) в подпрограмме . 

Это сообщение отредактировал(а) FCM - 22.5.2009, 19:25
PM MAIL   Вверх
MetalHeart
Дата 25.5.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Спасибо за терепение и направление по пути истинномуsmile Надеюсь все получится. Размеры и типы массивов вроде правильны.

Все сделал, все ошибки ушли, кроме одной с этим KUERZ. Метку 903 в READ я пока зменил на *.

Что касается самого KUERZ - это порядковый номер вещества в базе данных. И по идее (насколько я понимаю) он должен считываться из файла poly.in

Этот файл был в купе со всей программой, прикрепляю его сюда.

Номер вещества должен быть в 4 строке текстового файла (COMP), и в данном случае, это вроде бы среднее число - 16902. Постараюсь еще уточнить.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  poly.in 1,27 Kb
PM MAIL   Вверх
FCM
Дата 25.5.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Нельзя параметр KUERZ, являющийся формальным параметром процедуры, изменять внутри процедуры "левым" образом.
Возможно ,  изначально KUERZ считывался из файла, потом считывание перенесли в другую процедуру, а  KUERZ сделали параметром процедуры, но до ума дело в pureread.for не довели. Чтобы понять это, нужно видеть, где и как вызывается процедура из pureread.for. В выложенных ранее файлах она не вызывается. 



Это сообщение отредактировал(а) FCM - 26.5.2009, 14:01
PM MAIL   Вверх
MetalHeart
Дата 26.5.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Хм... Вероятно в этой подпрограмме (pinread.for)

На всякий случай, все файлы программы + текстовый файл в архиве тут выложу. Может с ними картина яснее будет.




Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Prog.rar 12,16 Kb
PM MAIL   Вверх
FCM
Дата 27.5.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



По-моему подпрограмма purere10 из pureread.for нигде не используется.
Проверь это сам с помощью поиска в каждом из исходников.
Зато там используется много подпрограмм (FILESPLT, TRIMLEN, DDBFILE. FILECON, RUNSTR, IPAS, READINP И ДР.  ) неизвестно откуда.
Возможно они входят в некоторую библиотеку, которая компоновалась вместе с данным проектом.
Либо использовался незнакомый мне компилятор. Известно, какая ОперационнаяСистема и какой компилятор использовался у них?

Также (компилятором) замечено, что размеры некоторых одноименных COMMON-блоков, идентичных по объявленным в них переменным, в разных процедурах различается. По-видимому, имеет место несоответствие типов (например, одна и та же переменная включаемая в один и тот же COMMON-блок в одной процедуре заявлена как REAL*8, а в другой процедуре как REAL*4 ( то же касается INTEGER*4 и INTEGER*2) )

Это сообщение отредактировал(а) FCM - 28.5.2009, 08:41
PM MAIL   Вверх
MetalHeart
Дата 28.5.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Да, в приведенных  (переданных мне) файлах они действительно не вызываются.

Вот  что мне удалось выяснить. Используемые подпрограммы не используются какими-то специфичными библиотеками, а сами по себе являются специфичными подпрограммами. Т.е. тут не одна такая программа, а несколько, которые постоянно модифицируются и служат для разных целей, но в принципе работают одинакого и все используют одни и те же подпрограммы. Я докопался до архива программ и нашел все, что вызываются в программе.
Программа писалась на Digital Fortran 6.1 (наверное там и компилировалась???)
Мне по-видимому передали только модифицированные файлы программы, которые соответствуют другой модели (т.е. которой мне надо пользоваться) вычисления. Поэтому в тех других подпрограммах ошибок не должно быть. Их, по идее, не должно быть и в этих несколких модифицированных файлах которые мне передали (перечислены в первом посте), т.к. эта модифицированная программа работала и с ее помощью была написана диссертация. Может быть случайно кто-то что-то немного наковырял, других версий у меня нету.

Так вот подпрограммы purere10 и pinread вызываются в READINP. 

Цитата

Возможно ,  изначально KUERZ считывался из файла, потом считывание перенесли в другую процедуру, а  KUERZ сделали параметром процедуры, но до ума дело в pureread.for не довели. Чтобы понять это, нужно видеть, где и как вызывается процедура из pureread.for.


Так на данный момент надо выяснить где вызывается процедура использующая параметр KUERZ?Немного запутался в терминологии: процедура, т.е. здесь это подпрограмма purere10?

Прикалываю этот READINP

P.S. Так же нашел эту диссертацию, там есть небольшое описание структуры программы. Попробую дособирать еще несколько подпрограмм, которые там озвучены и собрать их в проекты. А проекты в одну Workspace.

PM MAIL   Вверх
FCM
Дата 28.5.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Цитата(MetalHeart @  28.5.2009,  15:10 Найти цитируемый пост)

Так на данный момент надо выяснить где вызывается процедура использующая параметр KUERZ?Немного запутался в терминологии: процедура, т.е. здесь это подпрограмма purere10?

Прикалываю этот READINP


Да, процедура из файла pureread.for - это подпрограмма purere10. (Процедурой удобно называть обобщенно либо подпрограмму либо функцию). Поскольку ты пишешь, что она вызвается в процедуре READINP, то видимо по исходнику READINP и можно выяснить замысел авторов.
Но процедуру READINP тебе выложить не удалось, так что не могу ее посмотреть.

Цитата(MetalHeart @  28.5.2009,  15:10 Найти цитируемый пост)
Программа писалась на Digital Fortran 6.1 (наверное там и компилировалась???)

Имеются ввиду старые версии Visual Fortran (Digital Visual Fortran 5.X или Compaq Visual Fortran 6.Х) ?

Это сообщение отредактировал(а) FCM - 28.5.2009, 16:53
PM MAIL   Вверх
MetalHeart
Дата 28.5.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Ой и правда..

Вот.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  readinp.for 2,90 Kb
PM MAIL   Вверх
FCM
Дата 28.5.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Как видим  PURERE10 вызывается в READINP

стр 19:  CALL PURERE10 (NKOMP,KUERZ,NEG,NAG,*9998)

стр 46:   CALL PURERE10 (NKOMP,KUERZ,0,NAG,*9998)

Тут надо подумать , каждый вызов предполагает свой режим работы PURERE10, один из которых может включать "проблемное" считывание. 

Это сообщение отредактировал(а) FCM - 28.5.2009, 17:34
PM MAIL   Вверх
MetalHeart
Дата 28.5.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Ну те процедуры, что используются в output все нашел.

А про чтение из неоткрытого файла можно подробнее?
PM MAIL   Вверх
FCM
Дата 28.5.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Я подредактировал предыдущее сообщение  - пока неясно, что делать с чтением в PURERE10

Код

IF (NEG.NE.0) READ(NEG,903)  KUERZ(I),TKR(I),PKR(I),
     >    OMEGA(I),(AM(J,I),J=1,3),(ink(j,i),j=1,8),NAM(I)



Насчет неоткрытого файла я погорячился - он открывается в output.for
Код

OPEN (NEG,FILE=CFILE,STATUS='OLD',ERR=9999,IOSTAT=IOS)


Ну вот проблема со считыванием KUERZ в PURERE10. KUERZ - является параметром процедуры и и возникает проблема при считывании KUERZ из файла, запрограммированное  внутри процедуры.

Это сообщение отредактировал(а) FCM - 28.5.2009, 18:20
PM MAIL   Вверх
FCM
Дата 29.5.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Если раскоментировать строку
DIMENSION KUERZ(NKOMP)
в начале процедуры PURERE10
то компилятор к считыванию KUERZ относится нормально.

Но где определен формат с меткой 903 - это вопрос.


PM MAIL   Вверх
MetalHeart
Дата 29.5.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



О, вот откопал старый файлик. То есть по идее из него должны были делать этот модифицированный. Теперь пытаюсь разобраться, что изменяли..
Там в конце как раз есть 903 строка с определением формата.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  purere10.for 4,03 Kb
PM MAIL   Вверх
FCM
Дата 30.5.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Обрати внимание, что во первой (т.е. которую ты выложил первой) версии, за считывание отвечает код
Код

 DO 3000 I = 1, NKOMP
          IF (NEG.NE.0) 
     >         READ(NEG,903) KUERZ(I),TKR(I),PKR(I),OMEGA(I),
     >                      (AM(J,I),J=1,3),(INK(J,I),J=1,8),NAM(I)
...

а во второй версии
Код

   10 DO 20 I=I1,I2
IF (NEG.NE.0) READ (NEG,903)  KUERZ(I),TKR(I),PKR(I), OMEGA(I),
     >      (AM(J,I),J=1,3),R(I),Q(I),VWIL(I),NAM(I)
...

для второй версии имеется подходящий формат
Код

  903 FORMAT (I5,5X,6F10.0,/,3F10.0,A)
 
где первое число предполагается целым (I5), затем предполагается 5 пробелов (5X), затем 6 вещественных чисел в фиксированном формате (F10.0), перевод строки (/), 3 вещественных числа фикс формата (F10.0), символ или символьная строка (A).

Т.е. видим, чтоr код считывание отличается и формат должен соответствующим образом отличаться.
Но в конечном счете некоторые детали формата более менее однозначно можно установить по реальному содержанию считываемого файла.
Для начала лучше проанализировать считываемый файл для второй версии с известным форматом.
По моему ранее выложенный файл poly.in не соответствует коду считывания ни в первом, ни во втором случаях - проверь по типам и количеству считываемых элементов. (Может этот файл считывается в другом месте другой поцедурой?)


Это сообщение отредактировал(а) FCM - 30.5.2009, 15:46
PM MAIL   Вверх
MetalHeart
Дата 2.6.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Мда.. задачка. 
poly.in должен считываться в одном из тех файлов, что я привел. Так как это как раз и относится к модификации программы, а все модифицированные файлы мне дали. Может быть в pinread?

Постараюсь пока отыскать соответствующий считываемый файл для pereread.

В коде не могу понять, как он находит файл который нужно считывать? Я делал только когда через оператор OPEN, например 


Код

open (1, file='LLE.in')
read (1,*) n


PM MAIL   Вверх
FCM
Дата 2.6.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



В главной программе (output.for) есть строки
Код

      ...
      NEG = 7
      CFILE = 'PSRK.IN'
      L = RCPAR(1,CFILE)
      CALL FILESPLT (CFILE,EXT)
      IF (TRIMLEN(EXT).LT.1) EXT = 'PIN'
      CALL FILECON (CFILE,EXT)
      PIN = .FALSE.
      IF (EXT.EQ.'PIN') PIN = .TRUE.
      OPEN (NEG,FILE=CFILE,STATUS='OLD',ERR=9999,IOSTAT=IOS)
      ...


Затем NEG (номер устройства ввода/вывода) передается в качестве параметра в READINP а оттуда в PURERE10.
Т.е. файл открывается  в главной программе, а имя файла  определяется  вышеприведенными строками.


Это сообщение отредактировал(а) FCM - 2.6.2009, 19:00
PM MAIL   Вверх
MetalHeart
Дата 3.6.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Аха, понятно. ТО есть все равно где файл открывать. Ну значит, по идее, надо найти файл PSRK.in, что бы понять формат считвания.

Но вот вопрос, где же этот poly.in считывается, непонятно. Может удастся еще что-нить в архивах найти..

Ну, в общем, отпишусь. Благодарю, в любом случаеsmile
PM MAIL   Вверх
MetalHeart
Дата 11.6.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



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

Вобщем, нашел я этот весь проект, заменил там на имеющиеся у меня файлы. Нашел еще библиотеку, которую использует проект и поместил в папку с прогой. Поисправлял ошибки, надеюсь правильно! smile Все компилируется, линкуется. До cчитываемых файлов пока не дошел. Пробую запустить исполняемый файл, но выскакивает

user posted image

Либо, если из Fortran запускаю исходник (F5)

user posted image

О чем это говорит? В чем проблема?




Это сообщение отредактировал(а) MetalHeart - 11.6.2009, 19:38
PM MAIL   Вверх
FCM
Дата 12.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



При диагностике Visual Fortran run-time error указаны процедуры и в них строки, где возникли проблемы:
RQIPIN строка 20
PSRK    строка 98.
Посмотри, что там находится.

PM MAIL   Вверх
MetalHeart
Дата 12.6.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.5.2009

Репутация: нет
Всего: нет



Угу, спасибо. Еще вопрос, общего характера. В фортране строки можно как-то автоматически найти или только самому отсчитывать (98)?smile
PM MAIL   Вверх
FCM
Дата 12.6.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Visual Fortran'ом  ты же пользуешься под Visual Studio, в редакторе которой внизу где-то всегда отображается строка и колонка расположения курсора. Кроме того можно нажать Ctrl+G   и указать строку, на которую хочешь перейти.

По-видимому в 98 строке  PSRK вызывается процедура RQIPIN, в 20-ой строке которой есть проблема

Это сообщение отредактировал(а) FCM - 12.6.2009, 20:03
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.