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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
и отключать графические смайлики при размещении фортран-кода

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Дык, не берется он аналитически...
А где скачать-то MathCode F90?

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 13:32 26-04-2008
akaGM

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

Цитата:
Дык, не берется он аналитически...

шутка...
давно б сам написал... или в сорсы своей любимой imsl'а влез...

Цитата:
А где скачать-то MathCode F90?

купить...
триалка здесь...
найдёшь даром -- скажешь...
 
встречный вопрос:
а Wavelet Explorer'a нет случайно?

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 13:43 26-04-2008 | Исправлено: akaGM, 14:25 26-04-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сбыча мечт...
IF v10.1.21
 
наконец-то начал корректно компилировать программу, об ошибке в кот. мы им писали ещё в v7.0 или 8.0 (DATA блок ~3MB)
я в восхищении, шеф в восхищении, все в восхищении...
 
всем юзать!
 

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 16:15 01-05-2008
Dimoniya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что такое IF v10.1.21 и где его взять (скачать)?

Всего записей: 4 | Зарегистр. 21-04-2008 | Отправлено: 14:05 05-05-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimoniya
это Intel Fortran compiler соответствующей версии...
инфа и триалы  
здесь
варез -- в варезе и среди трекеров...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 19:47 05-05-2008
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimoniya, IF - это Intel(R) Visual Fortran Compiler for Windows, триал можно взять на сайте Intel, а не триал и подробности о компиляторе - см. http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=4530

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 19:52 05-05-2008
Dimoniya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ответы .
 
В программировании я новичок.
 
у меня стоит DIGITAL Visual Fortran v.6 - там есть IMSL, компилятор ... - математическую библиотеку в программах я использую, готовое приложение в ехе формате получаю...
фортран мне нужен только для расчетов - всякие виндузовские красивости (пока во всяком случае) мне не нужны
 
И меня интересуют следующие вопросы:
 
нужно ли мне ставить Intel(R) Visual Fortran Compiler for Windows?
что мне даст установка этого компилятора?

Всего записей: 4 | Зарегистр. 21-04-2008 | Отправлено: 10:31 06-05-2008
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интеловский компилятор - это развитие компилятора от Диджитал - Компак, поддержка новых процессоров, лучше оптимизация. Что даст установка этого компилятора - это уже другой вопрос. Если и со старым компилятором все компилируется и нормально работает, да и самому им пользоваться удобно, может, пока нет смысла на что-то другое переходить?  

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 14:51 06-05-2008
pir0texnik2



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

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 13:59 13-05-2008
Spartach01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите,пожалуйста.У меня прога работает правильно все,и все действия делаются в подпрограмме,но результат надо вынести в основной программе.
Мне нужно,чтобы прога считала количество элементов матрицы,которые находятся в промежутке от 0 до (i*j)(у меня это с).Нужно подсчитать кол-во и вывести индексы этих элементов.Она выводит правильно,но мне надо чтоб выводила в основной программе.Препод сказал,ввести дополнительные массивы,в которые заносит элементы строк и столбца массивов,но не сказал как.Я пробую,никак не получается.Помогите пожалуйста,сам не смогу(((
        Program lab6
    implicit none
    real , allocatable ::A(:,
    integer i,j,m,n,c,p
    print *,'Vvedite kol-vo strok'
    read (*,*) m
    write(*,*) 'Vvedite kol-vo stolbcov'
    read(*,*) n
    write(*,*) 'Vvedite matricu'
    allocate (A(m,n))
    do i=1,m
       do j=1,n
         read (*,*) a(i,j)
         write(*,2) i,j,a(i,j)
2         format('a('I3,I3,')='f10.4)
       end do
    end do
    do i=1,m
       write (*,*)(a(i,j),j=1,n)
    end do
    call sm(a,m,n,c,p)
    end
 
 
 
       
    subroutine sm(a,m,n,c,p)  
      implicit none  
      integer m,i,j,n,c,p
    real A(m,n)
    p=0
      c=m*n
    write (*,*) 'c=',c
    do i=1,m
    do j=1,n
      if ((A(i,j)>=0).And.(A(i,j)<=c))    p=p+1
    end do
    end do
    write (*,*) 'Naidennoe kol-vo',p
    do i=1,m
    do j=1,n
      if ((A(i,j)>=0).And.(A(i,j)<=c)) then
    write(*,2) i,j,a(i,j)
2   format('a('I3,I3,')='f10.4)   
    end if
    end do
    end do
    return
    end    
 

Всего записей: 12 | Зарегистр. 27-03-2008 | Отправлено: 18:20 13-05-2008 | Исправлено: Spartach01, 19:26 13-05-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spartach01
ты можешь чётко объяснить чтО тебе нужно сделать? прям точную формулировку как тебе её задавали...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 20:04 13-05-2008
Ingve



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть следующая задача, написать скелет программы, которая будет коректно отрабатывать параметры командной строки. в моем случае это будут строки типа:
 
program.exe -i 1 -T -170 [и другие параметры]
 
параметр "-i [число]" указывает на тип сетки КЭ, а для разных сеток у меня строится разная диаграмма сигма-эпсилон. разбор параметров такого типа реализуется следующим кодом
 
 

Код:
 
    integer (4)                     :: n_points                              ! кол-во элементов массива деформаций
    integer (4)                     :: count                                   ! кол-во параметов
    integer (4)                     :: len_1, len_2                         ! длинна параметров символах
    character (150)              :: string_1, string_2                  ! переменные для строк
    real (8), dimension(:)     :: e_1(10), e_2(15), e_3(14)     ! массив деформаций который мы задаем сами, инициализация в данном примере опущена
    real (8), allocatable        :: e(:)                                     ! тот массив деформаций, в который мы поместим нужный нам из трех представленных выше
 
!   получаем количество аргументов  
    count = command_argument_count()
 
!   идет прогон по всем аргументам        
    do i=0,count
!       этой подпрограммой получаем для і-того аргумента его длинну(len_1) и саму строку (string_1)
        call get_command_argument(i, string_1, len_1)
        if (string_1(2:len_1) == 'i') then                              ! начинаем разбор со 2 символа, так так первый у нас "-"
            call get_command_argument(i+1,string_2,len_2)  ! если предыдущее условие истина - разбор следующего аргумента
            select case (iachar(string_2(1:1)))                       ! преобразум следующий символ в код ASCII
                case(49)                                                        ! ASCII код "1"
                    n_points = 10
                    allocate(e(n_points))
                    e = e_1
                case(50)                                                        ! ASCII код "2"
                    n_points = 15
                    allocate(e(n_points))
                    e = e_2
                case(51)                                                        ! ASCII код "3"
                    n_points = 14
                    allocate(e(n_points))
                    e = e_3
                case default                                                   ! если не получаем необходимых чисел - вываливаемся из программы с ошибкой  
                    write(*,'("error, pleas input correct number mesh")')
                    stop
            end select
        end if
    end do
 
end program option
 

 
тут конечно не очень красивая реализация сравнения с числом, но ничего лучше чем сравнение с ASCII кодом я придумать не смог :(
 
а вот с параметром "-T -170" все гараздо сложнее. этим параметром я указываю температуру, а в зависимости от тем-ри у меня разные значения напряжения текучести. проблема состоит в том, что "-170" я считываю вышеприведенными подпрограммами как character и в фортрановской библиотеке я не нашел функций преобразования строки в число. конечно можно некрасиво извратиться и сделать функцию разбора симовлов чисел, + и -. или реализовать это через запись в файл с последующим считыванием в формате "In" - но это тоже не красиво и загрязнит код. может кто то уже решил этот вопрос, или хотя бы имеет идеи как его решить?

Всего записей: 156 | Зарегистр. 26-11-2003 | Отправлено: 04:21 14-05-2008 | Исправлено: Ingve, 04:40 14-05-2008
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ingve
Для конвертации чисел и строк в фортране специальных функций нет (во всяком случае вплоть до 90го). Там сие делается примерно так.  
Вариант перевода числа в строку и наоборот
integer i,j
character*4 s
i=5
s=' '
write(s,10) i
read(s,*) j
10 format(i3)
 
 
 
 

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 04:54 14-05-2008 | Исправлено: Vskazka, 04:55 14-05-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ingve
 
используй getarg() иначе хотя бы с теми же нуль-терминатед стрингами замучаешься...
 
-----
а, пардон, проглядел, что ты аналогами пользуешься...
 
ну а для конвертации в число посмотри этот топ в режиме "версия для печати" -- этот вопрос здесь
неоднократно обсуждался...
 
-----
кстати, цикл по кол-ву аргументов дб 1..count
для порядка...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 11:20 14-05-2008 | Исправлено: akaGM, 11:37 14-05-2008
Ingve



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka
 
спасибо, я как то и не подумал, что в качестве объекта операторам write/read можна передавать не только файл но и строку  
 
akaGM
 
я намеренно сдела цикл по conunt с нуля, так как в этом случае коректно отрабатывается процера отсутствия параметов у программы и выводится соответстующая подсказка (нулевым параметром является имя программы)
 

Код:
 
    do i=0,count
        if (count == 0) then
            write(*,'("Invalid arguments. Use -h for help.",/)')
            stop
        end if  
    end do
 

 
хоча я подумал, что наверное есть смысл вынести этот блок с цикла а цикл считать с единицы

Всего записей: 156 | Зарегистр. 26-11-2003 | Отправлено: 12:29 14-05-2008 | Исправлено: Ingve, 12:44 14-05-2008
akaGM

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

Цитата:
я как то и не подумал, что в качестве объекта операторам write/read можна передавать не только файл но и строку

во-во, тут два раза об этом писали/обсуждали, надо было не лениться и читать...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 14:01 14-05-2008
Spartach01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM,задание такое:
Составить программу,для подсчета количечтва элементов прямоугольной матрицы,расположенных в интервале от 0 до (m*n),где m и n- номера строк и столбцов матрицы;предусмотреть печать найденного кол-ва и последовательности индексов таких элементов.Основное действие оформить в виде подпрограммы.Печать результата выполнить в основной программе.
 
 
Ответ,в принципе,должен выглядеть так:
 Vvedite kol-vo strok
2
 Vvedite kol-vo stolbcov
3
 Vvedite matricu
4
a(  1  1)=    4.0000
5
a(  1  2)=    5.0000
6
a(  1  3)=    6.0000
7
a(  2  1)=    7.0000
8
a(  2  2)=    8.0000
9
a(  2  3)=    9.0000
   4.000000       5.000000       6.000000
   7.000000       8.000000       9.000000
 c=           6
 Naidennoe kol-vo           3
a(  1  1)=    4.0000
a(  1  2)=    5.0000
a(  1  3)=    6.0000
 
Мне нужно только сделать печать результата в программе,а не подпрограмме.А для этого нужны новые массивы(мне так сказал препод).Помоги,если сможешь!

Всего записей: 12 | Зарегистр. 27-03-2008 | Отправлено: 17:19 14-05-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spartach01
проверять и всё делать с нуля лень, если ты считаешь, что написал всё верно, тогда
исправь свою программу как-то вот так:
код программы
 
учти -- я даже не компилировал её,  писал прям в окне поста...
идея должна быть ясна...
если что -- извиняй...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 18:18 14-05-2008 | Исправлено: akaGM, 18:20 14-05-2008
Spartach01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да,идея ясна,но к сожалению не работает.Я в принципе похожее пробовал и щас такая же ошибка,при компиляции ошибок нет,но уже вводя данные в программу она выдает ошибку в компиляторе:array bounds exceeded.Не сможешь попробовать исправить,я тоже пробую,но никак((

Всего записей: 12 | Зарегистр. 27-03-2008 | Отправлено: 18:33 14-05-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spartach01
блин! запрети "разрешить смайлики" в своём браузере внизу этого окна галка стоит...
 

Цитата:
но уже вводя данные в программу она выдает ошибку в компиляторе:array bounds exceeded

но пардон, это твой текст и я в нём этот ввод не менял, можешь сравнить...
 
а вот в sm() надо добавить
 
subroutine sm(a,m,n,c,p, a1, i1, j1)  
implicit none  
integer c
 
и потом -- ошибка компилятора или сам экзюк?
 
-----
нашёл ошибку, но не во вводе, а вот здесь:
замени
      allocate (i1(m))
      allocate (j1(n))
на
      allocate (i1(c))
      allocate (j1(c))
 

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 18:46 14-05-2008 | Исправлено: akaGM, 18:58 14-05-2008
Открыть новую тему     Написать ответ в эту тему

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