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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

akaGM

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

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

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


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

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



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

Цитата:
Скорее всего, заморочки с лицензией.

Имхо сейчас проще найти более новый, чем 77, компилятор.
А обычно у народа CVF, который всё это умеет.
Скорее это плохая привычка конкретных преподавателей.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 11:52 05-12-2011
XPEHOMETP

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

Цитата:
А обычно у народа CVF, который всё это умеет.  
Скорее это плохая привычка конкретных преподавателей.

CVF - он совсем не свежеиспеченный. И обычно ломаный. Видал на одном сайте, студент писал: в МГУ (кажись) на всех компах стоит CVF с широко известным ключом, берущимся с варезного сайта. Так что это все стоит до первой настоящей проверки. g95 сейчас уже всяко лучше CVF будет, если не затрагивать специфические примочки программирования под Винду, которые есь в CVF. Даром преподаватели... короче, некогда они в программы курсов забили некий компилятор, и так им до сих пор и пользуются. Не взирая ни на что.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 12:56 05-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да что вы всё о g95?
он давно совсем уже не ГНУ
http://www.g95.org/
последнее изменение датировано летом 2008
а в gfortran последняя сборка от 2011-11-16
 
показательно?

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:58 05-12-2011
bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго дня.  
Есть некоторая процедура, в которую в качестве одного из аргументов (параметр f) передаю функцию. Передаваться будет одна функция из двух: либо func1 либо func2. Действия внутри процедуры зависят от того, какую ф-цию я в неё передал. То-есть необходимо в теле процедуры сделать что-то наподобие сравнения f с func1 (или с func2) и в зависимости от результата сравнения выполнять действия. Не подскажите, как сделать такое сравнение?
 
Естественно, можно создать локальную переменную функционального типа в самой процедуре и в качестве аргумента передавать некоторую переменную целого типа (в моём случае достаточно булевого). Потом, в зависимости от значения этой целой переменной делать либо f=func1 либо f=func2. Только я бы хотел сравнивать функции, если это возможно.
офтоп

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 18:48 05-12-2011
akaGM

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

Цитата:
Естественно, можно создать локальную переменную функционального типа в самой процедуре и в качестве аргумента передавать некоторую переменную целого типа

вообще-то естественно первым делом передавать в процедуру простую переменную со значениями 1 или 2, а уж в зависимости от этого значения что-то там предпринимать...
только
Цитата:
Только я бы хотел сравнивать функции, если это возможно.

причины наверняка очень весомые, да?
 
а если формат этих "func1 либо func2" одинаков и ничего дополнительного не делается, то почему бы вообще на это не забить?
 
subroutine (x, x, z, f)
  integer f
  external f
 
  z = f(x, y)

 
чем такой вариант не устраивает?

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 19:11 05-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
особенно актуально для Punk18, лол
и если кто невидел, есть перекодировщик с gotoшного спагетти в девяностый фортран онлайн
http://www.polyhedron.com/plusfortonline.php
 
bubanoid
Интересно бы услышать о причинах и задаче которые  приводят к такому решению...
 
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 20:07 05-12-2011
bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Откуда у проблемы ноги растут. Сначала в процедуру передавалась только одна функция. Эта процедура использовалась в нескольких программах. Теперь мат. проблема немного усложнилась и в ту же процедуру можно передавать и и другую функцию. Процедуру хочу переделать так, что бы не было необходимости подкручивать программы, её использующие.
 
akaGM

Цитата:
причины наверняка очень весомые, да?  

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

Цитата:
если формат этих "func1 либо func2" одинаков

одинаков

Цитата:
subroutine (x, x, z, f)
  integer f
  external f
 
  z = f(x, y)
 
чем такой вариант не устраивает?
 

Такой вариант не устраивает, так как надо
subroutine (x, y, z, f)
  integer f
  external f
 
  z = f(x, y)
 
  if (z==func1) then  
     делай раз
  else
     делай два
  endif
  ....
end subrotine
Понятно, что   "if (z==func1) then..." не работает.

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 20:18 05-12-2011 | Исправлено: bubanoid, 20:29 05-12-2011
KChernov



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

Цитата:
Есть некоторая процедура, в которую в качестве одного из аргументов (параметр f) передаю функцию. Передаваться будет одна функция из двух: либо func1 либо func2. Действия внутри процедуры зависят от того, какую ф-цию я в неё передал. То-есть необходимо в теле процедуры сделать что-то наподобие сравнения f с func1 (или с func2) и в зависимости от результата сравнения выполнять действия. Не подскажите, как сделать такое сравнение?  

А зачем сравнивать-то?
Если передавать нормальную ссылку на функцию (только вот не помню, с какого диалекта субжа такое появилось), то надо просто выполнить по ней вызов, а выполнится уже то, что надо.
Ну в крайнем случае можно использовать ООП-возможности фортрана (а точнее интерфейсы - они как раз подобное позволяют).
 
А иначе надо просто в функцию передавать номер подфункции и делать по нему switch.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 21:07 05-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid
вот именно, зачем сравнивать?

Код:
  implicit none
 
  external mysin
  external myexp
  real*8 mysin
  real*8 myexp
  call test(1.d0, 0.d0, mysin)
  write(*,*)  
  call test(1.d0, 0.d0, myexp)
end
 
subroutine test(x, y, f)
  implicit none
real*8 x, y
external f
real*8 f
  write(*,*) f(x)
end subroutine
 
real*8 function mysin(x)
  implicit none
  real*8 x
  mysin = dsin(x)
end function
 
real*8 function myexp(x)
  implicit none
  real*8 x
  myexp = dexp(x)
end function

вот уверяю тебя, что в одном случае в test() напечается синус, а в другом экспонента от 1.0 без всякого сравнения...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 21:36 05-12-2011
KChernov



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

Цитата:
вот именно, зачем сравнивать?  

Прикольно, спасибо, всё руки никак не доходили проверить такое
Главное, чтобы оно не было сильно медленнее, чем
Цитата:
в функцию передавать номер подфункции и делать по нему switch


Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 21:57 05-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Вы предлагаете ему требуемые действия с процедуры перенести в сами функции?
bubanoid
Я смутно понимаю что проблема известна в OOП как name binding, и туда относятся виртуальные функции и прочее?
 
Я бы сделал какой то внешний флаг, который всегда доступен с процедуры , и просто взводить этот флаг когда нужны действия в процедуре с func1
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 22:00 05-12-2011 | Исправлено: terminat0r, 22:03 05-12-2011
KChernov



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

Цитата:
Вы предлагаете ему требуемые действия с процедуры перенести в сами функции?

Мы предлагаем отдать это на откуп языку (раз уж он это позволяет, зачем городить свой велосипед?).
 

Цитата:
Я смутно понимаю что проблема известна в OOП как name binding, и туда относятся виртуальные функции и прочее?

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

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 22:10 05-12-2011 | Исправлено: KChernov, 22:10 05-12-2011
akaGM

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

Цитата:
Вы предлагаете ему требуемые действия с процедуры перенести в сами функции?
я не очень понял?
наверняка func1() и func2() разняться своим функционалом (на то они и функции), зачем что-то переносить в процедуру, где они зовутся? это как раз вы предлагаете это делать всякими дополнительными конструкциями и управляющими переменными, я же предлагаю то, что это процедура не должна знать об этих функциях ничего...
а если же я переопределил sin и exp, то только для примера и из-за того, что раньше нельзя было передавать имена встроенных функций в качестве функциональных параметров...
 
мы толком не выяснили что и как ему надо делать и вызывать эти функции, может это полностью надуманная проблема, т.е. проблемы вообще нет...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 23:36 05-12-2011 | Исправлено: akaGM, 23:41 05-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
akaGM
Хорошо, значит три варианта решения проблемы bubanoidа, теперь подождем.
 
Хотя я бы действительно с классами в этом случае не заморачивался. Я их и так только в учебных целях трогаю (когда-то обжегся - элементы производных типов не могут быть отдельно обьявлены в OpenMP private или shared - пришлось все переписывать чтобы распараллелить  

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 00:36 06-12-2011 | Исправлено: terminat0r, 02:08 06-12-2011
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid
Цитата:
так как надо  
чуть подправил твой код:
Код:
subroutine (x, y, z, f)  
  integer f,func1  
  external f,func1  
   
  z = f(x, y)  
 
  if (LOC(f)==LOC(func1)) then  
     делай раз  
  else  
     делай два  
  endif  
  ....  
end subrotine


Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 00:41 06-12-2011
KChernov



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

Цитата:
Хотя я бы действительно с классами в этом случае не заморачивался.

Классы в данной постановке (если мы её правильно поняли) действительно лишние - примера akaGM за глаза.
Я просто не был уверен, что в субже оно вообще есть, а про классы был уверен, вот и подстраховался (а в книжку слазить поленился).

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 00:43 06-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr
четвертый! Может брать лучше стандартный c_loc или c_funloc ?

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 00:58 06-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет! %LOC()
и pointer'ы, pointer'ы...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 01:11 06-12-2011
bubanoid



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

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 02:36 06-12-2011
DarttVeiderr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Только начала работать с фортраном, поставила интеловский компилсятор, программа у меня есть готовая, написанная моим шефом. У него на компьютере она прекрасно работает, а у меня выдает ошибку:
forrtl: severe<166>: Profram Exception-privileged instruction
Stack trace terminated abnormally
 
Даже не представляю что делать...Буду благодарна, если кто поможет

Всего записей: 7 | Зарегистр. 06-12-2011 | Отправлено: 11:43 06-12-2011
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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