Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление функции, задача с рекурсией 
:(
    Опции темы
Anonymous
Дата 2.5.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



Ещё раз здравствуйте, профессионалы, любители и новички. У меня возник ещё один вопрос, что собственно не удивительно. 
Итак, есть функция - прикрепленна в виде картинки, так как написать не смог.
Надо вычислить S. 
Вот что у меня получилось:
Код

Program Zadanie;
Var
  n,i,S,a : integer;
  fact: longint;
begin
  write ('Input i= ');
  readln (i);
  fact:=1;
  for i:=1 to i do
    fact: = fact*i;
  writeln ('Factorial i!= ',fact);
  begin
    write ('Input n= ');
    writeln ('Input a= ');
    if a=0 then 
    writeln ('ERROR');
    for i:=1 to n do
      S:=0;
    S:=S+a^i/fact;
    writeln ('S= ',S);
  end;
end.

Вот такая программка. Только не хочет она запускаться. Пишет   "Invalid qualifier"
Кто может, направьте в нужное русло.
Заранее благодарен.  

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  12.jpg 15,02 Kb
PM MAIL   Вверх
Anonymous
Дата 2.5.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



Цитата

begin
write ('Input n= ');
writeln ('Input a= ');


Ну, кроме того, что тут забыл написать
readln (n);
readln (a);
Что не так ещё? 
Насколько я понял, вся проблема в ^ , я написал небольшой примерчик, типа S=a^i. Так там такая же ерунда. Если поставить вместо ^ знак + или *, то всё получается, а с ^ не работает.  
PM MAIL   Вверх
e-moe
Дата 2.5.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



a в степени b можно вычислять так: exp(b*ln(a))
хотя осторожно... 
PM MAIL WWW ICQ   Вверх
volvo877
Дата 2.5.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Anonymous, подумай, а нужно ли вообще тебе возводить A в степень? Не проще сделать так:
Код
Var next: real;
...
next := A;
S := next; { A^1 / 1! }

For i := 2 to N do begin
  next := next * A / i;
  s := s + next;
end;

?

Кстати, рекурсии я в твоей программке не увидел... 

Это сообщение отредактировал(а) volvo877 - 2.5.2006, 18:10
PM MAIL   Вверх
Anonymous
Дата 3.5.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



Да, volvo, ты прав...
Вот, исправился, только снова не хочет.
Код
Program Z3;
Var
i,n,a: integer;
St,F: longint;
SumRes:real
function
fact (n:integer): longint;
begin
  write ('input n= ');
  readln (n);
  if n=1 then fact:=1 
  else fact:=n*fact(n-1);
end;
  function
  stepen (a,n:integer): longint;
begin
  if n=1 then stepen:=a
  else stepen:=a*stepen(a,n-1);
end;
  function
  sum (a,n:integer):real;
begin
  if n=1 then sum:=a 
  else
   begin
    St:=stepen (a,n);
    F:=fact(n);
    Sum:=sum(a,n-1)+St/F;
   end;
end;
begin
  write ('input a,n= ');
  read (a,n);
  if (a=0) or (n<0) then
  write ('ERROR');
   begin
    SumRes:=sum(a,n);
   end;
end.

Проблема в том, что запускается, но постоянно просит ввести "n". В чём загвоздка? Если сможете, объясните наглядно.

M
Snowy
Пожалуйста, используйте кнопку "Код"
  

Это сообщение отредактировал(а) Snowy - 3.5.2006, 09:56
PM MAIL   Вверх
volvo877
Дата 3.5.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Anonymous @  3.5.2006,  08:48 Найти цитируемый пост)
запускается, но постоянно просит ввести "n". В чём загвоздка?

Ну, ты же сам просишь вводить N внутри рекурсивной функции... Перепиши Fact вот так:
Код
function fact(n: integer): longint;
begin
  if n=1 then fact:=1
  else fact:=n*fact(n-1);
end;


и будет тебе счастье. А с вещественными значениями a программа точно не должна работать? Только с целыми? 
PM MAIL   Вверх
Anonymous
Дата 3.5.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



а может быть любым числом. Это я так написал, чтобы жизнь себе упростить. Ещё такой вопрос: а где мне вводить тогда n?

Добавлено @ 11:42 
Ещё одно. Я исправил, как ты сказал, но ничего не получилось снова. Программа просит ввести а и n , я ввожу и всё... Дальше возвращаюсь в программу нажатием Alt F5 , там ничего кроме введённых мной а и n больше нет.  smile  Why? 
PM MAIL   Вверх
Romikgy
Дата 3.5.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



Код

rogram Zadanie;    
Var    
  n,i,S,a : integer;    
  fact: longint;

function fact(n: integer): longint;    
begin    
  if n=1 then fact:=1    
  else fact:=n*fact(n-1);    
end;
    
begin    
  
  begin    
    write ('Input n= ');    
    writeln ('Input a= ');    
    if a=0 then    
    writeln ('ERROR');
  S:=0;    
    for i:=1 to n do    
     
    S:=S+exp(i*ln(a))/fact(i);    
    writeln ('S= ',S);    
  end;    
end.
 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
volvo877
Дата 3.5.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Anonymous @  3.5.2006,  10:39 Найти цитируемый пост)
возвращаюсь в программу нажатием Alt F5 , там ничего кроме введённых мной а и n больше нет. Why?  
Потому, что результат не печатаешь:
Код
Program Z3;
Var
i, n: integer;
F: longint;
St, a, SumRes:real;

function fact (n:integer): longint;
begin
  if n=1 then fact:=1
  else fact:=n*fact(n-1);
end;

function stepen(a: real; n: integer): real;
begin
  if n=1 then stepen:=a
  else stepen:=a*stepen(a,n-1);
end;

function sum(a: real; n:integer): real;
begin
  if n=1 then sum:=a
  else begin
    St:=stepen (a,n);
    F:=fact(n);
    Sum:=sum(a,n-1)+St/F;
  end;
end;

begin

  write ('input a,n= ');
  read (a,n);
  if (a=0) or (n<0) then write ('ERROR')
  else begin
    SumRes:=sum(a,n);
    writeln('s = ', sumres:10:5); { <--- Это кто делать должен ? }
  end;

end.

 
PM MAIL   Вверх
Anonymous
Дата 3.5.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



volvo, второй раз спасаешь мне жизнь. Благодарю. Теперь такой вопрос (знаю, что надоел уже) : как покрасивее округлить, потому как выдаёт нечто такое :   2.00000000000000Е+0000, а хотелось бы покрасивее 
PM MAIL   Вверх
e-moe
Дата 3.5.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



Цитата(Anonymous @  3.5.2006,  11:20 Найти цитируемый пост)
как покрасивее округлить, потому как выдаёт нечто такое :   2.00000000000000Е+0000, а хотелось бы покрасивее  

Например так
Код

writeln(s:3:3);

Подробнее читай в хелпе ;) 
PM MAIL WWW ICQ   Вверх
Anonymous
Дата 3.5.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.4.2006

Репутация: нет
Всего: нет



e-moe, Спасибо. smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.