0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 9
|
||||||
1 | ||||||
Переделать исходный код на Паскале в Фортран20.03.2013, 21:50. Показов 2102. Ответов 8
Метки нет (Все метки)
Многомерные массивы. Задачу, которая предлагается Вам, часто называют табулиро¬ванием функции, по-скольку она связана с составлением таблицы зна¬чений функции, соответствующих опре-деленным значениям аргумента. Первая часть Вашего задания - подготовка программы, табули¬рующей функцию С(х,р) Вашего варианта при изменении значения ар¬гумента X от значения xl до значения х2 с шагом Нх и аргумента Р - от p1 до р2 с шагом Нр. Результаты напечатайте в виде таб-лицы-матрицы: Х / Р 7.425 7.450 7.475 7.500 7.525 7.550 7.575 3.50 -.0634 * 3.581 4.145 6.524 8.745 12.659 5.00 1.487 16.832 -8.245 -5.434 * * 4.326 6.50 -5.208 ** ** 8.987 15.782 68.547 124.317 * — В знаменателе ноль ** — Под логарифмом отрицательное число Совет: • прежде, чем печатать результаты, наколите их в памяти, используя для этого один или несколько массивов; • При вводе данных организуйте контроль на достоверность: при положительном шаге Нx недопустимо, чтобы xl было боль¬ше х2, а при отрицательной величине ша-га Нx нельзя задавать xl < х2 (аналогично для Нp ); • выбранные размерности массивов должны быть достаточны для хра¬нения значений X, Р и таблицы значений функции С(х,р). Поэ¬тому, если число шагов или при введенных исходных данных оказалось больше числа компонент массива в соответствующем измерении, проводить расчеты нельзя. В тех случаях, когда при вводе исходных данных (xl, х2, Нх, p1, р2, Нр) будут зафиксированы описанные (или подобные) ситуации, программа должна сообщать об этом и либо завершать работу, либо повторно запрашивать данные. • При выполнении этой работы не забывайте, что в некоторых клетках Вашей мат-рицы рассчитать значение С(х,р) для соответствующих значений X и Р нельзя. Та-кие клетки следует заполнить знаками «*». При этом количество звездочек должно обозначать причину по которой значение функции не было рассчитано. • После таблицы следует вывести расшифровку легенды: что обозначено тем или иным количеством звездочек. Второй частью Вашего задания будет работа с матрицей значе¬нии функции С(х,р). Что именно требуется сделать, Вы узнаете из таблицы 3, выбрав оттуда задачу с номером Вашего варианта.
0
|
20.03.2013, 21:50 | |
Ответы с готовыми решениями:
8
Переделать исходный код Паскаль -> Фортран Переделать из Паскаля в фортран 77 Каким образом можно перевести код Паскаля в код Фортран? Перевести код с Паскаля на Фортран |
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
|
|
21.03.2013, 11:19 | 2 |
Тут какая-то странность. Пишутся 2 вложенных цикла с действиями:
x[i]:=x[i-1]+Hx p[i]:=p[i-1]+Hp но при этом значения первых элементов массивов, от которых все отсчитывается, никак не определены. Принимается, что они инициализируются нулями?
0
|
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 9
|
||||||
21.03.2013, 15:33 [ТС] | 3 | |||||
Да наверное. Вот смотри у меня есть рабочяя программа моя но там есть некоторые недочеты по алгоритмы( сможешь исправить ошибки? это все таже программа. просто я за сегодня ее сделала.
0
|
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
|
||||||
22.03.2013, 08:50 | 4 | |||||
Кто Вас учит такому Фортрану? Вычисляемые операторы перехода типа if (buf4) 70,80,70 давным-давно (еще со времен Фортрана-77) исключены из стандарта, поскольку могут привести к трудно отлавливаемым ошибкам.
В общем, программу я переписал на Фортран, в меру моего понимания. Раз уж на печать почти все выводится из строкового массива, то и все остальное есть смысл туда запихнуть. Но у меня есть серьезные подозрения, что эта программа не совсем корректна. Кажись, там должно вычисляться все для некоторого промежутка параметров х и р. Если так, то записано неправильно, надо исправлять. И еще: действительно ли там матрица только 5 на 5? В примере к задаче она большего размера.
А, ну да, я невнимательно задание прочитал. Действительно, проход по параметрам с заданным шагом от одного значения до другого. Тогда начальные значения - явно не нули. Но тут некоторая малопонятная для практики вещь возникает. Допустим, задано, что мы меняем параметр в пределах от 1.0 до 1.7 с шагом 0.2, что получается? У нас будут точки со значениями 1.0, 1.2, 1.4 и 1.6, а в точку 1.7 мы не попадем. Можно оставить так, можно попытаться чуть растянуть шаг, чтобы покрывался весь интервал. Но лучше, наверно, не надо. Другой вопрос - размерность рабочих массивов. В исходной программе она задана как 5. Мало. Думаю, на всякий случай заказать что-то порядка 50х50 не помешает. А потом использовать по мере надобности, то есть посчитать количество данных, нужных реально для работы. Автор исходной программы даже попытался это сделать: это некие Nx и Np, которые описаны у него как действительные числа, а по идее должны быть натуральными. Я бездумно переписал их вычисление на Фортран, Вы тоже. А больше нигде они не используются. А должны. Плюс к тому, сам процесс вычисления количества точек не так прост, ибо границы интервала и шаг - действительные числа, которые хранятся в памяти в приближенном виде, действия с ними дают приближенный результат, который еще тем или иным образом надо округлять до ближайшего целого числа, чтобы получить количество точек. А если интервал охватывается не весь (как в примере с 1.0-1.7 при шаге 0.2), то это тоже надо как-то учесть. В общем, программу я кое-как переписал, но уверен, что результат преподавателя не устроит. Потихоньку буду исправлять, может, что-то и получится.
0
|
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 9
|
|
22.03.2013, 17:57 [ТС] | 5 |
Спасибо большое я сейчас ее просмотрю, а по поводу Фортрана мы и пишем на 77 Фортране поэтому нас такому и учат)на счет размерности мы решили что она просто будет стандартна 5 на 5.
0
|
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
|
|
22.03.2013, 19:29 | 6 |
Тогда придется переделать все циклы на старые, с меткой, отступы нужные сделать. Все использование IF - THEN - ELSE вполне в рамках Фортрана-77. На Паскале это было вполне нормально написано, и на Фортран этот кусок переносится без особого труда.
0
|
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
|
||||||
22.03.2013, 23:24 | 7 | |||||
Я переписал на Фортране-77, заказал бо-ольшие исходные массивы, написал проверки, все компилируется. Но немного не работает. На скриншоте видно, что не хватает еще одного шага. Но это мелочи, надо потом чуток довести до ума.
0
|
294 / 206 / 2
Регистрация: 20.02.2011
Сообщений: 551
|
|
23.03.2013, 09:40 | 8 |
Косяк на счет урезания границ понял: 36 и 39 строчки с ошибкой. Должно быть:
if (real(N-1)-Nx.gt.0.001) N = N - 1 if (real(M-1)-Np.gt.0.001) M = M - 1 Но все равно несколько изумляет хроническое отсутствие чисел в результате. Вы не проверяли условия существования этих функций, хоть где-то они выполняются?
0
|
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 9
|
|
23.03.2013, 09:54 [ТС] | 9 |
Конечно выполняются. Там наоборот меньше случаев когда должны быть *
0
|
23.03.2013, 09:54 | |
23.03.2013, 09:54 | |
Помогаю со студенческими работами здесь
9
Переделать исходный код. Код в Паскале,а нужно сделать его в Фортране Переделать исходный код с Си++ на Си К сможет перевести простой код с Паскаля на Фортран? Как узнать исходный код метода из dll через код C#? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |