Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Учу язык Фортран (http://forum.oszone.net/showthread.php?t=209270)

KarinchiK 01 17-06-2011 20:29 1696626

Учу язык Фортран
 
Здравствуйте многоуважаемые форумчане-программисты.
Прибегаю к вашей помощи как начинающий программист, и прошу вашего участия в развитии молодого поколения ))).
Хочу поступить в универсистет по ИТ системам. Сама я только недавно начала осваивать язык Фортран (немного знаю С++), но хотелось бы для примера типичных задач иметь представление что это, и с чем его едят ))).
Нашла похожие задачи, но пока опыта нет))). Может благодаря вам соорентируюсь что к чему))) Поможите?
Вот задачка:

1) Дано натуральное число n. Выяснить, можно ли его представить в виде произведения трёх последовательных натуральных чисел. n = 95443536.
На С++ вродебы когдато я решала на подобии такого, но Фортран одно, а С++ другое.

amel27 18-06-2011 16:34 1697032

Цитата:

Цитата KarinchiK 01
На С++ вродебы когдато я решала на подобии такого, но Фортран одно, а С++ другое. »

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

P.S. а почему Фортран?.. разве его еще где-то изучают?

lxa85 20-06-2011 10:46 1698023

KarinchiK 01, прежде чем писать на фортране, реши задачу устно.
С фортраном проблем не возникнет, когда будешь знать, что искать в справочнике.
Я тебе к сожалению с готовы кодом помочь не смогу, т.к. у меня изучение Фортрана пока только в планах.
Единственное что, могу отдать сборник учебников по фортрану.
Цитата:

Цитата amel27
P.S. а почему Фортран? »

Изучают, редко, в основном в глубоких технических специальностях.
Хотел на правах препода провести пару семестров на онном.
Кроме того, обрати внимание, что АМД и Интел, выпускают не только С++ компиляторы, но и Фортан компиляторы.
Большая часть мат. вычислений пишется на Фортране. А именно математические вычисления интересны серьезным покупателям.

amel27 20-06-2011 11:09 1698034

Цитата:

Цитата lxa85
Большая часть мат. вычислений пишется на Фортране. »

ну дык он был моим первым языком программирования (решали разностные задачи), правда давно это было...
помню только своё ощущение, что весь Фортран крутится вокруг одной команды FORMAT =)

Iska 20-06-2011 12:01 1698060

Цитата:

Цитата amel27
ну дык он был моим первым языком программирования (решали разностные задачи), правда давно это было... »

Почти так же ;)…

XPEHOMETP 20-06-2011 12:57 1698104

KarinchiK 01 запостила подобное сообщение и на Ru-Board. После вполне конструктивной просьбы уточнить, как именно надо решать поставленную задачу, свалила в кусты и не показывается. Думаю, проявлять внимание к этой теме бесполезно.

Iska 04-07-2011 02:00 1706387

Delirium, по поводу задачи автора, как уже и писалось выше — так ведь и не было ровно никаких попыток продвинуться в построении алгоритма.

megaloman 04-07-2011 10:54 1706515

Вот тупое решение (в предположении, что оно единственное). Но это Fortran-4 для EC ЭВМ (IBM 360/370) . Однозначно вывод не подойдёт для современного фортрана. Уже в Фортране-77 была конструкция If-Then-Else, в F-4 такого не было. Оператор языка начинается с 7 позиции. У меня нет под руками ни учебника, ни компиллятора, чтобы проверить. Вспоминал по своей программе двадцатилетней давности (Как молоды мы были!!).
Код:

      N=95443536

      DO 1 I=3,N
      IF (N.NE.(I-2)*(I-1)*I) GO TO 1
      PRINT 101,N,I-2,I-1,I
      GO TO 100
    1 CONTINUE

  100 STOP
  101 Format(1X,I8,'=',I3,'*',I3,'*',I3)
      END

Наверное, если посоображать немного, решение, как мне кажется, должно быть где-то около корня кубического из исходного числа. И если эту идею реализовать, можно существенно снизить время ваполнения программы. Но это - иллюстрация тезиса: прежде чем бросаться писАть код, надо проработать методику решения. А на каком языке - дело десятое: главное, чтобы хватало библиотеки готовых функций. Писать заново какой-то необходимый мат аппарат - дело муторное и неблагодарное. Помнится, переписывал в Фортран функцию из Алгола (кто сейчас его вспомнит, а вот библиотеки для научных расчетов там были богатые).

Tau_0 04-07-2011 12:08 1706551

Iska,
Цитата:

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

1. Формулируем ограничения на диапазоны --- машина финитна (не так просто работать даже с натуральными числами) и чтобы попроще оно было --- ограничиваемся разрядностью машинной целой арифметики --- тип (диапазон) INTEGER и ВСЁ…

2. Смотрим что это такое --- Решето Эратосфена, и кодируем его…
http://ru.wikipedia.org/wiki/Решето_Эратосфена

3 а. Если наше число простое --- на нет и суда нет --- не факторизуется.
в. Если факторизуется, то в цикле “делим (в Fortan это MOD (a, p) ) на решето”, начиная с 2 и смотрим остаток. Как только остаток = 0.

Вот так:
result = MOD (a, p) где а наше число, p --- число из решета, а result --- остаток от деления. Все числа целые…

Далее выполняем деление для получения первого сомножителя.
First = a / p

4. С ним идём на 3 a --- цикл двойкой можно ограничить, чтобы выйти потом.
Вот и ВСЁ.

ЗЫ Не пинайте за простоту и примитивизм --- это сложная задача теории чисел.
Факторизация целых чисел
http://ru.wikipedia.org/wiki/Факторизация_целых_чисел

Повторяю --- я простенько по рабочее-крестянски… Пока закодировать лениво, да и KarinchiK 01 подумать не мешает...

ЗЗЫ жду возражений...

Добавлено
Пока ответ писал у меня первый серьёзный оппенент/союзник/коллега :) появился...

Megaloma
Цитата:

Однозначно вывод не подойдёт для современного фортрана.
Однозначно --- подойдёт. FORTRAN совместим сверху вниз.
Любопытный алгоритм --- спасибо. Чичас поразмышляю, а я видать перемудрил…

ЗЫ Мы тоже были молоды…

Добавлено…
Скомпилировал и прогнал Вашу "цацку":) как консольное приложение в Compaq Visual Fortran Professional Edition 6.6.C под FORTRAN 77
Вот результат прогона ----
Цитата:

95443536=456*457*458
Press any key to continue
Под Fortran 90 то же самое --- FORTRAN 66 (4) входит туда как подмножество...

Delirium 05-07-2011 02:37 1707086

Цитата:

Цитата Iska
Можно ли отделить в отдельную тему данного же раздела сообщения, начиная, скажем с #7? »

Рассуждение про особенности языка продолжаем здесь

megaloman 06-07-2011 16:07 1708332

Нашел в закромах MS FORTRAN Optimizing Compiler v.5.00 от 1989 года
Моё первое, подправленное решение
Код:

      LOGICAL L
      N=95443536

      DO 1 I=3,N
      L=N.NE.(I-2)*(I-1)*I
      IF (L) GO TO 1
      PRINT 101,N,I-2,I-1,I
      GO TO 100
    1 CONTINUE
      PRINT 102

  100 STOP
  101 Format(1X,I8,'=',I3,'*',I3,'*',I3)
  102 Format(1X,'Решения нет')
      END

Более эффективно искать решение около корня кубического исходного числа, строго математически доказать не берусь, интуитивно вроде бы понятно, что решение единственное, если оно существует
Код:

      LOGICAL L
      N=95443536

      I=N**0.3333333333333333

      L=N.EQ.I*(I+1)*(I+2)

      IF (L) PRINT 101,N,I,I+1,I+2
      IF (.NOT.L) PRINT 102

  100 STOP
  101 Format(1X,I8,'=',I3,'*',I3,'*',I3)
  102 Format(1X,'Решения нет')
      END

Под руками нет книжонки подсмотреть If-Then-Else

Tau_0 06-07-2011 21:22 1708502

Цитата:

Цитата megaloman
Более эффективно искать решение около корня кубического исходного числа »

Скомпилировал и прогнал второй вариант…
Цитата:

95443536=456*457*458
Press any key to continue
Цитата:

интуитивно вроде бы понятно, что решение единственное, если оно существует
А вот это непонятно ---- что Вы имеете в виду.

Вроде как не единственно...

456*457*458 = (456/2) * (457*2) * 458 = etc…

…???...

Добавлено порсле внимательного прочтени иусловия
Цитата:

можно ли его представить в виде произведения трёх последовательных натуральных чисел.
Вопрос снимается... А я голову ломал --- слово "последовательных" пропустил. Просто на три фактора раскладывал....

kipok 11-07-2011 16:01 1711292

Я бы стал изучать язык другой на вашем месте. Посмотрите западные (США) сайты по работе, кто требуется? Подкасты по Джаве http://americhka.us/

lxa85 11-07-2011 16:33 1711311

kipok, причем здесь
Цитата:

Цитата kipok
западные (США) сайты по работе, кто требуется? »


yurfed 11-07-2011 16:44 1711320

Цитата:

Цитата Tau_0
456*457*458 = (456/2) * (457*2) * 458 = etc… »

а может так?
456**2 * 457**2 * 458**2


Время: 02:49.

Время: 02:49.
© OSzone.net 2001-