Пожалуйста, помогите перевести код из Си в Дельфи. Для вывода результатов использовать memo.
| Код | int main() { int i; double a = 0.7, b = 0.8, y = 0, f[3], x[4] = {10000,10000,10000,10000}, k[3] = {1,1,1}, y1[3], Fmax[4] = {0,0,0,0};
for (i = 2; i >= 0; i--) { for (y = 0; y < 1; y += 0.001) { f[i] = 0.6*y + 0.5*(1-y) + Fmax[i+1] * (a*y + b*(1-y)); if (f[i] > Fmax[i]) { Fmax[i] = f[i]; y1[i] = y; } }
if (y1[i] == 0) k[i]=b; else k[i]=a;
printf("Step %d\n", i); printf("y[%d] = %.1f\n", i, y1[i]); printf("fmax[%d] = %.3f\n", i, Fmax[i]); printf("k[%d] = %.1f\n", i, k[i]); printf("-------------------------------------\n"); }
cprintf("\nMoney remains:\n"); for (i=2; i >= 0 ; i--) { x[i] = k[2-i] * x[i+1]; printf("\nx%d = %.f*x", i, x[i]); } getch(); return 0; }
|
Я часть перевел, но результаты не те.
| Код | var i: integer; a, b, y: real; f: array[1..3] of real; x: array[1..4] of real=(1,1,1,1); k: array[1..3] of real=(1,1,1); y1: array[1..3] of real; Fmax: array[1..4] of real=(0,0,0,0); begin a := 0.7; b := 0.8; y := 0; for i := 2 downto 0 do begin repeat begin f[i] := 0.6*y + 0.5*(1-y) + Fmax[i+1]*(a*y+b*(1-y)); if (f[i] > Fmax[i]) then begin Fmax[i] := f[i]; y1[i] := y; end; y := y + 0.001; end; until (y>1); memo1.Lines.Add(FloatToStr(i) + ' ' + FloatToStr(y1[i]) + ' ' + FloatToStr(fmax[i])); end; end;
|
а именно в выводе y. |