Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычислить функцию!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Maks-
Помогите, пожалуйста, решить задачу:

Вычислить с применением repeat ... until: b=1+(xlna)/1! + ((xlna)^2)/2! + ... + ((xlna)^n)/n!=a^x. Исходные данные: епсилон=0,01, х=3.0, альфа=2,5. Ответ: 15,62.
мисс_граффити
Сам пробовал делать?

Что именно не получается?
volvo
-Maks-, я, по-моему, уже ТЕБЕ же делал нечто подобное. Теперь сам... Идешь сюда:
FAQ: Общие вопросы по математике
и смотришь, как реализовано разложение в ряд... У тебя почти то же самое...
Гость
мисс_граффити
Я не понял, что мне делать с епсилон и альфа и не знаю как описать факториал!

Цитата
-Maks-, я, по-моему, уже ТЕБЕ же делал нечто подобное.

Вообще-то нет, я на этом форуме недавно!
MoM
И ещё вопрос со следующей задачей:
1. Определить, является ли натуральное число N, вводимое с клавиатуры, степенью двойки. Задачу надо решить с помощью цикла For.
Как реализовать этот цикл?
volvo
MoM, я дал тебе ссылку, где объясняется, как решать первую задачу. БУДЬ ДОБР зайти в FAQ, и поискать хоть чуть-чуть! И второе задание тоже там есть!

На будущее: не надо делать в одном месте свалку вопросов. Одна тема - один вопрос.
MoM
Цитата
я дал тебе ссылку, где объясняется, как решать первую задачу. БУДЬ ДОБР зайти в FAQ

Спасибо за ссылку, зашёл, прочёл, буду разбираться!
А насчёт степени двойки там только это - is_power_2 := ((x and Pred(x)) = 0), а что это означает... И я не знаю как сделать эту задачу с циклом For.
мисс_граффити
про степень двойки - обязательно for?
по-моему,это здесь жутко неудобно.

можно, конечно, принудительно присваивать значение, соответствующее выходу из цикла, но это изврат...
MoM
Цитата
про степень двойки - обязательно for?

Да, обязательно! Весь смысл решения этой задачи именно в этом!
volvo
Смысла делать это через For не вижу по-прежнему... Но делается это так:
  readln(n);
count := 0;
for i := 0 to sizeof(n) * 8 - 1 do
if (n shr i) and 1 = 1 then inc(count);
writeln('Степень двойки? ', count = 1);
мисс_граффити
если про двоичный сдвиг знают.
можно иначе.
некрасиво и извращенно.

for i:=1 to max do 
{конечная константа зависит от типа данных. какую макс. степень двойки можно представить...}
begin
if (n=1) then
begin
writeln('yes');
break;
end;

if (n mod 2)=0 then
n:=round(n/2)
else
begin
writeln('no');
break;
end;
end;

ноль, видимо, надо рассматривать отдельно... он степенью двойки не является.
n-очевидно, целое положительное (или отрицательные и дробные степени двойки тоже рассматривать?)

просьба камнями не кидаться.
volvo
Цитата(мисс_граффити @ 14.03.2006 22:13)
n-очевидно, целое положительное (или отрицательные и дробные степени двойки тоже рассматривать?)

blink.gif blink.gif
Цитата(MoM @ 14.03.2006 20:09)
1. Определить, является ли натуральное число N, вводимое с клавиатуры, степенью двойки.
MoM
мисс_граффити
Спасибо, работает! А что означает эта строка - n:=round(n/2)?
мисс_граффити
Цитата(MoM @ 14.03.2006 23:51) *

мисс_граффити
Спасибо, работает! А что означает эта строка - n:=round(n/2)?

n присваиваем значение округленного n/2. Но поскольку сначала проверяем, что делится нацело, это сделано только для совместимости типов.

volvo, правила меняются по ходу игры...
вон, в соседней теме. сначала надо было посчитать количество выпавших 100... а теперь уже совсем другое сделать.
MoM
Вот пробовал решить ф-цию:

Код
uses crt;
var delta,x,a,epsilon,b:real;
    i,k:Integer;
begin;
delta:=1;
b:=delta;
epsilon:=0.01;
k:=0;
readln(x,a);
repeat
inc(k);
delta:=exp(k*ln(x*ln(a)))/k;
b:=b+delta;
until (delta>epsilon);
writeln(b);
readln;
end.


Как описать факториал?
volvo
MoM, пойми, я не просто так дал тебе ссылку на разложение в ряд... Тебе как таковой файториал не нужен! Смотри:
x0 = 1
x1 = x*lna / 1
x2 = (x*lna)^2 / 2! = x1 * (x*lna) / 2
x3 = (x*lna)^3 / 3! = x2 * (x*lna) / 3
...

Понимаешь? Это и есть рекуррентная последовательность - зная предыдущий элемент вычисляешь последующий... А иначе, например, при вычислении 14-го элемента последовательности (если он был бы тебе нужен), тебя бы ждал сюрприз smile.gif Факториал-то не помещается даже в LongInt ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.