В общем, твоя прога из первого поста после упрощения будет такой| Код | program kurs_delphi;
{$APPTYPE CONSOLE} uses SysUtils;
function PiecewiseLinear(x: real; a, b, Xi: array of real): real; var i: integer; begin i := low(Xi); repeat Inc(i); until (x < Xi[i]) or (i = high(Xi)); PiecewiseLinear := a[i] * x + b[i]; end;
var i: integer; V, Q, Qmax, Qmin, p, pmax, S: real; Vtab: array [0..12] of real; Qtab: array [0..12] of real = (23, 34, 45, 57, 68, 53, 45, 42, 49, 58, 67, 78, 93); Qras: array [0..12] of real;
{коэффициенты для вычисления кусочно-линейной функции} a: array [0..7] of real = (0, 11.3, 1.5714, 1.64, -0.42, 1, 0.9, 1.3); b: array [0..7] of real = (0, -683.65, -280.85, -342.71, 146.14, -201, -176, -284); Xi: array [0..7] of real = (0, 215, 222, 236, 243, 250, 270, 290);
begin {раз уж вычисляем значения аргументов} V := 212; for i := 0 to 12 do begin Vtab[i] := V; if (V < 215) then V := V + 1 else // Смена шага if (V < 250) then V := V + 7 else V := V + 10; end;
for i := 0 to 12 do Qras[i] := PiecewiseLinear(Vtab[i], a, b, Xi);
Qmax := Qtab[0]; Qmin := Qtab[0]; for i := 1 to 12 do // Нахождение Qmax, Qmin begin if Qmax < Qtab[i] then Qmax := Qtab[i]; if Qmin > Qtab[i] then Qmin := Qtab[i]; end;
S := 0; pmax := 0; for i := 0 to 12 do begin Write(Vtab[i]: 4: 1, ': ', Qras[i]: 7: 2, ' [', Qtab[i]: 0: 2, ']'); // Вывод таблицы p := abs(Qras[i] - Qtab[i]) / (Qmax - Qmin) * 100; if p > 0.01 then // Вывод погрешности, если она есть begin if pmax < p then pmax := p; // нахождение максимальной локальной погрешности Write(' (', p: 0: 2, '%)'); S := S + p; // нахождение суммарной погрешности end; WriteLn(''); end; WriteLn('max loc pogr = ', pmax: 0: 2); WriteLn('Summ pogr = ', S: 0: 2); readln; end. |
Но она делает точно тоже самое. Итак, приходим туда откуда пришли - что тебя не устраивает? |