Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.109.151] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Появилась необходимость перегнать старую прогу (1984г.) написанную на фортране на что угодно. необходимости вникать в смысл алгоритма нет, нужно просто перегнать прогу.
Проблема в том, что не знаю я Фортрана. Подскажите пару книг с предметными указателями, а то скачал пару книг. там нет ничего подобного, что затрудняет процесс перекодинга =( если есть знающие Фортран, отпишитесь пжлст. хотелось бы спросить пару вещей по коду. |
Сообщ.
#2
,
|
|
|
Спрашивай. Зачем спрашивать разрешения спросить?
|
Сообщ.
#3
,
|
|
|
Как меня учили в1980г - Фортран изучается за 4 часа теоретических занятий и 4 часа практических занятий. И в чем проблема? (Тем более, если знаете другие языки программирования).
|
Сообщ.
#4
,
|
|
|
SergeyIT
Фортран изучается столько же времени, как и другие языки программирования, не быстрее. Как и для других языков, получается побыстрее, если что-то уже знаешь Lamer#1 Тебе надо узнать самые основы языка, остальное сможешь спросить. Знаю пару переводчиков FORTRAN->С, оба бесплатных, f2c (используется для перевода программ на сайте ВЦ МГУ) и forc (FORTRAN 77). Можешь попробовать в поисковиках |
Сообщ.
#5
,
|
|
|
По-моему, Fortran очень похож на Visual Basic. По крайней мере, мне, в своё время, не составило большого труда мигрировать.
|
Сообщ.
#6
,
|
|
|
Взялся за работу. попытаюсь взять проблему наскоком.
к примеру 001 DIMENSION C[15,15],CI[15,15],FI[14] 002 INTEGER FI[160],US[160],KI,KL,KS вторая строка это массивы интеджеров, а первая строка массивы какого типа? а пока в остальном язык очень похож на простой паскаль, поэтому решил пока на паскаль перекодить, да и работаем в группе, а остальные только паскаль довольно хорошо и знают. и еще такой вопрос: 013 DO I=1,N 014 ..IF(I<I0) 015 ....WRITE(1,140)I 016 140 ....FORMATE('x',I1) 017 ...ELSE 018 ....WRITE(1,141)I 019 141 ....FORMAT('x'I2) 020 ....END 021 ..TEXT(' ') 022 ..ENDI как я понял точки это вложенность. 1. почему FORMATE и FORMAT по разному написали? и что эти команды означают? 2. чем Text от Writez отличается? 3. и примерно это будет выглядить на пасе/дельфе?! думаю если увижу аналогию пойму смысл команд =) |
Сообщ.
#7
,
|
|
|
0. В Фортране существуен неявное описанеи типов: все переменные, имена которых начинаются с I...N - целые, а остальные - REAL*4 (в Паскале - single).
1. Думаю, опечатка (по крайней мере, я такого не знаю). 2. TEXT - первый раз вижу. Это какой-то странный Фортран. 3: for i := 1 to n do begin if i < i0 then begin writeln(f1,'x',i:1); // f1 - файл - тот, что был ранее открыт open(unit=1,file='myfile.txt',form='formatted'), 'x' - вероятно, управляющий символ, назначения не помню end else begin writeln(f1,'x',i:2; // отличается только тем, что вывордится 2 знака вместо 1, для фортрана это важно (в отличие от Паскаля), т.к. в паскале длина записи числа увеличивается, если ее не хватает, а в фортране все число замещается звездочками end; // здесь в фортране явно ошибка: должно быть ENDIF // что таое TEXT - не знаю, возможно, какая-то специфическая консрукция компилятора. По крайней мере, процедуры или функции так не вызываются. end; // а здесь вместо ENDI должно быть ENDDO Да, по поводу FORMAT - это указание, каким образом надо выводить то, что описанов операторе WRITE, при этом в WRITE(N,M) M - это метка оператора FORMAT, а N - номер устройства (файл, консоль, принтер и т.п., причем консоль по умолчанию имеет номер 5, так что 1 должен быть файлом) Вообще же FORMAT допускает столько различных возможностей, что считается самой сложной частью в Фортране. В общем, конструкция на Фортране open(unit = 1, file = 'MyFile.txt', form = 'formatted', status = 'new') write(1,100)i ! выводим переменную i на устройство 1 по формату 100 100 format(1h,i4) ! первый символ управляющий - в данном случае просто пропускается var t : text; // эквивалентна квалификатору 'formatted' ... assign(t,'myfile.txt'); // эквивалентно file= rewrite(t); // сходно с 'new' writeln(i:4); |
Сообщ.
#8
,
|
|
|
Цитата Lamer#1 @ взять проблему наскоком Не советую. (Возможно по граблям ходить придется, если в программе много математики) Лучше найдите описание Фортрана, который используется. Это из опыта - сам когда-то переводил свои программы с Фортрана (FORTRAN-IV, а Ваш похоже более поздний). Примеры: - массивы в разных языках разным способом хранятся в памяти, хотя бы по строкам и столбцам; - циклы даже в одном компиляторе могут по-разному компилиться, в зависимости от опции (то есть имеется опция где проверять переменную цикла в начале цикла или в конце); - вычисляемый IF; - имеются общие блоки - тоже надо понять их особенности; - передача параметров в подпрограммы; - в подпрограммах могут использоваться Entrypoins - тоже надо понять; - и т.д. А FORMAT - не самое сложное - обычно всех его возможностей не используют. |
Сообщ.
#9
,
|
|
|
В общем большую половину сделал.. но при этом пропускал то что не понимал.
Можно пожалуйста конкретнее про структуру 015 ....WRITE(1,140)I 016 140 ....FORMAT('x',I1) Что означают параметры Write, 1 и 140?! после WRITE(1,140) стоит I, его видимо надо записать в файл. И про параметры команды FORMAT. Есть еще кусок кода с Write(1,10)I Format(/,'Номер опыта',13) Возможно в предыдущем куске кода Х это не управляющий символ, а просто текст? |
Сообщ.
#10
,
|
|
|
Lamer#1
За номерным идентификатором закреплен формат "140 ....FORMAT('x',I1)". За номером "1" закреплен ,скорее всего, какой-то файл. Конечным итогом является результат: запись значения переменной "I" в файл "1" форматом "140". Добавлено А вообщем в пару слов и не уложишься описанем инструкции Format. Если есть желание, могу скинуть литературу, где описан стандарт Ф90 вцелом, и инструкция Format в частности. |
Сообщ.
#11
,
|
|
|
NetVir, был бы благодарен. Если можно на mdas@mail.ru.
А то что за формат 140 мне не известно к сожалению =( и в разных FORMAT разные форматы использованы = ( И всё же что такое 'х' ?! всё таки управляющий символ? |
Сообщ.
#12
,
|
|
|
Lamer#1
Вы меня не поняли. За числом 140 закрепляется некоторый формат FORMAT('x',I1). И дабы в последующем не писать строки ввода/вывода типа Write([устройство ввода/вывода], '('x',I1)') [список идентификаторов переменных], достаточно писать Write([устройство вывода], 140) [список идентификаторов переменных]. Т.с. за числом 140 вы закрепили форматированную константу. |
Сообщ.
#13
,
|
|
|
NetVir, терь понял, почитал про форматы. Разобрался чуток с ними. И всё таки так и осталось для меня неизвестным строка
FORMAT('x'I2) Понял что записывается целое число в 2 поля (I2), в что за 'x'? Не означает ли это что, выведется 'x' и что передается в WRITE(...)<переменная>?! |
Сообщ.
#14
,
|
|
|
Lamer#1
Чесно говоря, не могу дать утвердительный ответ на ваш вопрос. Скорее всего, этот "х" указывает на регулирование позиции вывода целого числа. Проверьте почту. Я вам выслал стандарт Ф90. |
Сообщ.
#15
,
|
|
|
NetVir, да я видел, Спасибо. на данный момент качается. Просто в коде встречаются подобные строки
FORMAT(/,'Cтандартное отклонение переменной',I3,': ',E5) поэтому навело меня на мысль что FORMAT('x'I2) сделает Цитата выведется 'x' и что передается в WRITE(...)<переменная>?! |