Проверьте Правильность Написания (работы) Программы

Тема в разделе "C/C++/C#", создана пользователем 203, 18 мар 2012.

  1. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Проверьте правильность написания (работы) программы.
    программа написана на C++ тема ссылки

    Вот условие задачи.
    Безымянный.JPG

    Вот код.
    Код (C++):
    #include <iostream>
    using namespace std;
    double PowerA(double x, double a, double eps)
    {
    double s=1,i=a*x,j=2;
    int t;
    while(abs(i)>eps)
    {
    s+=i;
    i=i*(a-j-1)*x/j;
    }
    t=i;
    return t;
    }
    int main()
    {
    setlocale(LC_ALL, "Russian");
    double x,a,eps;
    cout << "Введите x,a,eps\n";
    cin >> x >> a >> eps;
    if (abs(x)>=1 || a<=0 || eps <=0)
    {
    cout << "Неправильные данные!\nВыходим...\n";
    system("pause");
    return -1;
    }
    cout << PowerA(x,a,eps) << endl;
    system("pause");
    return 0;
    }
    Добавлено: Если программа работает неправильно если несложно то поправите пожалуйста. Если всё верно то при каких условиях она выполняется.
    Заранее спасибо.
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    а где ссылки? )
     
  3. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    сори я не то копировал тема называется: Нестандартные функции
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    не верно работает
    вот тест
    (1-0.5)^2
    то есть ввожу
    0.5
    2
    0.25
    должно быть 1+0.5*2 +((2*(2-1))/2)*0.25=2.25
    а выдаёт 0
    в функции ошибка
     
  5. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    А может тогда кто поможет сделать, чтобы работало нормально.
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    t=i; - тут, скорее всего, надо s вместо i.
    Остальное не проверяла.
     
  7. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    у тебя не считает факториал и вычитание лишнее

    вот
    Код (C++):
    //
    #include <iostream>
    using namespace std;
    double x,a,eps;
    double PowerA()
    {
    double s=1,i=a*x;
    int t(2),j(1);
    while(abs(i)>eps)
    {
    s+=i;
    i*=(a-j)*x/t;
    j++;
    t++;
    }
    return s;
    }
    int main()
    {
    setlocale(LC_ALL, "Rus");
    cout<<"Введите x,a,eps\n";
    cin>>x>>a>>eps;
    if (abs(x)>=1||a<=0||eps<=0)
    {
    cout <<"Неправильные данные!\nВыходим...\n";
    return 0;
    }
    cout<<PowerA()<<endl;
    return 0;
    }
    //
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >у тебя не считает факториал и вычитание лишнее
    хм, мне показалось, что там нормально - вроде s(n) через s(n-1) cчитается (где s() - это слагаемое суммы - ну, там есть в коде i=i*... ) , но формулу не проверяла. Может, там надо i=i*(a-j+1)*x/j ?
     
  9. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    нет не правильно

    считается рекурентным соотношением
    то есть
    i(слагаемое)=
    i(предыдущее)*
    x(степень у каждого слагаемого больше предыдущего на 1)*
    (a-j)(где предыдущий был a-(j-1))* //j увеличивается на 1 для каждого следующего слагаемого
    (t)^(-1)(где предыдущий был (t-1)! то есть t*(t-1)!=t!)//t увеличивается на 1 для каждого следующего слагаемого


    а теперь посмотри где там каждый ход увеличивается j и t
    (в его случае вообще факториал и обычное вычитание через одну!!!! переменную и+ эта переменная не менятся)
     
  10. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Большое вам все спасибо.
     
  11. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    У меня возникла новая проблема мне нужно сделать программу фото задачи внизу. Как я посмотрел функция там такая же что и в задаче которую я не мог сделать. Но тут уже стоит тема вызов по ссылке что это вообще такое может кто скажет как это делается. Заранее спасибо.
    445913_m.jpg
     
  12. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    //
    #include <iostream>
    using namespace std;
    void PowerA(double x,double a,double eps)
    {
    double s=1,i=a*x;
    int t(2),j(1);
    while(abs(i)>eps)
    {
    s+=i;
    i*=(a-j)*x/t;
    j++;
    t++;
    }
    s+=i;
    cout<<"Значение функции="<<s<<endl;
    cout<<"Значение n="<<t<<endl;
    cout<<"Значение последнего слагаемого="<<i<<endl;
    }
    int main()
    {
    setlocale(LC_ALL, "Rus");
    double x,a,eps;
    cout<<"Введите x,a,eps((1+x)^a):\n";
    cin>>x>>a>>eps;
    if (abs(x)>=1||a<=0||eps<=0)
    {
    cout <<"Неправильные данные!\nВыходим...\n";
    return 0;
    }
    PowerA(x,a,eps);
    return 0;
    }
    //
     
  13. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Всё разобрался всем спасибо. (если кто успел прочитать де редактирование поста то я разобрался это равносильность)
     

Поделиться этой страницей