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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 03:50   #1
Ant1Xr1st
Новичок
Джуниор
 
Аватар для Ant1Xr1st
 
Регистрация: 17.11.2009
Сообщений: 2
Печаль Fortran, лаба - if, do, массивы

*Текст заданий в аттаче, перепечатывать уж больно долго
  1. Имхо тут опечатка в задании, не -30 а -80
    Код:
          program lab
          real x, y
          print *,"Vvedite chislo"
          read *, x
          if (((-80).le.x).and.(x.le.30)) then
             print *,"Korney net"
             stop
          elseif (x.lt.(-80)) then
             y=sqrt(-x+5)
          else
             y=x/(x-50)
          endif
          print *, y
          end program lab
  2. Второе задание я таки и не осилил, прошу помощи..
    Код:
           program ty
          integer x, y, eps, sum, i, n
          eps=.0001
          x=.5
          sum=1
          i=1
          n=2
          dowhile (y>eps)
          sum=sum+y
          y=(-((1+n)*x)**n)
          n=n+2
          i=i+1
          enddo
          print *, sum
          print *, i
          end
  3. Сдесь проблема в том, что в последней строке, если она не полностью заполнена, появляются нули.. препод придерется наверно..
    Код:
          program lol
          implicit none
          integer a(100), i, n
          a=0
          
          read *, n
          
          read *, (a(i), i=1,n)
          
          print *, (a(i), i=1,n)
          
          do i=1,n,3
          print *, a(i), a(i+1), a(i+2)
          enddo
          end
  4. Последнее вроде нормально работает
    Код:
          program swap_column
          implicit none
          integer a(100,100), c1, c2, i, j, z, n, m
          
          print *,'Stolbcov v matrice:'
          read *,m
          print *,'Strok v matrice:'
          read *,n
    
          print *,'Vvedite matricu:'
          do i=1,n
          read *, (a(i,j), j=1,m)
          enddo
    
          print *,"Vhod:"
          do i=1,n
          print * ,(a(i,j),j=1,m)
          enddo
    
          print *,"Chto menyayem:"
          read *, c1
          print *,"Na chto menyayem:"
          read *, c2
    
          !zamena
          do i = 1,m
             z = a(i,c1)
             a(i,c1) = a(i,c2)
             a(i,c2) = z
          enddo
          
          print *,"Vihod:"
          do i=1,n
             print * ,(a(i,j),j=1,m)
          enddo
          end
Изображения
Тип файла: jpg DSC06580.jpg (74.6 Кб, 117 просмотров)
Ant1Xr1st вне форума Ответить с цитированием
Старый 18.11.2009, 12:38   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

По п.1, в первом случае корни есть, только это мнимые числа, , т.е корень из(-1) равен i, т.е Вам необходимо вычислять корень из абсолютного значения (х-40), тогда получите к примеру
1/корень(|-9-40|)=1/7; но в действительности это 1/7i (если умножить числитель и знаменатель на i , то получим -(1/7)i.
Это я к тому, что вычисляем как действительное число, а потом умножаем на (-1) и при выводе добавляем i. т.е д.б выведено к примеру -0.142857i.
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 18.11.2009 в 17:45.
Sweta вне форума Ответить с цитированием
Старый 18.11.2009, 12:57   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

По п.2 В Fortran не специалист, поэтому могу подсказать только алгоритм.
У Вас две подзадачи.
1-я на использование цикла do while.
задаете сумму=1;
значение элемента=1;
номер элемента=1
цикл выполнять пока элемент >точности
значение элемента = ((-1)^n)*(2*n+1)*(0.5)^2)
сумма=сумма +значение элемента
номер элемента=номер элемента+1
Конец цикла
вывод расчет по точности - номера элемента и суммы
2-я на использование цикла do until.
Задаете количество элементов от 1 до 20 и считаете их сумму
по выше приведенной формуле.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 18.11.2009, 13:48   #4
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

2. У вас есть хоть какая-то наработка, поэтому ее можно поправить
Во первых, сумма, точность и значения функции должны быть действительными числами
Код:
       program ty
      integer   n
      real  x, y, eps, sum,
      eps=.0001
      x=.5
      sum=1.0
      n=2
      y=1.0
      dowhile (y>eps)
      y=-y*x*x
      sum=sum+y*(2*n-1)
      n=n+1
      enddo
      print *, sum
      print *, n-1
      sum=1.0
      n=2
      y=1.0
      dowhile (n<20)
      y=-y*x*x
      sum=sum+y*(2*n-1)
      n=n+1
      enddo
      print *, sum 
      end
3. Попробуй так
Код:
 
      do i=1,n,3
      if (i+3.lt.n) then 
        print *, (a(j), j=i,i+2)
       else
      print *, (a(j), j=i,n) 
      endif
      enddo
      end
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 18.11.2009 в 13:58.
Anatole вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fortran Malrog Помощь студентам 1 29.12.2008 00:46
fortran Aivar Помощь студентам 1 07.10.2008 22:13