[QUOTE=EFrol;458208]Ну, если очень хочется, то я бы сделал так:
Здравствуйте!Код:function PLAst: real; var_input Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Y10: real; Y11, Y12, Y13, Y14, Y15, Y16, Y17, Y18, Y19, Y20: real; X: real; end_var var i: udint; ri: real; end_var for i := 0 to 20 do ri := udint_to_real(i); if X * ri >= 5 * ri and X * ri < (ri + 1) * 5 then exit; end_if end_for case i of 0: PLAst := Y0 + (Y1 - Y0) / 5 * (X - (5 * ri)); 1: PLAst := Y1 + (Y2 - Y1) / 5 * (X - (5 * ri)); 2: PLAst := Y2 + (Y3 - Y2) / 5 * (X - (5 * ri)); 3: PLAst := Y3 + (Y4 - Y3) / 5 * (X - (5 * ri)); 4: PLAst := Y4 + (Y5 - Y4) / 5 * (X - (5 * ri)); 5: PLAst := Y5 + (Y6 - Y5) / 5 * (X - (5 * ri)); 6: PLAst := Y6 + (Y7 - Y6) / 5 * (X - (5 * ri)); 7: PLAst := Y7 + (Y8 - Y7) / 5 * (X - (5 * ri)); 8: PLAst := Y8 + (Y9 - Y8) / 5 * (X - (5 * ri)); 9: PLAst := Y9 + (Y10 - Y9) / 5 * (X - (5 * ri)); 10: PLAst := Y10 + (Y11 - Y10) / 5 * (X - (5 * ri)); 11: PLAst := Y11 + (Y12 - Y11) / 5 * (X - (5 * ri)); 12: PLAst := Y12 + (Y13 - Y12) / 5 * (X - (5 * ri)); 13: PLAst := Y13 + (Y14 - Y13) / 5 * (X - (5 * ri)); 14: PLAst := Y14 + (Y15 - Y14) / 5 * (X - (5 * ri)); 15: PLAst := Y15 + (Y16 - Y15) / 5 * (X - (5 * ri)); 16: PLAst := Y16 + (Y17 - Y16) / 5 * (X - (5 * ri)); 17: PLAst := Y17 + (Y18 - Y17) / 5 * (X - (5 * ri)); 18: PLAst := Y18 + (Y19 - Y18) / 5 * (X - (5 * ri)); 19: PLAst := Y19 + (Y20 - Y19) / 5 * (X - (5 * ri)); 20: PLAst := Y20; end_case end_function
Начал помаленьку разбираться с задачей. Не вижу, где в Вашем примере задаётся нижняя граница t, с которой сравнивается Х ?
Нижний порог согласован: -50
Если Х<-50, то уставка = Y0
Если -50<= Х <-45, то уставка = Y0 + (Y1-Y0)*(X - (-50)) / 5
Если -45<= Х <-40, то уставка = Y1 + (Y2-Y1)*(X - (-45)) / 5
...
Получается, в функцию надо добавить константу base := -50
И выход рассчитывать так: 0: PLAst := Y0 + (Y1 - Y0) / 5 * (X - (5 * ri + base));
Но надо и вход как-то подправить, чтоб правильно попадать в нужные Y(n)..Y(n+1), пока не понимаю как это сделать.




Ответить с цитированием
