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

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

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dudus
надеюсь, в test.txt первого ! знака нет?

Код:
read(100, *) f

вряд ли можно проще и короче...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 12:47 10-03-2010
Andrew10

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

Цитата:
Подскажите, пожалуйста, что я неправильно делаю - при выводе в FPS4.0 строк с русскими буквами на экране получается какая-то абракадабра, как это исправить?

 
Не знаю, как в FPS4, а в Compaq Fortran-е для того, чтобы русский текст правильно выводился на консоль, он должен быть в исходниках в DOS-кодировке (т.е. кодовая страница 866).

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 16:11 10-03-2010
akaGM

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

Цитата:
на кой ляд плюсы изобретали. Фортран хорош во всем, что касается вычислений. Но писать на нем внешние оболочки по-моему - это некоторое извращение

что-то я не понял что ты хотел сказать, обращаясь ко мне?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 16:35 10-03-2010 | Исправлено: akaGM, 17:12 10-03-2010
StudeAlex

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

 

Цитата:
Vskazka
 
StudeAlex  
 Нет конкретики, о том какая задача и как структурированы вектора. Ежели они заполнены случайным образом, то таки да, Вам ничего не остается делать, как запоминать все. Если же есть другие какие-то условия, то... В любом случае, похоже Ваша задача не програмисткая, а алгоритмическая.  И даже у Кнута Вы ее не найдете. Так что изобретать Вам  
В конце концов задача о коммивояжере, как стояла, так и стоит. И в полной постановке - кто знает, разрешима ли (имеется в виду полиномиальное затраты ресурсов). а Вы похоже что-то такое затеяли разгребать

 
К сожалению выходной файл занимает десятки мегабайт, сортировать массивы таких размеров можно, но гораздо более оптимально удалять одинаковые данные до их записи в выходной файл. Это, как мне представляется, типичная задача фильтрации.
Я разобрался в том что делать, но весь вопрос - как?  
В моем случае удобно использовать стек,  
но у меня нет опыта работы с указателями и стеком.  
Как организовать сравнение текущей записи, состоящей из трех чисел, например, (a x y) с аналогичными записями в стеке?  
Если такой записи нет, то её добавить в стек,  
если есть, то текущую запись отбросить.

Всего записей: 41 | Зарегистр. 08-03-2010 | Отправлено: 17:19 11-03-2010 | Исправлено: StudeAlex, 17:39 11-03-2010
pir0texnik1

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

Код:
 
program Console5
    implicit none
    print *, 'single = ',sin(25.55d0)
    print *, 'double = ',dsin(25.55d0)    
end program Console5
 

 
дает одинаковый результат.
Т.е. sin  - это просто обертка для различных синусов с распознавалкой типа аргумента? Правильно ли я понимаю, что можно спокойной использовать sin, если нас не интересуют накладные расходы на распознавание типа и мы не собираемся это компилировать на разных компиляторах, где sin таки может быть действительно только для real*4, как это написано в хелпе.
 
компилил в CVF 6.5 и в IFC 11.0.72, все без оптимизаций.

Всего записей: 10 | Зарегистр. 06-09-2007 | Отправлено: 20:15 11-03-2010
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik1
 
Правильно. sin - родовое имя для  синусов  для всех типов аргументов.
Распознавание типа аргумента производится на этапе компиляции, поэтому накладных расходов в процессе выполнения не будет.

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 09:38 12-03-2010
KChernov



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

Цитата:
Возник тут маленький такой спор, в чем разница между скажем sin и dsin?  

Это скорее наследие, которое осталось для совместимости.
Сейчас достаточно управлять типом переменных.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 11:58 12-03-2010
plazmon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StudeAlex
Зачем тебе стек???
Существует множество способов решения твой проблемы, какой лучше зависит от задачи.
 
Можно хранить значения троек в массиве и перебирать весь массив на наличие дубликата новой тройки
Преимущества - простота реализации
Недостатки - линейная скорость поиска, размер массива может быть не известен зарание
 
Можно хранить значения троек в связанном списке
Преимущества - не очень сложная реализация, память выделяется динамически (т.е. столько, сколько нужно для задачи, без запаса)
Недостатки - линейное время поиска, большие накладные расхлды для выделения памяти маленькими касками
 
Можно хранить значения троек в сбалансированомдереве
Преимущества - Логарифмическое время поиска, динамическая память.
Недостатки - сложность реализации, большие накладные расходы на выделение памяти
 
Но, как мне кажеться лучше использовать сортировку массивов. Например так:
Имеем два массива A и B большого размера (чтоб гарантированно вмещать все рузультаты). В массиве A хранятся в отсортированном порядка тройки без повторов.
Имеем массив C гораздо меньшего размера. По мере получения результатов сохраняем их в массиве C, После его полного заполнения сортируем с удаленим дубликатов и сливаем массивы A и C в массив B с сохранением сортировки. После этого, меняем местами массивы A и B, а массив C обнуляем.
Для экономии памяти массивы A и/или B можно держать на диске. А вообщето, по нынешним временам десяток мегабайт это не так уж и много

Всего записей: 107 | Зарегистр. 29-05-2007 | Отправлено: 18:15 12-03-2010
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10,KChernov - спасибо!
имно ?sin  все-таки полезнее родовой ф-ции, если dsin передать не real*8 - компилятор выдаст ошибку, для отладки это все же полезнее.

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 18:27 12-03-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не забывайте
A historic fact is that the mathematical functions in Fortran 66 had to have specific (different) names in different precisions, and these explicit names are still the only ones which can be used when a function name is passed as an argument.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 00:23 13-03-2010
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
Это весьма частный случай, но если помогает - почему бы и не использовать.
Только вот учитывая, что размерность типа основного параметра может меняться в настройках проекта (что позволяет простой перекомпиляцией получать на выбор например real*4, real*8 или real*16), такой подход теряет в гибкости (но мб она и не нужна).
Опять же функций, которые изменяют размерность, очень мало, поэтому если везде писать просто real, размерность задавать в проекте и использовать лишь родовые имена - и так везде должна быть правильная размерность.
Да и обычный print сразу покажет несоответствие, а лог для не самых простых проектов не помешает в любом случае.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 09:32 13-03-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а я считаю, что всё надо держать под контролем, чтобы потом не объяснять "программистам", почему они в своих хелловордах так вот, например, не могут сделать:
 
r = 3.14
r = "типа это круто"
 
да и совместимость, в конце концов, никто не отменял...

Код:
 
    implicit none
    print *, 'single = ',sin(25.55d0)
    print *, 'double = ',dsin(25.55d0)
end

кстати, тут небольшая "нечестность" наличествует

Код:
 
    implicit none
    print *, 'single = ',sin(25.55d0)
    print *, 'double = ',dsin(25.55d0)
end

вот так попробуйте
 
а вообще "родовое имя" -- хорошо звучит...
типа де'Син

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 10:41 15-03-2010 | Исправлено: akaGM, 10:46 15-03-2010
vaulin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понадобилось мне, вдруг, реализовать метод наименьших квадратов. Прочитал статейку на window.edu.ru одного толи доктора наук, толи кандидата (Соболев, "решаем несовместные системы"). Решил я его опробовать на простом примере. Взял простую системку x1=2, x2=1, x2=sqrt(2). Ее можно записать в матричной форме:
|1   0|            |    2    |
|0   1|*|x1| =|    1     |
|0   1|  |x2|    |sqrt(2)|  
 
Решил описанным методом, получил ответ х1=2, х2=1+sqrt(2). Вроде всё нормально, но вот в чем дело. По идее, решение методом наименьших квадратов -- это проекция, в данном случае, трехмерного вектора (2,1,sqrt(2)) на плоскость, в которой лежат "базисные трехмерные векторы" (1,0,0) и (0,1,1) (из первой матрицы). И, вроде как, итоговый вектор должен быть выражен в координатах этого базиса. Но если нарисовать данную задачку на бумажке, то вектор, который получается в результате проекции, имеет коотдинаты (2,0) в этом базисе, а в трехмерном пространстве -- (2,0,0). С полученным решением не сходится...
Чего я недопонял?

Всего записей: 80 | Зарегистр. 16-10-2008 | Отправлено: 11:24 15-03-2010
mishaLaz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как соеденить CVF6.6 с Array Visualizer1.6 или интеловским. Программа работает в интерактивном режиме и для  контроля сходимости требуется визуализация поведения некоторых функций.  
До CVF работал на микрософте 5.1 и Графоре. Сейчас из-за объема данных вынужден перейти на CVF и трансляция дает сообщение:
bp_cvf.obj : error LNK2001: unresolved external symbol _AVSTARTWATCH
bp_cvf.obj : error LNK2001: unresolved external symbol _AVNEWVIEWER
bp_cvf.obj : error LNK2001: unresolved external symbol _AVLBOUND
bp_cvf.obj : error LNK2001: unresolved external symbol _AVNAME@16
bp_cvf.obj : error LNK2001: unresolved external symbol _AVVISIBLE
bp_cvf.obj : error LNK2001: unresolved external symbol _AVENDWATCH
bp_cvf.obj : error LNK2001: unresolved external symbol _MINSN@16
bp_cvf.obj : error LNK2001: unresolved external symbol _GRAPHICS
Debug/b_propagation.exe : fatal error LNK1120: 8 unresolved externals
Чего я не подключил?

Всего записей: 2 | Зарегистр. 02-03-2010 | Отправлено: 14:30 15-03-2010
plasmon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vaulin
Решение - проекция вектора b=(2, 1, sqrt(2)) на плоскость образованную векторами e1=(1, 0, 0) и e2=(0, 1, 1)
У меня на бумажке получилось x = 2*e1 + ((1+sqrt(2)/2)*e2
По аналитики получается то же самое:  
1*x1 + 0*x2 = 2
0*x1 + 2*x2 = 1+sqrt(2)
Так что проверяй свое решение и свою бумажку

Всего записей: 12 | Зарегистр. 25-04-2009 | Отправлено: 19:14 15-03-2010
vaulin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
plasmon
хм, странно, ведь
Цитата:
((1+sqrt(2)/2)

явно не
Цитата:
то же самое
, что
Цитата:
1+sqrt(2)
, да и со скобками в
Цитата:
+ ((1+sqrt(2)/2)*e2
тоже не всё понятно, тем не менее спасибо, хотя вопрос для меня пока не решен
 
 
 
 
Добавлено:
plasmon
а в трехмерном пространстве результирующий вектор x, у вас на бумажке, какие имеет координаты?

Всего записей: 80 | Зарегистр. 16-10-2008 | Отправлено: 12:06 16-03-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обновились бенчи на полихедроне
http://www.polyhedron.com/compare0html
 
я офигеваю какую работу проделали абсофты над своим предыдущим тормозом,
теперь они на _всех_ платформах первые...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 15:42 16-03-2010
plasmon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vaulin
Да, со скобочками я лажанулся, должно быть x = 2*e1 + ((1+sqrt(2))/2)*e2
А в трехмерном пространстве вектор x получается легко -
x = 2*e1 + ((1+sqrt(2))/2)*e2 =  2*(1, 0, 0) + ((1+sqrt(2))/2)*(0,1,1)
 
Что бы легче было представлять, плоскость на которую проектируется вектор b перпендикулярна плоскости yOz и пересекает ее по биссектрисе угла yOz.

Всего записей: 12 | Зарегистр. 25-04-2009 | Отправлено: 17:35 16-03-2010
terminat0r



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

Цитата:
теперь они на _всех_ платформах первые

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

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 19:43 16-03-2010
akaGM

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

Цитата:
_почти_ на всех

да, конечно
на всех _представленных_
хотя, Виста32 -- та ещё "платформа"
всё равно неплохо, т.к. предыдущие результаты для Абсофта были ваще полным отстоем...
а для диагностики/отладки надо НАГовский покупать :)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:36 16-03-2010 | Исправлено: akaGM, 20:39 16-03-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