- •Содержание
- •Введение
- •1 Постановка задачи
- •Математическое (логическое) описание задачи
- •2.1 Разработка алгоритма программного модуля и его описание Структура формы «Построение графика» представлена на Рисунке 1.
- •2.2 Структурная диаграмма программного модуля
- •2.3 Разработка пользовательского интерфейса
- •3 Реализация программного модуля
- •3.1 Описание используемых операторов, величин и функций
- •3.2 Тестирование программного модуля
- •4 Справочная система программного модуля
- •Заключение
- •Список использованных источников
- •Приложения Приложение а Руководство пользователя
- •Приложение б Код программы
Список использованных источников
1 Культин Н. Б. Основы программирования в Delphi 7. – СПб.:БХВ-Петербург,1998. – 528с.
2 Гофман В. Э., Хоменко А. Д. Delphi 6. М: АСТ-ПРЕСС КНИГА: Инфорком-Пресс, 1998.-1148с.
3 Павловский А. И. и др. Информатика: Учеб.пособие для 10-го кл. с углубл. изучением информатики./А. И. Павловский, А. Е. Пупцев, П. Л. Гращенко.-Мн.: Нар.асвета, 2000.-223с.
4 Павловский А. И. и др. Информатика: Учеб.пособие для 11-го кл. с углубл. Изучением информатики./А. И. Павловский, А. Е. Пупцев, П. Л. Гращенко.-Мн.: Нар.асвета, 2001.-223с.
5 Котов В. М. и др. Методы алгоритмизации /В. М. Котов, И. А. Волков, А. И. Харитонович. – Мн.:Нар.асвета,1996.-127с.
6. Баврин И.И. Высшая математика: учебник для студентов естественно-научных специальностей педагогических вузов/ И.И. Баврин. – 4-е издание, исправлено и дополнено. – М.: Издательский центр «Академия», 2004. – 616с.
Приложения Приложение а Руководство пользователя
Программный модуль предназначен для построения графика функции x2+x/2+10.
Для нормальной работы программы требуются следующие системные требования: CPU – Intel Pentium 155 MHz или выше, Операционная система – Microsoft Windows 98, 2000, и XP; RAM – 128 Mb; Обьём свободной памяти – 55 Mb; VGA или более высокая разрешающая способность монитора. Навигация в программе осуществляется указательным устройством (мышкой или ) и клавиатурой.
Программный продукт не требует специальной инсталляции. Для работы с программой достаточно папку с программой скопировать на жесткий диск или на другой носитель.
Для начала работы с программой нужно запустить Graphf.exe. После чего появится окно для навигации по программе.
Приложение б Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Gauges, MyMath, Unit2, jpeg, XPMan, Menus;
type
TForm1 = class(TForm)
StartBtn: TButton;
Image1: TImage;
ClearBtn: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Gauge1: TGauge;
FormEd: TEdit;
XStart: TEdit;
XEnd: TEdit;
StepEd: TEdit;
LinesCh: TCheckBox;
MashCh: TCheckBox;
StartBtn2: TButton;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
OpenBtn: TButton;
SaveBtn: TButton;
AbBtn: TButton;
XPManifest1: TXPManifest;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
procedure StartBtnClick(Sender: TObject);
procedure ClearBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure StartBtn2Click(Sender: TObject);
procedure OpenBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure AbBtnClick(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var x,y:array of extended;
xmnoj,ymnoj,ymin,ymax,xe,xs,step:extended;
graph:boolean=false;
ram:boolean=false;
f:file of extended;
fn:string;
procedure XYMinMax;
var n:cardinal;
imh,imw:word;
begin
form1.caption:='Graphics - Поиск минимальных и максимальных значений для масштабирования';
form1.gauge1.maxvalue:=high(y);
if form1.mashch.checked=true then
begin
//если масштабирование отмечено, то ищется множитель для x и y
imh:=form1.image1.height;
imw:=form1.image1.width;
ymax:=y[1];
ymin:=y[1];
for n:=0 to high(y) do
begin
if ymax<y[n] then ymax:=y[n];
if ymin>y[n] then ymin:=y[n];
form1.gauge1.progress:=n;
end;
if ymax-ymin=0 then ymnoj:=1
else ymnoj:=imh/abs(ymax-ymin);
if xe-xs=0 then xmnoj:=1
else xmnoj:=imw/abs(xe-xs);
end else
//а если масштабирование не отмечено, то множители равны нулю
begin
ymnoj:=1;
xmnoj:=1;
end;
form1.caption:='Graphics - Поиск завершен';
end;
procedure ris;
var n:cardinal;
imh,imw:word;
begin
form1.caption:='Graphics - Построение графика';
form1.image1.canvas.pen.color:=clBlack;
imh:=form1.image1.height;
imw:=form1.image1.width;
form1.gauge1.maxvalue:=high(x);
//рисует оси
with form1.image1.canvas do
begin
pen.style:=psdot;
moveto(0,imh-trunc((-ymin)*ymnoj));
lineto(imw,imh-trunc((-ymin)*ymnoj));
moveto(trunc((-xs)*xmnoj),0);
lineto(trunc((-xs)*xmnoj),imh);
pen.style:=pssolid;
end;
if form1.linesch.checked=true then
begin
//если отмечено соединение линиями, то точки соединяются между собой...
for n:=0 to high(x)-1 do
begin
with form1.image1.canvas do
begin
moveto(trunc((x[n]-xs)*xmnoj),imh-trunc((y[n]-ymin)*ymnoj));
lineto(trunc((x[n+1]-xs)*xmnoj),imh-trunc((y[n+1]-ymin)*ymnoj));
end;
form1.gauge1.progress:=n;
end;
form1.gauge1.progress:=high(x);
end else //а если нет, то не соединяются
for n:=0 to high(x) do
begin
form1.image1.canvas.moveto(trunc((x[n]-xs)*xmnoj),imh-trunc((y[n]-ymin)*ymnoj));
form1.image1.canvas.lineto(trunc((x[n]-xs)*xmnoj)+1,imh-trunc((y[n]-ymin)*ymnoj)+1);
form1.gauge1.progress:=n;
end;
graph:=true;
form1.caption:='Graphics - Построение завершено';
end;
procedure TForm1.StartBtnClick(Sender: TObject);
var n:cardinal;
m:word;
str:string;
label a;
begin
Form1.Height:=482;
Form1.Width:=795;
form1.caption:='Graphics - Расчет точек';
graph:=true;
ram:=true;
xe:=strtofloat(xend.text);
xs:=strtofloat(xstart.text);
if xe<xs then
begin
str:=xend.text;
xend.text:=xstart.text;
xstart.text:=str;
xe:=xe+xs;
xs:=xe-xs;
xe:=xe-xs;
end;
step:=strtofloat(steped.text);
if (step>abs(xe-xs))or(step<0) then
begin
showmessage('Неверный шаг');
exit;
end;
setlength(x,trunc(abs(xe-xs)/step)+1);
setlength(y,trunc(abs(xe-xs)/step)+1);
gauge1.maxvalue:=high(y);
for n:=0 to high(x) do
begin
x[n]:=xs+n*step;
str:=formed.text;
str:=erranalise(str);
a:;
for m:=1 to length(str) do
begin
if ((str[m]='x')or(str[m]='X')){and(x[n]>=0)} then
begin
delete(str,m,1);
insert(floattostr(x[n]),str,m);
goto a;
end;
end;
y[n]:=strtofloat(analise(str));
gauge1.progress:=n;
end;
xyminmax;
ris;
end;
procedure TForm1.ClearBtnClick(Sender: TObject);
begin
form1.Width:=265;
with form1.image1.canvas do
begin
brush.color:=clAqua;
pen.color:=clAqua;
rectangle(0,0,form1.image1.width,form1.image1.height);
end;
graph:=false;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
finalize(x);
finalize(y);
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if graph then
begin
//xed.text:=floattostr((x/image1.width)*(xe-xs)+xs);
//yed.text:=floattostr(ymax-(y/image1.height)*(ymax-ymin));
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with form1.image1.canvas do
begin
brush.color:=clAqua;
pen.color:=clWhite;
rectangle(0,0,form1.image1.width,form1.image1.height);
end;
end;
procedure TForm1.StartBtn2Click(Sender: TObject);
begin
form1.Close
end;
procedure TForm1.OpenBtnClick(Sender: TObject);
var l:extended;
formula:string;
n:word;
begin
form1.caption:='Graphics - Открытие файла';
if opendialog.execute then
fn:=opendialog.filename;
if fn='' then exit;
setlength(x,0);
setlength(y,0);
assignfile(f,fn);
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
finalize(x);
finalize(y);
read(f,l);
formula:='';
for n:=1 to trunc(l) do
begin
read(f,l);
formula:=formula+chr(trunc(l));
end;
read(f,xe,xs,step);
while not eof(f) do
begin
setlength(x,high(x)+2);
setlength(y,high(y)+2);
read(f,x[high(x)],y[high(y)]);
end;
setlength(x,high(x));
setlength(y,high(y));
formed.text:=formula;
xstart.text:=floattostr(xs);
xend.text:=floattostr(xe);
steped.text:=floattostr(step);
end else showmessage('Не могу открыть файл');
closefile(f);
form1.caption:='Graphics - Открытие завершено';
end;
procedure TForm1.SaveBtnClick(Sender: TObject);
var n:cardinal;
l:extended;
begin
form1.caption:='Graphics - Сохранение файла';
if savedialog.execute then
fn:=savedialog.filename;
if fn='' then exit;
l:=0;
for n:=length(fn) downto 1 do
if fn[n]='\' then
begin
l:=n;
break;
end;
if pos('.',copy(fn,trunc(l),length(fn)-trunc(l)))=0 then fn:=fn+'.grf';
assignfile(f,fn);
rewrite(f);
l:=length(formed.text);
write(f,l);
for n:=1 to length(formed.text) do
begin
l:=ord(formed.text[n]);
write(f,l);
end;
write(f,xe,xs,step);
for n:=0 to high(x) do
write(f,x[n],y[n]);
closefile(f);
form1.caption:='Graphics - Сохранение завершено';
end;
procedure TForm1.AbBtnClick(Sender: TObject);
begin
AboutForm.ShowModal;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
WinExec('hh.exe help.chm',SW_SHOW);
end;
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TAboutForm = class(TForm)
Memo1: TMemo;
OKBtn: TButton;
procedure OKBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutForm: TAboutForm;
implementation
{$R *.DFM}
procedure TAboutForm.OKBtnClick(Sender: TObject);
begin
close;
end;
end.