Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Вычислить значение функций 
V
    Опции темы
Koschei
Дата 12.10.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вычислить значение функций "на рисунке" с точностью E=10^-4,где x изменяется от 0,2 до 2 с шагом 0.1.
вычисление y оформить в функцию,результаты вывести в виде таблицы.


Помогите решить задачу и написать текстовый алгоритм,или хотя бы подсказажите чего и как делать.

Это сообщение отредактировал(а) Koschei - 13.10.2006, 12:12

Присоединённый файл ( Кол-во скачиваний: 46 )
Присоединённый файл  _______.GIF 2,26 Kb
PM MAIL   Вверх
Snowy
Дата 12.10.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Перенесено из Паскаля
PM MAIL   Вверх
Alexeis
Дата 12.10.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Модератор: название скорректировано в соответствии с правилами раздела

Добавлено @ 16:33 
Koschei, неразборчиво формула написана.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 12.10.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Если я правильно разобрал что там написано, то так.
Код

program Project2;
const
  err = 1e-4;

function f(x : double) : double;
var
  n    : integer;
  s, c : double;
  sign : integer;
  fact : double;

Begin
  sign := 1;
  fact := 3 * 2;
  s := 0;
  n := 1;
  repeat
    c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
    s := s + c;
    sign := -sign;
    inc(n);
    fact := fact * (2 * n) * (2 * n + 1);
  until abs(c) < err;
  f := s;
end;

var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', f(x) : 2 : 4);
    x := x + 0.1
  until x >= 2.001;
  readln;
end.


Это сообщение отредактировал(а) alexeis1 - 12.10.2006, 17:23


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 13.10.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Рисунок поменял.
А текстовый алгоритм никто не поможет написать?хотя бы коротенький из нескольких строк...
alexeis1
чего то задача не работаетsmile,переписал вроде правильно.У тебя она работала?

Это сообщение отредактировал(а) Koschei - 13.10.2006, 12:39
PM MAIL   Вверх
Alexeis
Дата 13.10.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  13.10.2006,  12:23 Найти цитируемый пост)
У тебя она работала?

Да но в консоли в делфи, в сам паскаль я не лез.

Добавлено @ 13:13 
Цитата(Koschei @  12.10.2006,  16:12 Найти цитируемый пост)
написать текстовый алгоритм

это слишком абстрактная задача...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 13.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



текстовый алгоритм типа что то этого:
1. Запрашиваем n (до какой степени решать), x(значение угла) числа.
2. Считываем и заносим в переменные n и x соответственно.
3. С помощью цикла высчитываем все значения заданной функции.
4. Во время выполнения цикла суммируем значения функции в нейтральную переменную.
5. Выводим результат на экран
вот текстовый алгоритм для другой задачи.
alexeis1 А команды дельфи отличаются от паскаля?видно то будет что сделано в дельфи,а не на паскале?(может звучит глупо конечно,но хотелось бы уточнить)
ошибку выдает вот эта команда:fact := 3 * 2; пишет что:error 116:must be in 8087 mode to compile this.
Не обьясниш что за ошибка?
Все прога работает!урааа!спасибо вам!

Это сообщение отредактировал(а) Koschei - 13.10.2006, 14:18
PM MAIL   Вверх
Kuvaldis
Дата 13.10.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

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



Koschei, 
После консультаций с Alexseis1 пришли к выводу, что программа правильная, но..
для Паскаля в начале программы нужно включить директиву компилятора о разрешении работы сопроцессора (первой срокой)
Код

{$N+}


Текстовый алгоритм:
Функция f:

1. Инициализируем локальные переменные
2. Вычисляем текущий член суммы
3. Добавляем его к суммы
4. Если текущий член суммы больше заданной точности, то переход на шаг 2.
5. Возвращаем в вызывающую функцию полученную сумму.

Главная функция

1. Инициализируем переменные
2. Во время выполнения цикла выводим аргумент и значение функции на экран для заданного интервала

Это сообщение отредактировал(а) Kuvaldis - 13.10.2006, 14:06


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Koschei
Дата 13.10.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может это покажется вверх наглости,но не могли бы вы уважаемые написать что каждый шаг делает?
Например:
var
  n    : integer;
  s, c : double;         = здесь идет перечисление "переменных"
  sign : integer;
  fact : double;   
А то как мне обьснить преподу что и как у меня получилось?
PM MAIL   Вверх
Alexeis
Дата 13.10.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



присвоение начальных значений sign - знак +-, fact - вычисление факториала s - накапливет сумму (все члены) n - номер члена 
Код

 sign := 1;
  fact := 3 * 2;
  s := 0;
  n := 1;


c - расчет текущено члена s - добавление значения очередного члена к общей смме
Код

    c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
    s := s + c;
    sign := -sign; // чередуем знак
    inc(n);            // увеличиваем счесчик n на единицу
    fact := fact * (2 * n) * (2 * n + 1); // вычисляем факториал для следующего шага


Код

....
 until abs(c) < err; // выполняем пока очередной член не станет меньше заданной погрешности
  f := s; // возвращаем результат функции.



Ну а вывод на экран надеюсь ясен? просто в цикле распечатка значений функции, правда счетчик уже с плавающей запятой.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 13.10.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот это вы молодцы!Спасибо еще раз!Выташили меня,из омута долгов!
PM MAIL   Вверх
Alexeis
Дата 13.10.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  13.10.2006,  15:23 Найти цитируемый пост)
Выташили меня,из омута долгов! 

Только вот надо галочку ставить что вопрос решен. (Ладно уж поставлю сам smile )


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 14.10.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



оказывается нужно коффициэнт в рекурентном соотношении найти сначала!помогите доделать.пожалуйста,а то преподователь так не принимает smile 
PM MAIL   Вверх
Alexeis
Дата 14.10.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  14.10.2006,  11:03 Найти цитируемый пост)
оказывается нужно коффициэнт в рекурентном соотношении найти сначала!

Чтоб упростить задачу и сделать ее более прозачной я вообще отказался от рекурсии. Ее просто НЕТ smile 
Рекурентное вычисление факториала заменено, на пошаговое, что намного эффективней. Посдите сами при рекурсии надо каждый раз вычислять
1*2*3
1*2*3*4*5
1*2*3*4*5*6*7

А я сделал проще
fact := 1*2*3
fact := fact    *4*5 
fact := fact            *6*7

ИМХО тут рекурсия нужна как телеге 5-е колесо. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 14.10.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



alexeis1, 
так препод требует именно в коофицент в рекуретном найти!другие способы ему не нужны!пожалуйста напишите именно в рекуретном!
и можно написать весь текст программы сразу с рекуретном методом?
PM MAIL   Вверх
Kuvaldis
Дата 14.10.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

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



Koschei, 

alexeis1 прав, даже не обязательно вычислять каждый раз x^n = exp(ln(x)) . Можно (и нужно) заметить, что x^n = x * x^(n-1)
Но если тебе уж очень приспичило, то вот вариант с "полноценным" вычислением факториала
Код

{$N+}

const
  err = 1e-4;
//******************************************************************************
function factorial(n : integer) : integer;
var
   f, i : integer;
begin
   f := 1;
   for i := 2 to n do
       f := f * i;
   factorial := f;    
end;
//******************************************************************************
function f(x : double) : double;
var
  n    : integer;
  s, c : double;
  sign : integer;
  fact : double;
Begin
  sign := 1;
  s := 0;
  n := 1;

  repeat
      fact := factorial(2 * n - 1);
      c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      s := s + c;
      sign := -sign;
      inc(n);
  until abs(c) < err;

  f := s;
end;
//******************************************************************************
var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', f(x) : 2 : 4);
    x := x + 0.1    
  until x >= 2.001;    
  readln;
end.
//******************************************************************************




--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Alexeis
Дата 14.10.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Да это сложнее и рекурсивный алгоритм как вегда, для тех кто не боится мозг свернуть.
Код

program Project2;

{$N+}

const
  err = 1e-4;

var
  sign : integer;
  fact : double;
  level: Integer;

function Recur(x : Double; n : integer) : Double;
var
  c : double;

begin
  if n = 1
  then
    begin
      sign := 1;
      fact := 3 * 2;
      n := 1;
      c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := 1;
        end;
    end
  else
    begin
      c    := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      sign := -sign;
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := n;
        end;
    end;
end;

var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', Recur(x, 1) : 2 : 4, ' n=', level);
    x := x + 0.1
  until x >= 2.001;
  readln;
end.


Модератор: На будщее читайте правила.

Правила (пункт 10): Если вы хотите, чтобы вашу проблему решили при помощи определенного 

алгоритма, то не забудьте описать его! 


Это сообщение отредактировал(а) alexeis1 - 14.10.2006, 13:41


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 15.10.2006, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо,теперь надеюсь препода это устроит.А то виделите подрозумевалось таким образом решать именно...
PM MAIL   Вверх
Koschei
Дата 19.10.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



блин мне не рекурсия нужна,а рекуретный коофициент вычислить!вообшем вычислить значение функций с помошью рекуретного алгоритма!помогите,а?
PM MAIL   Вверх
Alexeis
Дата 19.10.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Вы противоречите сами себе 
Цитата(Koschei @  19.10.2006,  10:42 Найти цитируемый пост)
блин мне не рекурсия нужна


Цитата(Koschei @  19.10.2006,  10:42 Найти цитируемый пост)
вообшем вычислить значение функций с помошью рекуретного алгоритма!помогите


Это одно и тоже. Раберитесь наконец с формулировкой задачи, потому как узнать о чем думает ваш преподаватель я точно не в силах. smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 19.10.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



задача ток решена неправильноsmile этим рекуретным алгоритмом.С ответом прошлого решения не сходится.а там ответ правильный ибо преподаватель ответ проверял..
PM MAIL   Вверх
Alexeis
Дата 19.10.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Код

program Project1;

{$N+}

const
  err = 1e-4;

var
  sign : integer;
  fact : double;
  level: Integer;

function Recur(x : Double; n : integer) : Double;
var
  c : double;

begin
  if n = 1
  then
    begin
      sign := 1;
      fact := 3 * 2;
      n := 1;
      c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      sign := -sign;
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := 1;
        end;
    end
  else
    begin
      c    := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      sign := -sign;
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := n;
        end;
    end;
end;

var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', Recur(x, 1) : 2 : 4, ' n=', level);
    x := x + 0.1
  until x >= 2.001;
  readln;
end.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 27.10.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А не могли бы вы написать текстовый алгоритм?как на той страницеsmileбуду очень признателен!
PM MAIL   Вверх
Alexeis
Дата 27.10.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Koschei, так ты бы сказал, что конкретно надо! Выводится и так все в текстовом виде. Побольше конкретики. Откуда же мне знать, в каком виде у вас там принято оформлять. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 27.10.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не вы не поняли уважаемые,под текстовым алгоритмом я имел ввиду это:
Текстовый алгоритм:
Функция f:

1. Инициализируем локальные переменные
2. Вычисляем текущий член суммы
3. Добавляем его к суммы
4. Если текущий член суммы больше заданной точности, то переход на шаг 2.
5. Возвращаем в вызывающую функцию полученную сумму.

Главная функция

1. Инициализируем переменные
2. Во время выполнения цикла выводим аргумент и значение функции на экран для заданного интервала

и для полного счастья:
Не могли бы вы уважаемые написать что каждый шаг делает?
Например:
var
  n    : integer;
  s, c : double;         = здесь идет перечисление "переменных"
  sign : integer;
  fact : double;   
А то как мне обьснить преподу что и как у меня получилось?
p.s.а точно прокатит рекурсия?"если препод точно имел ввиду рекуретность?" 
А не могли бы вы как-нибудь по простому сделать.чтоб было видно что первокурсник сделал,а то как вы сделали у нас на курсе таких команд не знают дажеsmile
PM MAIL   Вверх
Alexeis
Дата 27.10.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  27.10.2006,  14:42 Найти цитируемый пост)
А не могли бы вы как-нибудь по простому сделать.чтоб было видно что первокурсник сделал,а то как вы сделали у нас на курсе таких команд не знают даже


Каких команд не знают?

Вообще-то рекурсия вещь непростая сама по себе, и алгоритмы получаются хочешь не хочешь, закрученными. Я сам мозг чуть не свернул smile. 

Давайте вначале с командами разберемся.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 27.10.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Каких команд не знают?

ну например эти
recur
sign
PM MAIL   Вверх
Alexeis
Дата 27.10.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



recur - это не команда, а просто имя функции которая вызывает сама себя т.е. рекурсивной. Его можно заменить хоть на Vasea_Pupkin smile 

sign = это имя переменной, которая хранит значения знака члена ряда. (он же чередуется плюс / минус), вот она и меняет значение -1 +1.

Какие еще названия не ясны?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 27.10.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Какие еще названия не ясны? 

ну с остальными ясно.
Мне бы текстовой алгоритмик и что действия обозначают;)А то без этого мне серавно не сдать лабу...
p.s.задача не решена правильно ибо опять ответ с первым решением(тот который не рекуретным сделан) не сходится smile (а там решено правильно),да еще какая то n появилось в ответе.это вообше чего такое?

Это сообщение отредактировал(а) Koschei - 27.10.2006, 19:11
PM MAIL   Вверх
Koschei
Дата 28.10.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товариши не бросайте меня на пол пути.помогите сделать все правильно! smile 
PM MAIL   Вверх
Alexeis
Дата 28.10.2006, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Я не бросаю, просто у меня проблемы с конектом.
Код

function Recur(x : Double; n : integer) : Double;
var
  c : double;

begin

Эта функция за один вызов считает один член.
Все члены вычисляются последовательно от первого до последнего, потому вызов производится так
Recur(x, 1) 
Код

var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', Recur(x, 1) : 2 : 4, ' n=', level);
    x := x + 0.1
  until x >= 2.001;
  readln;
end.


Для первого члена идет особая инициализация, потому он считается отдельно. Т.е. идет проверка
Код

if n = 1 //если первый член
  then
    begin
      sign := 1; //у первого члена знак +1
      fact := 3 * 2; // (2*(1)+1) = 3 - т.е считаем факториал 3-х
      n := 1;                  // гы. это осталось от прошлого решения оно нифига не делает его нужно удалить
      c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact); //вычисляем очереднойчлен т.е. в данном случае первый
      sign := -sign;        //меняем знак (для вычисления следующего члена)
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1); //вычисляем факториал для следующего члена (5!)

      if Abs(c) > Err (если значене члена по мдулю болше погрешности то вычисляем рекурсивно второй член (а в нем может быть третий, четверый и т.д.))
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c; //иначе говорим что все нашли с задой точностью и возвращаем значение
          level := 1; //и глубину
        end;
    end


exp(n * ln(x)) - так вычисляется значение x^n.

Код

else //это код вычисления членов 2 и выше
    begin
      c    := sign * exp(n * ln(x)) / ((2 * n - 1) * fact); //все переменные вычислены на предыдущем шаге, потому сразу вычисляем очередной член (формула та же что и для первого)
      sign := -sign; //чередум знак 
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1); //вычисляем факториал следующего нечетного числа

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1) //аналогично, если член больше погрешности, что считаем следующий и сумируем его с текущим.
      else
        begin
          Recur := c; //или просто возвращаем значение, если он меньше.
          level := n; //и глубину 
        end;
    end;
end;


если посмотреть, то в рекурсивную функцию каждый раз передается номер больший на 1 
Recur := c + Recur(x, n + 1) - так и осущиствляется инкримет членов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 28.10.2006, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да но товариш родной,задача с первым решением не сходитсяsmile,а там как я уже говорил ответ правильный!отсюда вывод что задача рекурсией неправильна!помогите переделать  люди,а то я скоро буду в армииsmile..
PM MAIL   Вверх
Alexeis
Дата 28.10.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Как не сходится. Тот самый последний вариант сходится. Я специально проверял после исправления! Запускал оба варианта и смотрел по содержимому окон. Наверное проверялся не самый последний вариант.

Добавлено @ 20:27 
Вот ссылка на уже верный вариант http://forum.vingrad.ru/index.php?showtopi...amp;st=30&#


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 29.10.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Вроде код не по порядку написан,может быть сразу напишеш готовый текст программы?
PM MAIL   Вверх
Alexeis
Дата 29.10.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  29.10.2006,  08:38 Найти цитируемый пост)
может быть сразу напишеш готовый текст программы? 

Так я же дал ссылку на готовый код. Коментарии писал для того чтобы было понятно как работет. Что неужели так сложно из этого скомопновать то что нужно?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 29.10.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата


Так я же дал ссылку на готовый код. Коментарии писал для того чтобы было понятно как работет. Что неужели так сложно из этого скомопновать то что нужно?



Меня ссылка опять на эту страницу выкидываетsmile.Пожалуйста напиши его сюда!
Или ты имел ввиду этот верхний(всмысле вверху страницы) строчки кода?так я непонял чего  и куда писатьsmile.Можеш тогда сразу нормально написать?а то блин не выхордит у меня smile 
PM MAIL   Вверх
Alexeis
Дата 29.10.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  29.10.2006,  17:25 Найти цитируемый пост)
Меня ссылка опять на эту страницу выкидывает

правильно это же ссылка на пост который работает уже так как надо. Пока страница грузится нужно подождать. В конце загрузки будет виден нужный пост.

Это сообщение отредактировал(а) alexeis1 - 29.10.2006, 18:26


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 29.10.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

правильно это же ссылка на пост который работает уже так как надо. Пока страница грузится нужно подождать. В конце загрузки будет виден нужный пост.

не вижу хоть убей.может куда-нибудь перезальеш?или в личку кинеш?
PM MAIL   Вверх
Alexeis
Дата 29.10.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Код


program Project1;

{$N+}

const
  err = 1e-4;

var
  sign : integer;
  fact : double;
  level: Integer;

function Recur(x : Double; n : integer) : Double;
var
  c : double;

begin
  if n = 1
  then
    begin
      sign := 1;
      fact := 3 * 2;
      n := 1;
      c := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      sign := -sign;
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := 1;
        end;
    end
  else
    begin
      c    := sign * exp(n * ln(x)) / ((2 * n - 1) * fact);
      sign := -sign;
      fact := fact * (2 * (n + 1)) * (2 * (n + 1) + 1);

      if Abs(c) > Err
      then
        Recur := c + Recur(x, n + 1)
      else
        begin
          Recur := c;
          level := n;
        end;
    end;
end;

var
  x : double;
begin
  x := 0.2;
  Repeat
    Writeln('x= ', x : 1 : 1, '  f= ', Recur(x, 1) : 2 : 4, ' n=', level);
    x := x + 0.1
  until x >= 2.001;
  readln;
end.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Koschei
Дата 29.10.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все спасибо огромное программа отлично работает!
p.s.Ток один вопрос зачем в ответе n выводится?
PM MAIL   Вверх
Alexeis
Дата 29.10.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Koschei @  29.10.2006,  21:12 Найти цитируемый пост)
p.s.Ток один вопрос зачем в ответе n выводится? 

Так это и есть уровень рекурсии (или ее глубина)  который требовался по условию. Он же и является числом членов вычисленных в сумме.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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