Как заменить ostringstream в C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, можно как то заменить такой код с С++ на C#
string stringify(double x)
{
ostringstream o;
if (!(o << x))
return 0;
return o.str();
}
и такую вот еще ф-ю
string CreateResultString(DataList &pMin,double yMin)
{
    string resultStr = "f[";
 
    for(int i = 0; i<N; i++)
    {
        if (i != 0)
            resultStr += ",";
        resultStr += stringify(pMin.at(i));
    }
 
    resultStr += "] = " + stringify(yMin);
 
    return resultStr;
}
я просто не понимаю как ф-ю at заменить

Решение задачи: «Как заменить ostringstream в C#»

textual
Листинг программы
#include <vector>
#include <iostream>
#include <math.h>
#include <string>
#include <sstream>
#include <conio.h>
 
using namespace std;
 
typedef vector<double> DataList;
 
void InitData();
void GradSearch(DataList &p, double sigma,double epsilon);
void QMin(DataList &de_dxi, DataList &p, double epsilon, double sigma);
void getDfDx(DataList &de_dxi, DataList &p);
string CreateResultString(DataList &pMin,double yMin);
double getFunc(DataList &p);
string stringify(double x);
 
DataList p1;
DataList p2;
DataList pMin;
DataList de_dxi;
 
double yMin;
double err;
double z0;
double h;
int N;
 
int j;
 
int main()
{
    setlocale (LC_ALL, "Russian_Russia.1251");
    N = 2;
 
    InitData();
 
    DataList p;
    p.push_back(0.99);
    p.push_back(1.01);
        double sigma = 0.16;
        double epsilon = 0.00001;
 
    GradSearch(p, sigma, epsilon);
    _getch();
 
    return 0;
}
 
void GradSearch(DataList &p, double sigma,double epsilon)
{
    int max = 60;
    h = 1;
    err = 1;
    int count = 0;
 
    while(count < max && (h>sigma ||err > epsilon))
    {
        getDfDx(de_dxi, p);
        QMin(de_dxi, p, epsilon, sigma);
 
        for(int i = 0; i<N; i++)
            p.at(i) = pMin.at(i);
 
        z0 = yMin;
        count = count + j + 1;
 
        string iterResult = CreateResultString(pMin, yMin);
 
        cout<<CreateResultString(pMin, yMin)<<endl;
    }
    cout<<endl<<"??????? ???????: "<<"-4*x + x*x - y - x*y + y*y"<<endl;
    cout<<CreateResultString(pMin, yMin)<<endl;
}
 
void QMin(DataList &de_dxi,DataList &p, double epsilon, double sigma)
{
    int cond = 0;
    int jmax = 60;
 
    z0 = getFunc(p);
 
    for(int i = 0; i<N; i++)
        p1.at(i) = p.at(i) + h * de_dxi.at(i);
 
    double y1 = getFunc(p1);
 
    for(int i = 0; i<N; i++)
        p2.at(i) = p.at(i) + 2 * h * de_dxi.at(i);
 
    double y2 = getFunc(p2);
 
    j = 0;
 
    while (j<jmax && cond == 0)
    {
        if (z0<=y1)
        {
            for(int i = 0; i<N; i++)
                p2.at(i) = p1.at(i);
 
            y2 = y1;
            h = h / 2;
 
            for(int i = 0; i<N; i++)
                p1.at(i) = p.at(i) + h * de_dxi.at(i);
 
            y1 = getFunc(p1);
        }
        else if (y2 < y1)
        {
            for(int i = 0; i<N; i++)
                p1.at(i) = p2.at(i);
 
            y1 = y2;
 
            h = h*2;
 
            for(int i = 0; i<N; i++)
                p2.at(i) = p.at(i) + 2 * h * de_dxi.at(i);
 
            y2 = getFunc(p2);
        }
        else
        {
            cond = -1;
        }
 
        j = j+1;
        if (h < sigma)
            cond = 1;
    }
 
    double hMin = (h/2)* (4 * y1 - 3* z0 - y2) / (2* y1 - z0 - y2);
 
    for (int i = 0; i< N; i++)
    {
        pMin.at(i) = p.at(i) + hMin * de_dxi.at(i);
    }
 
    yMin = getFunc(pMin);
 
    double h0 = fabs(hMin);
    double h1 = fabs(hMin - h);
    double h2 = fabs(hMin - 2* h);
 
    if (h0 < h)
        h = h0;
    if (h1 < h)
        h = h1;
    if (h2 < h)
        h = h2;
    if (h == 0)
        h = hMin;
    if (h < sigma)
        cond = 1;
    double e0 = fabs(z0 - yMin);
    double e1 = fabs(y1 - yMin);
    double e2 = fabs(y2 - yMin);
 
    if (e0 != 0 && e0 < err)
        err = e0;
    if (e1 != 0 && e1 < err)
        err = e1;
    if (e2 != 0 && e2 < err)
        err = e2;
    if (e0 == 0 && e1 == 0 && e2 == 0)
        err = 0;
    if (err < epsilon)
        cond = 2;
}
 
double getFunc(DataList &p)
{
    double x = p.at(0);
    double y = p.at(1);
 
    double result = 3 * pow(x, 2) - 3 * x * y + 4 * pow(y, 2) - 2 * x + y;
 
    return result;
}
 
void getDfDx(DataList & de_dxi, DataList &p)
{
    double x = p.at(0);
    double y = p.at(1);
 
 
    double dfDx = 6*x - 3*y - 2;
    double dfDy = -3*x + 8*y +1;;
 
    double norm = sqrt(dfDx*dfDx + dfDy*dfDy);
 
    dfDx = -dfDx/norm;
    dfDy = -dfDy/norm;
 
    de_dxi.at(0) = dfDx;
    de_dxi.at(1) = dfDy;
}
 
void InitData()
{
    for(int i = 0; i<N; i++)
    {
        p1.push_back(0);
 
        p2.push_back(0);
 
        pMin.push_back(0);
 
        de_dxi.push_back(0);
    }
}
 
string stringify(double x)
{
    ostringstream o;
    if (!(o << x))
        return 0;
    return o.str();
}
 
string CreateResultString(DataList &pMin,double yMin)
{
    string resultStr = "f[";
 
    for(int i = 0; i<N; i++)
    {
        if (i != 0)
            resultStr += ",";
        resultStr += stringify(pMin.at(i));
    }
 
    resultStr += "] = " + stringify(yMin);
 
    return resultStr;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы