Нельзя решить функцию, можно подсчитать ее значение при заданных аргументах. А программу будем делать так: рисовать будет прямо на канве формы, для удобства возьмем самый естественный в данной ситуации масштаб: 1 ед. = 1 пиксель. Так проще. Начнем! Кидай на форму 1 TButton и 2 TLabeledEdit. Желательно разместить их в одном углу формы, чтобы потом не очень мешались. Надпись к LabeledEdit1 - "k", к LabeledEdit2 - "b". к едитам в OnKeyPress пиши:
Код:
case key of
'0'..'9', '-', #8:;
else key := #0;
end;
Это чтобы лишнего не вводили. В обработчике кнопки:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
W, H : cardinal;
halfW, halfH, x, y : double;
ixPrev, iyPrev, k, b : integer;
ix, iy : cardinal;
begin
repaint;
W := Form1.Width;
H := Form1.Height;
k := StrToIntDef(Form1.LabeledEdit1.Text, 0);
b := StrToIntDef(Form1.LabeledEdit2.Text, 0);
halfW := W / 2;
halfH := H / 2;
Form1.Canvas.MoveTo(round(halfW), 0);
Form1.Canvas.LineTo(round(halfW), H);
Form1.Canvas.MoveTo(0, round(halfH));
Form1.Canvas.LineTo(W, round(halfH));
ixPrev := 0;
iyPrev := round(halfH);
for ix := 0 to W - 1 do
begin
x := (ix - halfW);
y := k * x + b;
iy := round(halfH - y);
Form1.Canvas.MoveTo(ixPrev, iyPrev);
Form1.Canvas.LineTo(ix, iy);
ixPrev := ix;
iyPrev := iy;
end;
end;
В принципе y = kx + b можно решить и легче, но, как я понял, будут другие функции. Функцию задавать при присвоение значение переменной игрек: y := k * x + b;. ВАЖНО: т.к. масштаб 1 пиксель, то сложно будет отличить y = 3x + 2 и y = 3x + 3. Чтобы глаз человека мог это воспринимать надо либо увеличивать на десятки: y = 3x + 20 и y = 3x + 30, либо добавить в программу работу с масштабом иным.