решил задачу да неправильно, не знаю в чём причина, уже всё перепробовал,ответ есть, но только он неправильный
текст такой:1+((2 в степени n)/(2 в степени n+1)),и всё это в цикле,который начинается с 1/2... и т.д.
Код
uses crt;
var n,i,j:byte;
znam,chisl,sum:real;
begin
clrscr;
write('n=');
readln(n);
znam:=1;
for i:=1 to n do
begin
sum:=exp(i*ln(2))/exp((i+1)*ln(2));
znam:=znam+sum;
end;
while n>=1 do
begin
chisl:=1;
sum:=0;
for i:=1 to n-1 do
begin
sum:=exp(i*ln(2))/exp((i+1)*ln(2));
chisl:=chisl+sum;
end;
znam:=chisl/znam;
n:=n-1;
end;
writeln('otvet=',znam:2:6);
readkey
end.
Не забываем заключать код программы в соответсвтующие теги!
Бродяжник
17.08.2004 12:15
Постановка задачи неясна. Запишите, пожалуйста, общую формулу полностью. По условию похоже, что надо посчитать сумму числового ряда
S=sum(1+(2^n)/(2^(n+1))) - это, так сказать, псевдокод <_<
(Индекс n меняется от? и до?) А в приведенном решении описаны какие-то более запутанные расчеты.
BlackShadow
17.08.2004 15:18
Ну попадись ты мне! Руки поотшибаю! Кто же двойку так в степень возводит???
2^n = 1 Shl n!
Ладно, едем дальше. У тебя в формуле стоит 1+... В программе я этого не наблёл. А вообще там трудно что понять
Если тебе надо посчитать сумму ряда, то делается это так:
Код
Var
i,n:Integer;
s:Double;
Begin
ReadLn(n);
s:=0;
For i:=1 To n Do
s:=s + (1 + (1 Shl n)*1.0/(1 Shl (n + 1)));
WriteLn(s)
End.
Ты условия уточни...
З. Ы. : код вроде как оформлять прянято...
текст примерно такой: 1/2/4/2^n/2^n+1, только ещё перед каждым знаком / стоит 1+
BlackShadow
18.08.2004 16:34
догнал. После обеда напишу.
BlackShadow
18.08.2004 17:49
Всё-таки не до конца понял. Точнее я понял так, как на этой картинке. Есди чего не так, то изобрази это в Paint'е и пришли.
что-то я не понял как сюда паинт затолкать
BlackShadow
19.08.2004 17:36
Я тоже не понял, пока не объяснили
В самом низу есть кнопка "ответить". Вот её нажми, а там и появится место где файл приатачить можно.
получилось, теперь попробуйте решить, я уже не знаю что и делать, даже мои знакомые не знают как решать
Бродяжник
20.08.2004 14:38
Решить как будто бы можно. Алгоритм нужно строить "снизу вверх", то есть от самого нижнего знаменателя. И будет всего один цикл типа
FOR I:=N DOWNTO 0 DO
(Примерно так.) Сам расчет строится по принципу
1. Вначале R := 2^(n+1)
2. Далее для всех i от n до 0 делаем следующее:
R := 1 + ((2^i)/R)
В итоге должна получиться та же формула, что и у Вас, но еще +1. Эту единицу можно в конце вычесть, если нужно. Программу пишите сами. Когда напишете, можем поправить. Удачи!
BlackShadow
20.08.2004 19:54
Где-то так:
Код
Var
n:Integer;
d1,d2,d3,Result:Double;
Begin
ReadLn(n);
d1:=1 Shl n;
d2:=1 Shl (n+1);
Rseult:=0;
While d1>= 1 Do
Begin
d3:=d1/2;
d2:=1+d1/d2;
d1:=d3
End;
d2:=d2-1;
WriteLn(d2)
End.
Вроде так, если я ничего не напутал...
Код
Const n=10;
Function drob(i : Byte) : Real;
Begin
If i=n then
Drob:=1+(1 shl i)/(1 shl (i+1))
Else
Drob:=1+2/Drob(i+1);
End;
Begin
Writeln('n = ',n,' result = ',(1/drob(1)):8:4);
End.
Проверьте, а то мне было лениво на калькуляторе значения прорабатывать...
Решается рекурсивной функцией.
Не забывать поставить условие для выхода из функции!!! Иначе зациклится!
Условие там и так уже стоит:
Код
If i=n then
APAL,
Это я не тебе адресовал, а Ksanderу. ;)
romtek, спасибо тебе за ответ, если ты умеешь решать рекурсию может решишь мне задачу с помощью реккурентных формул, но только не надо путать с рекурсией
хочу сказать что ни одно из предложенных вами решении задачи не оказалось правильным, неужели вам самим не интересно решить эту задачу
Цитата(Ksander @ 22.08.04 22:55)
хочу сказать что ни одно из предложенных вами решении задачи не оказалось правильным, неужели вам самим не интересно решить эту задачу
А в чем неправильность-то? ;)
вроде всё правильно,но когда время доходит до ответа,там даже близко нет правильного ответа,правильный ответ для 1 это 0.666, а выдаёт ответ больше 1
Что-то ты напутал!
Я проверил -вот результат:
C:\WINNT\SYSTEM32\DRIVERS\HASPDOS.SYSC:\WINNT\SYSTEM32\DRIVERS\HASPDOS.SYSTurbo
Pascal Version 7.0 Copyright © 1983,92 Borland International
n = 1 result = 0.6667
n = 10 result = 0.4997
n = 10 result = 0.4997
n = 1 result = 0.6667
все сходится.
Может ты не мой код запускал?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.