Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Программирование циклов с условием

Автор: Stas86 19.11.2010 18:38

Добрый день. Вот такая задачка.

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 19.11.2010 18:47

Типа вычислить сумму ряда с заданной точностью? Если да, то на форуме уже было много раз, ищи.

Автор: Stas86 19.11.2010 18:49

Да, да, с заданной точностью.

Автор: volvo 19.11.2010 19:25

Цитата
Преподша сказала, что нужно добавить еще три строчки факториала.
Не нужен здесь факториал. Что ж за преподаватели теперь? Как только задачу начинаешь решать правильным способом - надо обязательно все испортить и учить решению неправильному???

Автор: TarasBer 19.11.2010 19:49

А где в этом коде описан икс?


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


while abs (t)>e do
...


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

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


это для оценки хвоста.

Автор: Stas86 19.11.2010 19:53

да, да, x пропустил.

Автор: Stas86 19.11.2010 20:32

Дак что, факториал действительно не нужен?

Автор: Гость 19.11.2010 21:22

Факториал не нужен, у тебя и так общий член нормально считается (то есть используется то, что он больше предыдущего в x/n раз). Училку не слушай.

Автор: Stas86 9.12.2010 20:34

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

Автор: Lapp 9.12.2010 20:53

Цитата(Stas86 @ 9.12.2010 16:34) *
программа выдает одно и тоже значение.
И какое, если не секрет?

Автор: Stas86 9.12.2010 21:03

S=1.0000 вот так и считает

Автор: Lapp 9.12.2010 21:05

а у тебя x случайно не равен 0?

Автор: Stas86 9.12.2010 21:08

Я не знаю, я не очень хорошо разбираюсь в паскале. Поэтому и спрашиваю.

Автор: Lapp 9.12.2010 21:08

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

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

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

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

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

Автор: Stas86 9.12.2010 21:13

Цитата(Lapp @ 9.12.2010 17:08) *

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

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

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

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


Всмысле описать его в разделе переменных? Описал, считает так же.

Автор: TarasBer 9.12.2010 21:27

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

Автор: Stas86 9.12.2010 21:32

Цитата(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 9.12.2010 21:38

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

Автор: Stas86 9.12.2010 21:43

Цитата(TarasBer @ 9.12.2010 17:38) *

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


В коде программы, как я понял ввода этих значений нет. Тогда подскажите, какие присвоить значения? Блин, помогите в написании, очень слабо понимаю паскаль, а сдавать надо уже завтра.

Автор: volvo 9.12.2010 22:27

Цитата
В коде программы, как я понял ввода этих значений нет.
С такими познаниями, как ты завтра что-то сдавать собираешься? У тебя программа запрашивает
Цитата
Readln (E);
Readln (x);
, тебя спросили, что ты вводишь в ответ на запрос?

Автор: Stas86 9.12.2010 22:37

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

Автор: Freedom 9.12.2010 23:35

Цитата(Stas86 @ 9.12.2010 18:37) *

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

Ну мы же тоже должны знать какие числа вы вводите при запуске программы,чтоб чем нибудь помоч. Вам задали простой вопрос, а вы говорите что не разбираетесь в этом.

Автор: -TarasBer- 10.12.2010 2:57

Тебе программа при старте показывает чёрное окно с мигающим курсором. Ты набираешь на клавиатуре число, нажимаешь ентер (это выполнилась строчка Readln(e)), потом вводишь второе число (икс).
Если ты ничего не вводишь, то откуда ты вообще взял "программы выводит ноль"? Как она может что-то вывести, если она всё время ждёт ввода числа e?

Автор: Lapp 10.12.2010 10:32

Стас, ты извини, ничего личного.. Если бы ты прикладывал хоть какие-то минимальные усилия к тому, чтобы что-то ПОНЯТЬ (а не спихнуть), ты бы давно уже все сдал..
Уж тебе все разжевано и рот положено. Пошевели хоть одной извилиной..

Автор: Stas86 10.12.2010 16:03

Вышел я на правильный код, как я думал.

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 10.12.2010 16:14

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

Может, она хочет, чтоб факториал был оформлен функцией?

Автор: TarasBer 10.12.2010 16:15

> Но преподша все равно говорит, что задача решена неверно.

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

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

Ну тогда преподша слепая дура, шли её нах.
Хотя скорее всего, она специально так говорит, чтобы проверить а видишь ли факториал ты? Я-то вижу, но ты, судя по уровню задаваемых вопросов, этот код сам не понимаешь. А код-то правильный, из 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 10.12.2010 16:45

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

Автор: TarasBer 10.12.2010 16:49

Цитата(Lapp @ 10.12.2010 12:45) *

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


Капитан Очевидность в подробностях раскрывает тайный смысл моего совета!

Автор: Lapp 10.12.2010 17:05

Цитата(TarasBer @ 10.12.2010 12:49) *
Капитан Очевидность в подробностях раскрывает тайный смысл моего совета!
Вольно, боцман Инитегонулем. Сегодня по лишнему половнику баланды матросам.
я добрый..

Автор: Stas86 10.12.2010 17:21

Попробую.

Автор: BanneD 17.12.2010 23:46

 
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 18.12.2010 10:01

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

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

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

Автор: BanneD 19.12.2010 14:26

Цитата(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 19.12.2010 14:38

Цитата(BanneD @ 19.12.2010 10:26) *
Ввожу х потому как мы же степень числа будем вычитывать!
Я спрашивал какие значения ты вводишь.

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

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

Автор: volvo 19.12.2010 14:58

Цитата
вроде алгоритм составлен правельно! но где то есть ошибка! так как не должно выводтиь 1
Может где-то и есть, только не в этой программе. Потому что при вводе X = 5 (что следует из твоего предыдущего поста) 1 в результате не получается. Получается
Введите точность e=0.001
S=9.5913

Где 1?

Автор: BanneD 19.12.2010 16:40

Цитата(Lapp @ 19.12.2010 13:38) *

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

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

Где 1?


мда сам себе перечу вместо вещественных я целые числа вводил=) lol.gif