Пример строки: 5x^2+3x+2
vector<int> from_string(const string& str)
{
istringstream is(str);
vector<int> result;
char c;
int x = 0;
while(is.get(c))
{
switch(c)
{
case '+':
case '-':
is.putback(c);
is >> x;
result.push_back(x);
break;
case '^':
is >> x;
break;
default:
if(isdigit(c))
{
is.putback(c);
is >> x;
result.push_back(x);
}
break;
}
}
//------------ФУНКЦИЯ ВОЗВЕДЕНИЯ ПОЛИНОМА В ПОЛОЖИТЕЛЬНУЮ СТЕПЕНЬ-------------------
Polynom Polynom::upDegree(int degree)
{
Polynom result(getDegree()*degree);
Polynom tmp=*this;
if (degree == 1)
return *this;
if (degree == 0){
result.koef[0]=1;
return result;
}
else if (degree>=2)
{
for(int i=0;i<degree-1;i++){
tmp=*this*tmp;
}
return result=tmp;
}
}
double findRoot(const Polynom& F, double x0)
{
static const size_t MAX_N_ITER = 10000;
static const double EPS = 1e-10;
auto dF = F.derivative();
for (size_t i = 0; i < MAX_N_ITER; ++i) {
double x1 = x0 - F.evaluate(x0) / dF.evaluate(x0);
if (abs(x1 - x0) < EPS) {
return x1;
}
x0 = x1;
}
// not enought iteration or divergence
throw std::logic_error("Number of iteration exceeded");
}
#include<iostream>
#include <cstring>
#include <math.h>
#define eps 0.00000000000001
using namespace std;
class Polynom{
private:
int deg; //степень полинома
double *koef; //указатель на массив коэффициентов
public:
Polynom();
Polynom(int);
Polynom(int, double *);
Polynom(const Polynom &);
~Polynom(){ delete[] koef;}
int getDegree(); //Порядок полинома
double getKoef(unsigned int ); //Получить i-тый коэффициент
void setKoef(int, double);//Изменить i-тый коэф
double searchPoly(double);//Значение полинома при x-аргументе
Polynom getDarivative(unsigned int);//Производная полинома
double Integrate(double,double);
double Integral(double,double);
Polynom operator+(Polynom&);//Сложение двух полиномов
Polynom operator-(Polynom&);//Вычитание двух полиномов
Polynom operator=(const Polynom&);//Присваивание
Polynom operator*(Polynom&);//Умножение двух полиномов
Polynom operator/(Polynom &);//деление полиномов
Polynom operator%(Polynom &);//Остаток от деления
void InputPolynom(int, double *); //Ввод полинома
friend ostream& operator<<(ostream&, Polynom&);//Вывод в поток
};
#include <stdio.h>
#include <math.h>
#define eps 0.000000000001
double fx(double x) { return 4*x*x*x+4*x*x+4*x+4;} // вычисляемая функция
double dfx(double x) { return 12*x*x+8*x+4;} // производная функции
typedef double(*function)(double x); // задание типа function
double solve(function fx, function dfx, double x0) {
double x1 = x0 - fx(x0)/dfx(x0); // первое приближение
while (fabs(x1-x0)>eps) { // пока не достигнута точность 0.000000000001
x0 = x1;
x1 = x1 - fx(x1)/dfx(x1); // последующие приближения
}
return x1;
}
int main () {
printf("%f\n",solve(fx,dfx,-5)); //вывод на экран
return 0;
}
double fx(double x) { return 4*x*x*x+4*x*x+4*x+4;}
Воспользовался вашим советом, вроде работает
Единственное есть какая-то сильная зависимость от пароля, т.е. я сделал тестовый заход на зашифровании и расшифровании с паролем "12345" и для дешифрования использовал его же. Всё сработало отлично.
На тех же файлах попробовал использовать пароль "12345678" так же в обоих случаях
Получилось так что шифротекст почему-то обрезался, то есть уже на этапе шифрования урезалось половину текста из открытого
Это то, что получилось в 1 варианте:
Это во 2 варианте: