-Maks-, я, по-моему, уже ТЕБЕ же делал нечто подобное. Теперь сам... Идешь сюда: FAQ: Общие вопросы по математике и смотришь, как реализовано разложение в ряд... У тебя почти то же самое...
Гость
15.03.2006 1:01
мисс_граффити Я не понял, что мне делать с епсилон и альфа и не знаю как описать факториал!
Цитата
-Maks-, я, по-моему, уже ТЕБЕ же делал нечто подобное.
Вообще-то нет, я на этом форуме недавно!
MoM
15.03.2006 1:09
И ещё вопрос со следующей задачей: 1. Определить, является ли натуральное число N, вводимое с клавиатуры, степенью двойки. Задачу надо решить с помощью цикла For. Как реализовать этот цикл?
volvo
15.03.2006 1:22
MoM, я дал тебе ссылку, где объясняется, как решать первую задачу. БУДЬ ДОБР зайти в FAQ, и поискать хоть чуть-чуть! И второе задание тоже там есть!
На будущее: не надо делать в одном месте свалку вопросов. Одна тема - один вопрос.
MoM
15.03.2006 1:49
Цитата
я дал тебе ссылку, где объясняется, как решать первую задачу. БУДЬ ДОБР зайти в FAQ
Спасибо за ссылку, зашёл, прочёл, буду разбираться! А насчёт степени двойки там только это - is_power_2 := ((x and Pred(x)) = 0), а что это означает... И я не знаю как сделать эту задачу с циклом For.
мисс_граффити
15.03.2006 1:52
про степень двойки - обязательно for? по-моему,это здесь жутко неудобно.
можно, конечно, принудительно присваивать значение, соответствующее выходу из цикла, но это изврат...
MoM
15.03.2006 2:18
Цитата
про степень двойки - обязательно for?
Да, обязательно! Весь смысл решения этой задачи именно в этом!
volvo
15.03.2006 2:50
Смысла делать это через 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);
мисс_граффити
15.03.2006 3:13
если про двоичный сдвиг знают. можно иначе. некрасиво и извращенно.
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
15.03.2006 3:27
Цитата(мисс_граффити @ 14.03.2006 22:13)
n-очевидно, целое положительное (или отрицательные и дробные степени двойки тоже рассматривать?)
Цитата(MoM @ 14.03.2006 20:09)
1. Определить, является ли натуральное число N, вводимое с клавиатуры, степенью двойки.
MoM
15.03.2006 3:51
мисс_граффити Спасибо, работает! А что означает эта строка - n:=round(n/2)?
мисс_граффити
15.03.2006 3:56
Цитата(MoM @ 14.03.2006 23:51)
мисс_граффити Спасибо, работает! А что означает эта строка - n:=round(n/2)?
n присваиваем значение округленного n/2. Но поскольку сначала проверяем, что делится нацело, это сделано только для совместимости типов.
volvo, правила меняются по ходу игры... вон, в соседней теме. сначала надо было посчитать количество выпавших 100... а теперь уже совсем другое сделать.
MoM
16.03.2006 1:47
Вот пробовал решить ф-цию:
Код
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
16.03.2006 1:53
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-го элемента последовательности (если он был бы тебе нужен), тебя бы ждал сюрприз Факториал-то не помещается даже в LongInt ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.