Помощь - Поиск - Пользователи - Календарь
Полная версия: решённая задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ksander
решил задачу да неправильно, не знаю в чём причина, уже всё перепробовал,ответ есть, но только он неправильный
текст такой: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.

Не забываем заключать код программы в соответсвтующие теги!
Бродяжник
Постановка задачи неясна. Запишите, пожалуйста, общую формулу полностью. По условию похоже, что надо посчитать сумму числового ряда
S=sum(1+(2^n)/(2^(n+1))) - это, так сказать, псевдокод <_<
(Индекс n меняется от? и до?) А в приведенном решении описаны какие-то более запутанные расчеты.
BlackShadow
Ну попадись ты мне! Руки поотшибаю! Кто же двойку так в степень возводит???

2^n = 1 Shl n!

Ладно, едем дальше. У тебя в формуле стоит 1+... В программе я этого не наблёл. А вообще там трудно что понять sad.gif

Если тебе надо посчитать сумму ряда, то делается это так:

Код

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.


Ты условия уточни...

З. Ы. : код вроде как оформлять прянято...
Ksander
текст примерно такой: 1/2/4/2^n/2^n+1, только ещё перед каждым знаком / стоит 1+
BlackShadow
догнал. После обеда напишу.
BlackShadow
Всё-таки не до конца понял. Точнее я понял так, как на этой картинке. Есди чего не так, то изобрази это в Paint'е и пришли.
Ksander
что-то я не понял как сюда паинт затолкать
BlackShadow
Я тоже не понял, пока не объяснили smile.gif В самом низу есть кнопка "ответить". Вот её нажми, а там и появится место где файл приатачить можно.
Ksander
может получится
Ksander
получилось, теперь попробуйте решить, я уже не знаю что и делать, даже мои знакомые не знают как решать
Бродяжник
Решить как будто бы можно. Алгоритм нужно строить "снизу вверх", то есть от самого нижнего знаменателя. И будет всего один цикл типа
FOR I:=N DOWNTO 0 DO
(Примерно так.) Сам расчет строится по принципу
1. Вначале R := 2^(n+1)
2. Далее для всех i от n до 0 делаем следующее:
R := 1 + ((2^i)/R)
В итоге должна получиться та же формула, что и у Вас, но еще +1. Эту единицу можно в конце вычесть, если нужно. Программу пишите сами. Когда напишете, можем поправить. Удачи!
BlackShadow
Где-то так:
Код

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.

Вроде так, если я ничего не напутал...
APAL
Код
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.


Проверьте, а то мне было лениво на калькуляторе значения прорабатывать... smile.gif
Romtek
Решается рекурсивной функцией.
Не забывать поставить условие для выхода из функции!!! Иначе зациклится!
APAL
Условие там и так уже стоит:
Код
If i=n then
Romtek
APAL,
Это я не тебе адресовал, а Ksanderу. ;)
Ksander
romtek, спасибо тебе за ответ, если ты умеешь решать рекурсию может решишь мне задачу с помощью реккурентных формул, но только не надо путать с рекурсией
Ksander
хочу сказать что ни одно из предложенных вами решении задачи не оказалось правильным, неужели вам самим не интересно решить эту задачу
APAL
Цитата(Ksander @ 22.08.04 22:55)
хочу сказать что ни одно из предложенных вами решении задачи не оказалось правильным, неужели вам самим не интересно решить эту задачу

А в чем неправильность-то? ;)
Ksander
вроде всё правильно,но когда время доходит до ответа,там даже близко нет правильного ответа,правильный ответ для 1 это 0.666, а выдаёт ответ больше 1
APAL
Что-то ты напутал!
Я проверил -вот результат:

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

все сходится.
APAL
Может ты не мой код запускал?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.