У меня есть этот код C++ и будет преобразовывать его в код C# (.net framework 4). Есть ли у меня какие-то намеки на методы malloc, free и sprintf?C++ code (malloc method) to C# code
int monate = ee;
double *forward;
double *backward;
size_t bytes = 6*sizeof(double);
forward = (double *)malloc(monate * bytes);
backward = (double *)malloc(monate * bytes);
for (int i = 0; i <= monate; i++) {
forward[i] = 0.;
backward[i] = rate;
}
forward[0] = auszahlungsbetrag;
backward[0] = 0.;
backward[monate] = rate + rest;
double ez = esolver(12 , monate, forward, backward);
printf("Effektivzins: %.2f\n", ez);
char tmp0[256];
sprintf (tmp0, "Rate: %.2f (%f)" , rate, rate);
writeToLogFile(tmp0);
char tmp[256];
sprintf (tmp, "Effektivzins: %.2f (%f)" , ez, ez);
writeToLogFile(tmp);
free(forward);
free(backward);
Вот мой конвертированный код C#. Для методов malloc, free и sprintf у меня есть некоторые проблемы с преобразованием его в C#.
using System;
namespace Zinsrechner
{
public static class Basic
{
public static void basic(double aa, double auszahlungsbetrag, double cc, int ee, double rest)
{
Writelog.writeToLogFile("Start der Berechnung, Type BASIC");
Writelog.writeToLogFileDouble("Kreditvolumen: ", aa);
Writelog.writeToLogFileDouble("Auszahlungsbetrag: ", auszahlungsbetrag);
Writelog.writeToLogFileDouble("Nominalzins: ", cc);
Writelog.writeToLogFileInt("Laufzeit: ", ee);
Writelog.writeToLogFileDouble("Restschuld: ", rest);
/////////
// Ratenberechnung
double nomzins = (cc/12.0/100.0) + 1.0;
double unten = 0.0;
for (int x = 0 ; x <= ee-1 ; x++)
{
unten = unten + Math.Pow(nomzins,x);
}
double rate = ((aa * Math.Pow(nomzins, ee)) - rest)/unten;
Console.Write("Rate: {0:f2}\n", rate);
int monate = ee;
double[] forward;
double[] backward;
uint bytes = 6 * sizeof(double);
//C++ TO C# CONVERTER TODO TASK: The memory management function 'malloc' has no equivalent in C#:
//forward = (double)malloc(monate * bytes);
forward = (double)(monate * bytes);
//C++ TO C# CONVERTER TODO TASK: The memory management function 'malloc' has no equivalent in C#:
backward = (double)malloc(monate * bytes);
for (int i = 0; i <= monate; i++)
{
forward[i] = 0.0;
backward[i] = rate;
}
forward[0] = auszahlungsbetrag;
backward[0] = 0.0;
backward[monate] = rate + rest;
double ez = Effektivzinssolver.esolver(12, monate, forward, backward);
Console.Write("Effektivzins: {0:f2}\n", ez);
string tmp0 = new string(new char[256]);
tmp0 = string.Format("Rate: {0:f2} ({1:f})", rate, rate);
Writelog.writeToLogFile(tmp0);
string tmp = new string(new char[256]);
tmp = string.Format("Effektivzins: {0:f2} ({1:f})", ez, ez);
Writelog.writeToLogFile(tmp);
//C++ TO C# CONVERTER TODO TASK: The memory management function 'free' has no equivalent in C#:
free(forward);
//C++ TO C# CONVERTER TODO TASK: The memory management function 'free' has no equivalent in C#:
free(backward);
}
}
}
Это не код C++, это код C. – Angew
@Angew Это не так, как будто код здесь недействителен C++. Почему, я всегда думал, что «C++» относится ко всему языку, а не только к частям, которые не относятся к классическому C. – user3109672
@ user3109672 OK, true. Но, тем не менее, преобразование идиоматического кода C++ в C# будет следовать значительно отличающемуся курсу от преобразования этого кода «C с расширением файла новизны» на C#. – Angew