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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 00:34   #1
Семён Т.
Новичок
Джуниор
 
Аватар для Семён Т.
 
Регистрация: 18.09.2011
Сообщений: 4
По умолчанию Фортран.Функция с промежутком и шагом расчёта.

Дана функция
11-7* √lx-1l ,если x<-3
y(x)= x,если -3≤x<3
7√x+1+12,если 3≤x,и дан промежуток и шаг расчёта: x=-5(0,5)5


program lab2
real x,y
write (*,'('' введите x'')')
read (*,*)x
if (x.LT.-3) then
y=11-7x SQRT (ABS (x-1))
else
if (-3.LE.x. and. x.LT.3.) then
y=x
else
y=7* SQRT (x+1+12)
end if
end if
write (*,'(''x='', f7.2, ''y='',f7.2)') x,y
end


Без шага расчёта и промежутка я написал,но в программу нужно вввести промежуток и шаг расчёта,не могу понять как это сделать.
Семён Т. вне форума Ответить с цитированием
Старый 19.09.2011, 03:03   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Семён Т. Посмотреть сообщение
Без шага расчёта и промежутка я написал,но в программу нужно вввести промежуток и шаг расчёта,не могу понять как это сделать.
Цикл.
Вычисляй значения x в цикле, затем вычисляй функцию и выводи на печать.

Если правильно помню, то что-то типа такого (в f77)
Код:
      x1 = -5.0
      h = 0.5
      x = x1
      DO

C тут вычисляешь значение функции и печатаешь его

      x = x + 0.5;
      UNTIL (x .gt. x1 + h*0.1)
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 19.09.2011, 17:56   #3
Семён Т.
Новичок
Джуниор
 
Аватар для Семён Т.
 
Регистрация: 18.09.2011
Сообщений: 4
По умолчанию

Вот сделал:

program lab3
real x,y,xn,xk,h.
write (*,'(''Введите xn,xk,h'')')
read (*,*) xn,xk,h.
x=xn
10 if (x.LT.-3.)then
y=11-7*(SQRT(ABS(x-1)))
else
if (-3.LE.x.and.x.LT.3.) then
else
y=x
y=7*SQRT(x+1+12)
end if
end if
write (*,''(x='',f7.3, ''y='',f7.3)')x,y
if (x.LT.xk) then
x=x+h
go to 10
end if
end

Теперь сделать тоже самое через массивы x-ов и y-ов и через цикл DO.
Семён Т. вне форума Ответить с цитированием
Старый 19.09.2011, 22:32   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Семён Т. Посмотреть сообщение
Теперь сделать тоже самое через массивы x-ов и y-ов и через цикл DO.
Читать не умеем, только пишем?..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 20.09.2011, 00:45   #5
Семён Т.
Новичок
Джуниор
 
Аватар для Семён Т.
 
Регистрация: 18.09.2011
Сообщений: 4
По умолчанию

Я не совсем понял твоё объяснение,можешь целиком написать?У меня пока не получается.
Семён Т. вне форума Ответить с цитированием
Старый 20.09.2011, 01:49   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Цитата:
Читать не умеем, только пишем?
Думаю TinMan об этом(т.к. все реализовано через цикл DO):
Цитата:
x1 = -5.0
h = 0.5
x = x1
DO

C тут вычисляешь значение функции и печатаешь его

x = x + 0.5;
UNTIL (x .gt. x1 + h*0.1)
Фортран не знаю, прошёлся по мануалам и думаю, что так:
Код:
program lab3
real x(21),y(21),xn,xk,h,i.
write (*,'(''Введите xn,xk,h'')')
read (*,*) xn,xk,h.
i=1
DATA x(i)=xn
DO
 if (x(i).LT.-3.)then
DATA y(i)=11-7*(SQRT(ABS(x(i)-1)))
else
if (-3.LE.x(i).and.x(i).LT.3.) then
else
DATA y(i)=x(i)
DATA y(i)=7*SQRT(x(i)+1+12)
end if
end if
write (*,''(x='',f7.3, ''y='',f7.3)')x(i),y(i)
if (i.LT.21) then
DATA x(i+1)=x(i)+h
end if
i=i+1
 UNTIL (i.GE.22)
end
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 20.09.2011 в 01:55.
Rin вне форума Ответить с цитированием
Старый 20.09.2011, 09:34   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Думаю TinMan об этом(т.к. все реализовано через цикл DO):

Фортран не знаю, прошёлся по мануалам и думаю, что так:
Rin, спасибо, +1.
Я писал на Фортране, но жутко давно. Помню, что там нельзя начинать с самого начала строки. Если самый первый символ 'c' - то вся строка комментарий (у меня есть один в коде выше). Код топикстартера не взят в теги, поэтому сдвинут влево.

...
добавлено: фу ты блин, опять не могу поблагодарить человека... нет, это точно ненормально..
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 20.09.2011 в 09:37. Причина: добавлено
TinMan вне форума Ответить с цитированием
Старый 20.09.2011, 10:37   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

repeat ... until в Фортране?.. Ню - ню...
...
Цитата:
Сообщение от Семён Т. Посмотреть сообщение
Дана функция
...
7√x+1+12,если 3≤x
...
1+12 будет 13. Что под корнем-то, а что за?

Какой FORTRAN хоть? 66, 77, 90, 2003?

Последний раз редактировалось Vago; 20.09.2011 в 17:15.
Vago вне форума Ответить с цитированием
Старый 20.09.2011, 19:41   #9
Семён Т.
Новичок
Джуниор
 
Аватар для Семён Т.
 
Регистрация: 18.09.2011
Сообщений: 4
По умолчанию

Фортран 90. Под корнем x+1+12,через таблицу символов поставил криво,спешил.
Семён Т. вне форума Ответить с цитированием
Старый 20.09.2011, 20:16   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Семён Т. Посмотреть сообщение
Фортран 90.
И что, можно использовать конструкции Fortran 90, не ограничивая себя 77-м? Типа free-form набивки, динамического выделения памяти, DO - EXIT - ENDDO и т.п?.. Или вы пользуетесь транслятором с 90-го, а программируете в манере 77-го?

Цитата:
Сообщение от Семён Т. Посмотреть сообщение
Под корнем x+1+12,через таблицу символов поставил криво,спешил.
Ничего не понял. Почему тогда не x + 13 ?!

77-й:
Код:
      program lab3

         real     x(200), y(200), xn, xk, h
         integer  i

         write ( *, '(" Введите xn, xk, h")' )
         read *, xn, xk, h

         i = 1
         x(i) = xn
c        repeat
   10       if ( x(i) .LT. -3. ) then
               y(i) = 11. - 7. * (SQRT( ABS( x(i)-1. )) )
            else if ( x(i) .LT. 3.) then
               y(i) = x(i)
            else
               y(i) = 7. * SQRT( x(i) + 1. + 12. )
            end if
            write (*, 900 ) i, x(i), i, y(i)
            x(i+1) = x(i)+h      ! Бесстрашно накапливаем погрешность
            i = i+1
            if ( x(i) .LE. xk ) goto 10
c        until ( x .GT. xk )

  900    format ( ' X(', i2, ') = ', f7.1, '   Y(', i2, ') = ', f9.3 )

      end
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула для расчёта Nekto009 Помощь студентам 0 10.05.2011 11:29
функция расчёта для массивов - проверить решение denislacoste Паскаль, Turbo Pascal, PascalABC.NET 3 01.04.2011 11:05
задача с промежутком Bestvint Общие вопросы C/C++ 0 30.11.2010 22:46
Программу для расчёта площади окружности Rostbook Помощь студентам 14 28.06.2009 00:54