Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 07.04.2011
Сообщений: 29

Найти производную заданной функции

03.07.2013, 16:42. Показов 2763. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вот, собственно, само задание:
Задана строка, задающая функцию, содержащую переменную x, знаки арифметических действий +, -, * и функции sin, cos, tg, ctg. Найти производную заданной функции.
т.е. нам дана функция sin(x)+cos(3x-4) и ее производная должна быть cos(x)-3*sin(3x-4)
еще, т.к. мы используем то что нам дано по условию, степеней у нас нет, но я так понял , что без деления не обойтись.
сначала даже не знал с чего начать, но потом решил сделать так (за код прошу не ругать):
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
42
43
44
45
46
47
48
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString fun = Memo1->Lines->Text+' ';
    AnsiString *stroka=new AnsiString[150];
    AnsiString plst="";
    int k=0;
 
    for (int i= 1; i <=fun.Length();i++)
    { if ((fun[i]!=' ') && (fun[i]!='+') && (fun[i]!='-')
     && (fun[i]!='*') && (fun[i]!='(') && (fun[i]!=')') && (fun[i]!='\n'))
       plst+=fun[i];
 
     else
      { //if ((fun[i]==' ') || (fun[i]=='+') || (fun[i]=='-')
        // || (fun[i]=='*') || (fun[i]=='(') || (fun[i]==')') || (fun[i]=='\n'))
        stroka[k++]=plst;
        plst="";
 
      }
    }
 
     for (int i = 0; i <k;i++)
        {
           if (stroka[i]== "sin") stroka[i] = "cos";
           else
           if (stroka[i]== "cos") stroka[i] = "-sin";
           else
           if (stroka[i]== "tan") stroka[i] = "1/cos(x)*cos(x)";
           else
           if (stroka[i]== "ctan") stroka[i] = "-1/sin(x)*sin(x)";
        }
 
   Memo2->Clear();
    for (int i = 0; i <k;i++)
     Memo2->Lines->Append(stroka[i]);
     
     for(int i=0;i<Memo2->Lines->Count;i++)
     {if(Memo2->Lines->Strings[i]=="")
     Memo2->Lines->Delete(i); }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
}
//------------------
суть кода в том, что берется строка с данной функцией и по разделяющим знакам я ищу тригонометрические функции. тут вроде все норм. вот я их нашел и делаю производную, вроде тоже все хорошо, НО, он не сохраняет знаки арифметических операций, и не пишет заново все в строку(тут я думаю проблема в мемо, т.к. написано выводить в столбец, хочу попробовать заменить на листбокс). По-поводу знаков, в каде я закомментировал этот кусок,корявый до боли, но не получилось его применить, т.е. он либо выводит знаки, либо функции, как отредактировать еще не додумал. и главная проблема это скобки в аргументах. я думаю сделать еще один цикл, который находит выражение в этих скобках и вычисляет производную, но пока не знаю как это сделать, а потом еще свять с самой функцией.
Очень прошу помощи! Заранее спасибо!

Добавлено через 6 часов 13 минут
Помогите, пожалуйста....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2013, 16:42
Ответы с готовыми решениями:

Найти минимум функции используя производную функции
Как мне определить минимум функции при помощи производной в строке 76? С математикой всё плохо:( ...

Найти вторую производную функции
найти вторую производную функции f(x)=cos(x)-sin^5 (x)

Как продифференцировать (найти производную) для функции
y=ctg(3x)*arccoc(3x^2)

2
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2013, 23:32
Возможно поможет...

Математический ввод формул в Edit
1
0 / 0 / 1
Регистрация: 07.04.2011
Сообщений: 29
05.07.2013, 16:50  [ТС]
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
class Proizvod {
protected:
Proizvod *left, *right;
Proizvod (Proizvod* L,Proizvod* R){
left = L; right = R;
}
public:
~Proizvod(void) {delete left; delete right;}
virtual double rezult(void) = 0;
virtual Proizvod* copy(void) = 0;
virtual Proizvod* differ(void) = 0;
virtual void set_var(double X){
if (left)  left -> set_var(X);
if (right) right -> set_var(X);
}
};
//---------------------------------------------------------------------------
class Real : public Proizvod{
double f;
public:
Real(double F):Proizvod(NULL,NULL){f=F;}
double rezult(void) {return f; }
Proizvod* copy (void){return new Real(f);}
Proizvod* differ(void){return new Real(0);}
};
//---------------------------------------------------------------------------
class Var :public Proizvod{
double x;
public:
Var(double X = 'x'):Proizvod(NULL, NULL){x = X;}
double rezult(void){return x;}
Proizvod* copy(void){return new Var(x);}
Proizvod* differ(void){return new Real(1.0);}
void set_var(double X) {x = X;}
};
//---------------------------------------------------------------------------
struct Plus:public Proizvod{
Plus(Proizvod* L,Proizvod* R):Proizvod(L, R){};
double rezult(void) { return left -> rezult() + right -> rezult();}
Proizvod* copy(void) {return new Plus(left -> copy(), right -> copy());}
Proizvod* differ(void) { return new Plus(left -> differ(),right -> differ());}
};
//---------------------------------------------------------------------------
struct Minus:public Proizvod{
Minus(Proizvod* L,Proizvod* R):Proizvod(L, R){};
double rezult(void) {return left->rezult() - right->rezult();}
Proizvod* copy(void) {return new Minus(left->copy(), right->copy());}
Proizvod* differ(void) {return new Minus(left->differ(), right->differ());}
};
//--------------------------------------------------------------------------------
struct Mult:public Proizvod{
Mult(Proizvod* L, Proizvod* R):Proizvod(L, R){};
double rezult(void){return left->rezult()*right->rezult();}
Proizvod* copy(void){return new Mult(left->copy(),right->copy());}
Proizvod* differ(void){return new Plus(new Mult( left->differ(), right->copy()),
new Mult( left->copy(), right->differ()));}
};
int PosFromEnd(AnsiString s, AnsiString sub);
Proizvod* form(AnsiString s){
Proizvod* h;
int i,p,l = s.Length();
AnsiString s1, s2;
 
    if ((p = PosFromEnd(s,"+")) > 1){
s1 =s.SubString(1, p - 1);
s2 =s.SubString(p+1, l-p);
        h = new Plus(form(s1), form(s2));
}
else if ((p = PosFromEnd(s,"-")) > 1){
s1 =s.SubString(1, p - 1);
s2 = s.SubString(p+1, l-p);
h = new Minus(form(s1), form(s2));
}
else if ((p = PosFromEnd(s, "*")) > 1){
s1 = s.SubString(1, p - 1);
s2 = s.SubString(p+1, l-p);
h = new Mult(form(s1), form(s2));
}
else if (s == "x") h = new Var();
else h = new Real(StrToFloat(s));
return h;
}
//---------------------------------------------------------------------------
int PosFromEnd(AnsiString s, AnsiString sub){
int l = s.Length();
AnsiString p;
p.SetLength(l);
for(int i = 1;i<=l;i++)
p[ (l - i) + 1] = s[i];
if (p.Pos(sub) > 0)
return l - p.Pos(sub) + 1;
else return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Proizvod* x =form(Edit1->Text);
Proizvod* f = form(Edit2->Text);
Proizvod* f1 = f -> differ();
 
double X = x -> rezult();
f -> set_var( X);
f1 -> set_var( X );
 
int precision = 15;
Edit3 -> Text = FloatToStrF(x -> rezult(), ffFixed, precision, 1);
}
//-----------------------------------------------------------
тут в классе var переменная х по умолчанию 0, т.к. она потом принимает значение вводимого числа, а мне нужно что она так и осталась переменной, мои попытки изменение прошли безуспешно, правда где в var берется значение х я тип изменил на char, и ошибок не было. правильно ли я заменил? и не могли бы вы подсказать как реализовать функцию обратную функцие form() чтобы сформировать аналитическую запись формы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2013, 16:50
Помогаю со студенческими работами здесь

Как найти производную функции с использованием С++?
Например, у меня будет функция вида 2x3+4y. Как мне написать программу, которая ищет ее производную?

Найти производную функции
помогите плиз. сделать программу с использованием функции. найти производную функции...

Найти производную функции
найти производную функции f(x)=sinx(cosx-x^3) по определению (delta=0.1)в точках из интервала...

Как найти производную функции
f(x)=x^3-x-cos(x) Написала вот эту программу,что здесь неправильно? #include &lt;iostream&gt;...

Найти производную функции
есть код, но не особо понятно, почему он не запускается, помогите пожалуйста разобраться #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru