ВВЕДЕНИЕ
Задачей данной курсовой работы является создание в Delphi программы для построения графика функции
Интерес к программированию постоянно растет. Это связано с развитием и внедрением в повседневную жизнь информационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, научится программировать.
Если принять во внимание и удобный интерфейс для создания графических оболочек, то можно с уверенностью заявить что язык Delphi – это очень доступный для понимания, но в то же время и очень мощный язык программирования.
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ
Для построения графика функции нужно:
1. Определить число точек графика – n.
2. Получить таблицу значений функции y=f(x) в диапазоне измерения х от xn до xk.
3. Значения функции заносятся в массив:
x i= xi-1 + ∆x
yi = f(xi)
4. Определить минимальное и максимальное значения аргумента х и функции у в диапазоне построения графика.
5. Пересчитать действительное значение х и у в экранное. Результаты сохраняются в массивах целых чисел.
6. Переместить перо в первую точку графика.
7. Задать цвет и стиль линии.
8. Последовательно соединить точки прямыми линиями с помощью метода
LineTo. Отрисовать систему координат, подписать оси.
ЭКРАННАЯ ФОРМА ПРОГРАММЫ
Рисунок 2.1 – форма на этапе проектирования
Используемые компоненты:
1 Form
2 Label
3 Edit
4 Button
5 Image
6 Memo
7 StringGrid
ТЕКСТ МОДУЛЯ ПРОГРАММЫ
unit Travina1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, ExtDlgs, printers;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit_n: TEdit;
Edit_Xn: TEdit;
Edit_Xk: TEdit;
Edit_a: TEdit;
Edit_b: TEdit;
StringGrid1: TStringGrid;
Button_calk: TButton;
Button_plot: TButton;
Button_clear: TButton;
Button_print: TButton;
Button_exit: TButton;
Memo_rez: TMemo;
Image1: TImage;
Button_save: TButton;
Label7: TLabel;
PrintDialog1: TPrintDialog;
SavePictureDialog1: TSavePictureDialog;
Image2: TImage;
procedure FormCreate(Sender: TObject);
procedure Button_exitClick(Sender: TObject);
procedure Button_calkClick(Sender: TObject);
procedure Button_plotClick(Sender: TObject);
procedure Button_clearClick(Sender: TObject);
procedure Button_printClick(Sender: TObject);
procedure Button_saveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var// Раздел описания переменных
Form1: TForm1;//Форма
x,y:array[1..100] of extended;// Через одномерный массив задаём вещественное значение
xr,yr:array[1..100] of integer;// Через одномерный массив задаём целое значение
n: integer;// Задаём переменную целого типа
xn,xk,a,b,xe,ye: extended;// Задаём переменные вещественного типа
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);// Процедура заполнения формы
var// Раздел описания переменных
i:integer;// Задаём переменную целого типа
begin
Image1.Canvas.Brush.Color:=clWhite;
n:=50;
Xn:=-10; Xk:=10; a:=4; b:=-1;// Задаём элементы массива
with stringGrid1 do// Отображаем элементы данного массива
begin
RowCount:=n+1;// Отображаем число строк
cells[0,0]:=' №'; cells[1,0]:=' x'; cells[2,0]:=' y';// Заполняем таблицу
for i:=1 to n do// Условие от 1 до n
begin
cells[0,i]:=' '+IntToStr(i);// Преобразуем целое число в строку
end;
end;
with Image1, Canvas do// Обрабатываем записи полей и отрисовываем объект
begin
pen.color:=clRed;// Задаём цвет карандаша
pen.Width:=1;// Задаём ширину пера
Brush.Color:=clWhite;// Задаём цвет кисти
FillRect(ClientRect);// Отрисовываем
end;
end;
procedure TForm1.Button_exitClick(Sender:TObject);// Процедура выхода
begin
close;// Выход
end;
procedure TForm1.Button_calkClick(Sender:TObject);// Процедура вычисления
Var// Раздел описания переменных
i:integer;// Задаём переменную целого типа
dx:extended;// Задаём переменную вещественного типа
s:string;// Задаём переменную для строкового типа
begin
n:=StrToInt(Edit_n.Text);// Преобразуем строку в действительное число
Xn:=StrToFloat(Edit_Xn.Text);
Xk:=StrToFloat(Edit_Xk.Text);
a:=StrToFloat(Edit_a.Text);
b:=StrToFloat(Edit_b.Text);
If b=0 then b:=1;
dx:=(Xk-Xn)/(n-1);// Шаг аргумента
for i:=1 to n do// Условие от 1 до n
begin
x[i]:=Xn+(i-1)*dx;// Задаём X
y[i]:=a*x[i]*sin(x[i]/b);// Задаём график функции
end;
with StringGrid1 do// Отображаем элементы массива
begin
for i:=1 to n do// Условие от 1 до n
begin
cells[1,i]:=FloatToStrF(x[i],ffFixed,8,3);// Ограничиваем количество знаков X
cells[2,i]:=FloatToStrF(y[i],ffFixed,8,5);// Ограничиваем количество знаков Y
end;
end;
// Рисуем таблицу
s:='---------------------------------------';
Memo_rez.Lines.Add(s);//Отображаем
s:=' | № | x | y |';
Memo_rez.Lines.Add(s);//Отображаем
s:='---------------------------------------';
Memo_rez.Lines.Add(s);// Отображаем
for i:=1 to n do// Условие от 1 до n
begin
s:='';
s:=' | '+IntToStr(i)+' | '+FloatToStrF(x[i],ffFixed,6,2)+
' | '+FloatToStrF(y[i],ffFixed,6,2)+' | ';// Преобразум целое число в строку
Memo_rez.Lines.Add(s);// Отображаем
end;
end;
procedure TForm1.Button_plotClick(Sender:TObject);// Процедура графика функции
Var// Раздел описания переменных
i,v,c,l,x0,y0,xn,xk,yn,yk,x1,x2,x3,x4,y1,y2,y3,y4:integer;// Задаём переменную целого типа
MinX,MaxX,MinY,MaxY:extended;// Задаём переменную вещественного типа
yy,xx:variant;// Задаём переменную универсального типа
begin
MinX:=x[1]; MaxX:=x[1]; MinY:=y[1]; MaxY:=y[1];// Задаём максимальное и минимальное значение
for i:=1 to n do// Условие от 1 до n
begin
// Находим максимальные и минимальные значения функции
if x[i]<MinX then MinX:=x[i];
if x[i]>MaxX then MaxX:=x[i];
if y[i]<MinY then MinY:=y[i];
if y[i]>MaxY then MaxY:=y[i];
end;
v:=2; c:=10;
With Image1,Canvas do// Обрабатываем записи полей и отрисовываем объект
begin
xx:=Image1.width;// Ширина
yy:=Image1.height;// Высота
FillRect(ClientRect);// Отрисовываем
Pen.Color:=clRed;// Задаём цвет карандаша
for i:=1 to n do// Условие от 1 до n
begin
xr[i]:=c+Round((x[i]-minX)/(MaxX-MinX)*(xx-2*c));
yr[i]:=yy-c-Round((y[i]-minY)/(MaxY-MinY)*(yy-2*c));
end;
//Рисуем оси X и Y
MoveTo(xr[1],yr[1]);// Перемещаем перо в точку с данными координатами
for i:=1 to n do// Условие от 1 до n
LineTo(xr[i],yr[i]);// Рисуем линию
for i:=1 to n do// Условие от 1 до n
Rectangle(xr[i]-v,yr[i]-v,xr[i]+v,yr[i]+v);// Рисуем прямоугольник, который имеет xr[i]-v,yr[i]-v - координаты верхнего левого угла и xr[i]+v,yr[i]+v - координаты нижнего правого угла
begin
// Вычисляем значения
x1:=c+Round((MinX-MinX)/(MaxX-MinX)*(xx/2-2*c));
x2:=xx-c;
y1:=yy-c-round((0-MinY)/(MaxY-MinY)*(yy-2*c));
y2:=yy-c-round((0-MinY)/(MaxY-MinY)*(yy-2*c));
y3:=yy-c;
y4:=c;
x3:=yy/2+Round((minX-minX)/(MaxX-MinX)*(xx-2*c));
x4:=yy/2+Round((minX-minX)/(MaxX-MinX)*(xx-2*c));
Pen.Color:=clBlack;// Задаем цвет карандаша
MoveTo(x3,y3);// Перемещаем перо в точку
LineTo(x4,y4);// Рисуем линию
MoveTo(x1,Y1);// Пермещаем перо в точку
LineTo(x2,y2);// Рисуем линию
// Стрелочки по оси X
MoveTo(x2,y2);
LineTo(x2-7,y2+7);
MoveTo(x2,y2);
LineTo(x2-7,y2-7);
//Стрелочки по оси Y
MoveTo(x4,y4);
LineTo(x4+7,y4+7);
MoveTo(x4,y4);
LineTo(x4-7,y4+7);
//Засечки по оси X
MoveTo(x1,y1);
LineTo(x1,y1+7);LineTo(x1,y1-7);
MoveTo(x1+48,y1);
LineTo((x1+48),y1+7); LineTo((x1+48),y1-7);
MoveTo(x1+96,y1);
LineTo((x1+96),y1+7); LineTo((x1+96),y1-7);
MoveTo(x1+144,y1);
LineTo((x1+144),y1+7); LineTo((x1+144),y1-7);
MoveTo(x1+192,y1);
LineTo((x1+192),y1+7); LineTo((x1+192),y1-7);
MoveTo(x1+288,y1);
LineTo((x1+288),y1+7); LineTo((x1+288),y1-7);
MoveTo(x1+336,y1);
LineTo((x1+336),y1+7); LineTo((x1+336),y1-7);
MoveTo(x1+384,y1);
LineTo((x1+384),y1+7); LineTo((x1+384),y1-7);
MoveTo(x1+432,y1);
LineTo((x1+432),y1+7); LineTo((x1+432),y1-7);
//Засечки по оси Y
MoveTo(x4,y4+50);
LineTo(x4+7,y4+50);LineTo(x4-7,(y4+50));
MoveTo(x4,y4+100);
LineTo(x4+7,y4+100);LineTo(x4-7,(y4+100));
MoveTo(x4,y4+150);
LineTo(x4+7,y4+150);LineTo(x4-7,(y4+150));
MoveTo(x4,y4+250);
LineTo(x4+7,y4+250);LineTo(x4-7,(y4+250));
MoveTo(x4,y4+300);
LineTo(x4+7,y4+300);LineTo(x4-7,(y4+300));
MoveTo(x4,y4+350);
LineTo(x4+7,y4+350);LineTo(x4-7,(y4+350));
MoveTo(x4,y4+400);
LineTo(x4+7,y4+400);LineTo(x4-7,(y4+400));
MoveTo(x4,y4+450);
LineTo(x4+7,y4+450);LineTo(x4-7,(y4+450));
end;
//Подписывае оси X и Y
Font.Size:=11;
TextOut(x1+230,y1+10,'0');
TextOut(x1+220,y1-205,'Y');
TextOut(x1+470,y1-20,'X');
end;
end;
procedure TForm1.Button_clearClick(Sender:TObject);// Процедура очистки
Var// Раздел описания переменных
i:Integer;// Задаём переменную целого типа
begin
Image1.Canvas.FillRect(ClientRect);
With StringGrid1 do
for i:=1 to n do
begin
cells[1,i]:='';
cells[2,i]:='';
end;
Memo_rez.Clear;// Очистка меню
end;
procedure TForm1.Button_printClick(Sender: TObject);// Процедура печати
Var// Раздел описания переменных
f:TextFile;
i:Integer;
begin
If PrintDialog1.Execute then
begin
AssignPrn(f); Rewrite(f);
Printer.Canvas.Font:=Memo_rez.Font;// Отрисовываем
for i:=0 to Memo_rez.LineS.Count-1 do// Отображаем
Writeln(f,Memo_rez.Lines[i]);
CloseFile(f);
end;
end;
procedure TForm1.Button_saveClick(Sender:TObject);//Процедура сохранения
begin
if SavePictureDialog1.Execute then
Image1.Picture.SaveToFile(SavePictureDialog1.FileName);
end;
end.
ПЕРЕЧЕНЬ ИСПОЛЬЗОВАННЫХ КОМПОНЕНТОВ
1.Form
Назначение: На ней располагаются элементы программы (надписи, кнопки, поля ввода и т.д.)
Использованные свойства: Caption, Width, Height, Color.
2. Label
Назначение: Для отображения текста, надписей и меток на Форме, которые не меняются в течение всего времени работы программы.
Использованные свойства: Caption, Width, Height, Font.
3. Memo
Назначение: Позволяет вводить многострочные текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата.
Использованные свойства:Lines, Width, Height, ScrollBars.
4. StringGrid
Назначение: Компоненты для отображения различных данных в табличной форме.
Использованные свойства: RowCount, ColCount, Width, Height, ScrollBars.
5. Image
Назначение: Дает отображение графического изображения и обеспечивает работу с изображением.
Использованные свойства: Picture, AuntSize, Center, Width, Height.
6. Edit
Назначение: Представляет собой однострочное текстовое поле, служащее для ввода данных пользователем.
Использованные свойства: Text, Name, AutoSize, Font, Width, Height, Color.
7. Button
Назначение: Компоненты Button-это простая командная кнопка, используется для реализации в программе команд с помощью обработчика событии OnClick этого компонента.
Использованные свойства: Caption, Name, Width, Height, Color.
8. SavePictureDialog
Назначение: Позволяет сохранять содержимое поля Image.
Использованные свойства: Filter, FileName.
9. PrintDialog
Назначение: Компоненты вызывают диалоговое окно печати. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последовательности их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент.
Использованные свойства: Execute.