Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождение суммы рядов 
:(
    Опции темы
Carlos
Дата 26.6.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!

Помогите решить задачу.
Найти сумму ряда с точностью e=10^-3, общий член которого an=(2n-1)/2^n

Примечание: 
an= - здесь n индекс

Заранее спасибо. 
PM MAIL   Вверх
Palladin
Дата 26.6.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



[censored 2] что здесь сложного то????
на вскидку

Код

program RooR;
var
n,i:integer;
an:real;
begin
write('Vvedite N: ');
Readln(n);
an:=1;
for i:=1 to n do 
begin
an:=an*((2*i-1)/(exp(i*ln(2))));
end;
Write('an=',an:3:3);
Readln;
end;



Вроде как всё, писал навскидку но должо работать, хотя может я не понял что тебе нужно было smile  


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
volvo877
Дата 26.6.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



RooR, задание внимательно прочел?
Цитата(Carlos @  26.6.2006,  13:19 Найти цитируемый пост)
Найти сумму ряда

Причем, явно НЕ через For, а "с точностью" - как минимум Repeat ... Until 

Например, так:
Код
const eps = 0.001;
var
  n, i: integer;
  s, next, divider: real;

begin
  s := 0; n := 1;
  divider := 1;

  repeat

    divider := divider * 2;
    next := (2*n - 1)/divider;

    inc(n);
    s := s + next

  until next < eps;
  writeln('s = ', s:10:5);
end.
  

Это сообщение отредактировал(а) volvo877 - 26.6.2006, 20:00
PM MAIL   Вверх
Palladin
Дата 26.6.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



[censored 2] , дак чисто вместо an* написать an+  а до этого p присовить не 1 а 0 smile)))



Код

program RooR;
var
n,i:integer;
an:real;
begin
write('Vvedite N: ');
Readln(n);
an:=0;
for i:=1 to n do 
begin
an:=an+((2*i-1)/(exp(i*ln(2))));
end;
Write('an=',an:3:3);
Readln;
end;


Добавлено @ 20:11 
Хз, может ему нужно ответ с точностьюsmile)) а может и как ты написал, вопрос некоректно написанsmile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
UpL1nK
Дата 29.6.2006, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 3.12.2005
Где: Тюмень

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



Roor, по условию мы не знаем когда цикл закончится, поэтому надо использовать Repeat или  While 
For тут никак не подходит.
и еще )
Код

for i:=1 to n do    
begin    
an:=an+((2*i-1)/(exp(i*ln(2))));    
end;

Зачем begin end ?smile 
--------------------
Макс
PM MAIL ICQ   Вверх
Palladin
Дата 29.6.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Для надёжности smile 

А вообще вот, пускай пользователь вводит точность да и всёsmile)) smile 

Код

Program RooR;
var
t,an,n,w:real;
begin
an:=0;
Write('vvedite N:');
Readln(n);
Write('Vvedite tovnost:');
Readln(t);
w:=t;
    if t<=n then begin
 while t<=n do 
   begin
  an:=an+(2*t-1)/exp(2*ln(t));
    t:=t+w;
     end;//если нужно выводить все получаемые элементы то напиши перед этого енда Write(an);
   end
else
  Writeln('Tochnost ne mojet Bbitb bolshe N:)');
  Writeln('Summa ryada:',an:4:4);
  end.


Сейчас надеюсь всё правильно хотя, программу не проверял, писал здесь сразу smile 

            


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
volvo877
Дата 29.6.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



RooR, да откуда ты вообще взял, что N надо вводить??? Это же формула общего члена ряда. И потом. Ты точность собрался с количеством сравнивать?  smile  
PM MAIL   Вверх
Palladin
Дата 29.6.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Ну дак сумма рядов так и вычисляется, нужно же знать когда закончить smile а по поводу сравнения это сделано для того чтобы не было глюка, т.к. если точность будет больше конечного члена, то либо вычисления вообще не будет либо ошибка smile 

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

Код

Program RooR;
var
s:array[1..100]of real;
t,nn,nk:real;
i:integer;
begin
Write('Введите начальный элемент вычисления:');
Readln(nn);
Write('Введите конечный:');
Readln(nk);
Write('Введите шаг изменения N(точность)');
Readln(t); 
i:=1;   //делаем индекс первого элемента массива 1
 if nn<nk then //проверяем на правильность ввода
    begin
      while nn<=nk do                 //цикл счёта функции
        begin 
         s[i]:=s[i-1]+(2*nn-1)/exp(2*ln(nn)); // непосредственно сумма
         Writeln('S[',i,']=',s[i]:3:3);  
         nn:=nn+t;                              // увеличиваем nn с точностью t
         i:=i+1;                                    //счётчик элемента массива
         end;
      end
  else
Writeln('Ошибка!!!!!!');
end.

  

Это сообщение отредактировал(а) RooR - 29.6.2006, 14:04


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
volvo877
Дата 29.6.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Я еще раз повторяю: ничего вводить не надо. Просто незачем. Считаются значения:

S = (2*1 - 1)/2^1 + (2*2 - 1)/2^2 + (2*3 - 1)/2^3 + ...

Ну, и чего тут должно быть Nn и Nk?

Программа должна остановиться, как только достигнута требуемая точность... Как это сделать - показано в посте №3... 
 
PM MAIL   Вверх
Palladin
Дата 29.6.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Ладно всё проехали, может ты и прав Volvo877, я писал так как меня учили решать такие задачи, зная наших преподов, я могу с лёгкостью с тобой согласится smile  


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
remax
Дата 30.6.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



На самом деле, легко можно найти последний член ряда и затем, зная N использовать For. И так количество действий (операторов) будет не больше(!), чем в варианте с логическим циклом. Кроме того, для медленных компов и большого числа иттераций желательно использовать арифметические циклы а не логические. Хотя, и так и так правильно.  smile  


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

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


 




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


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

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