IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вычислить с заданной точностью ε
marwell
сообщение 19.11.2009 21:37
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


задали задачу dry.gif может, кто сможет помочь? я написал программу
var x,y,z,i,n: integer;
s,m,e:real;
begin
write ('vvedite x');
readln (x);
write ('vvedite n');
readln (n);
write ('vvedite e');
readln (e);
y:=1;
z:=1;
s:=1;
for i:=1 to n do
if y/z>e then {училка говорит,что тут нужен while,а не if.Пробовал с while,но прога вычисляет неверно mad.gif }
begin
z:=z*i;
y:=y*(2*x);
s:=s+y/z;
end;
write (s:9:5);
readln;
end.

задание прикреплено

М
Тэги!! Правила раздела, п.2 (подними глаза на верх страницы).
Lapp



Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.11.2009 12:25
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(marwell @ 19.11.2009 21:37) *
Пробовал с while,но прога вычисляет неверно
Покажи вариант с while, плз.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 20.11.2009 22:11
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


А какие исходные данные известны, x,n и точность? Точность - это в смысле количество знаков после запятой?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 20.11.2009 23:00
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 20.11.2009 12:25) *

Покажи вариант с while, плз.


var x,y,z,i,n: integer;
s,m,e:real;
begin
write ('vvedite x');
readln (x);
write ('vvedite n');
readln (n);
write ('vvedite e');
readln (e);
y:=1;
z:=1;
s:=1;
for i:=1 to n do
while y/z>e do
begin
z:=z*i;
y:=y*(2*x);
s:=s+y/z;
end;
write (s:9:5);
readln;
end.



Добавлено через 3 мин.
Цитата(Unconnected @ 20.11.2009 22:11) *

А какие исходные данные известны, x,n и точность? Точность - это в смысле количество знаков после запятой?

x и n вводятся пользователем, точность - это типа как только очередное значение слагаемого становится меньше ε, цикл останавливается и выводится сумма
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.11.2009 4:03
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


marwell, тебе не нужно вводить n - оно определяется точностью. Цикл for совсем лишний. И с типами чисел ты все перепутал - как могли быть x,y,z целыми? Речь же идет о вещественных. Кроме прочего, лучше использовать double вместо real. И последнее: не нужно отдельно считать числитель и знаменатель - будет короче, проще и надежнее (меньше вероятность переполнения).
Смотри, как надо:
var
i: integer;
x,y,s,e: double;

begin
write ('vvedite x: ');
readln (x);
write ('vvedite e: ');
readln (e);
y:=1;
s:=1;
i:=1;
while y>e do begin
y:=y*2*x/i;
s:=s+y;
Inc(i)
end;
write (s:9:5);
readln;
end.

Что неясно - спрашивай.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 21.11.2009 21:59
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 21.11.2009 4:03) *

marwell, тебе не нужно вводить n - оно определяется точностью. Цикл for совсем лишний. И с типами чисел ты все перепутал - как могли быть x,y,z целыми? Речь же идет о вещественных. Кроме прочего, лучше использовать double вместо real. И последнее: не нужно отдельно считать числитель и знаменатель - будет короче, проще и надежнее (меньше вероятность переполнения).
Смотри, как надо:
var
i: integer;
x,y,s,e: double;

begin
write ('vvedite x: ');
readln (x);
write ('vvedite e: ');
readln (e);
y:=1;
s:=1;
i:=1;
while y>e do begin
y:=y*2*x/i;
s:=s+y;
Inc(i)
end;
write (s:9:5);
readln;
end.

Что неясно - спрашивай.

понятно.Но так как тема у меня циклы, то и прогу надо делать с циклами, обязательно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 22.11.2009 2:01
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(marwell @ 21.11.2009 21:59) *
понятно.Но так как тема у меня циклы, то и прогу надо делать с циклами, обязательно
ммм...
У меня возникло смутное подозрение, что ты хочешь сказать, что эта прога без цикла.
Тогда я сомневаюсь, что тебе на самом деле понятно..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 22.11.2009 10:01
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 22.11.2009 2:01) *

ммм...
У меня возникло смутное подозрение, что ты хочешь сказать, что эта прога без цикла.
Тогда я сомневаюсь, что тебе на самом деле понятно..

я имею ввиду, что надо делать с for, а не с inc
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 22.11.2009 12:10
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +



Цитата(marwell @ 19.11.2009 21:37) *
училка говорит,что тут нужен while

Цитата(marwell @ 22.11.2009 10:01) *
я имею ввиду, что надо делать с for, а не с inc

Ну, и чему верить?

А теперь послушай.
Задачи такого типа НИКОГДА не решаются с циклом for. Если не веришь мне, спроси свою "училку". Это во-первых. Во-вторых, никто и никогда не станет всовывать в такую программу два цикла. Поэтому, если она сказала while, то значит этот while не вместо if, а вместо for. И если она и сказала "вместо if" то имела она в виду, что условие, которое в иф - оно должно быть в вайл.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 1.01.2010 18:04
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 21.11.2009 4:03) *

marwell, тебе не нужно вводить n - оно определяется точностью. Цикл for совсем лишний. И с типами чисел ты все перепутал - как могли быть x,y,z целыми? Речь же идет о вещественных. Кроме прочего, лучше использовать double вместо real. И последнее: не нужно отдельно считать числитель и знаменатель - будет короче, проще и надежнее (меньше вероятность переполнения).
Смотри, как надо:
var
i: integer;
x,y,s,e: double;

begin
write ('vvedite x: ');
readln (x);
write ('vvedite e: ');
readln (e);
y:=1;
s:=1;
i:=1;
while y>e do begin
y:=y*2*x/i;
s:=s+y;
Inc(i)
end;
write (s:9:5);
readln;
end.

Что неясно - спрашивай.

я ошибаюсь, или тут в этой строчке "y:=y*2*x/i;" числитель делится на очередное число, а не на факториал? этого числа?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.01.2010 18:22
Сообщение #11


Гость






Цитата
я ошибаюсь, или тут в этой строчке "y:=y*2*x/i;" числитель делится на очередное число, а не на факториал? этого числа?
Да, именно так и происходит, ты не ошибаешься. А теперь подумай, что произойдет, если на первой итерации поделим на 1, на второй на 2, на третьей на 3, и так далее? В итоге на что поделим?
 К началу страницы 
+ Ответить 
marwell
сообщение 1.01.2010 18:37
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(volvo @ 1.01.2010 18:22) *

Да, именно так и происходит, ты не ошибаешься. А теперь подумай, что произойдет, если на первой итерации поделим на 1, на второй на 2, на третьей на 3, и так далее? В итоге на что поделим?

и так далее на очередное число. Но ведь факториал это произведение, например если n=5 то 1*2*3*4*5?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.01.2010 19:05
Сообщение #13


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(marwell @ 1.01.2010 18:37) *
и так далее на очередное число. Но ведь факториал это произведение, например если n=5 то 1*2*3*4*5?

Да. Но

1/n! = 1/(1*2*3*..*n) = 1/1/2/3/../n


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 1.01.2010 19:25
Сообщение #14


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 1.01.2010 19:05) *

Да. Но

1/n! = 1/(1*2*3*..*n) = 1/1/2/3/../n

я уже не знаю что делать wacko.gif училка говорит, что надо делать с while, но условие такое что пока разность между предыдущим и следующим меньше эпсилон dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.01.2010 19:42
Сообщение #15


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(marwell @ 1.01.2010 19:25) *
я уже не знаю что делать wacko.gif училка говорит, что надо делать с while, но условие такое что пока разность между предыдущим и следующим меньше эпсилон dry.gif

Супер-трудно. Вычитание же проходят в академии, да?..
Вот так попробуй:
var
i: integer;
x,y,s,e,d: double;

begin
write ('vvedite x: ');
readln (x);
write ('vvedite e: ');
readln (e);
y:=1;
s:=1;
i:=1;
d:=e+1;
while d>e do begin
d:=y;
y:=y*2*x/i;
d:=Abs(d-y);
s:=s+y;
Inc(i)
end;
write (s:9:5);
readln;
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 1.01.2010 20:45
Сообщение #16


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Lapp @ 1.01.2010 19:42) *

Супер-трудно. Вычитание же проходят в академии, да?..
Вот так попробуй:
var
i: integer;
x,y,s,e,d: double;

begin
write ('vvedite x: ');
readln (x);
write ('vvedite e: ');
readln (e);
y:=1;
s:=1;
i:=1;
d:=e+1;
while d>e do begin
d:=y;
y:=y*2*x/i;
d:=Abs(d-y);
s:=s+y;
Inc(i)
end;
write (s:9:5);
readln;
end.


спасибо большое smile.gif ну уж если она и это не примет, я молча врежу ей lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.04.2024 9:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"