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

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

Наш партнер Genesis Hackspace
  1. 203

    203 New Member

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

    Вот условие задачи.
    Проверьте Правильность Написания (работы) Программы

    Вот код.
    Код (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 Гость

    а где ссылки? )
     
  3. 203

    203 New Member

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

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    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.445
    Симпатии:
    8
    t=i; - тут, скорее всего, надо s вместо i.
    Остальное не проверяла.
     
  7. Whatka

    Whatka Well-Known Member

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

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    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
    У меня возникла новая проблема мне нужно сделать программу фото задачи внизу. Как я посмотрел функция там такая же что и в задаче которую я не мог сделать. Но тут уже стоит тема вызов по ссылке что это вообще такое может кто скажет как это делается. Заранее спасибо.
    Проверьте Правильность Написания (работы) Программы
     
  12. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    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
    Всё разобрался всем спасибо. (если кто успел прочитать де редактирование поста то я разобрался это равносильность)
     
Загрузка...
Похожие Темы - Проверьте Правильность Написания
  1. Kaiser
    Ответов:
    0
    Просмотров:
    389

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