Тема моей исследовательской работы «Построение графиков элементарных функций средствами среды программирования Borland Delphi 7».
Данная научно-исследовательская работа является актуальной в силу четырех обстоятельств:
Она имеет непосредственное практическое отношение к курсу информатики в школе;
Элементы работы могут быть представлены для изучения учащимся 9-11 классов;
Возможность применения разработанного приложения для проверки знаний учащихся, связанных построением графиков элементарных функций;
Работа имеет прикладной характер и требует углубленного изучения языка программирования Pascal в объектно-ориентированной среде программирования Borland Delphi 7.
Цель научно-исследовательской работы: разработать приложение для построения графиков элементарных функций средствами среды программирования Borland Delphi 7.
Построение графика функции лежит в основе исследования элементарных функций в курсе математики средней школы. График функции используют для решения задач и уравнений графическим способом. Задачи, связанные с графиками элементарных функций, внесены в программу единого государственного экзамена по многим предметам.
Всвязи с этим разработка данного приложения позволит учащимся средней и, в особенности, старшей школы более плодотворно подготовиться к экзаменам и освоить свойства элементарных функций, изучаемых в школе.
Для достижения цели были поставлены следующие задачи:
Изучить процесс исследования элементарных функций в курсе средней школы;
Изучить функционал среды программирования Borland Delphi 7 и ее возможности;
Изучить основы программирования на языке Pascal;
Составить приложение для построения графиков элементарных функций средствами среды программирования Borland Delphi 7.
Научно-исследовательская работа состоит из: введения, двух глав, заключения и списка литературы.
В введение сформулированы цель, задачи и актуальность научно-исследовательской работы.
В первой главе рассмотрен функционал среды программирования Borland Delphi 7 и ее возможности для построения графиков.
Во второй главе рассмотрен процесс разработки приложения для построения графиков элементарных функций средствами среды программирования Borland Delphi 7.
В заключении отражены достигнутые результаты и перспективы развития приложения.
Глава 1. Среда программирования Borland Delphi 7 для построения графиков элементарных функций.
Материал данной главы взят из учебника «Программирование в Delphi 7». [1]
Delphi — одна из самых мощных систем, позволяющих на самом современном уровне создавать как отдельные прикладные программы Windows, так и разветвленные комплексы, предназначенные для работы в корпоративных сетях и в Интернет.
Компонент Image и некоторые его свойства
Нередко возникает потребность украсить свое приложение какими-то изображениями. Это может быть графическая заставка, являющаяся логотипом вашего приложения. Или это могут быть фотографии сотрудников некого учреждения при разработке приложения, работающего с базой данных этого учреждения. В первом случае вам потребуется компонент Image, расположенный на странице Additional библиотеки компонентов, во втором — его аналог DBImage, связанный с данными и расположенный на странице Data Controls.
Если установить свойство AutoSize в true, то размер компонента Image будет автоматически подгоняться под размер помещенной в него картинки. Если же свойство AutoSize установлено в false, то изображение может не поместиться в компонент или, наоборот, площадь компонента может оказаться много больше площади изображения.
Другое свойство — Stretch позволяет подгонять не компонент под размер рисунка, а рисунок под размер компонента. Установите AutoSize в false, растяните или сожмите размер компонента Image и установите Stretch в true. Вы увидите, что рисунок займет всю площадь компонента, но поскольку вряд ли реально вручную установить размеры Image точно пропорциональными размеру рисунка, то изображение исказится. Устанавливать Stretch в true может иметь смысл только для каких-то узоров, но не для картинок. Свойство Stretch не действует на изображения пиктограмм, которые не могут изменять своих размеров.
Свойство — Center, установленное в true, центрирует изображение на площади Image, если размер компонента больше размера рисунка.
Рассмотрим еще одно свойство — Transparent (прозрачность). Если Transparent равно true, то изображение в Image становится прозрачным. Это можно использовать для наложения изображений друг на друга. Одно из возможных применений этого свойства — наложение на картинку надписей, выполненных в виде битовой матрицы. Эти надписи можно сделать с помощью встроенной в Delphi программы Image Editor.
Канва и пикселы
Многие компоненты в Delphi имеют свойство Canvas (канва, холст), представляющее собой область компонента, на которой можно рисовать или отображать готовые изображения. Это свойство имеют формы, графические компоненты Image, PaintBox, BitMap и многие другие. Канва содержит свойства и методы, существенно упрощающие графику Delphi. Все сложные взаимодействия с системой спрятаны для пользователя, так что рисовать в Delphi может человек, совершенно не искушенный в машинной графике.
Каждая точка канвы имеет координаты X и Y. Система координат канвы, как и везде в Delphi, имеет началом левый верхний угол канвы. Координата X возрастает при перемещении слева направо, а координата Y — при перемещении сверху вниз. С координатами вы уже имели дело многократно, но пока вас не очень интересовало, что стоит за ними, в каких единицах они измеряются. Координаты измеряются в пикселах. Пиксел — это наименьший элемент поверхности рисунка, с которым можно манипулировать. Важнейшее свойство пиксела — его цвет. Для описания цвета используется тип TColor. С цветом вы встречаетесь практически в каждом компоненте и знаете, что в Delphi определено множество констант типа TColor. Одни из них непосредственно определяют цвета (например clBlue — синий), другие определяют цвета элементов окон, которые могут меняться в зависимости от выбранной пользователем палитры цветов Windows (например, ulBtnFaсе — цвет поверхности кнопок).
Но для графики иногда этих предопределенных констант иногда не хватает. Вам могут понадобиться такие оттенки, которых нет в стандартных палитрах. В этом случае можно задавать цвет 4-байтовым шестнадцатеричным числом, три младших разряда которого представляют собой интенсивности синего, зеленого и красного цвета соответственно.
Например, значение SOOFFOOQO соответствует чистому синему цвету, SOOOOFFOO — чистому зеленому, SOOOOOOFF — чистому красному. $00000000 — черный цвет, SOOFFFFFF — белый.
Рисование с помощью пера Pen
У канвы имеется свойство Pen — перо. Это объект, в свою очередь имеющий ряд свойств. Одно из них уже известное вам свойство Color — цвет, которым наносится рисунок. Второе свойство — Width (ширина линии). Ширина задается в пикселах. По умолчанию ширина равна 1. Свойство Style определяет вид линии. Это свойство может принимать следующие значения:
ps Solid |
сплошная линия |
psDash |
штриховая линия |
psDot |
пунктирная линия |
ps Dash Dot |
штрихпунктирная линия |
psDash DotDot |
линия, чередующая штрих и два пунктира |
ps Clear |
отсутствие линии |
pslnside Frame |
сплошная линия, но при Width > 1 допускающая цвета, от личные от палитры Windows |
Все стили со штрихами и пунктирами доступны только при Width = 1. В противном случае линии этих стилей рисуются как сплошные.
Стиль psInsideFrame — единственный, который допускает произвольные цвета. Цвет линии при остальных стилях округляется до ближайшего из палитры Windows.
У канвы имеется свойство PenPos типа TPoint. Это свойство определяет в координатах канвы текущую позицию пера. Перемещение пера без прорисовки линии, т.е. изменение PenPos, производится методом канвы MoveTo(X.Y). Здесь X и Y — координаты точки, в которую перемещается перо. Эта текущая точка становится исходной, от которой методом LineTo(X,Y) можно провести линию в точку с координатами (X,Y). При этом текущая точка перемещается в конечную точку линии, и новый вызов LineTo будет проводить линию из этой новой текущей точки.
Глава 2. Разработка приложения для построения графиков элементарных функций, изучаемых в средней школе
Для построения графиков элементарных функций, изучаемых в средней школе будем использовать привило составления таблицы значений. К этим функциям относятся функции:
В настоящий момент разработанное приложение позволяет производить построение графиков функций 1 и 2. Это обусловлено тем, что построение графиков данных функций зависит только от коэффициентов этих функций и сводится к вычислению значения этих функций при различных значениях аргумента .
Таким образом для построения графиков линейных функций необходимо знать коэффициенты и , а для построения графиков квадратичных функций соответственно , и .
Всвязи с вышесказанным, входными параметрами будут выступать коэффициенты и отрезок, на котором будет производиться построение графиков данных функций. Для ввода всех необходимых данных будем использовать объект , который позволяет вводить с клавиатуры значения и присваивать им соответствующие переменные. Для вывода построенного графика нам необходим объект , а для запуска программы будем использовать объект (кнопка), построение графиков будем производить при помощи канвы рисунка (параметр ). Также добавим кнопку очистки интерфейса программы и выхода из программы. Тогда весь интерфейс приложения будет состоять из 7 объектов , 3 кнопок и объекта , в котором будет отображаться полученный результат (Рисунок 1).
Значения, которые записаны в полях , имеют строковый тип, для перевода их в числовой тип будем использовать встроенную функцию , которая переводит значение строки в число.
k:=StrToInt(edt1.text);
b1:=StrToInt(edt2.text);
a:=StrToInt(edt3.text);
b2:=StrToInt(edt4.text);
c:=StrToInt(edt5.text);
Рисунок 1
Для построения графиков функций необходимо найти значения функций при изменении значения аргумента , который может принимать значения на отрезке . Значения и задаются соответственно в объектах и . Приращение аргумента положим равным 0,01. Тогда для построения графиков линейных функций код программы будет иметь следующий вид:img1.Canvas.Pen.Color:=clBlue;
img1.Canvas.Pen.Width:=1;
y:=-k*x-b1;
img1.Canvas.MoveTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
Repeat
y:=-k*x-b1;
img1.Canvas.LineTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
x:=x+0.01;
until x>=StrToInt(edt7.text);
Рисунок 2
Начало системы координат в Borland Delphi 7 расположено в верхнем правом углу, а сама система координат ориентирована так, что положительное направление оси абсцисс идет слева направо, а оси ординат сверху вниз. Поэтому для построения графика функции нам необходимо изменить знаки в общем виде линейной функции, то есть отразить ее относительно оси абсцисс. Первая и вторая строки в данном коде задают цвет графика и толщину в пикселях. Четвертая строка рассчитывает координаты для начала построения графика функции от минимального значения . Функция откидывает дробную часть и оставляет только целую. Это позволяет построить график функции в объекте , так как координаты в данном объекте могут быть только целыми числами. Цикл позволяет посчитать значения функции при каждом значении аргумента на заданном отрезке с шагом . Функция чертит линии покоординатно, то есть строит линию от точки до точки .Аналогичным образом происходит построение графиков квадратичных функций:
img1.Canvas.Pen.Color:=clRed;
Рисунок 3
img1.Canvas.Pen.Width:=1;y:=-a*sqr(x)+b2*x+c;
img1.Canvas.MoveTo(Trunc(x*mush1+x0),Trunc(y*mush2));
Repeat
y:=-a*sqr(x)-b2*x-c;
img1.Canvas.LineTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
x:=x+0.01;
until x>=StrToInt(edt7.text);
При запуске программы на построение графика линейной или квадратичной функции получим результат, изображенный на Рисунке 2 и Рисунке 3.
Константы и используются для того, чтобы увеличить размера построенного графика. Это необходимо, чтобы график был читабельным, ведь объект состоит из пикселей, расстояние между которыми очень маленькое, а значит если не применить масштабирование графика, то его просто не будет видно.
К тому же для комфортного изображения графиков данных функций необходимо построить координатные оси и координатную сетку. Для этого произведем дополнительные построения:
img1.Canvas.Pen.Color:=clBlack;
img1.Canvas.Pen.Width:=2;
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0,ClientHeight);
img1.Canvas.MoveTo(0,y0);
img1.Canvas.LineTo(ClientWidth,y0);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0+(mush1 div 4),mush2);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0-(mush1 div 4),mush2);
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0-(mush2 div 4));
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0+(mush2 div 4));
img1.Canvas.TextOut(x0+mush1,y0,'1');
img1.Canvas.TextOut(x0,y0-mush2,'1');
img1.Canvas.TextOut(x0+(mush1 div 4),y0,'0');
img1.Canvas.TextOut(x0-(mush1 div 2),0,'y');
img1.Canvas.TextOut(ClientHeight-mush1,y0+(mush2 div 4),'x');
Данный код позволяет построить координатные оси, представленные на рисунках 2 и 3. Для построения координатной сетки используем цикл :
fori:= 0 toClientWidthdo
begin
img1.Canvas.MoveTo(0,y0+i * mush2);
img1.Canvas.LineTo(ClientWidth,y0+ i * mush2);
end;
for i:= 0 to ClientWidth do
begin
img1.Canvas.MoveTo(0,y0-i * mush2);
img1.Canvas.LineTo(ClientWidth,y0-i * mush2);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0+i * mush2,0);
img1.Canvas.LineTo(x0+i * mush2,ClientHeight);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0-i * mush2,0);
img1.Canvas.LineTo(x0-i * mush2,ClientHeight);
end;
В данном коде параметры и являются максимальными размерами для объекта , то есть это его длина и высота в пикселях.
Для удобства работы также воспользуемся кнопками «Очистить» и «Выход», которые позволяют сбросить все введенные значения в поляи закрыть запущенную программу.
Для корректной работы разработанного приложения на поля введем ограничения по вводу значений, которые будут запрещать ввод буквенных выражений и десятичных дробей:
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'1'..'9',#8:;
'0': if edt1.SelStart=0 then Key :=#0;
'-': if (edt1.SelStart=0)and(Pos('-',edt1.Text)=0) then key:=#45 else key:=#0;
#1..#7,#9..#44,#46,#47,#58..#255: key:=#0;
end;
end;
Данная процедура запрещает вводить какие-либо иные символы кроме 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и знака «-».
Полный код разработанной программы представлен в приложении 1. В приложениях 2 и 3 представлен результат работы разработанной программы.
Заключение
Работая над научно-исследовательской работой, мне пришлось изучить учебно-методическую и научную литературу, а также проанализировать материал, изученный мной в школе.
Особенно мне понравилось разрабатывать приложение для построения графиков элементарных функций при помощи Borland Delphi 7, так как при его создании возникало много ошибок и проблем, которые приходилось решать, прибегая к помощи преподавателей и одноклассников.
Целью данной работы было создание приложения для построения графиков элементарных функций, изучаемых в средней школе.
Хоть материал работы и выходит за рамки школьной программы, но он может изучаться в средней и старшей школе.
Я считаю, что цели работы достигнуты, а задачи решены. Результатом решения поставленных задач является приложение программный код которого приведен в приложении 1.
Разработанное приложение позволяет строить графики линейных и квадратичных функций по их коэффициентам. Продолжая работать над данным приложением, есть возможность расширить его функционал и уйти от построения графиков по коэффициентам и строить графики любых элементарных функций по их записи. Достижение этой цели требует более глубокого изучения функциональных возможностей программы Borland Delphi 7 и более глубокого освоения языка программирования Pascal.
Список литературы
А.Я. Архангельский Программирование в Delphi 7. — М.: ООО «Бином-Пресс», 2003 г. — 1152 с.: ил. ISBN 5-9518-0042-0
Приложение 1. Код программы на языке Pascal
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, TeeProcs, TeEngine, Chart, Outline;
type
TForm1 = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
edt1: TEdit;
lbl4: TLabel;
edt2: TEdit;
lbl5: TLabel;
lbl6: TLabel;
edt3: TEdit;
edt4: TEdit;
lbl7: TLabel;
lbl8: TLabel;
edt5: TEdit;
btn1: TButton;
btn2: TButton;
img1: TImage;
edt6: TEdit;
edt7: TEdit;
lbl9: TLabel;
lbl10: TLabel;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure edt1Change(Sender: TObject);
procedure edt3Change(Sender: TObject);
procedure edt6Change(Sender: TObject);
procedure edt1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k,b1,a,b2,c,xn,xk,y,x:real;
x0,y0,osymax,i:Integer;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
const
mush1=20;
mush2=20;
begin
x0:=img1.ClientWidth div 2;;
y0:=img1.ClientHeight div 2;
k:=StrToInt(edt1.text);
b1:=StrToInt(edt2.text);
x:=StrToInt(edt6.text);
if edt1.Text='0' then begin
ShowMessage('Функция не является линейной');
Exit;
img1.Canvas.Pen.Color:=clWhite;
img1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
end;
img1.Canvas.Pen.Color:=clWhite;
img1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
img1.Canvas.Pen.Color:=clBlack;
img1.Canvas.Pen.Width:=2;
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0,ClientHeight);
img1.Canvas.MoveTo(0,y0);
img1.Canvas.LineTo(ClientWidth,y0);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0+(mush1 div 4),mush2);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0-(mush1 div 4),mush2);
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0-(mush2 div 4));
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0+(mush2 div 4));
img1.Canvas.TextOut(x0+mush1,y0,'1');
img1.Canvas.TextOut(x0,y0-mush2,'1');
img1.Canvas.TextOut(x0+(mush1 div 4),y0,'0');
img1.Canvas.TextOut(x0-(mush1 div 2),0,'y');
img1.Canvas.TextOut(ClientHeight-mush1,y0+(mush2 div 4),'x');
Canvas.Pen.Color := clBlack;
img1.Canvas.Pen.Width:=1;
for i:= 0 to ClientWidth do
begin
img1.Canvas.MoveTo(0,y0+i * mush2);
img1.Canvas.LineTo(ClientWidth,y0+ i * mush2);
end;
for i:= 0 to ClientWidth do
begin
img1.Canvas.MoveTo(0,y0-i * mush2);
img1.Canvas.LineTo(ClientWidth,y0-i * mush2);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0+i * mush2,0);
img1.Canvas.LineTo(x0+i * mush2,ClientHeight);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0-i * mush2,0);
img1.Canvas.LineTo(x0-i * mush2,ClientHeight);
end;
img1.Canvas.Pen.Color:=clBlue;
img1.Canvas.Pen.Width:=1;
y:=-k*x-b1;
img1.Canvas.MoveTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
Repeat
y:=-k*x-b1;
img1.Canvas.LineTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
x:=x+0.01;
until x>=StrToInt(edt7.text);
end;
procedure TForm1.btn2Click(Sender: TObject);
const
mush1=20;
mush2=20;
begin
x0:=img1.ClientWidth div 2;
y0:=img1.ClientHeight div 2;
a:=StrToInt(edt3.text);
b2:=StrToInt(edt4.text);
c:=StrToInt(edt5.text);
x:=StrToInt(edt6.text);
if edt3.Text='0' then begin
ShowMessage('Функция не является квадратичной');
Exit;
img1.Canvas.Pen.Color:=clWhite;
img1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
end;
img1.Canvas.Pen.Color:=clWhite;
img1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
img1.Canvas.Pen.Color:=clBlack;
img1.Canvas.Pen.Width:=2;
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0,ClientHeight);
img1.Canvas.MoveTo(0,y0);
img1.Canvas.LineTo(ClientWidth,y0);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0+(mush1 div 4),mush2);
img1.Canvas.MoveTo(x0,0);
img1.Canvas.LineTo(x0-(mush1 div 4),mush2);
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0-(mush2 div 4));
img1.Canvas.MoveTo(ClientHeight,y0);
img1.Canvas.LineTo(ClientHeight-mush1,y0+(mush2 div 4));
img1.Canvas.TextOut(x0+mush1,y0,'1');
img1.Canvas.TextOut(x0,y0-mush2,'1');
img1.Canvas.TextOut(x0+(mush1 div 4),y0,'0');
img1.Canvas.TextOut(x0-(mush1 div 2),0,'y');
img1.Canvas.TextOut(ClientHeight-mush1,y0+(mush2 div 4),'x');
Canvas.Pen.Color := clBlack;
img1.Canvas.Pen.Width:=1;
for i:= 0 to ClientWidth do
begin
img1.Canvas.MoveTo(0,y0+i * mush2);
img1.Canvas.LineTo(ClientWidth,y0+ i * mush2);
end;
for i:= 0 to ClientWidth do
begin
img1.Canvas.MoveTo(0,y0-i * mush2);
img1.Canvas.LineTo(ClientWidth,y0-i * mush2);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0+i * mush2,0);
img1.Canvas.LineTo(x0+i * mush2,ClientHeight);
end;
for i:= 0 to ClientHeight do
begin
img1.Canvas.MoveTo(x0-i * mush2,0);
img1.Canvas.LineTo(x0-i * mush2,ClientHeight);
end;
img1.Canvas.Pen.Color:=clRed;
img1.Canvas.Pen.Width:=1;
y:=-a*sqr(x)+b2*x+c;
img1.Canvas.MoveTo(Trunc(x*mush1+x0),Trunc(y*mush2));
Repeat
y:=-a*sqr(x)-b2*x-c;
img1.Canvas.LineTo(Trunc(x*mush1+x0),Trunc(y*mush2)+y0);
x:=x+0.01;
until x>=StrToInt(edt7.text);
end;
procedure TForm1.btn4Click(Sender: TObject);
begin
Form1.close;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
edt1.text:=IntToStr(0);
edt2.text:=IntToStr(0);
edt3.text:=IntToStr(0);
edt4.text:=IntToStr(0);
edt5.text:=IntToStr(0);
edt6.text:=IntToStr(-10);
edt7.text:=IntToStr(10);
img1.Canvas.Pen.Color:=clWhite;
img1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
end;
procedure TForm1.edt1Change(Sender: TObject);
begin
if (edt1.Text='') or (edt2.Text='') then btn1.Enabled:=False
else btn1.Enabled:=True;
end;
procedure TForm1.edt3Change(Sender: TObject);
begin
if (edt3.Text='') or (edt4.Text='') or (edt5.Text='') then btn2.Enabled:=False
else btn2.Enabled:=True;
end;
procedure TForm1.edt6Change(Sender: TObject);
begin
if (edt6.Text='') or (edt7.Text='') then begin
btn2.Enabled:=False;
btn1.Enabled:=False;
end
else begin
btn2.Enabled:=True;
btn1.Enabled:=True;
end;
end;
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'1'..'9',#8:;
'0': if edt1.SelStart=0 then Key :=#0;
'-': if (edt1.SelStart=0)and(Pos('-',edt1.Text)=0) then key:=#45 else key:=#0;
#1..#7,#9..#44,#46,#47,#58..#255: key:=#0;
end;
end;
end.
Приложение 2. Результат построения графика квадратичной функции
Приложение 3. Результат построения линейной функции