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

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

Образовательный студенческий форум _ Информатика / Программирование _ Как записать формулу кодом

Автор: SnooP↑ 21.11.2010, 19:30

Доброго времени суток добрые люди, помогите пожалуйста. Как записать вот эту формулу http://sharepix.ru/980299121 Меня тут смущают восклицательные знаки. Это булевы знаки или нет, просто мне говорили что к булевой логике это отношения не имеет.

Автор: tig81 21.11.2010, 19:47

Нет, это факториалы.

Автор: Dimka 21.11.2010, 20:59

n!=1*2*3*4*5*6*....*n

Автор: Harch 23.11.2010, 14:06

Вы поняли? Можете написать функцию вычисления факториала?

Автор: RaDS 30.11.2010, 16:36

На Паскале вычисление факториала выглядит так:

Код

var n:integer;
var a:double;

function Factor(n:integer):real; //вычисляем сам факториал по числу n
var v:real;
Begin
if n in [0,1] then
Factor:= 1 else
Factor:= n*Factor(n-1);
end;

begin
Write('Введите число n: ');
Readln(n);
a:=(pow(3,n)*Factor(n))/Factor(3*n); // необходимая нам часть, ваша формула
Write('а = ', a:5:3);
Readln;
End.


В работоспособности задачи не уверен) Давно не программировал.

Автор: SnooP↑ 5.12.2010, 9:03

Цитата(RaDS @ 30.11.2010, 18:36) *

На Паскале вычисление факториала выглядит так:
Код

var n:integer;
var a:[color=#FF0000]real[/color];

function Factor(n:integer):real; //вычисляем сам факториал по числу n
var v:real;
Begin
if n in [0,1] then
Factor:= 1 else
Factor:= n*Factor(n-1);
end;

begin
Write('Введите число n: ');
Readln(n);
a:=([color=#FF0000]power[/color](3,n)*Factor(n))/Factor(3*n); // необходимая нам часть, ваша формула
Write('а = ', a:5:3);
Readln;
End.


В работоспособности задачи не уверен) Давно не программировал.

если чесно, ваша задача не совсем работает, буду разбираться, спасибо.

Автор: Harch 5.12.2010, 9:31

Могу написать как это сделать на С++

Автор: SnooP↑ 5.12.2010, 14:40

Цитата(Harch @ 5.12.2010, 11:31) *

Могу написать как это сделать на С++

Если вам не сложно, буду очень благодарен.

Автор: Harch 7.12.2010, 11:44

SnooP, вот:
#include <iostream>
using namespace std;
int main()
{
int i, n, p = 1;
cin>>n;
for(int i = 1; i <= n; i++) p = p * i;
cout<<p<<endl;
return 0;
}


вы вводите с клавиатуры число, и он выводит его факториал.

Автор: граф Монте-Кристо 7.12.2010, 17:06

i два раза объявлено только.

Автор: Harch 8.12.2010, 11:51

опа, точно, спасибо smile.gif не заметил smile.gif
P.S. компилировать не пробовал smile.gif
Красным выделил что надо убрать в коде.

Цитата

SnooP, вот:
#include <iostream>
using namespace std;
int main()
{
int i, n, p = 1;
cin>>n;
for(int i = 1; i <= n; i++) p = p * i;
cout<<p<<endl;
return 0;
}


вы вводите с клавиатуры число, и он выводит его факториал.

Автор: SnooP↑ 9.12.2010, 15:21

Harch спасибо, но 2 раза обьявленный индификатор, на мой взгляд портит только вид, не влияя на работоспособность маленькой программы. Только видимо мне немного не подойдёт данная схема. Для моего задания нужно, чтобы факториалы увеличивались сами, от 0,до того как точность суммы ряда не будет равна 0.0001.

Вот текст задачи,


Найти сумму ряда с точностью =10-4, общий член которого
(при определении суммы членов ряда следует использовать рекуррентную формулу для
получения следующего члена ряда, выводимую из отношения an+1/an ;считать, что точность
достигнута, если аn < ); n=0,1,2….
Составьте блок-схему алгоритма


Вы не могли бы мне словестно обьяснить, как сделать данную задачу?

Автор: Harch 9.12.2010, 15:53

Цитата
Harch спасибо, но 2 раза обьявленный индификатор, на мой взгляд портит только вид, не влияя на работоспособность маленькой программы.

Программа не откомпилируется.
Так, а при чем здесь факториал? smile.gif

Автор: SnooP↑ 9.12.2010, 17:19

у меня откомпилировалась с ошибкой.. ну по формуле представленой выше, нужно находить факториалы, как я понял.

Автор: Harch 9.12.2010, 17:22

Так, вообще то откмпилировалась с ошибкой не бывает smile.gif) он exe файл не создал значит все, не откомпилировалась.
а зачем Вам факториал?

Автор: SnooP↑ 9.12.2010, 20:01

ну а как сделать без этого? Ведь на картинке, для решения, нужно факториал находить.

Автор: граф Монте-Кристо 9.12.2010, 20:03

Ну и сделайте отдельную функцию, которая принимает число и считает от него факториал. В чём проблема?

Автор: SnooP↑ 9.12.2010, 20:19

Нужно что-то на подобии этого?

#include <iostream>
using namespace std;
int main()
{
int n,p = 1;
for (n = 0;n<100;n++);
for(int i = 1; i <= n; i++) p = p * i;
cout<<p<<endl;
return 0;
}



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

Автор: Harch 10.12.2010, 13:27

Вообщем так. Вам надо посчитать то что на картинке? С помощью программы?
Если так, то давайте я Вам просто ее напишу. Акция (единичная), так сказать wink.gif

Автор: SnooP↑ 10.12.2010, 16:04

не просто посчитать, а найти сумму ряда, по этой картинке.

Автор: граф Монте-Кристо 10.12.2010, 17:46

Код

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
     double s=0,xn=1;
     double eps=0.0001;  //точность суммы
     int i=0;
     while(xn>=eps)
     {
           s+=xn;
           xn*=3*(i+1)/((3*i+1)*(3*i+2)*(3*i+3));
           i++;
     }
     cout<<"s="<<s;
     system("pause");
     return 0;
}

Что-то вроде этого может быть.

Автор: Harch 11.12.2010, 8:05

Вроде верно.
Граф Монте-Кристо, вместо цикла while тут удобнее был бы цикл for smile.gif Но это так, вопросы красоты кода и т. д.

Автор: SnooP↑ 11.12.2010, 14:52

Цитата(граф Монте-Кристо @ 10.12.2010, 19:46) *

Код

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
     double s=0,xn=1;
     double eps=0.0001;  //точность суммы
     int i=0;
     while(xn>=eps)
     {
           s+=xn;
           xn*=3*(i+1)/((3*i+1)*(3*i+2)*(3*i+3));
           i++;
     }
     cout<<"s="<<s;
     system("pause");
     return 0;
}

Что-то вроде этого может быть.

Спасибо огромное, но ещё один вопрос, куда всунуть нахождение следующего члена ряда? он ведь, как я понимаю находит только один член ряда, а у меня в задаче написано, чтобы он нашёл все члены ряда и для нахождения следующего члена, дана формула an+1/an или я просто что-то недопонимаю?

Автор: Julia 12.12.2010, 16:34

Вам понятие Цикл знакомо?

Автор: Harch 13.12.2010, 13:09

Да там все верно, он находит все члены до заданной точности.

Автор: Julia 14.12.2010, 9:40

2Narch: Цикл For в данной задаче использовать не рационально. Периодически мне вообще не понятны ваши комментарии в темах раздела Программирование. Если таким образом набираете количество сообщений, то делайте это где-нибудь в другом месте.

Автор: Harch 14.12.2010, 10:14

Не вижу почему не рационально? Происходит увеличение i, проще сделать это не в теле цикла. Я не набираю количества сообщений. А по программированию экзамен автоматом две недели уже как получил, так что наверно не совсем ничего не понимаю в нем.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)