Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: OLKAGRIM
Дата сообщения: 09.05.2007 02:07
Помогите плиз кто-нибудь решить прогу на си)

Вычислить значение функции у, развив функцию е в степени х в ряд Тейлора. Аргумент х функции изменяется от -2 до 2 с шагом 0.5. Для вычисления факториала используйте рекурсивную функцию. Определить погрешность расчетов при точном и приблизном определении значений e в степени х. Параметри n, m задает пользователь.

Автор: veronica b
Дата сообщения: 11.05.2007 14:54
OLKAGRIM, дайте более понятное условие задачи.

Цитата:
Определить погрешность расчетов при точном и приблизном определении значений e в степени х.

Я не представляю, как точно вычислить значение функции e в степени х!

Автор: rain87
Дата сообщения: 11.05.2007 19:30
veronica b
ну точное значение - очевидно вычисленное средствами языка
Автор: OLKAGRIM
Дата сообщения: 11.05.2007 20:07
Рекурсивной формулы развитие функций в ряды

Функции развития в рядТейлора
sin(x) x - x3/3! + x5/5! - x7/7! +...
cos(x) 1 - x 2/2! + x4/4! - x6 /6! +...
arctg(x) x - x3/3 + x5/5 - x7/7 +...
tg (x) x + x3/3 + x5/15 + x7/315 +...
ln (x) (x-1) - (x-1)2/2 + (x-1)3/3 - (x-1)4/4+...
ex 1 + x / 1! + x2 / 2! + x3 / 3! + ...
e-x 1 - x/1! + x2/2! - x3/3! + x4/4!-...


А функция у меня вот такая



просто забыла дописать))))
Автор: TeXpert
Дата сообщения: 11.05.2007 23:35
OLKAGRIM
Цитата:
развив функцию е в степени х в ряд Тейлора
Сначала подумал, что описка...
Цитата:
развитие функций в ряды
а потом вспомнил -- девушка, нельзя так переводить, надо пользоваться хорошими словарями, в данном случае "development" переводится как "разложение". Извинения за офтоп.
Автор: Zyava
Дата сообщения: 12.05.2007 00:34
OLKAGRIM
А дословно задание нельза написать? Где тут n и m и с какой точность надо считать функцию (или до какого члена ряда раскладывать)?
Автор: veronica b
Дата сообщения: 12.05.2007 09:33
OLKAGRIM, я присоеденяюсь к вопросу Zyava и, если можно, дайте задание дословно, как вы его получили.

Автор: OLKAGRIM
Дата сообщения: 12.05.2007 20:01
veronika b

Вычислить значение функции у, развив функцию е в степени х в ряд Тейлора. Аргумент х функции изменяется от -2 до 2 с шагом 0.5. Для вычисления факториала используйте рекурсивную функцию. Определить погрешность расчетов при точном и приблизном определении значений e в степени х. Параметри n, m задает пользователь.



Вот в таком виде мне дали задание
Автор: Zyava
Дата сообщения: 12.05.2007 20:52
OLKAGRIM
М-даа, особо понятнее не стало, с какой точностью считать нужно ex - непонятно, но требуется "Определить погрешность расчетов при точном и приблизном определении значений e в степени х", сказано "Вычислить значение функции у" и при этом дан не один x а промежуток . Считать функцию в каждой точке или вообще ее интеграл находить надо?
Автор: OLKAGRIM
Дата сообщения: 12.05.2007 22:49
Zyava

Cначала нужно вычисить функцию с помощью рекурсивной функции..
а потом в приблиз значении... и найти разницу двух и разделить на истинное значение..

точность до 0,0001

Автор: TeXpert
Дата сообщения: 12.05.2007 22:59
Zyava
Раз сплошная неграмотность в постановке задачи, видимо, и решение в этом же ключе требуется). Нужно что-то похожее на решение изобразить. Но это и есть самое трудное.
Автор: OLKAGRIM
Дата сообщения: 12.05.2007 22:59
Zyava
Cначала нужно вычисить функцию с помощью рекурсивной функции..
а потом в приблиз значении... и найти разницу двух и разделить на истинное значение..

точность до 0,0001

Автор: TeXpert
Дата сообщения: 12.05.2007 23:10
OLKAGRIM
Цитата:
Определить погрешность расчетов при точном и приблизном определении значений e в степени х
Ну, точно вычислить можно разве что при значении аргумента, равном нулю (0). Поправьте, если я что-то упустил. В любых остальных точках значения и так определяются приближённо. Вопрос -- чем отличается приближённое значение от такого же? Вы так и не ответили, вопрос об этом был Вам задан.
Автор: OLKAGRIM
Дата сообщения: 12.05.2007 23:30
Напишите конкретно, че не понятно.
Автор: veronica b
Дата сообщения: 13.05.2007 09:15
OLKAGRIM, я написал программу. где есть две, вам необходимые, функции. Функции протестированы. Все остальное напишите так, как вам надо

Цитата:

/*
    13/05/2007
*/

#include <stdio.h>
#include <math.h>

#define EPSILON 0.0001

unsigned long my_fact(short arg)
{
    return arg <= 1 ? 1 : arg*my_fact(arg - 1);
}

double my_exp(double arg)
{
    double sum = 1.0,
             term = 1.0;
    short idx = 1;

    while(sum + term != sum)
    {
        term = term*(arg/idx);
        sum += term;
        idx++;
    }

    return sum;
}

int main()
{
    double res, acc;

    res = my_exp(-2.0);
    acc = exp(-2.0);
    res = my_exp(-1.0);
    acc = exp(-1.0);
    res = my_exp(0.0);
    acc = exp(0.0);
    res = my_exp(1.0);
    acc = exp(1.0);
    res = my_exp(2.0);
    acc = exp(2.0);

    return 0;
}


Функция double my_exp(double arg) хотя и имеет самый простой, неустойчивый алгоритм, в диапазоне -2.0 - 2.0 работает нормально. Для справок, если они вам понадобятся, то смотрите книгу "Численные методы и программное обеспечение", Д.Каханер и др. Стр.29.


Автор: MFPSoftware
Дата сообщения: 13.05.2007 17:46
Пишу курсовик. В одном из пунктов к программе написано, что она должна требовать пороль, но он не должен быть виден. Как организовать в консольном приложении данную задачу? Как-нибудь попроще, а то я даже не представляю, как сделать так, что бы не было видно набираемый текст.
Автор: Abs62
Дата сообщения: 13.05.2007 18:35
MFPSoftware

Цитата:
Как-нибудь попроще, а то я даже не представляю, как сделать так, что бы не было видно набираемый текст.

Например, с помощью _getch(). Вот пример для затравки:

Код: #include <conio.h>
#include <stdio.h>

int main( void )
{
char buffer[81];
int i,ch;

for(i=0;i<80;i++) {
ch=_getch();
buffer[i]=(char)ch;
if(ch=='\r') break;
putch('*');
}

buffer[i] = '\0';
printf( "\nInput was: %s\n", buffer );
}
Автор: MFPSoftware
Дата сообщения: 13.05.2007 19:01
Спасибо. А \r - это перевод строки?
Автор: Abs62
Дата сообщения: 13.05.2007 19:25
MFPSoftware
'\r' - carriage return, возврат каретки. '\n' - new line, новая строка.
Автор: MFPSoftware
Дата сообщения: 14.05.2007 00:24
Чего-то я уже начинаю забывать самые азы =)

Как завершить программу из функции?
Автор: Abs62
Дата сообщения: 14.05.2007 00:58
MFPSoftware
Да как обычно - exit().
Автор: veronica b
Дата сообщения: 14.05.2007 13:41
MFPSoftware

Цитата:
Чего-то я уже начинаю забывать самые азы =)

Ну почемы азы? Я прочитал и задумался, ведь никогда не стояла перед мной такая задача. Прочитал ответ Abs62 и проверил. Правильно - выходит!
Автор: MFPSoftware
Дата сообщения: 14.05.2007 17:04
Чего-то оно не очень выходит =(

Для теста набрал такую программку, но она почему-то не срабатывает.


Код: void EnterPass()
{
    int k;
    cin >> k;
    if (k == 1)
        exit();
}
Автор: Abs62
Дата сообщения: 14.05.2007 18:35
MFPSoftware

Цитата:
Для теста набрал такую программку, но она почему-то не срабатывает.

Видимо, не та функция вызывается. Вообще-то exit должна вызываться с параметром. Смотри MSDN.

Цитата:
void exit(
int status
);
void _exit(
int status
);
Parameter
status
Exit status.

Автор: DarkOnlineMagic
Дата сообщения: 14.05.2007 21:00
Хы return чем не угодил?
Автор: rain87
Дата сообщения: 14.05.2007 21:33
DarkOnlineMagic
юморист. или не понимаешь разницу между return и exit. или не хочешь читать, о чём идёт речь
Автор: veronica b
Дата сообщения: 14.05.2007 21:48
MFPSoftware, вот моя программа

Цитата:

/*
    14/05/2007
*/


#include <stdlib.h>
#include <stdio.h>

void fn_1()
{
    printf("Enter function fn_1\n");

    exit(0);

    printf("Quit function fn_1\n");
}

void fn_2()
{
    printf("Enter function fn_2\n");

    fn_1();

    printf("Quit function fn_2\n");
}

void fn_3()
{
    printf("Enter function fn_3\n");

    fn_2();

    printf("Quit function fn_3\n");
}

int main()
{
    printf("Call fn_3()\n");

    fn_3();

    printf("Return from fn_3()\n");

    return 0;
}

Все работает.

Автор: xdude
Дата сообщения: 14.05.2007 21:53

Цитата:
Чего-то оно не очень выходит

А как оно выйдет вообще? Ты каким образом с клавиатуры символ с аски-кодом 1 собрался вводить? Через Alt+Grey Keypad? Возьми адыныцу в одинарные кавычки (типа вот так: if (k == '1')), и будет тебе счастье ( а если еще в exit передашь какую-нить цифру в качестве параметра - то вообще до полной нирваны можешь добраться, только не переусердствуй с этим, а то потом не вернешься оттуда чего доброго ).
Автор: last_wish
Дата сообщения: 14.05.2007 22:28
xdude
Не совсем понял про аски код.. Там же
Цитата:
int k;
, а не char..
Автор: xdude
Дата сообщения: 14.05.2007 22:34
А. да. Это чёй-то меня переглючило, вроде как читал - там char был, еще даже перечитал специально 2 раза o_O Наверное, пора завязывать с пивом и спать ложиться

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.