29-сурет
30-сурет
31-сурет
32-сурет
Жұмысты орындау бағдарламасы:
unit grafik01;
//GR процедурасын бетінде график сызылатын және өзі басқа //модульде орналасқан Form2 пішіні үшін onPaint оқиғасын өңдеу //процедурасы шақырады.
// Сондықтан функция хабарландыруын басқа модульден шақырып //алу үшін Interface тарауында орналастыру қажет.
procedure gr;
implementation
uses grafik02;
{$R *.dfm}
{ Пішінді құру кезінде StringGrid компонентінің қасиетін орнату:
FixedRows := 0;
RowCount := 2;
Options.goEditing := True;
Options.goTab := True;}
const
COLCOUNT = 15;
var
// функцияның аргументтері мен мәндері
x: array[1..COLCOUNT] of real;
y: array[1..COLCOUNT] of real;
// x,y жиымының мәндері бойынша график салу
procedure gr;
var
i: integer;
x1,x2:real; // функция аргументінің өзгеру шектері
y1,y2:real; // функция мәндерінің өзгеру шектері
l,b:integer; // график шығатын аймақтың сол жақ төменгі бұрышы
w,h:integer; // график шығатын аймақтың ені мен биіктігі
mx,my:real; // X және Y осьтері бойынша масштаб
x0,y0:integer; // координат осьтерінің қиылысу нүктесі
px,py: integer;// пішін бетіндегі графиктің нүкте координаталары
np: integer; // графиктегі нүктелер саны
begin
Form2.Canvas.Rectangle(0,0,Form2.ClientWidth,Form2.ClientHeight);
// график шығатын аймақ
i:=10; // X - сол жақ жоғарғы бұрыш координатасы
b:=Form2.ClientHeight-20; // Y – сол жақ төменгі бұрыш //координатасы
h:=Form2.ClientHeight-40; //биіктігі
w:=Form2.Width-40; // ені
// аргументтің өзгеру шектері мен нүктелер санын анықтау (X //жиымының элементтері өспелі тізбек құрауы тиіс)
x1:=x[1];
i:=1;
while (x[i+1] > x[i]) and (i < COLCOUNT) do i:= i+1;
x2:= x[i]; //x[COLCOUNT-1];
np:=i; // нүктелер саны
if np < 2 then begin
ShowMessage('График нүктелері екіден кем болмауы қажет');
exit;
end;
// функцияның ең үлкен және ең кіші мәндерін табу
y1:=0; y[1]; // минимум
y2:=0; y[1]; // максимум
for i:=1 to np do
begin
if y[i] < y1 then y1:=y[i];
if y[i] > y2 then y2:=y[i];
end;
// масштабты есептеу
my:=h/abs(y2-y1); // Y осі бойынша масштаб
mx:=w/abs(x2-x1); //X осі бойынша масштаб
// координат осьтерінің қиылысу нүктесі
x0:=l+Abs(Round(x1*mx));
y0:=b-Abs(Round(y1*my));
with form2.Canvas do
begin
MoveTo(x0,b);LineTo(x0,b-h); // ось Y
MoveTo(l,y0);LineTo(l+w,y0); // ось X
TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
TextOut(l+2,b+2,FloatToStrF(y1,ffGeneral,6,3));
// график салу
for i:=1 to np do
begin
px := x0+Round(x[i]*mx);
py := y0-Round(y[i]*my);
Form2.Canvas.Pen.Color := clRed;
Rectangle(px-2,py-2,px+2,py+2); // маркер
if Form1.CheckBox1.Checked then
// қосу сызығы
if i = 1
then MoveTo(px,py)
else LineTo(px,py);
Form2.Canvas.Pen.Color := clBlack;
// функция мәні және аргументі
TextOut(px-5,py-15,FloatToStr(y[i]));
TextOut(px-5,y0+2, FloatToStr(x[i]));
MoveTo(px,py); // Қаламұшты px,py нүктелеріне қайтару
// өйткені TextOut қаламұш орнын өзгертеді.
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
StringGrid1.ColCount := COLCOUNT;
StringGrid1.Cells[0,0] := ' X';
StringGrid1.Cells[0,1] := ' Y';
// Өңдеу: кестені толтыру
for i:=1 to COLCOUNT do
begin
StringGrid1.Cells[i,0] := IntToStr(i-1);
StringGrid1.Cells[i,1] := IntToStr(i-1);
end;
end;
// Құру батырмасын шерту
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
// Кестедегі мәндерді функция мәндері мен аргументтерінің //жиымы түрінде қайта жазу
for i:=1 to COLCOUNT-1 do
begin
x[i] := StrToFloat(Form1.StringGrid1.Cells[i,0]);
y[i] := StrToFloat(Form1.StringGrid1.Cells[i,1]);
end;
// Графикті шығару функциясын Form2 үшін OnPaint оқиғасын //өңдеу процедурасы шақырады
if not Form2.Showing
then Form2.Show // Form2 терезесін бейнелеу
else Form2.Repaint;
end;
№19. Еске сақтау тесті
Жұмыстың мақсаты – өзіңіздің еске сақтау қабілетіңізді ұштайтын бағдарлама құру.
1. Ол үшін жаңа жоба ашып, сол Пішінге 33-суретте көрсетілген компоненттерді орналастырыңыз.
Достарыңызбен бөлісу: |