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

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

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

 
 Ответить  Открыть новую тему 
> Вычислить с заданной точностью ε
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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


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


mea culpa
*****

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

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


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


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

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


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


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


Бывалый
***

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

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


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

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

я имею ввиду, что надо делать с for, а не с inc
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






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


Бывалый
***

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

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


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

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

и так далее на очередное число. Но ведь факториал это произведение, например если n=5 то 1*2*3*4*5?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.03.2024 6:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name