Форум программистов, компьютерный форум CyberForum.ru

Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) - C++

Восстановить пароль Регистрация
 
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 09:43     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #1
Здравствуйте, дорогие форумчане.
Опять нуждаюсь в вас.
Мне помочь доделать программу.
Задание прикрепил на скрине, так как его вручную не напишешь.
-----------------------------------------------------------------
Вот, собственно, моя программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <conio.h>
#include <math.h>
#include <locale.h>
 
int main()
{int k;
setlocale(LC_CTYPE,"russian");
 long d,e;
 float s,c;
 double eps,a,x,g;
 std::cout << "Введите значения a, x и eps:\n";
 std::cout << "a=";
 std::cin >> a;
 std::cout << "x=";
 std::cin >> x;
 std::cout << "eps=";
 std::cin >> eps;
 std::cout << "-------\n";
 s=1;c=a*x*x/6;
 std::cout<<"При\nk=1\nc="<<c;
 for(k=2;fabs(c)>=eps;k++)
   {
     s=s+c;
     c=c*(((a-1*(a+k)*x)/((2*k+1))*(k-2)*(k-1)*k));
   }
 
 std::cout<<"\nКонечное значение: s="<<s;
 getch();
}
Но препод говорит, что у меня тут ошибка. В формуле. Не подскажете, где именно?
--------------
Вот скрин с заданием:
Миниатюры
Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 09:43     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)
Посмотрите здесь:

C++ прошу помочь найти ошибку
C++ Помочь исправить
C++ Ребят, можете помочь исправить ошибку, долго с ней мучался.
Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) C++
Помочь доделать программу (Надо, чтобы все значения вводились с клавиатуры) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 16:55  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #2
С меня много +.

Добавлено через 7 часов 10 минут
Никто не поможет?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 17:07     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #3
вы откуда это вообще взяли
C++
1
c=c*(((a-1*(a+k)*x)/((2*k+1))*(k-2)*(k-1)*k));
???
и это
C++
1
c=a*x*x/6;
?
как это относится к формуле? где факториалы? где степень k у x? где цикл числителя a(a-1)*...

ничего не понимаю...

кстати там случайно не a(a+1)...(a+k) или a(a-1)...(a-k)... что-то я не уловлю связь
a(a-1)...(a+k)
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 17:14  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #4
Цитата Сообщение от abit Посмотреть сообщение
вы откуда это вообще взяли
C++
1
c=c*(((a-1*(a+k)*x)/((2*k+1))*(k-2)*(k-1)*k));
???
и это
C++
1
c=a*x*x/6;
?
как это относится к формуле? где факториалы? где степень k у x? где цикл числителя a(a-1)*...

ничего не понимаю...

кстати там случайно не a(a+1)...(a+k) или a(a-1)...(a-k)... что-то я не уловлю связь
a(a-1)...(a+k)
Дак я и попросил исправить ошибку...
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 17:18     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #5
вот насколько я вижу вашу программу - тут ничего близкого с тем, что надо

я бы написал вам как это реализовать, но не вижу связи в ряду
a(a-1)...(a+k) для 1<=K->+inf

поэтому прошу уточнить условие задачи, возможны два варианта a(a-1)...(a-k) и a(a+1)...(a+k)
либо объясните мне закономерность этого ряда перемножений
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 17:45  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #6
Цитата Сообщение от abit Посмотреть сообщение
вот насколько я вижу вашу программу - тут ничего близкого с тем, что надо

я бы написал вам как это реализовать, но не вижу связи в ряду
a(a-1)...(a+k) для 1<=K->+inf

поэтому прошу уточнить условие задачи, возможны два варианта a(a-1)...(a-k) и a(a+1)...(a+k)
либо объясните мне закономерность этого ряда перемножений
Скорее всего я напортачил, так как условие задачи правильное. Проверил. (Которое на скриншоте)

Добавлено через 11 минут
Цитата Сообщение от abit Посмотреть сообщение
вот насколько я вижу вашу программу - тут ничего близкого с тем, что надо

я бы написал вам как это реализовать, но не вижу связи в ряду
a(a-1)...(a+k) для 1<=K->+inf

поэтому прошу уточнить условие задачи, возможны два варианта a(a-1)...(a-k) и a(a+1)...(a+k)
либо объясните мне закономерность этого ряда перемножений
Если сможешь, то реализуй, пожалуйста, по заданию. Только там должны выводиться действия или значения после каждого вычисления.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 18:12     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #7
я до сих пор не уверен, что у тебя правильно записано условие, вот сделал, посмотри внимательно код и задай вопросы если что не понятно

заметь, что вычисление степени x^k и произведение a..(a+k) числителя я произвожу последовательно углубляясь в цикл по k, а не пересчитываю каждый раз с начала в переменных powxk и chisl сответственно

и у тебя была s=1; перед циклом - если смотреть на формулу в задании она не относится к вычислению суммы, её не надо записывать в сам цикл, а добавить после того как вычислил член с суммой, это опять же если верить твоему заданию... но что-то я в нём сомневаюсь )

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <conio.h>
#include <math.h>
#include <locale.h>
 
double fact (int x) {
                    return (x == 1 ? x : x * fact(x - 1));
                    }
 
int main()
{int k=1;
 setlocale(LC_CTYPE,"russian");
 long d,e;
 double s=0,c;
 double eps,a,x,g;
 std::cout << "Введите значения a, x и eps:\n";
 std::cout << "a=";
 std::cin >> a;
 std::cout << "x=";
 std::cin >> x;
 std::cout << "eps=";
 std::cin >> eps;
 std::cout << "-------\n";
 double powxk = 1;
 double chisl = a;
 
 do 
   {
     powxk *= x;
     chisl *= (a+k);
     c = (double)chisl*powxk;
     c/=(double)(fact(2*k+1)*fact(k));
     s=s+c;
     std::cout << " Sum = " << (s+1) << ", k =" << k <<", a*(a+1)...(a+k) = " <<chisl << ", x^k = " << powxk << ", достигнутая точность "<<c<<std::endl;
     ++k;
   } while (fabs(c)>=eps);
   s=s+1;
 
 std::cout<<"\nКонечное значение: s="<<s;
 getch();
}
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 18:31  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #8
Я в методичке посмотрел) Условие записал верно(задание). А если вручную считать при
a=1
x=1
eps=0.01
То получится
1.35? Просто не совсем уверен)
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 18:59     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #9
Цитата Сообщение от sanyachel9binsk Посмотреть сообщение
Я в методичке посмотрел) Условие записал верно(задание). А если вручную считать при
a=1
x=1
eps=0.01
То получится
1.35? Просто не совсем уверен)
ну вот смотрите
начальный 1+ из формулы временно выкинем

xk для случая x=1 всегда равен 1 (единица в любой степени равна 1), а т.к. он в произведении, то его тоже выкидываем

остаётся сумма(a(a+1)...(a+k) / (2*k+1)!*k!)

(fact(2*k+1)*fact(k)) ведёт себя в зависимости от k так
k=1 -> (2+1)!(1)!=3!=3*2*1 =6
k=2 -> (4+1)!(2)!=5!*2!=(5*4*3*2*1)*(2*1)=240
k=3 -> ... = 320240
k=4 -> уже миллионы пошли

произведение a...(a+k) по k выглядит так:
k=1 -> a*(a+1) = 1*2 = 2
k=2 -> a*(a+1)*(a+2) = 1*2*3 = 6
k=3 -> ... = 24
k=4 -> ... = 120

их отношения k=1 -> 2/6 = 1/3
k=2 -> 6/240 = 0.025
k=3 -> 24/320240 ~ 0.0008

все остальные члены будут ещё меньше, т.к. факториалы растут очень быстро и нам их учитывать в погрешности 0.01 не надо
итого имеем:
1/3+0.025+0.0008 = 0.3591(3)

а с учётом той единицы, что была в уме - 1.3591(3)

это вот ручной обсчёт того, что делает моя программа, по аналогии можете изменить для своего другого условия
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
11.04.2013, 19:13  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #10
Спасибо!)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 13:05     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)
Еще ссылки по теме:

Списки. Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Исправить ошибку C++
C++ Исправить легкую программу. Визуал 12 выдает ошибку :(
Написала программу, выводит ошибку, подскажите как исправить C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
20.04.2013, 13:05  [ТС]     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку) #11
Препод сказал, что не правильно... Саму программу надо реализовать через реккурентные соотношения.
------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void main()
{int k;
 long d,e;
 float s,c;
 double eps,a,x,g;
 cout<<"vvedite a, x i eps\n";
 cout<<"a=";
 cin>>a;
 cout<<"x=";
 cin>>x;
 cout<<"eps=";
 cin>>eps;
 s=1;c=a*x;
 for(k=2;fabs(c)=>eps;k++)
   {
     s=s+c;
     c=c*(a+1)/((2*k+2)*(2*k+1)*k)*x;
     cout<<"pri k="<<k;
     cout<<"    s="<<s;
     cout<<"    c="<<c<<endl;
   }
 g=10/eps;
 d=s*g;
 e=d%10;
 if(e>=5)
 d=d+10;
 e=d/10;
 s=e/(1/eps);
 cout<<"\n  itogovoe s="<<s;
 getch();
}
Но у меня тут компилятор подчеркивает строку for(k=2;fabs(c)=>eps;k++), а именно fabs(c)=>eps
Подскажите, пожалуйста, как подправить?

Добавлено через 5 часов 50 минут
АП.
Yandex
Объявления
20.04.2013, 13:05     Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)
Ответ Создать тему
Опции темы

Текущее время: 13:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru