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

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



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

Цитата:
мы как-то тоже ковырялись и, насколько я помню, удалось обойтись жёстко поставив
 
/QxSSE3 SSE4  

 
 
ifort -O3 -xSSE3
 

Цитата:
 
ceres05
 
Fatal Error: This program was not built to run on the processor in your system.
The allowed processors are: Intel(R) Pentium(R) 4 and compatible Intel processors with Streaming SIMD Extensions 3 (SSE3) instruction support.
 

хотя
http://en.wikipedia.org/wiki/List_of_AMD_Opteron_microprocessors

Цитата:
 
Opteron 800-series "Egypt" (E1 & E6, 90 nm)
    * All models support: MMX, SSE, SSE2, SSE3, Enhanced 3DNow!, NX bit, AMD64
    * All models support up to Registered PC3200 DDR SDRAM
    * All models support up to eight-processor configurations
 

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

Цитата:
Intel(R) Fortran Intel(R) 64 Compiler Professional for applications running on Intel(R) 64, Version 11.1    Build 20091130 Package ID: l_cprof_p_11.1.064

 
надо добавить следующие строчки

Цитата:
 
#intel ifort 11.1 compiler
#  52cfb8:       81 7d f0 47 65 6e 75    cmpl   $0x756e6547,-0x10(%rbp)
#  52cfbf:       75 16                   jne    52cfd7 <__intel_cpu_indicator_init+0x97>
#  52cfc1:       81 7d e8 69 6e 65 49    cmpl   $0x49656e69,-0x18(%rbp)
#  52cfc8:       75 0d                   jne    52cfd7 <__intel_cpu_indicator_init+0x97>
#  52cfca:       81 7d e0 6e 74 65 6c    cmpl   $0x6c65746e,-0x20(%rbp)
#  52cfd1:       75 04                   jne    52cfd7 <__intel_cpu_indicator_init+0x97>
 
  $count+=($unp=~s/817df047656e75/f745f000000000/g);
  $count+=($unp=~s/817de8696e6549/f745e800000000/g);
  $count+=($unp=~s/817de06e74656c/f745e000000000/g);
 

 
Вот результаты по тестированию с моей программой на однотипных процессорах от AMD. Скажем так, очень любопытно получилось.
 
Подробнее...
итого получаем, что gfortran  с полной оптимизацией под AMD  архитектуру ни в чем не уступает, и даже немного выигрывает в intel с полной оптимизацией (такая конфигурация опций не работает без патча).
Конечно в опциях интел компилятора я поставил -fp-model precise, что немного тормозит программу, но это как раз, чтобы отключить читинг интеловцев по сравнению с gfortran.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 12:13 22-04-2010 | Исправлено: terminat0r, 12:53 22-04-2010
pripudra

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дорогие коллеги, прошу помочь в решении глупой проблемы. Создаю банальное окно диалога в QuickWin моде под 64-Intell Vis Fortran, после его завершения внешнее окно программы завиcает напрочь, не реагирует ни на ввод, ни на кнопки меню окна, хотя в других приложениях вывод во внутренние окна идет(как графика так и консоль) и задача считается. Теряется фокус внешнего окна. Кто объяснит в чем дело?  
Выкладываю архивчик (1mb) проекта, может быть кто у себя на 64-разрядной попробует прогнать. На 32-разрядной машине все работает!!! Дайте хоть какие-нить наводки, какова причина. Кто виноват, я, windows(7-я, да еще на маке установленная) или VStudio или Vfortran))  
 
архив здесь http://dump.ru/file/4538502

Всего записей: 3 | Зарегистр. 20-04-2010 | Отправлено: 10:22 23-04-2010
pripudra

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не рискнул проверить мою малюпаську, проверила сама. Вывод: не работает только в среде Windows 7, как на 32х, так и на 64х.  Апаратно не зависит. Так чта скорее всего это баг в виндозе.

Всего записей: 3 | Зарегистр. 20-04-2010 | Отправлено: 19:29 23-04-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
да... некрасиво, недаром интелы от АМД баблом сейчас откидываются
так что же получается, гфортран делает линуксовую версию IF?
и ты теперь фортран-код интела гонишь в асм, ручками правишь, а потом перекомпилируешь?
кстати чем, самим ifort'oм?
 
pripudra

Цитата:
никто не рискнул проверить мою малюпаську

да потому что мало кто использует QuickWin, пусть даже и на "маленьких паськах"...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 13:11 26-04-2010
terminat0r



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

Цитата:
так что же получается, гфортран делает линуксовую версию IF?  

на amd процессоре - да. на intel - нет.
 

Цитата:
и ты теперь фортран-код интела гонишь в асм, ручками правишь, а потом перекомпилируешь?
кстати чем, самим ifort'oм?  

ну почему же, я просто подправил немного перл скрипт, ссылку на который давал раньше.
Вот он, с добавкой для  
ifort Intel(R) 64, Version 11.1    Build 20091130 Package ID: l_cprof_p_11.1.064
 
Подробнее...

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

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
ясно...
нас ничем не победить, я всегда это знал...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 14:56 26-04-2010
oarsman



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачка:
Заданы три одномерных массива разной размерности.Для каждого из массивов вывести на печать повторяющиеся элементы и количество их повторений.
Собственно вот мой код, при котором выводятся ошибки при компиляции.

Цитата:
PROGRAM rusik
    DIMENSION A(5),B(7),C(8)
    READ(*,*)A,B,C
    CALL Povtor(A,5)
    CALL Povtor(B,7)
    CALL Povtor(C,8)
    END
    SUBROUTINE Povtor(R,N)
    DIMENSION R(N)
    k=0
    Do i=1,N
     Do j=1,N
      IF (R(i) .EQ. R(J)) THEN  
      WRITE(*,*)'повторяющ. элемент',R(i)
           k=k+1
      ENDIF
     ENDDO
    ENDDO
    WRITE(*,*)'kol-vo',k
    RETURN
    END

 
Собственно кто знает подскажите как исправить если не трудно, ну или свой вариант кода.
С Уважением rusik

Всего записей: 29 | Зарегистр. 20-04-2008 | Отправлено: 02:02 07-05-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oarsman
компилироваться должно в принципе
но работать конечно не будет, то что вы написали,  с утреца гляну, надо ключи использовать

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 03:05 07-05-2010 | Исправлено: terminat0r, 03:27 07-05-2010
terminat0r



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

Код:
 
program dups
  implicit none
  integer, dimension(12) :: example1
  integer, dimension(15) :: example2
  integer, dimension(23) :: example3         ! input
  integer :: k, i, j, m
 
  example1 = [1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5]
  example2 = [1, 1, 2, 2, 2, 4, 8, 5, 8, 6, 6, 5, 5, 5, 5]
  example3 = [1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5, 20, 20, 0, 0, 0, 0, 6, 9, 22, -1, -1]  
   
   
  call finddupe(example1)
  call finddupe(example2)
  call finddupe(example3)  
   
  contains
   
  subroutine finddupe(array)
  implicit none
  integer, dimension(:) :: array ! input
  integer :: res(size(array))  
  integer :: dupe(size(array))   ! output
  integer :: cnt(size(array))    ! output
  k = 1
  m=1
  res(1) = array(1)
  dupe=0
  cnt=1
  outer: do i=2,size(array)
     do j=1,k
        if (res(j) == array(i)) then
        !match found so add it to the output
           dupe(j)=res(j)
           cnt(j)=cnt(j)+1
           cycle outer
        end if
     end do
     ! no match found so add it to the res
     k = k + 1
     res(k) = array(i)
  end do outer
     
  write(*,*) 'The array has ', sum(cnt) ,' duplicated element(s)'
   
  do m=1,size(array)
   if (cnt(m)>1) then
    write(*,*) "duplicated element is", dupe(m), " and count =", cnt(m)
   endif
  enddo
   
  write(*,*)'--------done---------'
 
end subroutine finddupe  
end program dups
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 05:20 07-05-2010 | Исправлено: terminat0r, 11:56 07-05-2010
plazmon



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

Цитата:
oarsman

Компилируется нормально (если сделать отступы - в FORTRAN'е 77 все опреаторы должны начинаться с 6-ой позиции).
А вот в логике - ошибка. Программа уважаемого терминатора делает больше чем просили.
А что бы Вашу программу сделать рабочей с минимумом исправлений нужно внутренний цикл записать так"
Код:
 DO j=i+1,N

 
PS terminat0r, что это за конструкция
Код:
 
  example1 = [1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5]  
  example2 = [1, 1, 2, 2, 2, 4, 8, 5, 8, 6, 6, 5, 5, 5, 5]  
  example3 = [1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5, 20, 20, 0, 0, 0, 0, 6, 9, 22, -1, -1]  
?
Так теперь записывают конструкторы массивов?

Всего записей: 107 | Зарегистр. 29-05-2007 | Отправлено: 17:21 07-05-2010
terminat0r



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

Цитата:
Программа уважаемого терминатора делает больше чем просили.  

я написал так, как я понял задачу

Цитата:
что это за конструкция  

а, ну да, это 2003 фортран, но к хорошему легко привыкнуть

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



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

Цитата:
Компилируется нормально (если сделать отступы - в FORTRAN'е 77 все опреаторы должны начинаться с 6-ой позиции).  

Надо просто в файл свободного формата загнать и всё должно работать (для CVF это по-умолчанию .f90)
 
terminat0r

Цитата:
а, ну да, это 2003 фортран, но к хорошему легко привыкнуть

Боюсь что такой вариант oarsman-у только навредит, так как у препода сразу появится много "лишних" вопросов (у меня бы появилось)

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 18:55 07-05-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кстати, две недели назад вышел
Final Draft International Standard (FDIS) of the ISO Fortran 2008 standard
прелюбопытное чтиво, можно и  в шапку  
 
KChernov

Цитата:
у меня бы появилось

Ну почему же, компилятор хавает, значит все ок  
Надо же как-то с этого 77 перелезать, на дворе уже во какой стандарт, а мы понимаешь еще 95й полностью не осилили.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 19:18 07-05-2010 | Исправлено: terminat0r, 19:38 07-05-2010
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Да я только за. Сам стараюсь по-максимуму использовать новые возможности.
И если oarsman осилит в этом разобраться (и сдать) - респект ему и уважуха

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

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

Цитата:
в FORTRAN'е 77 все опреаторы должны начинаться с 6-ой позиции

низачот
:)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 14:09 11-05-2010
plazmon



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

Цитата:
низачот  

Пачиму?

Всего записей: 107 | Зарегистр. 29-05-2007 | Отправлено: 17:06 11-05-2010
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
plazmon
 
С 7-й позиции

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 17:45 11-05-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кстати еще насчет стандартов
http://fortranwiki.org/fortran/show/Fortran+2003+status
http://fortranwiki.org/fortran/show/Fortran+2008+status

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 03:59 12-05-2010
oarsman



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
нет ,на пк в универе покамись старый фортран, код я подправил ,но Кол-во повторяющихся не верно выводит, так как оно в цикле, но как исправить не понятно..(взял для примера покамись 1 массив)

Код:
 
 PROGRAM rusik
DIMENSION A(5)
READ(*,*)A
CALL Povtor(A,5)
END
 SUBROUTINE Povtor(R,N)
 DIMENSION R(N)
 k=0
   Do i=1,N-1
      Do j=i+1,N
      if(i .NE. j) then
        IF (R(i) .EQ. R(j)) THEN  
          WRITE(*,*)'povtoryaushiisa element',R(i)
        k=k+1
          ENDIF
      endif
      WRITE(*,*),k
      ENDDO
   ENDDO
 RETURN
 END
    

Всего записей: 29 | Зарегистр. 20-04-2008 | Отправлено: 17:11 12-05-2010 | Исправлено: oarsman, 17:12 12-05-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oarsman
вот, попроще для понимания кажется. Так сойдет?
Больше вариантов от меня не будет (хотя они возможны)

Код:
 
 
program dups
  implicit none
  integer, dimension(1:12) :: example1
  integer, dimension(1:15) :: example2
  integer, dimension(1:23) :: example3         ! input
 
 
  example1 = (/1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5/)
  example2 = (/1, 1, 2, 2, 2, 4, 8, 5, 8, 6, 6, 5, 5, 5, 5/)
  example3 = (/1, 2, 3, 2, 2, 4, 5, 5, 4, 6, 6, 5, 20, 20, 0, 0, 0, 0, 6, 9, 22, -1, -1/)    
   
  call finddupe(example1,size(example1))
  call finddupe(example2,size(example2))
  call finddupe(example3,size(example3))  
   
  contains
   
subroutine bubble_sort(a)
  implicit none
  integer, intent(in out), dimension(:) :: a
  integer :: temp
  integer :: i, j
  logical :: swapped = .true.
 
  do j = size(a)-1, 1, -1
    swapped = .false.
    do i = 1, j
      if (a(i) > a(i+1)) then
        temp = a(i)
        a(i) = a(i+1)
        a(i+1) = temp
        swapped = .true.
      end if
    end do
    if (.not. swapped) exit
  end do
end subroutine bubble_sort
   
  subroutine finddupe(inp,n)
  implicit none
  integer,intent(in)  :: n
  integer :: k,m  
  integer, intent(in), dimension(1:n) :: inp ! input
  integer, dimension(1:n) :: array   ! output
  integer, dimension(1:n) :: dupe   ! output
  integer, dimension(1:n) :: cnt    ! output
  k=1
  cnt=1
  array=inp
! sort input array
  call bubble_sort(array)
 
  do m=1,n-1
   if (array(m)==array(m+1)) then
   cnt(k)=cnt(k)+1
   dupe(k)=array(m)
   else
   k=k+1  
   endif
  enddo
 
  write(*,*) "input=", inp    
  write(*,*) "sorted=", array  
  do m=1,n
   if (cnt(m)>1) then
    write(*,*) "duplicated element is", dupe(m), " and count =", cnt(m)
   endif
  enddo
   
end subroutine finddupe  
end program dups  
 
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 00:52 13-05-2010 | Исправлено: terminat0r, 01:30 13-05-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

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