![]() |
|
![]() ![]() ![]() |
|
FCM |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Если имеется в виду
то не поэтому. Просто из a==b и b==c следует a=c. Это сообщение отредактировал(а) FCM - 25.10.2010, 17:24 |
||||
|
|||||
TepH |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.10.2010 Репутация: нет Всего: нет |
Ну это я не туда глянул. Я имел в виду при сортировке, "а" становится меньшим, а "с" - бОльшим. и получается, что код действует:
Спасибо, вы мне очень помогли! Надеюсь, сегодня получится сдать. Только я никак не могу понять, что значит "0.d0" - 0,0*10 в степени 0?
и почему eps'у присваивается число 1.d-8, а не 1.e-8. В чём разница между d и e? Я пробовал менять, ничего не изменилось, вроде как.
|
||||||
|
|||||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Если в программе используется real(8), то буквальные константы желательно объявлять тоже как real(8). 1.e-8 - имеет тип real, но при присвоении real(8)-переменной преобразуется к real(8) 1.d-8 сразу имеет тип real(8). Кстати, вместо 1.d-8 можешь попробовать и другие значения порога. 0.d0 - просто 0 типа real(8). Это сообщение отредактировал(а) FCM - 26.10.2010, 15:13 |
|||
|
||||
TepH |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.10.2010 Репутация: нет Всего: нет |
Не сочтите за наглость, но я опять не справляюсь...
Так и знал, что со следующей тоже не справлюсь, лучше б про неё спросил... Наверное, я так буду думать с каждым последующим заданием... Но, я вс же надеюсь её сам выполнить. Поэтому не стал тему создавать ещё одну. Задание большое, делается подобными циклами, поэтому не должно бы быть особых трудностей. Но у меня не получается ввести массив, при выводе он всё по нулям выдаёт и соответственно, ни минимум, ни максимум не существует. Где-то я не так делаю в именовании массива, мне кажется. Надо сделать функцию из введённого количества элементов, найти минимум, максимум и номера максимального и минимального элементов, среднеквадратичные, ещё какие-то, относительное количество положительных и отрицательных элементов. Ну, там по формулам всё. Я пока только ввёл массив, и масксимум-минимум. Решил проверить, а ничего не работает, выдаёт нули... Я менял всё, что мне приходило в голову, но ничего, или ошибку выдаёт, или по нулям. Где параметр:
Я пробовал написать, к примеру:
|
||||||
|
|||||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
при целом Nx такое h дает ноль. Т.к. при целочисленном делении остаток отбрасывается. Надо h = 1./Nx Где тот там еще фигурирует 1/8 - замени на 1./8 Поиск максимума и минимума наверное можно в одном цикле сделать. (В Фортране-90 есть стандартные функции поиска максимуиа и минимума массивов) Это сообщение отредактировал(а) FCM - 6.11.2010, 21:28 |
|||
|
||||
TepH |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.10.2010 Репутация: нет Всего: нет |
Спасибо. С точкой заработало.
А MAX, MIN, MaxLoc, MinLoc, MinVal, MaxVal, которые, как я понимаю, для минимумов-максимумов, у меня всё время ошибку выдают. Видимо как-то неправильно записываю. Единственное, что скомпиллировалось:
Но ответ неверный совсем выдаёт. Поэтому я и сделал циклом. MAX просит, по крайней мере, два аргумента MaxLoc просит массив. Уж не знаю, чем ему мой не понравился. Если написать
То ошибку такую выдаёт:
Чего-то ему несовместимо... Это сообщение отредактировал(а) TepH - 6.11.2010, 23:24 |
||||||
|
|||||||
FCM |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
MINLOC в данном случае возвращает массив из одного элемента - поэтому проблема при присвоении скаляру. В рамках Фортрана-90+ программа могла бы иметь вид
Возможно массив для X вводить необязательно, достаточно скаляра X
Это сообщение отредактировал(а) FCM - 7.11.2010, 14:59 |
||||||
|
|||||||
AnyaPotehina |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.12.2010 Репутация: нет Всего: нет |
5.6:
SUBROUTINE para_range(1, n, nprocs, myrank, ista, iend) 1 Error: Unclassifiable statement at (1) что это за ошибка, подскажите, пожалуйста PROGRAM main INCLUDE 'mpif.h' PARAMETER (n = 1000) DIMENSION a(n) SUBROUTINE para_range(1, n, nprocs, myrank, ista, iend) iwork = (n - 1)/nprocs + 1 ista = MIN(myrank*iwork + 1, n + 1) iend = MIN(ista + iwork - 1, n) CALL MPI_INIT(ierr) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr) CALL para_range(1, n, nprocs, myrank, ista, iend) DO i = ista, iend a(i) = i ENDDO sum = 0.0 DO i = ista, iend sum = sum + a(i) ENDDO CALL MPI_REDUCE(sum,ssum,1,MPI_REAL, & MPI_SUM, 0, MPI_COMM_WORLD, ierr) sum = ssum IF (myrank == 0) PRINT *,'sum=',sum CALL MPI_FINALIZE(ierr) END программа считает сумму элементов массива a( ) она распараллелена, повторяющиеся операции распределены на блоки и каждый процесс вычисляет свою частичную сумму множества в вычисленном диапазоне с помощью подпрограммы para_range. Частичные суммы вконце суммируются MPI_REDUCE. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |