Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2011, 16:33   #1
Далила
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 3
По умолчанию Ошибка в программа (Fortran)

Программа, в принципе, работает правильно. Ошибка не в алгоритме. Если запускать процесс 10 раз, то 8 из них будут верны, а 2 раза будет выдавать не те числа.

Задача состоит в том, чтобы проверить признак делимости на 9(сумма цифр числа, делящегося на 9, также делится на 9) для натуральных чисел, не превосходящих заданного N.

Код:
program test
include 'omp_lib.h'
integer j, k, l, s, num, p

n = 100
l = 0
k = 2
do while(k>1)
k = int(n / (10**l))
l = l + 1
end do
!$OMP PARALLEL NUM_THREADS(4) private(p,s,j)
!$OMP DO SCHEDULE (STATIC,1) 
do p = 1, n
j = l
s = 0
num = p
do while(j >= 0)
s = s + int(num / 10**j)
num = num - (10**j) * int(num / 10**j)
j = j - 1
enddo
if (mod(s,9) .eq. 0) then
print *, p, s, omp_get_thread_num()+1
end if
end do
!$OMP END DO
!$OMP END PARALLEL

end

Последний раз редактировалось Stilet; 14.01.2011 в 23:24.
Далила вне форума Ответить с цитированием
Старый 14.01.2011, 18:53   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Далила Посмотреть сообщение
Если запускать процесс 10 раз, то 8 из них будут верны, а 2 раза будет выдавать не те числа.
Распараллеливание в этих "10 разах" включено было? Или выключено?
Vago вне форума Ответить с цитированием
Старый 14.01.2011, 19:03   #3
Далила
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 3
По умолчанию

Было включено
Далила вне форума Ответить с цитированием
Старый 14.01.2011, 19:09   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Без него - никак? (у меня сейчас нет этих библиотек).

1. Попробуйте отключить (в один поток у меня работает всегда правильно).
2. Если, всё-таки, никак - мне кажется, что num тоже в списке private() должно быть...
Vago вне форума Ответить с цитированием
Старый 14.01.2011, 19:13   #5
Далила
Новичок
Джуниор
 
Регистрация: 14.01.2011
Сообщений: 3
По умолчанию

Без него, к сожалению, никак.

"...num тоже в списке private() должно быть..." и это пробовала, но тоже не помогает...
Далила вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fortran где у меня ошибка???? Bezo Помощь студентам 3 18.06.2010 00:06
Fortran , ошибка в dimension marow Помощь студентам 0 03.04.2009 23:35
[Fortran] в чём ошибка ? ghost8495 Помощь студентам 2 01.04.2009 23:18