Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
производная функции
Здравствуйте!
Задана строка, задающая функцию, содержащую переменную x, знаки арифметических действий +, -, * и функции sin, cos, tg, ctg. Найти производную заданной функции.
т.е. нам дана функция sin(x)+cos(3x-4) и ее производная должна быть cos(x)-3*sin(3x-4)
еще, т.к. мы используем то что нам дано по условию, степеней у нас нет, но я так понял , что без деления не обойтись.
сначала даже не знал с чего начать, но потом решил сделать так (за код прошу не ругать):

Код
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!='+') && (fun!='-')
      && (fun!='*') && (fun!='(') && (fun!=')') && (fun!='\n'))
        plst+=fun;
   
      else
       { //if ((fun==' ') || (fun=='+') || (fun=='-')
         // || (fun=='*') || (fun=='(') || (fun==')') || (fun=='\n'))
         stroka[k++]=plst;
         plst="";
   
       }
     }
   
      for (int i = 0; i <k;i++)
         {
            if (stroka== "sin") stroka = "cos";
            else
            if (stroka== "cos") stroka = "-sin";
            else
            if (stroka== "tan") stroka = "1/cos(x)*cos(x)";
            else
            if (stroka== "ctan") stroka = "-1/sin(x)*sin(x)";
         }
   
    Memo2->Clear();
     for (int i = 0; i <k;i++)
      Memo2->Lines->Append(stroka);
       
      for(int i=0;i<Memo2->Lines->Count;i++)
      {if(Memo2->Lines->Strings=="")
      Memo2->Lines->Delete(i); }
}
//---------------------------------------------------------------------------
   
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
}
//------------------[/i]


суть кода в том, что берется строка с данной функцией и по разделяющим знакам я ищу тригонометрические функции. тут вроде все норм. вот я их нашел и делаю производную, вроде тоже все хорошо, НО, он не сохраняет знаки арифметических операций, и не пишет заново все в строку(тут я думаю проблема в мемо, т.к. написано выводить в столбец, хочу попробовать заменить на листбокс). По-поводу знаков, в каде я закомментировал этот кусок,корявый до боли, но не получилось его применить, т.е. он либо выводит знаки, либо функции, как отредактировать еще не додумал. и главная проблема это скобки в аргументах. я думаю сделать еще один цикл, который находит выражение в этих скобках и вычисляет производную, но пока не знаю как это сделать, а потом еще свять с самой функцией.
  Заранее спасибо!
1 | Автор: player | 2013-07-03, 11:16   |  Репутация: [ + 0 ]
1 | Автор: player | 2013-07-03, 11:16   |  Репутация: [ + 0 ]
не выдумывай, всех случаев вручную не предусмотришь всё равно (на случай, если функция внезапно поменяется), почитай про обратную польскую запись

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
2 | Автор: Berestovskiy | 2013-07-05, 00:06   |  Репутация: [ + 211 ]
  • Страница 1 из 1
  • 1
Поиск: