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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aldangold
неa... это я сегодня непонятливый...
непосимвольно, а строку целиком, аналог readln() ?
 
print *, 'введите строку и нажмите <enter>'
read(*,*) s
write(*,*) ' введёная вами строка --> ' // s
 
так?
 
-----
спрячь паскаль под тег {more} (коды форума)
 

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 16:02 27-06-2009 | Исправлено: akaGM, 16:22 27-06-2009
aldangold

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет не так...
Хорошо попробую по другому объяснить
вот код написанный мной шоб задавалась строка из n символов

Код:
 
character a(255)
integer i
print*,'vedite razmer stroki'
read*,n
s=' '
 print*,'vedite stroky'
 read *, (a(i),i=1,n)
 print*, a
 
 end
 

вот что получается при компиляции

Код:
 
vedite razmer stroki
10
vedite stroky
qwer asdf vsaad vsdf fsdfe dasd
a
a
a
a
qavvfdaaaa <----сама строка получившееся (почему то даже пробелов нет)
 
Press any key to continue
 

видишь какой получается корявый ввод ?
а мне надо чтоб получалось вот так:

Код:
 
vedite razmer stroki
10
vedite stroky
qwer asdf vsaad vsdf fsdfe dasd
 
qwer asdf vsaad vsdf fsdfe dasd <----сама строка получившееся
 
Press any key to continue  
 

А теперь понятно?

Всего записей: 4 | Зарегистр. 27-06-2009 | Отправлено: 08:47 28-06-2009
Alexikit

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aldangold
Если нужно просто ввести с экрана строку с пробелами то вполне достаточно  

Код:
 
character*255 a  
print*,'vedite stroky'  
read(*,'(A)') a  
 print*,  a
 end  
 

или все же нужно что-то другое?

Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 10:39 29-06-2009
AZA_N

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

Код:
 
character str*255
print '(a,\)',' vedite razmer stroki: '  
read *,n  
print '(a,\)',' vedite stroky: '  
read '(a)',str  
print '(a,a,/)', ' vvedennaya stroka: ', str(1:n)
 


Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 19:34 29-06-2009 | Исправлено: AZA_N, 19:34 29-06-2009
akaGM

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

Цитата:
А теперь понятно?

нет...
не вижу разницы в том что ты просишь и что тебе набросали, и каким боком работает длина строки...
ты пробовал запускать-то что тебе советуют?
 
может тебе ещё вот эта проверка нужна?
 
character*256 tmp, S
 
read (*,*) lenS
read(*,*) tmp
S = tmp(1:lenS)
 
на фиг тебе вот это вообще?

Код:
  read s, (a(i),i=1,n)  

это как раз и есть посимвольный ввод, причём _из_ строки, а не с консоли...
 
может ты это имел ввиду?
read (*,*) n, (a(i),i=1,n)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 08:50 01-07-2009 | Исправлено: akaGM, 09:09 01-07-2009
aldangold

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем за помощь, уже разобрался в чем проблема =)

Всего записей: 4 | Зарегистр. 27-06-2009 | Отправлено: 09:49 01-07-2009
sakyamuni

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ищу программу на фортране которая из текста или из бинарного файла делает файл в формате hdf5.

Всего записей: 5 | Зарегистр. 14-05-2009 | Отправлено: 13:12 01-07-2009
kinglear



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

Цитата:
может быть тебе имеет смысл обратить внимание на  т.н. "смешанное программирование"?  
то есть счётный модуль оставить на Фортране, а всю оболочку делать на более приспособленных для этого Visual C / C Builder или Дельфи?  

возвращаюсь к теме на стр. 33-34
появилось время, которое можно потратить на восстановление подзабытого скила программирования)))
в-общем версия, на которой написана программа - FPS4.0  
можно немного поподробнее - как сделать модуль, и как его связать с оболочкой
ps или всё-таки воспользоваться чем-нибудь стандартным - типа Gino или Matfor?

Всего записей: 23 | Зарегистр. 06-03-2008 | Отправлено: 14:20 02-07-2009 | Исправлено: kinglear, 15:08 02-07-2009
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kinglear, перебирайтесь на последней версии IVF - не стоит на мертвом трансляторе новые части к программе дописывать. И вам же кучу всего на 33-34стр. насоветовали, а Вы обещали отписаться, что получилось.
Мне так больше нравиться - отдельно exe для задания и анализа ИД, отдельный - для счета, отдельный - для графической и т.п. обработки. Связь - через текстовые файлы (подстраховаться, в т.ч., чтобы результаты никуда не сгинули из-за того, что свет вырубили после пары часов счета). Над всем этим, если охота, exe, управляющий всем этим. А если неохота - использовать эти части самостоятельно.

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 19:52 02-07-2009 | Исправлено: AZA_N, 19:52 02-07-2009
Igorr

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

Цитата:
возвращаюсь к теме на стр. 33-34

Посмотрите мой пост на стр. 7 о впечатлении от написания GUI на фортране - может поможет определиться.
 
Добавлено:
IMHO по поводу визуализации результатов расчета средствами Compaq Array Visualizer (CAV) и Intel Array Visualizer (IAV):
С точки зрения программиста, я не вижу существенной разницы в использовании CVF и IFV в MSVS: для CVF надо составить текстовый файл с параметрами трансляции и компановки, а для IVF эти параметры надо выбрать в IDE.
НО есть существенная разница в использовании CAV и IAV: "программистски" CAV значительно удобнее, чем IAV - объем кода управления CAV значительно меньше аналогичного кода для IAV. К тому-же, в CAV больше количество доступных параметров.
Если нет специального требования использовать IVF, то при разнообразном графическом выводе я предпочитаю CVF+CAV.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 20:37 02-07-2009 | Исправлено: Igorr, 21:27 02-07-2009
kinglear



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

Цитата:
Посмотрите мой пост на стр. 7 о впечатлении от написания GUI на фортране - может поможет определиться

посмотрел я после краткого мониторинга и сам решил на этом остановится

Цитата:
kinglear, перебирайтесь на последней версии IVF

решил воспользоваться версией 11.1 в сочетании с visual studio
 
заранее извиняюсь за возможно глупые вопросы(программированием не занимался с 2000г, и то занимался более простыми задачами), но  
каким образом создавать именно счетный модуль и как его связывать с gui, допустим на с++?
или скиньте ссылочку где почитать об этом...

Всего записей: 23 | Зарегистр. 06-03-2008 | Отправлено: 06:48 03-07-2009
FuzzyLogic



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

Цитата:
ищу программу на фортране которая из текста или из бинарного файла делает файл в формате hdf5.

Вы вообще представляете что такое HDF-5 и чем он отличается от других? Универсального ничего ессно нет и не будет. А в качестве примера непонятно чем вам примеры на офсайте не угодили.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 08:55 03-07-2009
Alexikit

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

Цитата:
 
в том-то и дело, что единственное, что сохраняется в исходнике - сама модель удара, остальное, для каждого случая перековыривается вручную


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

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

Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 15:52 03-07-2009
Igorr

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

Цитата:
каким образом создавать именно счетный модуль и как его связывать с gui, допустим на с++?  

Здесь во многом "на любителя".
Например, в MSVS cоздаете проект Visual C++ MFC. Добавляете в него расчетные файлы *.f90.
Из файлов C++ создаете exe-файл приложения. Из фортрановских файлов создаете dll-файл(ы) (расчетный модуль).
Для запуска расчетного потока используете "AfxBeginThread" (можно и без него, но с ним удобнее).
Для загрузки/выгрузки dll используете "LoadLibrary"/"FreeLibrary".
Для вызова конкретной подпрограммы/функции из dll используете "GetProcAddress".
В основном - все. Более конкретная (вся необходимая) информация есть в MSDN.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 18:10 03-07-2009
bigspoon

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В период 1979-1981г.г. разработана система тестирования программного обеспечения (Software Testing System, STS). Эта система предназначалась для внутреннего использования в корпорации Texas Instruments, Inc., основанной организацией Advanced Soft¬ware Technology (AST). STS была программным инструментом, который позволял программистам на языке Fortran выполнять перечисление ветвей исходного кода.
 
Кто-нибудь пользовался этой системой тестирования или знает подобные?
 
!    THIS PROGRAM WILL SPLIT A FILE WITH <REP CARDS IN IT TO A DIRECTORY
!    AND LIST THE MEMBER NAMES OF ALL THE FILES CREATED.
 
!    UNIT5 - INPUT (PARM1)
!    UNIT6 - OUTPUT DIRECTORY (PARM2.)
!    UNIT7 -- LIST (PARM3)
 
    IMPLICIT INTEGER*2 (A-Z)
    LOGICAL HEQ,HNE,FIRST,NEWMEM,GETYNO,ASCII
    DIMENSION CARD(80),PATH80(80),PATH40(40),CHARS(4),OLDMEM(4)
    DATA CBB,FIRST,ASCII/2H ,.TRUE.,.FALSE./
    DATA LESSTH,R,E,P/2H< ,2HR ,2HE ,2HP /
 1000    FORMAT(80A1)
    CALL SCIINT(IERR)
 
! С    OPENFL( LUNO,FARM,ACCESS,BKSZ )
 
    CALL OPENFL(5,1,1,80)
    CALL OPENFL(7,3,3,80)
    ASCII=GETYNO(4,IERR)
    CALL BANNER(ASCII)
    CALL GETDIR(PATH80,NDEX,2)
    NDEXM2=NDEX-2
    WRITE(7,5000) (PATH80(I),I=1,NDEXM2)
    WRITE(7,6000)
 5000    FORMAT(' THE OUTPUT DIRECTORY',/,IX,79A1)
 6000    FORMAT(//,' FILE WITHIN OUTPUT DIRECTORY NUMBER    RECORDS')
    NRECS=0
    RECCNT=0
 
!!!! 1    CONTINUE
    DO INDEX I=1,80
    CARD(I)=CBB
    END DO
 
    READ(5,1000,END=100) CARD
    IF(ASCII) CALL EBCDIC(2,CARD,0)
!    С WRITE(10,1000) CARD
    NEWMEM=(CARD(1).EQ.LESSTH.AND.CARD(2).EQ.R.AND.CARD(3).EQ.E.AND.CARD(4).EQ.P)
    !С    WRITE(10,111) CHARS,NDX,LEN
111    FORMAT(' AT 111 '4A2,2X,2I10)
 
    IF(FIRST.AND.(.NOT.NEWMEM))THEN
    WRITE(7,1500)
 
1500    FORMAT(' ERROR: FIRST RECORD IS NOT A <REP CARD')
    CALL ENDFIL(7)
    STOP
    END IF
    IF(NEWMEM)THEN
    NDX=5
    CALL HFIELD(CARD,NDX,CHARS,80,LEN,CODE)
    IF (.NOT.FIRST)    THEN
    CALL ENDFIL(6)
    NRECS=NRECS+RECCNT
    WRITE(7,7000)OLDMEM,RECCNT
7000    FORMAT(10X,4A2,26X,15)
    RECCNT=0
    END IF
    DO INDEX I=1,4
    OLDMEM(I)=CHARS(I)
    END DO
    CALL SETMEM(CHARS,PATH80,NDEX,PATH40,3,6)
    FIRST=.FALSE.
    DO INDEX I=1,80
    CARD(I)=CBB
    END DO
    READ(5,1000,END=100) CARD
    IF(ASCII) CALL EBCDIC(2,CARD,0)
 !С    WRITE(10,1000) CARD
    END IF
    WRITE(6,1000) (CARD(I),I=1,80)
    RECCNT=RECCNT+1
    GO TO 1
100    CALL CLOSEW(5,IERR)
    CALL ENDFIL(6)
    NRECS=NRECS+RECCNT
    WRITE(7,7000)OLDMEM,RECCNT
    WRITE(7,3000) NRECS
3000    FORMAT(//,'THE TOTAL NUMBER OF RECORDS SPLIT WAS:',15)
    CALL ENDFIL(7)
    STOP
 
    SUBROUTINE BANNER (ASCII)
    IMPLICIT INTEGER*2 (A-Z)
    LOGICAL ASCII
    DIMENSION DATI (8) ,NDX(1) ,VAL(2,2)
    DATA NOPTS,VAL/l,2H Y,2H N,2HES,2HO /
    DO INDEX I = l,NOPTS
    NDX(I)=2
    END DO
    IF (ASCII) NDX(1)=1
    CALL DT(DATI)
    WRITE (7,1000) DATI
    WRITE(7,2000)  ( (VAL (NDX (I) , J) , J=l, 2) , 1 = 1 ,NOPTS)
    RETURN
1000               FORMAT ('   SPLIT  UTILITY',/,
&   '   DATE: ' , 4A2, ' ,   TIME:'4A2,
& //,' OPTIONS SELECTED')
    2000      FORMAT (' CONVERT EBCDIC->ASCII= ' , 2A2, /)
    END

Всего записей: 178 | Зарегистр. 24-02-2005 | Отправлено: 13:19 04-07-2009
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kinglear
Где-то вот на тех страницах я писал, как я в частности вызываю и описываю прототип фортрановской ф-ции в борланд билдере. Это на самом деле самое простое.. один раз написал и забыл, а вот как эта длл считает с учетом того, что она вызывается из другой проги вот это - пестня... Берем, скажем, OpenMP и , оказывается, программа совершенно не обязана работать одинаково в консольном варианте и в длл-видном...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 03:41 06-07-2009
akaGM

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

Цитата:
Кто-нибудь пользовался этой системой тестирования или знает подобные?  

ну так и в чём вопрос-то?
что с этим исходником делать?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 17:47 09-07-2009
xMARx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Начинаю знакомиться с  FORTRAN. Имеется программа
 
 
    program ArrayValuedFuncBart
 
    implicit none
     
    real, allocatable :: ap(:)
    real :: a(10) = (/ 1, -1, 2, -2, 3, -3, 4, -4, 5, -5 /)
    real :: b(10) = (/ 2, -1, 3, -2, 4, -3, 4, -4, 5, -5 /)
    integer n /3/
 
    interface
     
      function fap(a, n)
       integer n
       real fap(n)
       real, dimension(:) :: a
      end function fap
       
    end interface
 
 
    allocate(ap(n))
 
    ap = fap(a, n) + fap(b, n) ! Вызов массивоподобной функции fap
    print '(1x, 10f5.1)', ap ! 3.0 5.0 7.0
   
 
    end program ArrayValuedFuncBart
 
 
    function fap(a, n)
    real, allocatable :: ap(:)
    integer  n, k, i
    real  fap(n) ! Результатом функции является массив
    real, dimension(:) :: a ! a - перенимающий форму массив
    fap = 0
    k = 0
    do i = 1, size(a)
     if(a(i) > 0) then
      k = k + 1
      fap(k) = a(i) ! Формирование массива-результата
      if(k == n) exit
     end if
    end do
     
    end function fap
 
При компиляции выдается ошибка  
 
C:\Projects\ArrayValuedFuncBart\ArrayValuedFuncBart\ArrayValuedFuncBart.f90(37): error #8000:  There is a conflict between local interface block and external interface block.   [FAP]
    ap = fap(a, n) + fap(b, n) ! Вызов массивоподобной функции fap
---------^
Хотел бы узнать, где ошибка. Программу взял из книги Бартеньева. В данной книге был тот же пример, но с внутренней функцией. Он компилируется, а этот- нет.

Всего записей: 66 | Зарегистр. 22-06-2009 | Отправлено: 17:33 15-07-2009 | Исправлено: xMARx, 17:35 15-07-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xMARx
вообще говоря и здесь всё должно компилироваться и компилируется (IF 11.1.072 - 74, а у тебя какой?)
а если нужна именно внешняя функа, то сунь fap() в отдельный модуль и юзай его

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 17:59 15-07-2009 | Исправлено: akaGM, 18:06 15-07-2009
xMARx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использую связку microsoft visual studio 2005 + IVF_11.0.074 . Да.. чтот с этими внешними функциями .. какая то мистика.. Хотел написать программу, которая возвращает координаты точки пересечения двух отрезков. Т.е. результат есть не 1 число, а вектор. Уже долго маялся, чтоб заработало- все никак. Внешние функии, возвращающие 1 аргумент, компилируются нормально. С модулями, если честно, еще не разобрался . Но как вариант проверю. Можно было использовать внешнюю процедуру, но чтот захотелось разобраться именно с функциями..

Всего записей: 66 | Зарегистр. 22-06-2009 | Отправлено: 19:32 15-07-2009 | Исправлено: xMARx, 19:34 15-07-2009
Открыть новую тему     Написать ответ в эту тему

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