24-сурет
25-сурет
№15. Уақыт есептеуіш
Жұмыстың мақсаты – ағымдағы уақыт пен ағымдағы күнді шығарып, көрсететін бағдарлама құру.
Бағдарламаны іске асыру жоспарының сипаттамасы
1. Жаңа жоба ашу.
2. Пішінге мына компоненттерді: Button, Edit, Label орналастыру.
3. Мына кестеде жазылған әрекеттерді орындау:
14 - кесте
Белгі-
ленген
нысан
|
Object Inspector терезесінің астары
|
Қасиеттің аты/ Оқиғаның аты
|
Атқарылатын әрекет
|
Form1
|
Properties
|
Caption
|
Пішінге «Таймер» атын орнату
|
Button1
|
Properties
|
Caption
|
«ағымдағы уақыт» атын енгізу
|
Events
|
Onclick
|
DateTime:=Time; Edit1.Text:=TimeToStr(DateTime);
|
Button2
|
Properties
|
Caption
|
«Бүгінгі күн» атын енгізу
|
Events
|
Onclick
|
Edit2.Text:=DateToStr(Date);
|
Edit1
|
Properties
|
Caption
|
Text қасиетінің мәнін тазарту
|
Edit2
|
Properties
|
Caption
|
Text қасиетінің мәнін тазарту
|
26-сурет
Ішкі бағдарлама листингі:
var
DateTime : TdateTime;
procedure Tform1.Button1Click(Sender: Tobject); begin
DateTime:=Time;
Edit1.Text:=TimeToStr(DateTime); end;
procedure Tform1.Button2Click(Sender: Tobject); begin
Edit2.Text:=DateToStr(Date); end; end.
№16. Оятқыш сағат
Жұмыстың мақсаты – көрсетілген уақытта оятатын оятқыш сағаттың бағдарламасын жасау. Пішінде қазіргі уақыт пен ояту уақыты бөлек-бөлек көрсетіліп тұруы тиіс.
27-сурет
Жұмысты іске асырудың бағдарламасы:
var
Hour,Min: word; // индикатордағы уақыт
AlHour, AlMin: word; //оятқышқа орнатылған уақыт AlHour:AlMin
// бағдарлама жұмысының басталуы
procedure TForm1.FormCreate(Sender: TObject);
begin
Hour := HourOf(Now);
Min := MinuteOf(Now);
Label1.Caption := IntToStr(Hour);
if Min < 10
then Label2.Caption := '0'+IntToStr(Min)
else Label2.Caption := IntToStr(Min);
end;
// таймерден түсетін сигнал
procedure TForm1.Timer1Timer(Sender: TObject);
var
cHour,cMin: word;
begin
// ағымдағы уақытты алу
cHour := HourOf(Now);
cMin := MinuteOf(Now);
if Timer1.Tag = 0 //экрандағы бағдарлама терезесі
then begin
{ ағымдағы уақытпен индикаторда көрінген уақыттың сәйкестігін тексеру}
if cHour <> Hour then
begin
Hour := cHour;
Label1.Caption := IntToStr(Hour);
end;
if cMin <> Min then
begin
Min := cMin;
if min <10
then Label2.Caption := '0' + IntToStr(Min)
else Label2.Caption := IntToStr(Min);
end;
// (:) қос нүктенің жыпылықтауын қаматамасыз ету
if Label3.Visible
then Label3.Visible := False
else label3.Visible := True;
end
else // бағдарлама терезесі жасырылған, сигнал
// жіберу сәтінің келгендігін тексеру
if (cHour = AlHour) and (cMin = AlMin)
// сигнал !
then begin
Form2.Show;
Timer1.Tag := 0;
Timer1.Interval := 1000;
end;
end;
// UpDown1 шерту оятқыш -сағаттың сигнал беру уақытын өзгертеді
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
if UpDown1.Position < 10
then Label4.Caption := '0' + IntToStr(UpDown1.Position)
else Label4.Caption := IntToStr(UpDown1.Position);
end;
// UpDown1 шерту оятқыш-минуттың сигнал беру уақытын өзгертеді
procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
if UpDown2.Position < 10
then Label5.Caption := '0' + IntToStr(UpDown2.Position)
else Label5.Caption := IntToStr(UpDown2.Position);
end;
// OK батырмасын шерту
procedure TForm1.Button1Click(Sender: TObject);
begin
// оятқышты орнату
AlHour := UpDown1.Position;
AlMin := UpDown2.Position;
Timer1.Tag := 1;
Form1.Hide; //
Timer1.Interval := 3000; // әрбір 3 секунд сайын тексеру
end;
end.
№17. Олимпиада жалауы
Жұмыстың мақсаты – пішін бетінде олимпиада жалауын сызатын бағдарлама құру.
28-сурет
Ішкі бағдарлама листингі:
unit Unitl;
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject); begin
with Canvas do begin
// жалауша
Canvas.Pen.Width := 1; Canvas.Pen.Color := clBlack; Canvas.Brush.Color := clCream; Rectangle(30,30,150,115);
// сақиналар
Pen.Width := 2;
Brush.Style := bsClear; // шеңбердің ішкі аймағын боямау
Pen.Color := clBlue; Ellipse(40,40,80,80); Pen.Color := clBlack; Ellipse(70,40,110,80); Pen.Color := clRed; Ellipse(100,40,140,80); Pen.Color := clYellow; Ellipse(55,65,95,105); Pen.Color := clGreen; Ellipse(85,65,125,105); end; end;
end.
№18. Функция графигін салу
Жұмыстың мақсаты – түрлі функциялар графигін салатын бағдарлама құру. Төменде үлгі үшін сызықтық және квадраттық фукциялардың графиктерін (0-7) аралығында салу қарастырылды. Бағдарламада кезкелген графикті (0-15) аралығында құруға болады.
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-суретте көрсетілген компоненттерді орналастырыңыз.
33-сурет
2. Компоненттердің оқиғалары мен қасиеттерін төменде берілген бағдарламаға сәйкес өңдеп, жұмыс мақсатына сәйкес әрекеттерді атқарыңыз.
34-сурет
35-сурет
Жұмысты орындау бағдарламасы:
unit essaktau;
implementation
const
KC = 5; // санның разрядтылығы (цифрлар саны)
LT = 10; // сандардың саны (тест ұзындығы)
var
numb: integer; // сыналушы еске сақтауға тиіс сан
right: integer; // дұрыс еске сақталған сандар саны
n: integer; // сандар есептеуіші
{$R *.dfm}
// k-разрядты санды генерациялайды
function GetNumb(k: integer) : integer;
var
n: integer; // генерацияланатын сан
i: integer;
begin
// процедура санды үлкенінен бастап разряды бойынша генерациялайды
n:= Random(9)+1; // үлкен разряд нөл бола алмайды
// қалған разрядтар
for i := 1 to (k-1) do
n := n*10 + Random(10);
GetNumb := n;
end;
// пішін құру
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Visible := False; // Edit1 енгізу өрісін жасыру
Edit1.MaxLength := KC; // енгізуге болатын символдар саны
Label1.WordWrap := True; // сөзді келесі жолға тасымалдауға рұхсат //беру
Label1.Caption := 'Қазір экранда сандар пайда болады. ' +
'Сіз сол санды еске сақтап, оны пернетақтада теріңіз, сосын Enter басыңыз';
Button1.Caption := 'Бастау';
Timer1.Enabled := False; // таймер тоқтатылды
Timer1.Interval := 1000; // санның көріну уақыты - 1 секунд
right := 0; // дұрыстарының саны
n := 0; // сандарды есептеуіш
Randomize; // ГСЧ инициализациялау
end;
// «Бастау/Аяқтау» батырмасында шерту
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption = 'Аяқтау' then
Form1.Close; // бағдарлама терезесін жабу
if Button1.Caption = 'Бастау' then
begin
Button1.Caption := 'Аяқтау';
Button1.Visible := False; // батырманы жасыру
// Button1 батырмасы сынақ аяқталған соң ғана қол жетімді //болады
Label1.Caption := '';
Label1.Font.Size := 24; // Label1өрісінің қаріп өлшемі
Edit1.Font.Size := 24; // Edit1 өрісінің қаріп өлшемі
// санды генерациялау және шығару
numb := GetNumb(KC);
Label1.Caption := IntToStr(numb);
Timer1.Enabled := True; // таймерді іске қосу
// таймерден түскен сигналды өңдеу процедурасы санды //«өшіреді»
end;
end;
// таймер оқиғасын өңдеу
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False; // таймерді тоқтату
Label1.Visible := False; // санды жасыру
Edit1.Visible := True; // Edit1 өрісін қол жетімді ету
Edit1.SetFocus; // Edit1 өрісіне көрсеткішті орнату
end;
// Edit1 өрісінде пернені басу
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
igrok: integer; // сыналушы енгізген сан
begin
case Key of
'0'..'9',#8: ; // "0"-"9" пернелері,
#13: // пернесі
begin
igrok := StrToInt(Edit1.Text);
if (igrok = numb)
then right := right + 1;
n := n + 1; // сандар есептеуіші
Edit1.Text := '';
Edit1.Visible := False; // Edit1 өрісін жасыру
if n < LT then
begin
numb := GetNumb(KC); // келесі санды генерациялау
Label1.Caption := IntToStr(numb); // санды бейнелеу
Label1.Visible := True;
Timer1.Enabled := True; // таймерді іске қосу
End // сынақ аяқталды
else begin // нәтиже шығару
Label1.Font.Size := 10;
Label1.Caption := 'Нәтиже:' + #13 +
'Көрінген сандар: ' + IntToStr(LT) + #13 +
'Дұрысы: ' + IntToStr(right);
Label1.Visible := True;
Button1.Visible := True; // «Аяқтау» батырмасы көрінеді
end;
end;
else Key := Chr(0);
end;
end;
end.
№20. Электр тізбегінің кедергісін табу
Жұмыстың мақсаты – физика пәні бойынша электр тізбегінің кедергісін есептейтін бағдарлама құру.
1. Ол үшін жаңа жоба ашып, 36-суретте көрсетілген компоненттерді Пішінге орналастырыңыз.
2. Компоненттердің оқиғалары мен қасиеттерін төменде берілген бағдарламаға сәйкес өңдеп, жұмыс мақсатына сәйкес әрекеттерді атқарыңыз.
36-сурет
Жұмысты атқару бағдарламасы:
unit kedergy;
// Есептеу батырмасында шерту
procedure TForm1.Button1Click(Sender: TObject);
var
r1,r2: real; // кедергілердің шамалары
r: real; // тізбек кедергісі
begin
// бастапқы мәліметтерді алу
r1 := StrToFloat(Edit1.Text);
r2 := StrToFloat(Edit2.Text);
if (r1 = 0) and (r2 = 0) then
begin
ShowMessage('Ең болмағанда бір кедергінің мәні берілуі тиіс');
exit;
end;
37-сурет
// RadioButton1және RadioButton2 ауыстырып қосқыштары бір-//біріне тәуелді, сондықтан қосылу типі жайлы ауыстырып //қосқыштың біреуінің жағдайы арқылы білуге болады
if RadioButton1.Checked
then // Тізбектей ауыстырып қосқышы таңдалды
r:= r1+r2
else // Параллель ауыстырып қосқышы таңдалды
r:= (r1*r2)/(r1+r2);
Label4.Caption := 'Тізбек кедергісі: ';
if r < 1000 then
Label4.Caption := Label4.Caption +
FloatToStrF(r,ffGeneral,3,2) + ' Ом'
else
begin
r:=r/1000;
Label4.Caption := Form1.Label4.Caption +
FloatToStrF(r,ffGeneral,3,2) + ' Ом';
end
end;
// Тізбектей ауыстырып қосқышында шерту
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
// Пайдаланушы қосылу типін өзгертті
Label4.Caption := '';
end;
// Параллель ауыстырып қосқышында шерту
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
// Пайдаланушы қосылу типін өзгертті
Label4.Caption := '';
end;
end.
38-сурет
№21. Ом заңы
Жұмыстың мақсаты – физика пәні бойынша Ом заңын пайдаланып, ток, кернеу және кедергінің мәндерін есептейтін бағдарлама құру. 1. Ол үшін жаңа жоба ашып, Пішінге 39-суретте көрсетілген компоненттерді орналастырыңыз.
2. Компоненттердің оқиғалары мен қасиеттерін төменде берілген бағдарламаға сәйкес өңдеп, жұмыс мақсатына сәйкес әрекеттерді атқарыңыз.
Жұмысты орындау бағдарламасы:
unit om_;
{$R *.dfm}
// Токты, кернеуді не кедергіні есептеу
procedure Calculate;
var
I,U,R: real; // ток, кернеу, кедергі
39-сурет
begin
if Form1.RadioButton1.Checked then
// ток
begin
U := StrToFloat(Form1.Edit1.Text);
R := StrToFloat(Form1.Edit2.Text);
if (R <> 0) then
begin
I := U/R;
Form1.Label3.Caption := 'Ток: ' + FloatToStrF(I,ffFixed,4,2) + ' А';
end
else ShowMessage('Кедергі нөлге тең болмауы тиіс.');
exit;
end;
if Form1.RadioButton2.Checked then
// кернеу
begin
I := StrToFloat(Form1.Edit1.Text);
R := StrToFloat(Form1.Edit2.Text);
U := I*R;
Form1.Label3.Caption := 'Кернеу: ' + FloatToStrF(U,ffFixed,4,2) + ' В';
exit;
end;
if Form1.RadioButton3.Checked then
// кедергі
begin
U := StrToFloat(Form1.Edit1.Text);
I := StrToFloat(Form1.Edit2.Text);
if (I <> 0) then
begin
R := U/I;
Form1.Label3.Caption := 'Кедергі: ' + FloatToStrF(R,ffFixed,4,2) + ' Ом';
end
else ShowMessage('Ток нөлге тең болмауы тиіс.');
end;
end;
// Ток ауыстырып қосқышын таңдау
40-сурет
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Label1.Caption := 'Кернеу (вольт)';
Label2.Caption := 'Кедергі (Ом)';
Label3.Caption := '';
end;
// Кернеу ауыстырып қосқышын таңдау
41-сурет
procedure TForm1. RadioButton2Click(Sender: TObject);
begin
Label1.Caption := 'Ток (ампер)';
Label2.Caption := 'Кедергі (Ом)';
Label3.Caption := '';
end;
// Кедергі ауыстырып қосқышын таңдау
42-сурет
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
Label1.Caption := 'Кернеу (вольт)';
Label2.Caption := 'Ток (ампер)';
Label3.Caption := '';
end;
// Edit1өрісінде пернені басу
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key:Char);
begin
case Key of
'0'..'9',#8: ; // цифрлар және
#13: Edit2.SetFocus; // пернесі
'.',',':
begin
if Key = '.'
then Key := ',';
// үтір белгісін қайта енгізуге мүмкіндік бермейді
if Pos(',',Edit1.Text) <> 0
then Key := Chr(0);
end;
else Key := Chr(0);
end;
end;
//Edit2 өрісінде пернені басу
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key:Char);
begin
case Key of
'0'..'9',#8: ;
#13: Calculate; // батырмасы - есептеу
'.',',':
begin
if Key = '.'
then Key := ',';
// үтір белгісін қайта енгізуге мүмкіндік бермейді
if Pos(',',Edit2.Text) <> 0
then Key := Chr(0);
end;
else Key := Chr(0);
end;
end;
// Есептеу батырмасында шерту
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text <> '') and (Edit2.Text <> '')
then Calculate // токты, кернеу не кедергіні есептеу
else ShowMessage('Екі өріске де бастапқы мәндер енгізілуі керек');
end;
end.
№22. Спортсменнің жүгіру жылдамдығын есептеу
Жұмыстың мақсаты – спортсменнің жүгіру жылдамдығын есептей-тін бағдарлама құру.
1. Ол үшін жаңа жоба ашып, төмендегі 43-суретте көрсетілген компоненттерді сол Пішінге орналастырыңыз.
43-сурет
2. Компоненттердің оқиғалары мен қасиеттерін төменде берілген бағдарламаға сәйкес өңдеп, жұмыс мақсатына сәйкес әрекеттерді атқарыңыз.
Жұмысты орындау бағдарламасы:
unit zhygyru;
{$R *.dfm}
// Дистанция өрісіндегі пернені басу
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// Key – басылған пернеге сәйкес символ.
// Егер символ рұхсат етілмеген болса, онда процедура оны коды нөлге тең символға ауыстырады. Соның нәтижесінде символ редакциялау өрісінде көрінбейді, сол себепті пайдаланушы бағдарлама кейбір пернелердің басуына әсер етпейді деп ойлап қалады.
// пернелер.
case Key of
'0'..'9': ; // цифрлар
#8 : ; //
#13: Edit2.SetFocus; // - Уақыт өрісіндегі көрсеткіш: //минут
// басқа символдарға – рұхсат етілмейді
else Key :=Chr(0); // символды бейнелемеу
end;
end;
// Уақыт өрісіндегі пернені басу:минут
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ;
#8 : ; //
#13: Edit3.SetFocus; // - Уақыт өрісіндегі көрсеткіш:секунд
// басқа символдарға – рұхсат етілмейді
else Key :=Chr(0); //символды бейнелемеу
end;
end;
// Уақыт өрісіндегі пернені басу:секунд
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ;
',','.' : // ондық таңбалы бөлгіш
begin
Key := DecimalSeparator;
if Pos(DecimalSeparator,Edit3.Text) <> 0
then Key := Char(0);
end;
#8 : ; //
#13 : Button1.SetFocus; // - Есептеу батырмасына //фокустау
// басқа символдарға – рұхсат етілмейді
else Key :=Chr(0); // символды бейнелемеу
end;
end;
// Есептеу батырмасында шерту
procedure TForm1.Button1Click(Sender: TObject);
var
dist : integer; // дистанция, метрмен
min : integer; // уақыт, минутпен
sek : real; // уақыт, секундпен
v: real; // жылдамдық
begin
// бастапқы мәліметтерді енгізу өрісінен алу
dist := StrToInt(Edit1.Text);
min := StrToInt(Edit2.Text);
sek := StrToFloat(Edit3.Text);
// дистанция мен уақыт нөлге тең болмауы тиіс
if (dist = 0) or ((min = 0) and (sek = 0)) then
begin
ShowMessage('Дистанция мен уақытты көрсету керек.');
exit;
end;
// есептеу
v := (dist/1000) / ((min*60 + sek)/3600);
// нәтиже шығару
label5.Caption := 'Дистанция: '+ Edit1.Text + ' м' + #13 +
'Уақыт: ' + IntToStr(min) + ' мин ' +
FloatToStrF(sek, ffGeneral,4,2) + ' сек ' + #13 +
'Жылдамдық: ' + FloatToStrF(v,ffFixed,4,2) + ' км/сағ';
end;
// Аяқтау батырмасында шерту
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close; // Бас пішінді жабу – бағдарлама жұмысын аяқтау
end;
end.
44-сурет
№23. Файл іздеу
Жұмыстың мақсаты – қажетті файлды іздеп табатын бағдарлама құру.
1. Ол үшін Пішінге мына суретте көрсетілген компоненттерді орнату.
2. Буманы таңдаңыз, оны Шолу арқылы көрсетуге болады, содан соң файлдың немесе оның кеңейтілімін көрсетіп, Табу батырмасын басыңыз.
3. Төменде файл іздеудің бағдарламасы берілген.
45-сурет
Бағдарламасы:
// Файлды көрсетілген каталогтан не ішкі каталогтан іздеуде Find //рекурсивтік процедурасы қолданылады.
unit FindFile_;
{$R *.dfm}
var
FileName: string; // ізделінді файл не маска аты
cDir: string;
n: integer; // сұранысты қанағаттандыратын файл саны
// файлды ағымдағы каталогтан іздеу
procedure Find;
var
SearchRec: TSearchRec; //файл не каталог жайлы хабарлама
begin
GetDir(0,cDir); // ағымдағы каталог атын алу
if cDir[length(cDir)] <> '\' then cDir := cDir+'\';
if FindFirst(FileName, faAnyFile,SearchRec) = 0 then
repeat
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
begin
Form1.Memo1.Lines.Add(cDir + SearchRec.Name);
n := n + 1;
end;
until FindNext(SearchRec) <> 0;
// ағымдағы каталогтың ішкі каталогтарын өңдеу
{ Егер жүйелік каталог өңделмесе, онда faAnyFile орнына faDidertory беріледі. Мұның себебі мынада: жай каталог үшін SearchRec.Attr мәні faDirectory (16), ал Program Files үшін - faDirectory+faReadOnly (17), Windows каталогы үшін - faDirectory+faSysFile (20) тең.}
if FindFirst('*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.Attr and faDirectory) = faDirectory then
// каталогтар .. және . тағы да каталогтар, бірақ оған кірудің //қажеті жоқ !!!
if SearchRec.Name[1] <> '.' then
begin
// Form1.Memo1.Lines.Add('>>>>'+SearchRec.Name);
ChDir(SearchRec.Name);// каталогқа кіру
Find; // іздеуді ішкі каталогта орындау
ChDir('..');// каталогтан шығу
//Form1.Memo1.Lines.Add('<<<<'+SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
end;
// Іздеу батырмасында шерту
46-сурет
procedure TForm1.Button1Click(Sender: TObject);
begin
if not DirectoryExists(Edit2.Text) then
begin
ShowMessage('Каталог дұрыс көрсетілмеді.');
Edit2.SetFocus;
exit;
end;
Button1.Enabled := False;
Label4.Caption := '';
Label4.Repaint;
Memo1.Clear; // Memo1өрісін тазарту
Label4.Caption := '';
FileName := Edit1.Text; // не іздейміз
cDir := Edit2.Text; // қайдан іздейміз
n:=0; // табылған файлдар саны
ChDir(cDir); // каталогтағы іздеудің басына бару
Find; // іздеуді бастау
if n = 0 then
ShowMessage('Іздеу критерийін қанағаттандыратын файлдар жоқ.')
else Label4.Caption := 'Табылған файлдар:' + IntToStr(n);
Button1.Enabled := True;
end;
// пайдаланушы таңдаған каталогты қайтарады
function GetPath(mes: string):string;
var
Root: string; // түпкі каталог
pwRoot : PWideChar;
Dir: string;
begin
Root := ''; //түпкі каталог – Жұмыс столы бумасы
GetMem(pwRoot, (Length(Root)+1) * 2);
pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);
if SelectDirectory(mes, pwRoot, Dir)
then
if length(Dir) = 2 // пайдаланушы түпкі каталогты таңдады
then GetPath := Dir+'\'
else GetPath := Dir
else
GetPath := '';
end;
// Бума батырмасын шерту
procedure TForm1.Button2Click(Sender: TObject);
var
Path: string;
begin
Path := GetPath('Буманы таңдаңыз');
if Path <> ''
then Edit2.Text := Path;
end;
end.
№24. Файлға жазба қосу
Жұмыстың мақсаты – Файлға жазба қосу әрекетін орындау мүмкіндігін беретін бағдарлама құру.
1. Ол үшін жаңа жоба ашып, мына 47-суреттегі компоненттерді Пішінге орналастырыңыз.
47-сурет
2. Компоненттердің оқиғалары мен қасиеттерін төменде берілген бағдарламаға сәйкес өңдеп, жұмыс мақсатына сәйкес әрекеттерді атқарыңыз.
Бағдарламасы:
unit RewAp_;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile; // файл
fName: String[80]; // файлдың аты
i: integer;
begin
if not OpenDialog1.Execute
then
exit;
// Пайдаланушы файлды таңдады
fName := OpenDialog1.FileName;
AssignFile(f, fName);
Rewrite(f); // қайта жазу үшін ашу
// файлға жазу
for i:=0 to Memo1.Lines.Count do // жолдар нөлден бастап //нөмірленеді
writeln(f, Memo1.Lines[i]);
CloseFile(f); // файлды жабу
MessageDlg('Мәліметтер файлға қосылды. ', mtInformation, [mbOk],0);
end;
48-сурет
procedure TForm1.Button2Click(Sender: TObject);
var
f: TextFile; // файл
fName: String[80]; // файлдың аты
i: integer;
begin
fName := Edit1.Text;
AssignFile(f, fName);
Append(f); // жазба қосу үшін ашу
// файлға жазу
for i:=0 to Memo1.Lines.Count do // жолдар нөлден бастап //нөмірленеді
writeln(f, Memo1.Lines[i]);
CloseFile(f); // файлды жабу
MessageDlg('Жазбалар файлға қосылды ',mtInformation,[mbOk],0);
end;
end.
№25. Файлдан оқу
Жұмыстың мақсаты – Файлдан оқуға мүмкіндік жасайтын бағдарлама құру.
1. Жаңа жоба ашып, Пішінге 49-суретте бейнеленген компоненттерді орнатыңыз.
Достарыңызбен бөлісу: |