Помощь - Поиск - Пользователи - Календарь
Полная версия: Программирование циклов с условием
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Stas86
Добрый день. Вот такая задачка.

Program z1;
Uses crt;
Var
s,t,n,E:real;
begin
writeln ('Введите точность');
Readln (E);
s:=1;
t:=1;
n:=1;
while abs (t)>e do
begin
n:=n+1;
t:=t*x/n;
s:=s+t;
end;
write ('S', S:0:4);
Readkey;
End.


Преподша сказала, что нужно добавить еще три строчки факториала. Вот собственно в этом и вопрос.
Условие задачки на изображении.[code]
Unconnected
Типа вычислить сумму ряда с заданной точностью? Если да, то на форуме уже было много раз, ищи.
Stas86
Да, да, с заданной точностью.
volvo
Цитата
Преподша сказала, что нужно добавить еще три строчки факториала.
Не нужен здесь факториал. Что ж за преподаватели теперь? Как только задачу начинаешь решать правильным способом - надо обязательно все испортить и учить решению неправильному???
TarasBer
А где в этом коде описан икс?


Добавлено через 3 мин.
И если строго по-математически, то надо не

while abs (t)>e do
...


, а как-то так:

while (x<n) and (abs(t)*n < e*(n-x)) do


это для оценки хвоста.
Stas86
да, да, x пропустил.
Stas86
Дак что, факториал действительно не нужен?
Гость
Факториал не нужен, у тебя и так общий член нормально считается (то есть используется то, что он больше предыдущего в x/n раз). Училку не слушай.
Stas86
Добрый день, посмотрите еще раз задачку. Не знаю, может это и правильно, но я так не думаю. Если запустить и ввести число, программа выдает одно и тоже значение.
Lapp
Цитата(Stas86 @ 9.12.2010 16:34) *
программа выдает одно и тоже значение.
И какое, если не секрет?
Stas86
S=1.0000 вот так и считает
Lapp
а у тебя x случайно не равен 0?
Stas86
Я не знаю, я не очень хорошо разбираюсь в паскале. Поэтому и спрашиваю.
Lapp
Описать-то ты x, видимо описал. Но вот дать ему нужное значение - это, конечно, задача трудновыполнимая.. Да?

Вот и считаешь для x=0 ..

Добавлено через 1 мин.
Цитата(Stas86 @ 9.12.2010 17:08) *
Я не знаю, я не очень хорошо разбираюсь в паскале. Поэтому и спрашиваю.

Вставь ввод значения x.
Stas86
Цитата(Lapp @ 9.12.2010 17:08) *

Описать-то ты x, видимо описал. Но вот дать ему нужное значение - это, конечно, задача трудновыполнимая.. Да?

Вот и считаешь для x=0 ..

Добавлено через 1 мин.

Вставь ввод значения x.


Всмысле описать его в разделе переменных? Описал, считает так же.
TarasBer
ReadLn(x) вставь перед расчётом
Stas86
Цитата(TarasBer @ 9.12.2010 17:27) *

ReadLn(x) вставь перед расчётом


Вставил, считает также.
Давайте немного по-другому.

Program z1;
Uses crt;
Var
s,t,n,x,E:real;
begin
writeln ('Введите точность');
Readln (E);
Readln (x);
s:=1;
t:=1;
n:=1;
while abs (t)>e do
begin
n:=n+1;
t:=t*x/n;
s:=s+t;
end;
write ('S', S:0:4);
Readkey;
End.



Просмотрите еще раз код, что-то все равно не то, я это не вижу. А вот опытный может рассмотреть.

Вот такое задание: Разработать алгоритм и программу для вычисления суммы с
заданной точностью. Получить результат.
Эту задачу уже 2 недели сдать не могу, не принимает преподша.
TarasBer
Какие числа ты вводишь в качестве e и x?
Stas86
Цитата(TarasBer @ 9.12.2010 17:38) *

Какие числа ты вводишь в качестве e и x?


В коде программы, как я понял ввода этих значений нет. Тогда подскажите, какие присвоить значения? Блин, помогите в написании, очень слабо понимаю паскаль, а сдавать надо уже завтра.
volvo
Цитата
В коде программы, как я понял ввода этих значений нет.
С такими познаниями, как ты завтра что-то сдавать собираешься? У тебя программа запрашивает
Цитата
Readln (E);
Readln (x);
, тебя спросили, что ты вводишь в ответ на запрос?
Stas86
Я вам и говорю, что совершенно ничего не понимаю. Вы вместо того, чтобы ответить на вопрос, спрашиваете меня о том, в чем я не разбираюсь.
Freedom
Цитата(Stas86 @ 9.12.2010 18:37) *

Я вам и говорю, что совершенно ничего не понимаю. Вы вместо того, чтобы ответить на вопрос, спрашиваете меня о том, в чем я не разбираюсь.

Ну мы же тоже должны знать какие числа вы вводите при запуске программы,чтоб чем нибудь помоч. Вам задали простой вопрос, а вы говорите что не разбираетесь в этом.
-TarasBer-
Тебе программа при старте показывает чёрное окно с мигающим курсором. Ты набираешь на клавиатуре число, нажимаешь ентер (это выполнилась строчка Readln(e)), потом вводишь второе число (икс).
Если ты ничего не вводишь, то откуда ты вообще взял "программы выводит ноль"? Как она может что-то вывести, если она всё время ждёт ввода числа e?
Lapp
Стас, ты извини, ничего личного.. Если бы ты прикладывал хоть какие-то минимальные усилия к тому, чтобы что-то ПОНЯТЬ (а не спихнуть), ты бы давно уже все сдал..
Уж тебе все разжевано и рот положено. Пошевели хоть одной извилиной..
Stas86
Вышел я на правильный код, как я думал.
Program z1;
Uses crt;
Var s,t,x,E:real;
n:integer;
begin
write('x=');
readln(x);
write ('Введите точность e=');
readln(e);
s:=1;
t:=1;
n:=1;
while abs(t)>e do
begin
n:=n+1;
t:=t*x/n;
s:=s+t;
end;
write ('S=', S:0:4);
Readkey;
End.


Но преподша все равно говорит, что задача решена неверно. Сказала, что нужен факториал, так как в формуле присутствуют восклицательные знаки. А также, она не видит здесь степеней, которые находятся в формуле.
Еще раз покажу формулу Изображение
Lapp
Цитата(Stas86 @ 10.12.2010 12:03) *
Но преподша все равно говорит, что задача решена неверно. Сказала, что нужен факториал, так как в формуле присутствуют восклицательные знаки. А также, она не видит здесь степеней, которые находятся в формуле.
Но она признает, что ответ правильный?

Может, она хочет, чтоб факториал был оформлен функцией?
TarasBer
> Но преподша все равно говорит, что задача решена неверно.

Может, дело не в том, что код якобы неверный, а в том, что ты не можешь объяснить его работу?

> Сказала, что нужен факториал, так как в формуле присутствуют восклицательные знаки. А также, она не видит здесь степеней, которые находятся в формуле.

Ну тогда преподша слепая дура, шли её нах.
Хотя скорее всего, она специально так говорит, чтобы проверить а видишь ли факториал ты? Я-то вижу, но ты, судя по уровню задаваемых вопросов, этот код сам не понимаешь. А код-то правильный, из FAQ взял?
На её провокации изговнякать код не ведись, если что.

Добавлено через 2 мин.
стоп.

s:=1;
t:=1;
n:=1;
while abs(t)>e do
begin
n:=n+1;
t:=t*x/n;
s:=s+t;
end;

отладчиком пользоваться умеешь? Я применю свой, встроенный в мозг

инициализация
s=1
t=1
n=1
начало цикла
n=2
t=x/2
s=1+x/2
ошибка!

надо s=1+x/1 после первого прохода
перенеси n:=n+1 в конец цикла.
Либо инициализируй его нулём, а не единицей.

Lapp
Цитата(TarasBer @ 10.12.2010 12:15) *
инициализируй его нулём, а не единицей.
Логично yes2.gif
Вместо
n:=1;
сделай:
n:=0;
TarasBer
Цитата(Lapp @ 10.12.2010 12:45) *

Вместо
n:=1;
сделай:
n:=0;


Капитан Очевидность в подробностях раскрывает тайный смысл моего совета!
Lapp
Цитата(TarasBer @ 10.12.2010 12:49) *
Капитан Очевидность в подробностях раскрывает тайный смысл моего совета!
Вольно, боцман Инитегонулем. Сегодня по лишнему половнику баланды матросам.
я добрый..
Stas86
Попробую.
BanneD
 
Program z1;
Uses crt;
Var y,s,t,x,E:real;
n,i:integer;
begin
write('x=');
readln(x);
write ('Введите точность e=');
readln(e);
s:=1;
t:=1;
n:=1;
i:=1;
while abs(t)>e do
begin
y:=exp(i*ln(x));
n:=n*i;
t:=x/n;
s:=s+t;
i:=i+1;
end;
write ('S=', S:0:4);
Readln;
End.


y:=exp(i*ln(x)); - это х в кадрате  х в кубе  х в 4-ой степени  и тд

по алгоритму вроде правельно! но выводит 1 dry.gif
Lapp
Цитата(BanneD @ 17.12.2010 19:46) *
по алгоритму вроде правельно! но выводит 1 dry.gif

А что ты вводишь?

Пожалуйста, прочти правила. Обрати внимание на п.5 Правил Форума и п.2 правил раздела Задачи.
BanneD
Цитата(Lapp @ 18.12.2010 9:01) *

А что ты вводишь?

Пожалуйста, прочти правила. Обрати внимание на п.5 Правил Форума и п.2 правил раздела Задачи.

Ввожу х потому как мы же степень числа будем вычитывать!
А е-это точность!
тут как я понял надо найти приближенное значение числа

y:=exp(i*ln(x)); нарашиваем степень икса
n:=n*i; вычисление факториала
t:=x/n; присвойл переменную, иск (в степени н) деленное на факториал
s:=s+t;
i:=i+1;



Давай рассмотрим как должно это работать вводим х=5
				                    2-ой круг
y:=exp(i*ln(x)); 5 в степени 1=5 5 в степени 2=25
n:=n*i; 1*1=1 1*2=2
t:=x/n; т:=5/1=5 25/2=12,5
s:=s+t; S:=1+5/1=6 1+5/1+25/2=18,5
i:=i+1; i:=1+1=2 2+1=3


вроде алгоритм составлен правельно! но где то есть ошибка! так как не должно выводтиь 1
так же не вижу смысла здесь исползовать абс, так как тут полубому положительные числа выводит! но всё же дело не в абс!
ах да Кап прочел правила
{2. Давать заведомо ложную информацию
5. Выкладывать вредоносную информацию и программы.} ты это имел ввиду?
Lapp
Цитата(BanneD @ 19.12.2010 10:26) *
Ввожу х потому как мы же степень числа будем вычитывать!
Я спрашивал какие значения ты вводишь.

Цитата
ах да Кап прочел правила
{2. Давать заведомо ложную информацию
5. Выкладывать вредоносную информацию и программы.} ты это имел ввиду?

Нет.
Я имел в виду то, что я написал, то есть:
- пункт 5 Правил Форума (не п.1.5, а п.5);
- пункт 2 правил раздела Задачи (промотай эту страницу вверх, будь так добр - и увидишь 8 пунктов).
volvo
Цитата
вроде алгоритм составлен правельно! но где то есть ошибка! так как не должно выводтиь 1
Может где-то и есть, только не в этой программе. Потому что при вводе X = 5 (что следует из твоего предыдущего поста) 1 в результате не получается. Получается
Введите точность e=0.001
S=9.5913

Где 1?
BanneD
Цитата(Lapp @ 19.12.2010 13:38) *

Я спрашивал какие значения ты вводишь.
Нет.
Я имел в виду то, что я написал, то есть:
- пункт 5 Правил Форума (не п.1.5, а п.5);
- пункт 2 правил раздела Задачи (промотай эту страницу вверх, будь так добр - и увидишь 8 пунктов).

сорри=) прочел, исправил!
Цитата(volvo @ 19.12.2010 13:58) *

Где 1?


мда сам себе перечу вместо вещественных я целые числа вводил=) lol.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.