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

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

Форум «Всё о Паскале» _ Задачи _ Работа над суммами и факториалами

Автор: dron4ik 5.01.2008 0:09

Люди добрые обьсните как сделать суммму из элементов комбинаторики это связано с факториалами,


Боьснить не могу эту формулу вообщем надо написать формулу которая бы вичисляла сумму


т.е. 2деленная на 3 умноженная на йота(ийота всегда всегда увеличивается на 1 единицу при сумме) и умноженная на факториал.


Пример

2(вот эту двойку пользователь вводит сам, может вместо двойки написать хоть 100)делим на 3 умноженая на йота факториал + 2(вот эту двойку пользователь вводит сам, может вместо двойки написать хоть 100)делим на 3 умноженая на 2йота(сверху обьснил что при каждой сумме увеличивается на единицу)факториал


Вот такую программу нужно написать в Турбо Паскале , Обьсните или напишите код проги



В заранее благодарен Щеколдин.А.А

Автор: Айра 5.01.2008 0:31

Чему равно йота изначально? До скольки ее можно увеличивать? или тут идет еще и вычисление с заданной точностью?

p.s. а ты можешь написать формулу в word'e и вставить скриншот? rolleyes.gif

Автор: dron4ik 5.01.2008 0:32

сколько пользователь раз задаст стока йота будет увеличиватся начальная йота равна 1

Автор: Client 5.01.2008 0:36

Само задание и формулу ТОЧНО можешь написать??

Автор: dron4ik 5.01.2008 0:37

нет я бы всатил скриншот но не знаю как

Автор: dron4ik 5.01.2008 1:32

посмотрите пожалуйста


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Айра 5.01.2008 1:37

Так ради интереса)) а у тебя какие-нибудь мысли есть? например по факториалу?

Автор: dron4ik 5.01.2008 1:40

Признаюсь, я даже незнаю с чего начать препод не учит не фига....(предпоследняя лаба мне б её сдать)...

Добавлено через 4 мин.
по факториалу знаю как с ними обращаться


фак1=1 фак2=1ум2=2 фак3=1ум2ум3ум=6

Автор: volvo 5.01.2008 1:45

Оля, по факториалу мысли здесь только лишние: вычислять факториал на каждом шаге для этой задачи - то еще извращение, достаточно просто держать в переменной текущий член последовательности и на каждой итерации делить его на порядковый номер итерации...

Можно еще поискать по форуму на тему вычисления суммы ряда, было много подобных задач...

Автор: Айра 5.01.2008 1:47

Цитата
я даже незнаю с чего начать

Ну например с того, что такое факториал, точнее как его найти)) Вот, например, тебе известен 2!, тогда 3!=2!*3
А если применить это к нашей йоте?

Автор: dron4ik 5.01.2008 1:48

volvo напиши код пожалуйста(хочу научится)

Автор: Айра 5.01.2008 1:54

В принципе все так, как и сказал volvo...

var n,s,slag: extended;
yota,maxYota: integer;
begin
write('n= ');
readln(n);
write('макс йота= ');
readln(maxYota);
slag:=n/3; //изначальное значение слагаемого (при х=1)
s:=slag;
for yota:=2 to maxYota do // тут у нас меняет значение йоты (в данном случае х)
begin
slag:=slag/yota; //вычисляется следующее слагаемое (доделиваем на x);
s:=s+slag;
writeln(slag:6:4); //для наглядности смотрим на промежуточные slagаемые))
end;
writeln(s:14:12);
end.

Попробуй научиться, спрашивай, если что..

добавлено: я кое-что изменила, так правильнее.. Можешь сказать что именно непонятно?))

Автор: dron4ik 5.01.2008 1:58

СПАСИБО ТЕБЕ БОЛЬШОЕ!!!!!! ( а можешь обьснить как вообще она работает?)

Добавлено через 19 мин.
Оля а ты уверена что прога работает меня смущает что в скобках написано МАКС и пустота.

Автор: Айра 5.01.2008 2:20

Цитата
Оля а ты уверена что прога работает

blink.gif
..а что должен делать следующий после write('макс х= '); оператор? smile.gif

Автор: dron4ik 5.01.2008 2:24

я если чесно незнаю я щас пробую запустить на паскале

Добавлено через 4 мин.
значение не пральное выдает ввожу я 1рку потом факториал прога просто делит введенную однерку на факториал хотя должна быть задействована 3-ка которая умножается на факториал если приписать команду чтоб было умножение 3-ки на фак то будет отлично

Автор: volvo 5.01.2008 2:35

Цитата
значение не пральное выдает
Ты сначала правильные данные задай, потом будешь говорить, что программа выдает: сначала вводится X, потом - N. Про "факториал" вообще речи нет, зачем (и, главное, КАК) ты его вводишь - я не знаю...

(To Айра: вот видишь, что происходит, когда даешь несоответствующие имена переменным?)

Автор: dron4ik 5.01.2008 2:38

факториал это не просто факториал вот фак из четырех=24 а мы в коде просто используем как обычное число
так нельзя а как можно я незнаю просто фак как то надо расписать

Автор: Айра 5.01.2008 2:41

Цитата
ввожу я 1рку потом факториал

1 - это значение n
"факториал" - там должно быть то число, до которого увеличивается x
..добавь в цикле writeln(slag:6:4); и посмотри чему равны промежуточные слагаемые.. я чет не пойму, что неправильно..

Автор: volvo 5.01.2008 2:43

Цитата
так нельзя
Ясно... Значит, в алгоритме не разобрался... Смотри: если у меня N = 4, и на первой итерации я поделю число на 1, на второй - полученное частное на 2, на третьей - все это на 3, и на четвертой - на 4, то это не будет аналогично тому же самому, что я сделаю сразу X / (1*2*3*4) ? Как ты думаешь? А то, что я написал - это не факториал, часом?

Алгоритм изучай, потом расскажешь, что правильно, а что - нет... А просто так, не увидев значка "!" говорить, что это неверно - не надо...

Автор: dron4ik 5.01.2008 2:44

я тоже не пойму куда это добавить врителн

Автор: Айра 5.01.2008 2:45

Цитата
так нельзя

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

Автор: dron4ik 5.01.2008 2:46

Прости volvo, в программировании нас не учат а по МАТАНУ я уж точно зная

Добавлено через 1 мин.
Оля думаю нельзя но хотя может можно

Автор: Айра 5.01.2008 2:53

Цитата
Оля думаю нельзя но хотя может можно

Ну когда мы проходили вычисления с заданной точностью (там тоже были факториалы) это было не можно, а нужно))

to volvo: >>вот видишь, что происходит, когда даешь несоответствующие имена переменным?
да.. надо работать над собой))


p.s. к администрации: а нельзя сделать что-то типа "во время создания вами ответа в теме появились новые сообщения"? rolleyes.gif а то "некрасиво" порой получается..

Автор: dron4ik 5.01.2008 2:55

мы такое вроде не проходили вычисления с заданной точностью

Автор: Айра 5.01.2008 3:15

Цитата
мы такое вроде не проходили вычисления с заданной точностью

..да дело не в точности, а в вычислении факториала.. Просто нецелесообразно (о, какое слово)) заново считать факториал на каждом шаге цикла, поэтому люди, наверно, и додумались до описанного volvo алгоритма..
У тебя есть какие-то ограничения на алгоритм решения этой задачи? если нет, то разбирай этот алгоритм, задавай конкретные вопросы, попытаемся объяснить))

Автор: dron4ik 5.01.2008 3:18

я понял как факториал должен работать .
пользователь вводит какую нибудь цифру это цифра делится на 3 и умножается на фак( а фак зависит от количества ввода цифры которая делится, так в задаче должна быть сумма этих формул)

Добавлено через 7 мин.
в коде должна присутствовать сумма этих полученных результатов дроби по рисунку









Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Айра 5.01.2008 3:41

..что и происходит в программе.. смотри:

  slag:=n/3;   //первое слагаемое у нас равно n(введенное пользователем число, пусть оно = 2)/(3*1)=0.66667, мы его считаем до цикла           
s:=slag; // соответственно сумма уже равна первому слагаемому
for yota:=2 to maxYota do //тут у нас меняет значение йоты до ее максимума (который ввел пользователь)
//поскольку мы уже посчитали слагаемое при йота=1, то цикл можно начать сразу с 2-ки}
begin
slag:=slag/yota; //вычисляем следующее слагаемое (доделиваем на йоту).. по идее оно
//равно 2/(3*2*1)=0.3333 <- тут мы считали все заново, а если просто поделить
//значение 1-го слагаемого на йоту, то получим тоже самое: 0.6667/2=0.3333..
//Следующее слагаемое (при следующей итерации цикла) тогда будет 0.33333/3=0.11111
//Проверяем на калькуляторе: 2:(3*3!)=2:(3*3*2*1)=0.11111111 -> совпало! smile.gif }
s:=s+slag; //добавляем полученное слагаемое к сумме
writeln(slag:6:4); //для наглядности смотрим на промежуточные slagаемые))
end;
writeln(s:14:12);

Вроде все соответствует заданию и считается правильно.. что не так?

Автор: volvo 5.01.2008 3:49

Цитата
я понял как факториал должен работать .
А теперь пойми, что делает программа (пост №12 - обозначения переменных сохранены):

Пользователь вводит:
N = 2 (само число)
MaxIota = 4 (количество повторений)

Перед циклом:
Slag = N / 3 = 2 / 3 = 2 / (3 * 1) = 2 / (3 * 1!)

Итерация №1 (Iota = 2)
Slag = предыдущее значение Slag / 2 = 2 / (3 * 1!) / 2 = 2 / (3 * 1! * 2) = 2 / (3 * 2!)
S = S + Slag : добавили к сумме

Итерация №2 (Iota = 3)
Slag = предыдущее значение Slag / 3 = 2 / (3 * 2!) / 3 = 2 / (3 * 2! * 3) = 2 / (3 * 3!)
S = S + Slag : добавили к сумме

Итерация №3 (Iota = 4)
Slag = предыдущее значение Slag / 4 = 2 / (3 * 3!) / 4 = 2 / (3 * 3! * 4) = 2 / (3 * 4!)
S = S + Slag : добавили к сумме


Что теперь непонятно?
Какие суммы по-твоему неправильно считаются?

Автор: dron4ik 5.01.2008 12:43

Все теперь все понятно . Спасибо Олечка, спасибо volvo.


Блин я даже незнал что есть такие добрые люди(но это уже следующая тема в другом разделе)!!!



Кстати а мне так стало интересно, это у вас хобби?(программировать)

Автор: Айра 5.01.2008 20:35

[offtop]

Цитата
Кстати а мне так стало интересно, это у вас хобби?(программировать)

Ну, лично у меня сначало было хобби, теперь учу+хобби, а дальше, надеюсь, станет работа+хобби smile.gif))
[/offtop]