LINUX.ORG.RU
ФорумTalks

Фортран


0

0

Имеется программа на сабже, требуется красиво переписать на C. Сабжа абсолютно не знаю. Неплохо бы какой-нибудь конвертер на какой-либо более понятный мне язык (фактически любой из ныне популярных). F2c, как я понял, генерит что-то нечитабельное. Ну или подскажите хотя бы описание команд, чтобы было понятно, что в какой строчке делается. Сама программа вот:

http://img168.imageshack.us/img168/1889/kscan0001hx8.jpg

http://img168.imageshack.us/img168/9432/kscan0002we7.jpg

http://img168.imageshack.us/img168/7199/kscan0003vs2.jpg

http://img444.imageshack.us/img444/7176/kscan0004jx4.jpg


Сходил по одной из ссылок, понял что ощущают ветераны, когда вспоминают концлагеря.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

> Сходил по одной из ссылок, понял что ощущают ветераны, когда вспоминают концлагеря.

А что такого? Код достаточно компактный и не сильно запутан. Если знать что это программа должна делать, то ошибки вполне можно искать.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Просто с детства ненавижу Фортран, а одно время приходилось на нем писать. Писал исключительно на бумажке псевдокодом, только потом в фортран транслировал.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Гхм. Вполне адекватный язык для тех целей для которых проектировался. Очень простой и прозрачный. Запутать его конечно можно, но в предложенном коде никаких особых ужасов я не заметил. Напрягает разве что отсутствие комментариев.

Evgueni ★★★★★
()

Может лучше фортран изучить?

cvs-255 ★★★★★
()

А почему бы не использовать, что-нить для обработки статистики специализированное?

выдели основные функции и перепиши в процедурном стиле

выдели функцию нахождения матрицы ковариации, регрессионных коэфов и т.д.

dimon555 ★★★★★
()
Ответ на: комментарий от Evgueni

>Гхм. Вполне адекватный язык для тех целей для которых проектировался.

Значит я был уже безнадежно отравлен TP6 с его строгой типизацией и объектами. Особенно реализация read/write и постоянные goto напрягали.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

>>Гхм. Вполне адекватный язык для тех целей для которых проектировался.

>Значит я был уже безнадежно отравлен TP6 с его строгой типизацией и объектами. Особенно реализация read/write и постоянные goto напрягали.

Оператор FORMAT достаточно прост в использовании для форматирования вывода текста. goto никто не заставляет использовать так, чтобы запутывать программу. Также implicit none часто спасает отца русской демократии. В Fortran есть гораздо более "опасные" операторы :)

Evgueni ★★★★★
()
Ответ на: комментарий от dimon555

>А почему бы не использовать, что-нить для обработки статистики специализированное?

Ибо руководитель курсача так сказал.

true
() автор топика
Ответ на: комментарий от Evgueni

>Оператор FORMAT достаточно прост в использовании для форматирования вывода текста

Только требует дополнительный листок, где происходит сопоставление номерков выводу. Ибо если программа длинее пары сотен строк, в памяти держать уже нереально.

>goto никто не заставляет использовать так, чтобы запутывать программу.

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

>В Fortran есть гораздо более "опасные" операторы :)

Которые, слава богу, редко используются. Обычно, по крайней мере.

И вообще, Фортран так долго жил по одной единственной причине - матобеспечение писалось десятилетиями и содержало почти все необходимое, по крайней мере, для нас, физиков.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

>>Оператор FORMAT достаточно прост в использовании для форматирования вывода текста

>Только требует дополнительный листок, где происходит сопоставление номерков выводу. Ибо если программа длинее пары сотен строк, в памяти держать уже нереально.

Это достаточно мелкая проблема, которая решается например в любом многооконном редакторе, например emacs. кроме того никто не заставляет FORMAT в конец уносить.

>>goto никто не заставляет использовать так, чтобы запутывать программу.

>Оно само получается из-за слабо реализованного структурного программирования. Можно, конечно, подумавши, нормально реализовать, но это, опять-таки, время и мозгоресурсы дополнительные.

То есть проблема таки в голове, а не в языке :) Как и везде.

> И вообще, Фортран так долго жил по одной единственной причине - матобеспечение писалось десятилетиями и содержало почти все необходимое, по крайней мере, для нас, физиков.

Почему жил? Он сейчас вполне себе живёт. Проблема в том, что остальные языки не сильно лучше для воплощения алгоритмов, если и лучше.

Evgueni ★★★★★
()

> F2c, как я понял, генерит что-то нечитабельное.

Не намного менее читаемое, чем исходный текст. Особенно для человека, не знакомого с Фортраном.

Другой вопрос, беглый взгляд на goto и метки куда они прыгают особого оптимизма не внушает. Но конвертор тут не поможет, никакой. Только ручками разобрать что там делается.

anonymous
()
Ответ на: комментарий от Evgueni

>Не вижу ни одного.

Да хотя бы организация ифов и циклов по меткам.

true
() автор топика

Судя по постановке задачи (переписать на C), сложности вызывает не незнание Фортрана, а непонимание закодированного алгоритма. В таком случае надо идти к преподу и просить объяснить алгоритм. Или смысл задания заключается именно в переписывании с одного языка на другой?

seiken ★★★★★
()
Ответ на: комментарий от anonymous

> Особенно для человека, не знакомого с Фортраном.

Человек не знакомый с Fortran мог бы уже изучить те пять операторов, которые встречаются в этой программе и таки с ним познакомиться.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

> Человек не знакомый с Fortran мог бы уже изучить те пять операторов, которые встречаются в этой программе и таки с ним познакомиться.

Ыменно.

Beria1937
()

Да если ты фортран ниасилил, он же как васик! Прости тогда, но до цэ тебе продвигаться и продвигаться....

anonymous
()

Fortran учится за вечер в объеме достаточном для написания среднестатистических универовых лаб за семместр. Но -- если есть знание си.

nnkd
()
Ответ на: комментарий от redgremlin

Не знаю когда у вас там детство было, но сейчас, во времена фортрана 90 и более нового стандарта, можно писать вполне нормально.
Когда-то и мне приходилось писать, вот небольшая программа:

program ApparentCyl
  use appcyl
  implicit none
  integer, parameter :: &
    inp = 1, &
    out = 2
  character(80) :: &
    finp, &
    fout
  logical :: &
    fexist
  real(8) :: &
    am,&
    Rm,&
    freq,&
    rTr,&
    rRec,&
    l1,&
    l2,&
    rho,&
    rhoMaxHom,&
    rhoMinHom,&
    rhoMax2Layers,&
    rhoMin2Layers,&
    dphiMin,&
    dphiMax,&
    signal
  integer :: &
    j, n
  finp = 'apparentcyl.inp'
  fout = 'apparentcyl.out'
  ! open input and output files
  inquire(file=finp, exist=fexist)
  if (.not. fexist) then
    write(*, '(A, A, A)') "File ", trim(finp), " does not exist!"
    stop
  end if
  open(inp, file=finp, iostat=ierr)
  if (ierr /= 0) then
    write(*, '(A, A, A)') "Error when opening file: ", finp, "!"
    stop
  end if
  open(out, file=fout)
  read(inp, *) am
  read(inp, *) Rm
  read(inp, *) freq
  read(inp, *) rTr
  read(inp, *) I
  read(inp, *) rRec
  read(inp, *) l1, l2
  call setDphiMinVal(0.0d+0)
  call getIntervalHom(freq, rTr, rRec, l1, l2, rhoMinHom, rhoMaxHom)
  call getInterval2Layers(am, Rm, freq, rTr, rRec, l1, l2,&
                          rhoMin2Layers, rhoMax2Layers, dphiMin, dphiMax)
  read(inp, *) n
  write(out, '(A)') 'Homogeneous'
  write(out, '(A, F0.3)') '  rhoMin: ', rhoMinHom
  write(out, '(A, F0.3)') '  rhoMax: ', rhoMaxHom
  write(out, '(A)') '2 layers'
  write(out, '(A, F0.3)') '  am: ', am
  write(out, '(A, F0.3)') '  Rm: ', Rm
  write(out, '(A, F0.3)') '  rhoMin: ', rhoMin2Layers
  write(out, '(A, F0.3)') '  rhoMax: ', rhoMax2Layers
  write(out, '(A, F0.3)') '  DphiMin: ', dphiMin
  write(out, '(A, F0.3)') '  DphiMax: ', dphiMax
  write(out, '(A)') 'Resutls'
  write(out, '(A14, A16, A20)')  'Dphi(degree)', 'AppHom(Ohm*m)', 'App2Layers(Ohm*m)'
  do j = 1, n
    read(inp, *) signal
    write(out, '(F14.3)', advance='no') signal
    call setDphiMinVal(0.0d+0)
    call normAngle(0.0d+0, signal)
    write(out, '(F16.3)', advance='no') &
      calcApparentHom(freq, rTr, rRec, l1, l2, rhoMinHom, rhoMaxHom, signal)
    call setDphiMinVal(dphiMin)
    call normAngle(dphiMin, signal)
    write(out, '(F20.3)') &
      calcApparent2Layers(am, Rm, freq, rTr, rRec, l1, l2,&
                          rhoMin2Layers, rhoMax2Layers, signal)
  end do
  close(inp)
  close(out)
  !---------------------------------------------------------------
  subroutine normAngle(base, angle)
    implicit none
    real(8), intent(in)    :: base
    real(8), intent(inout) :: angle
    do while (angle < base)
      angle = angle + 180
    end do
    do while (angle > base + 180)
      angle = angle - 180
    end do
  end subroutine normAngle
  !---------------------------------------------------------------
end program ApparentCyl

Вроде выглядит вполне прилично, ну может комментариев надо поболее ставить :) 
Да и format совсем не обязательно использовать, мне, уже знавшему C, он тоже не особо нравится.
А со старым кодом, конечно, раз на раз не приходится...

kamre ★★★
()

...и тщательно перечёркнутые нули. Прослезилсо. Ностальгия. :)

atrus ★★★★★
()
Ответ на: комментарий от anonymous

>>В Fortran есть гораздо более "опасные" операторы :)

>вроде

Это мелочи :) Вот возможность сделать переход по вычисляемому аргументу или переход по предписанию - это вот действительно замечательный способ запутать программу. Есть даже специальная книжечка с впечатляющими примерами как ни в коем случае не стоит писать на Fortran. :)

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

обыкновенный шитый код, как в Форте, всего-то делов :))

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.