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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2012, 22:37   #1
сона
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 11
По умолчанию Организовать вычисление

Организовать вычисление с применением рекурсивной функции и вычислить а в степени l.
u=x (в степени m)+y(в степени n)+z(в степени k)
x,y,z-real
m,n,k-целые
сона вне форума Ответить с цитированием
Старый 09.07.2012, 01:51   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Предположу, что необходимо написать рекурсивную функцию для вычисления a^I, где a - вещественное, а I - целое.
Рекурсивная функция может иметь вид:
Код:
function Paw(a: real; i: word): real;
begin
   if i = 0 then
      Paw := 1
   else
      if i = 1 then
         Paw := a
      else
         Paw := a * Paw(a, i - 1);
end;
Но тут предполагается, что i не меньше нуля, и a - не равен нулю, если i < 0;
Для вычисления во всех случаях надо написать доп. функцию, из которой вызывается рекурсивная:
Код:
function Pawer(a: real; i : integer): real;
begin
  if ((a = 0) AND (i <= 0)) then begin
     writeln('Error! Division by zero!');
     Pawer := 0;
     exit;
  end;
  Pawer := Paw(a, abs(i));
  If i < 0 then
     Pawer := 1/Pawer;
end;
Рекурсивную функцию можно определить внутри основной.
В программе можем писать, например:
Код:
u := Power(x,n)-5*Power(y,m);

Вроде так получается ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.07.2012, 09:34   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
function Step(x:real;y:integer):real;
begin
if y=0 then Step:=1
else if y=1 then Step:=x
else if y=-1 then Step:=1/x
else if y>1 then Step:=Step(x,y-1)*x
else Step:=Step(x,y+1)/x;
end;
puporev вне форума Ответить с цитированием
Старый 09.07.2012, 10:39   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Код:
function Step(x:real;y:integer):real;
begin
if y=0 then Step:=1
else if y=1 then Step:=x
else if y=-1 then Step:=1/x
else if y>1 then Step:=Step(x,y-1)*x
else Step:=Step(x,y+1)/x;
end;
puporev, а ты ничего не пропустил? Уверен, что не нужно добавить еще парочку условий? Типа, if y=2, и if y=3? Для надежности. А?..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 09.07.2012, 11:26   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
puporev, а ты ничего не пропустил? Уверен, что не нужно добавить еще парочку условий? Типа, if y=2, и if y=3? Для надежности. А?..
Если Вы внимательно посмотрите, то это написано
Код:
else if y>1 then Step:=Step(x,y-1)*x
puporev вне форума Ответить с цитированием
Старый 10.07.2012, 02:56   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Если Вы внимательно посмотрите, то это написано
Код:
else if y>1 then Step:=Step(x,y-1)*x
А.. ну, да, конечно! и как это я просмотрел?.. млин, надо очки заказывать...

пупорев, я просто хотел сказать, что вот эти две строки в твоем коде:

else if y=1 then Step:=x
else if y=-1 then Step:=1/x

- абсолютно излишни..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 10.07.2012, 07:38   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну если тебе так кажется, убери

Последний раз редактировалось puporev; 10.07.2012 в 08:38.
puporev вне форума Ответить с цитированием
Старый 10.07.2012, 08:30   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
function Step(x:real;y:integer):real;
begin
if y=0 then Step:=1
else if y=1 then Step:=x
else if y=-1 then Step:=1/x
else if y>1 then Step:=Step(x,y-1)*x
else Step:=Step(x,y+1)/x;
end;
я бы так поправил:
Код:
function Step(x:real;y:integer):real;
begin
if y=0 then Step:=1
else if y > 0 then Step:=Step(x,y-1)*x
else Step:=Step(x,y+1)/x;
end;
поскольку Step(x,1) = x*Step(x,0) = x*1 = x
и аналогично для -1 степени. Нет смысла их выделять в отдельное условие
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 10.07.2012, 08:47   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Согласен, именно так и нужно.
puporev вне форума Ответить с цитированием
Старый 10.07.2012, 10:31   #10
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

А вот я не совсем согласен.
А что получится при x = 0? Почему эта ситуация не рассматривается?
Может быть выдать сообщение об этой ситуации в программе?


Так думаю, что ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запраш Richik123 Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2012 16:28
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запра Richik123 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2012 17:32
вычисление значения функции и переменных, вычисление площади треугольника, определение расстояния между точками на турбо паскале _4Alex4_ Помощь студентам 2 14.12.2011 01:43
как организовать? (C++) Jеня Помощь студентам 2 20.11.2011 18:43