Показать полную графическую версию : Учу язык Фортран
KarinchiK 01
17-06-2011, 20:29
Здравствуйте многоуважаемые форумчане-программисты.
Прибегаю к вашей помощи как начинающий программист, и прошу вашего участия в развитии молодого поколения ))).
Хочу поступить в универсистет по ИТ системам. Сама я только недавно начала осваивать язык Фортран (немного знаю С++), но хотелось бы для примера типичных задач иметь представление что это, и с чем его едят ))).
Нашла похожие задачи, но пока опыта нет))). Может благодаря вам соорентируюсь что к чему))) Поможите?
Вот задачка:
1) Дано натуральное число n. Выяснить, можно ли его представить в виде произведения трёх последовательных натуральных чисел. n = 95443536.
На С++ вродебы когдато я решала на подобии такого, но Фортран одно, а С++ другое.
На С++ вродебы когдато я решала на подобии такого, но Фортран одно, а С++ другое. »я не программер, но вродебы решение задачи начинается с описания алгоритма, а не с выбора языка реализации
P.S. а почему Фортран?.. разве его еще где-то изучают?
KarinchiK 01, прежде чем писать на фортране, реши задачу устно.
С фортраном проблем не возникнет, когда будешь знать, что искать в справочнике.
Я тебе к сожалению с готовы кодом помочь не смогу, т.к. у меня изучение Фортрана пока только в планах.
Единственное что, могу отдать сборник учебников по фортрану.
P.S. а почему Фортран? »
Изучают, редко, в основном в глубоких технических специальностях.
Хотел на правах препода провести пару семестров на онном.
Кроме того, обрати внимание, что АМД и Интел, выпускают не только С++ компиляторы, но и Фортан компиляторы.
Большая часть мат. вычислений пишется на Фортране. А именно математические вычисления интересны серьезным покупателям.
Большая часть мат. вычислений пишется на Фортране. »
ну дык он был моим первым языком программирования (решали разностные задачи), правда давно это было...
помню только своё ощущение, что весь Фортран крутится вокруг одной команды FORMAT =)
ну дык он был моим первым языком программирования (решали разностные задачи), правда давно это было... »
Почти так же ;)…
XPEHOMETP
20-06-2011, 12:57
KarinchiK 01 запостила подобное сообщение и на Ru-Board. После вполне конструктивной просьбы уточнить, как именно надо решать поставленную задачу, свалила в кусты и не показывается. Думаю, проявлять внимание к этой теме бесполезно.
Delirium, по поводу задачи автора (http://www.google.ru/search?hl=ru&q=%22%D0%A1%D0%B0%D0%BC%D0%B0+%D1%8F+%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE+%D0%BD%D0%B5%D0%B4%D0%B0%D 0%B2%D0%BD%D0%BE+%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B0+%D0%BE%D1%81%D0%B2%D0%B0%D0%B8%D0%B2%D0%B0%D1% 82%D1%8C+%D1%8F%D0%B7%D1%8B%D0%BA+%D0%A4%D0%BE%D1%80%D1%82%D1%80%D0%B0%D0%BD+%28%D0%BD%D0%B5%D0%BC%D 0%BD%D0%BE%D0%B3%D0%BE+%D0%B7%D0%BD%D0%B0%D1%8E+%D0%A1%2B%2B%29%22), как уже и писалось выше — так ведь и не было ровно никаких попыток продвинуться в построении алгоритма.
megaloman
04-07-2011, 10:54
Вот тупое решение (в предположении, что оно единственное). Но это 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
Наверное, если посоображать немного, решение, как мне кажется, должно быть где-то около корня кубического из исходного числа. И если эту идею реализовать, можно существенно снизить время ваполнения программы. Но это - иллюстрация тезиса: прежде чем бросаться писАть код, надо проработать методику решения. А на каком языке - дело десятое: главное, чтобы хватало библиотеки готовых функций. Писать заново какой-то необходимый мат аппарат - дело муторное и неблагодарное. Помнится, переписывал в Фортран функцию из Алгола (кто сейчас его вспомнит, а вот библиотеки для научных расчетов там были богатые).
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
Можно ли отделить в отдельную тему данного же раздела сообщения, начиная, скажем с #7? »
Рассуждение про особенности языка продолжаем здесь (http://forum.oszone.net/showthread.php?t=210506)
megaloman
06-07-2011, 16:07
Нашел в закромах 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
Более эффективно искать решение около корня кубического исходного числа »
Скомпилировал и прогнал второй вариант…
95443536=456*457*458
Press any key to continue
интуитивно вроде бы понятно, что решение единственное, если оно существует
А вот это непонятно ---- что Вы имеете в виду.
Вроде как не единственно...
456*457*458 = (456/2) * (457*2) * 458 = etc…
…???...
Добавлено порсле внимательного прочтени иусловия
можно ли его представить в виде произведения трёх последовательных натуральных чисел.
Вопрос снимается... А я голову ломал --- слово "последовательных" пропустил. Просто на три фактора раскладывал....
Я бы стал изучать язык другой на вашем месте. Посмотрите западные (США) сайты по работе, кто требуется? Подкасты по Джаве http://americhka.us/
kipok, причем здесь западные (США) сайты по работе, кто требуется? »
456*457*458 = (456/2) * (457*2) * 458 = etc… »а может так?
456**2 * 457**2 * 458**2
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.