Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.9.115] |
|
Сообщ.
#1
,
|
|
|
Задача на Fortrane (при её решении обязательно надо использовать оператор DO WHILE):
Вычислить сумму ряда: а) с заданной точностью е и вывести количество итераций; б) для 20-ти членов ряда. сумма(значок суммы)= 1 - x^2/2! + x^4/4! - x^6/6! + ... x = 3.14; e = 0.000001 Вот, что у меня получилось: real S, S20, K, x, L, eps integer iter, I, f, t print *,'vvedite eps' read*, eps S=1 iter=0 I=2 K=1 x=3.14 p=1 fact=1 t=1 do while(abs(K).GT.eps) t=t*(-1) L=t*(x**(i)) fact=fact*I*(i-1) k=l/fact S=S+K iter=iter+1 I=I+2 end do print *,'iter=',iter print *,'S=',S do I=1,20 t=t*(-1) L=t*(x**(i)) fact=fact*I*(i-1) k=l/fact S20=S+K END DO print *,'S20=',S end Первая часть у меня наверняка правильная, а там где надо посчитать для для 20-ти членов ряда, - там нет... Вот что он выдает: vvedite eps 0.000001 S = -0.9999989 S20 = -0.9999989 Получается, что S=S20 = -0.9999989, а это полный БРЕД!!! Помогите, что у меня не так? Очень срочно надо!!! P.S. Напишите пожалуйста как создать листинг в Fortrane(у меня он наверное 77, а может быть и нет, что то не где не написано...), а то я сделал и он мне на распечатку сделал 17 листов, вместо 3. Пожалуйста, очень прошу... Добавлено Поправка в предпоследней строчке программы: print *,'S20=', S20 Тогда программа для суммы двадцати(S20) пишет Infinity... |
Сообщ.
#2
,
|
|
|
Факториал не стоит вычислять отдельно - он просто не помещается в используемый формат, равно как и степень.
Нужно вычислять сразу коэффициент, деля и умножая в каждой итерации. |
Сообщ.
#3
,
|
|
|
Program Main
! Описание переменных Real(8) :: f_old, f_new, step_f Real(8) :: reps Integer(4) :: iter ! Исходные данные Real(8) :: x = 3.14_8, e = 0.000001_8 ! а) с заданной точностью е и вывести количество итераций; f_old = 1.0_8 iter = 0 step_f = 1. reps = 1. Do While(reps > e) iter = iter + 1 step_f = - x*x / dble((2*iter-1)*(2*iter)) * step_f f_new = f_old + step_f reps = abs(f_new - f_old) End Do Write(6,*) " f = ",f_new Write(6,*) " iter = ",iter ! б) для 20-ти членов ряда. f_old = 1.0_8 iter = 0 step_f = 1. Do While(iter < 20) iter = iter + 1 step_f = - x*x / dble((2*iter-1)*(2*iter)) * step_f f_new = f_old + step_f End Do Write(6,*) " f = ",f_new Write(6,*) " iter = ",iter End Program Main |
Сообщ.
#4
,
|
|
|
Помогите люди добрые написать программу...
Надо вычислить сумму ряда: а)с заданной точностью Eps (эпсилон) и вывести количество итераций; б)для 20-ти членов ряда. Sum(знак суммы)=1+1/3^4+1/5^4+1/7^4+... Eps=0.0001 Ответ:1.01467 |
Сообщ.
#5
,
|
|
|
double Sum=1, Eps=0.0001; int i=3; for(;;i+=2) { double plus = 1.0/(i*i*i*i); if( plus<Eps ) break; Sum += plus; } printf("кол-во итераций=%d", i/2); В нужный язык сами переведёте? Добавлено Для п. б) вместо Цитата Славян @ напишитеif( plus<Eps ) break; if( i/2 > 20 ) break; |
Сообщ.
#6
,
|
|
|
Спасибо большое
|
Сообщ.
#7
,
|
|
|
Славянпривет, ты можешь помочь, с написанием этой программы на ФОРТРАНЕ?
|
Сообщ.
#8
,
|
|
|
Цитата PavelYarilov @ Вряд ли, - я плохо перевариваю Фортран. Но код то уже на Си есть, а по сообщению MAV'а можно, подумав, переписать его на Фортране. Аккуратно смотреть, как заводятся переменные, строится цикл и т.п. Вот и всё. Славянпривет, ты можешь помочь, с написанием этой программы на ФОРТРАНЕ? |
Сообщ.
#9
,
|
|
|
Есть задача номер 4: фото.
Есть написанный код на Fortran, хотел попросить проверить на правильность! program laba4 integer i,j,n,p,p1,d1,p2,d2,p3,p4,mat(6,6) print*, 'vvedite razmernost matrici' read*, n do i=1,n read*,(mat(i,j),j=1,n) enddo do j = 1,n print*,'stroka', j do i = 1,n print*, mat(i,j) p = mat(i,j) enddo enddo do i = 1,n print*,'stolbec', i do j = 1,n print*, mat(i,j) p = mat(i,j) enddo enddo print*,'schet' do i=1,n print*,'schet stolbca N',i do j=1,n p1 = p1 + mat(i,j) enddo print*,'rezultatp1',p1 d1=p1 p1=0 enddo print*,'schet' do j=1,n print*,'schet stroki N',j do i=1,n p2 = p2 + mat(i,j) enddo print*,'rezultatp2',p2 d2=p2 p2=0 enddo j=1 do i=1,n p3 = p3 + mat(i,j) j=j+1 enddo print*,'rezultatp3',p3 j=n do i=1,n p4 = p4 + mat(i,j) j=j-1 enddo print*,'rezultatp4',p4 print*,'proverka',d1,d2,p3,p4 if ((d1+d2+p3+p4)== (d1*4)) then print*,'yes' else print*,'no' endif pause end |
Сообщ.
#10
,
|
|
|
Есть задача номер 4: фото.
Есть написанный код на Fortran, хотел попросить проверить на правильность! program laba4 integer i,j,n,p,p1,d1,p2,d2,p3,p4,mat(6,6) print*, 'vvedite razmernost matrici' read*, n do i=1,n read*,(mat(i,j),j=1,n) enddo do j = 1,n print*,'stroka', j do i = 1,n print*, mat(i,j) p = mat(i,j) enddo enddo do i = 1,n print*,'stolbec', i do j = 1,n print*, mat(i,j) p = mat(i,j) enddo enddo print*,'schet' do i=1,n print*,'schet stolbca N',i do j=1,n p1 = p1 + mat(i,j) enddo print*,'rezultatp1',p1 d1=p1 p1=0 enddo print*,'schet' do j=1,n print*,'schet stroki N',j do i=1,n p2 = p2 + mat(i,j) enddo print*,'rezultatp2',p2 d2=p2 p2=0 enddo j=1 do i=1,n p3 = p3 + mat(i,j) j=j+1 enddo print*,'rezultatp3',p3 j=n do i=1,n p4 = p4 + mat(i,j) j=j-1 enddo print*,'rezultatp4',p4 print*,'proverka',d1,d2,p3,p4 if ((d1+d2+p3+p4)== (d1*4)) then print*,'yes' else print*,'no' endif pause end Прикреплённый файлIMG_7382.JPG (0 байт, скачиваний: 535) |