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

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

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

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


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

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka, спасибо за советы
 
А теперь --- уточнения, возможно, именно эти обстоятельства имеют значение. Код у меня с расширением *.f, почему --- взял за основу исходники NAG (Mark 18), а переделывать код смысла не вижу, да и ошибок бы внес на уже работающий код. Кстати, просто пример из NAG у меня компилировался, но завершался с ошибкой с компилятором gfortran в RHEL 5.5, а вот с Intel Fortran --- заработал (оказалось, просто компилятор староват, или с ошибками был, но он стандартный!, помог разобраться terminat0r). Это к тому, почему код akaGM вызвал у тебя ругательства и к этому
Цитата:
Стандарт 77 еще никто не отменял. До сих пор все, что написано в 77, ДОЛЖНО компилироваться на любом трансляторе
Должно-то он должно, но и ошибок реализации и прочих глюков тоже никто не отменял
 
Я его код сохранил с расширением *.f --- компилятор, естественно, ругается, *.f95 (наверное, компилятор не знает такое расширение, но я попробовал)), тоже не то, но вот с *.f90 его код работает. Это я все к тому, что, может быть, расширение (и ограничения соответствующие) *.f вызывают все мои проблемы?

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 08:17 20-11-2010 | Исправлено: TeXpert, 08:24 20-11-2010
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
у меня было с расширением f90. На самом деле это влияет только на манеру записи. В фиксированном формате (*.f *.for) или в свободном (*.f90). И ругается компилятор только на раскомментированную строку.
write(*,*) test(dble,10d0)

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 08:27 20-11-2010
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka
Цитата:
На самом деле это влияет только на манеру записи
Это понятно
 
Пардон, насчет кода --- я проверял именно твой код). Ща проверю код akaGM
 
Добавлено:
Вот с кодом akaGM, с раскомментированной строкой:
Код:
 error #6551: This intrinsic procedure cannot be passed as an actual argument.   [DBLE]
       write (*,*) test(dble, 10.d0)


----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 08:34 20-11-2010
Lapochka ili Chai



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

Цитата:
Корнеев В.Д.     Параллельное программирование в MPI  
Там в седьмой главе об этом, в частности, написано. 7.4 - использование производных типов данных  
 

Посмотрел, очень интересно, но там, к сожалению, изложение идёт не на FORTRAN'е, а на языке С.
Возможно, там есть что-то общее (т.е. в MPI+FORTRAN и MPI+C), может, даже много общего, но вот первая проблема -- синтаксис уже сразу совершенно другой...  
 
Т.е. просто так не возьмёшь за образец.
 
Ёлки зелёные! как бы их (примеры из книги) так конвертировать, чтобы с C не разбираться?
Не хочется лезть во все эти указатели-ссылки-пойнтеры.
 
На FORTRAN'e-то MPI обходится без указателей-ссылок-пойнтеров. По крайней мере, мне они пока что не были нужны для MPI. Было бы странно, если бы посреди всеобщего счастья вдруг появились указатели-ссылки и всё испортили.

Всего записей: 847 | Зарегистр. 27-11-2003 | Отправлено: 18:57 20-11-2010
Vskazka

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

Цитата:
изложение идёт не на FORTRAN'е, а на языке С.  

Изложение действительно ведется  на примере  C. Но это только для понимания того, что делается. Каждая сишная функция имеет аналог на языке фортран. И соответственно все переписывается с С на фортран.  

Цитата:
 так конвертировать, чтобы с C не разбираться?
Не хочется лезть во все эти указатели-ссылки-пойнтеры.  

Вообще-то там С простой, не плюсы. Так что, в принципе, его можно конвертировать в фортрановский код с помощью программы C2F.
Но лучше, изучите заодно С. Там, уверяю, нет ничего сложного. Пару дней почитаете - и все. Для целей переписать - больше не надо. Простой С мало отличается по конструкциям от фортрана. Ссылки оно, конечно, несколько необычно - но ничего страшного.  Есть объекты и есть адреса где эти объекты лежат. Собственно и все. В фортране это тоже так, но запрятано и в 77 не было допуска к адресам. Все отдавалось на откуп системе. А насчет ссылок - так не партесь - в фортране все и так передается по ссылке, де факто. Просто не пишется это.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 19:40 20-11-2010 | Исправлено: Vskazka, 19:44 20-11-2010
GennadyN

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
Еще один дурацкий вопрос: как, используя ваткомовский фортран, собрать свою dll-ку? Нет ли _простого_ (и работающего примера кода? Я уже перепробовал несколько найденных в разных местах примеров - ни один не заработал, включая два приложенных к ваткому.
Для примера, код из книги Бартеньева "Фортран для профессионалов"
      function primer1(x,t)
       !ms$attributes dllexport :: primer1
       !ms$attributes alias:'primer1' :: primer1
       external primer1
       real*8 primer1,x,t
       primer1=x+t
      end
при попытке скомпилировать его как dll выдал
cd C:\f
wmake -f C:\f\xprt.mk -h -e
wlink name xprt d all sys nt_dll op m op maxe=25 op q op symf @xprt.lk1
wlib -q -n -b xprt.lib +xprt.dll
Error! No exports in 'xprt.dll'
Error(E42): Last command making (C:\f\xprt.dll) returned a bad status
Error(E02): Make execution terminated
Execution complete
Что я делаю не так? где можно почитать?

Всего записей: 6 | Зарегистр. 03-10-2010 | Отправлено: 14:41 21-11-2010
galina23

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
изучаем фортран 1 месяц дали программу разложить натуральное чилсло n на простые множители что то не получается помогите начало хотя бы

Всего записей: 3 | Зарегистр. 21-11-2010 | Отправлено: 18:26 21-11-2010
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
galina23
Какого хоть порядка это число n? И под какой стандарт фортрана ориентироваться? В смысле, найденные множители удобней всего, наверно, сохранять по-одному в массив, так вот, этот массив можно ли делать динамическим? И еще пунктик непонятный. Мы откуда-то должны брать последовательность простых чисел, чтобы их поочередно испытывать в качестве очередного множителя. Откуда их брать? Можно тупо забить в массив известную последовательность простых чисел, можно поизвращаться и вычислять их по мере надобности ("решето Эратосфена").

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 23:30 21-11-2010
Lapochka ili Chai



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

Всего записей: 847 | Зарегистр. 27-11-2003 | Отправлено: 05:08 22-11-2010
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
galina23
Простейший вариант:
Делаем цикл (по i например) от 2 до целой части от корня из n.
На каждой итерации цикла проверяем, делится ли n на i нацело.
Если не делится - едем дальше, если делится - печатаем очередной делитель и новый n=n/i и запускаем внутренний цикл, пока новый n не перестанет нацело делиться на i. Как только перестанет - тоже едем дольше.
В результате по завершению программы будет выдан список всех простых делителей исходного числа.
Если никогда не делится - значит n - само простое.
 
Добавлено:
Lapochka ili Chai

Цитата:
А то ведь начинаешь одну решать, а тут десять других на руках-ногах повисают.  

Это всё естественно в начале - слишком много нового.
 

Цитата:
Ведь альтернатива этому какая -- при слишком старательном подходе каждый вопрос порождает ещё несколько вопросов и так по рекурсии, получается дикое фрактальное дерево, информационный взрыв. Избежать этого можно только добавлением некоторой доли лени.

Гораздо эффективнее в начале немного поднапрячься и разобраться с основами, зато потом - никаких взрывов и всё просто и понятно

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 10:00 22-11-2010 | Исправлено: KChernov, 01:46 24-11-2010
XPEHOMETP

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

Цитата:
как, используя ваткомовский фортран, собрать свою dll-ку?

Честно говоря, этот компилятор фортрана я не осилил! При попытке установить пришел в полный ужас. По умолчанию он ставится в корневик диска С, а у меня там места мало было, поставил на D. Ни фига не работает - везде прописаны пути установки в корневик С, и программа установки не проверяет, куда все это реально поставили. Ну, я не троглодит полный, где надо, все поменял. Дальше - чище: программы, предлагаемые в качестве образца, не компилируются! Я имею в виду некий проектик под винду, который должен давать трехмерное изображение интерьера... Справки хуже я в жизни не видел! Ну, все в стиле Винды 3.11 - куча мелких файликов с одним корневым, в качестве оглавления. Это можно пережить, у Compaq Visual Fortran справка в том же духе. Но она хоть вполне вменяемая, а тут... Некоторые файлики в справке есть, но из корневика не вызываются, ссылка на их содержание не активна. Особенности компилятора (точнее, диалекта фортрана) ни фига не объяснены. Типа, у нас просто обычный фортран-77, и для него прямо-таки в порядке вещей и динамические массивы, и использование директивы Pragma... Я понимаю, что некогда, когда это все вводилось как расширения стандарта Ф-77, стандартных образцов для этого не было, каждый изощрялся как хотел. Но уж теперь, можно хотя бы объяснить, что и как именно не соответствует стандарту? По-моему, переход в Open Source не пошел этому компилятору на пользу. Конкретнее, его пользователям - точно.
 
Так что... Нельзя ли было взять для изготовления dll что-то другое? Наверно, вышло бы сразу, мне так кажется...
 
Добавлено:
KChernov

Цитата:
Простейший вариант:  
Делаем цикл (по i например) от 2 до целой части от корня из n.  
На каждой итерации цикла проверяем, делится ли n на i нацело.  
Если не делится - едем дальше, если делится - печатаем очередной делитель и новый n=n/i и запускаем внутренний цикл, пока новый n не перестанет нацело делиться на i. Как только перестанет - тоже едем дольше.  
В результате по завершению программы будет выдан список всех простых делителей исходного числа.

Ваш алгоритм не исключает проверку в качестве множителей чисел, которые не являются простыми. А они такую проверку могут пройти! И попасть в число обнаруженных простых множителей. Что не хорошо. Хотя рациональное зерно в этом есть: наверно, проще найти вообще все делители числа (отсеивая изначально все четные числа, кроме 2), а потом уже среди них "решетом Эратосфена" отсеивая числа вроде 9, 21 и т.п., которые не являются простыми.
 
ЗЫ: Да, в условии задачи не сказано точно, как именно должны быть представлены эти простые делители. В виде некоего множества, позволяющего при перемножении воссоздать исходное число, или просто их надо указать по порядку. Разница существенна. Например, число делится на 8, т.е. на 2 в 3-й степени. Надо ли указывать все три двойки в качестве множителей, или достаточно одной, типа, все равно делится? От этого зависит построение условия выхода из цикла перебора (второй вариант просто примитивен).

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 10:18 22-11-2010 | Исправлено: XPEHOMETP, 10:58 22-11-2010
KChernov



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

Цитата:
Ваш алгоритм не исключает проверку в качестве множителей чисел, которые не являются простыми. А они такую проверку могут пройти!

Неправда!
Да, он неоптимален, хотя бы потому, что проверяет и числа, которые уже в принципе не могут быть делителями (но просилось же простейшее решение, а это уже оптимизация).
Но ни одно непростое число никогда по этому алгоритму не выберется, так как ВСЕГДА до него будут перебраны простые делители этого числа (а значит, что их уже в текущем остатке числа n не будет)
 

Цитата:
Да, в условии задачи не сказано точно, как именно должны быть представлены эти простые делители.  

Именно поэтому я и выдал простейший вариант - когда выводятся на печать и только 1 раз.
Но если человек сможет реализовать это на фортране, то и до нужного уровня довести тоже сможет (ну или спросит совета опять).

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 11:51 22-11-2010
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
Все равно не согласен, но это уже решать galina23... Точнее, ее преподавателям, когда она выберет некий вариант и сможет нечто разумное состряпать.. Если сможет, конечно...

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 12:01 22-11-2010
GennadyN

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

Цитата:
Так что... Нельзя ли было взять для изготовления dll что-то другое? Наверно, вышло бы сразу, мне так кажется...  

 
Ладно, попробую другой. g77 в этом смысле лучше подходит?

Всего записей: 6 | Зарегистр. 03-10-2010 | Отправлено: 12:18 22-11-2010
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ой... Лучше бы g95... Поскольку dll в стандарт Ф77 никак не вписывается, а g77 местами и до стандарта не дотягивает... Хотя пристойный компилятор, это без вопросов!
 
ЗЫ: Да, g95 названия всех подпрограмм (в том числе и экспортируемых) в промежуточные файлы пишет мелкими буквами, и иначе никак. Так что PROGRAMM1 или Programm1 не прокатят, пройдет только programm1!

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 14:12 22-11-2010 | Исправлено: XPEHOMETP, 14:16 22-11-2010
akaGM

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

Цитата:
А без него нельзя?

я всё-таки не очень понимаю, что у тебя работает неправильно?
Код:
 
       write (*,*) dsin(3.14d0)
       write (*,*) dsin(dble(3))
понятно ведь, что здесь будут разные результаты?

Код:
 
       i = 3
       write (*,*) dsin(3.0d0)
       write (*,*) dsin(dble(3))
       write (*,*) dsin(dble(i))

а здесь одинаковые...
 
Igorr

Цитата:
Еще раз, третий: Где можно ознакомится

в любом учебнике по фортрану в разделах "передача аргументов в п/п", "функции как параметры"

Цитата:
Вряд ли тебе судить о моих пониманиях.

да упаси господи...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 15:29 22-11-2010 | Исправлено: akaGM, 15:33 22-11-2010
XPEHOMETP

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

Цитата:
Но ни одно непростое число никогда по этому алгоритму не выберется, так как ВСЕГДА до него будут перебраны простые делители этого числа (а значит, что их уже в текущем остатке числа n не будет)  

Огласите алгоритм, пожалуйста! Ибо иначе, типа, есть исходное число, едимое и неделимое, заданное в условии... И взятое для проверки каждый раз в исходном виде... Вы хотите сказать, что его нужно делить на каждый вновь найденный делитель? Да, Вы, похоже, правы... Логично. Тем более, алгоритм в студию!

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 15:46 22-11-2010
KChernov



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

Цитата:
Огласите алгоритм, пожалуйста!

А чем не устраивает то, что я уже написал?
Имхо там всё есть.
Если есть вопросы по нему - отвечу.
Но разжёвывать тривиальный и очевидный алгоритм смысла не вижу.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 17:12 22-11-2010 | Исправлено: KChernov, 17:16 22-11-2010
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
Не так уж в нем все тривиально... Хотя, дальнейшее обсуждение без участия galina23, действительно, уже давно пора прекратить. Пускай уж человек, затеявший эту дискуссию, внесет необходимые пояснения. Без них, по данному поводу буду впредь молчать как рыба.
 
ЗЫ: Таки Ваш вариант мне нравится все больше, при условии внесения необходимых изменений... Но пока молчу...

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 17:30 22-11-2010 | Исправлено: XPEHOMETP, 17:44 22-11-2010
KChernov



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

Цитата:
Не так уж в нем все тривиально...

Там есть подводные камни (типа проверки гарантированно ненужных вариантов) - но это издержки простоты, которые легко устраняются, но простоту однако ухудшают (например понадобится выделять проверку на простоту в функцию/дублировать код/параметризовывать цикл), а на результат (в виде выводимых чисел) не влияют никак (увеличившееся время работы современные и не очень компы не заметят).
Но если его реализовать 1в1 по моему описанию - работать будет - гарантирую.
 

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

Готов обсудить, но пока не понимаю, о чём речь.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 18:32 22-11-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 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