На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Дайте совет по задаче , Задача на Фортране...
      Задача на 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-ти членов ряда, - там нет... :wall:

      Вот что он выдает:
      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...
      Сообщение отредактировано: Seltik -
        Факториал не стоит вычислять отдельно - он просто не помещается в используемый формат, равно как и степень.
        Нужно вычислять сразу коэффициент, деля и умножая в каждой итерации.
          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
            Помогите люди добрые написать программу...
            Надо вычислить сумму ряда:
            а)с заданной точностью Eps (эпсилон) и вывести количество итераций;
            б)для 20-ти членов ряда.
            Sum(знак суммы)=1+1/3^4+1/5^4+1/7^4+...
            Eps=0.0001
            Ответ:1.01467
              ExpandedWrap disabled
                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;
              напишите
              ExpandedWrap disabled
                if( i/2 > 20 ) break;
              Сообщение отредактировано: Славян -
                Спасибо большое
                  Славянпривет, ты можешь помочь, с написанием этой программы на ФОРТРАНЕ?
                    Цитата PavelYarilov @
                    Славянпривет, ты можешь помочь, с написанием этой программы на ФОРТРАНЕ?
                    Вряд ли, - я плохо перевариваю Фортран. Но код то уже на Си есть, а по сообщению MAV'а можно, подумав, переписать его на Фортране. Аккуратно смотреть, как заводятся переменные, строится цикл и т.п. Вот и всё.
                      Есть задача номер 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
                        Есть задача номер 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)
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0283 ]   [ 17 queries used ]   [ Generated: 17.04.24, 00:00 GMT ]