LPHI TILINING IMKONIYATLARI
6.1.Yozuvlarni faylga yozish va fayldan o‘qish
Yozuvlami faylda saqlash mumkin. Dastuming o‘zgaruvchi yozuv
qiymatini faylda saqlash uchun yozuv turidagi faylni e’lon qilish
kerak. Misol uchun:
Type
TRerson = record
f riame: string [20] ;
l name: string[20];
address: string[50]; end; var
f: file of TPerson;
Instmksiya komponentalari TPerson turidagi yozuvlar bolgan
faylni e’lon qiladi. Yozuvlar fayli bilan ishlash oddiy fayllar bilan
ishlashdan farq qilmaydi.
Yozuvlarni faylga yozish
Foydalanuvchi tomo-
nidan kiritiluvchi muso-
baqa natijalarini faylga
yozuvchi dastumi ko‘rib
chiqamiz. M a’lum otlar
dialog oynasiga kiritilib,
komponentalari TMedal
turidagi yozuvlar bolgan
faylda saqlanadi.
Sportsmen familiyasini
kiritish uchun Edit kom-
ponentasi ishlatiladi. Sport
turi va mamlakat nomini
kiritish uchun ComboBox
komponentasi ishlatiladi.
Ro‘yxatni hosil qilish uchun
Object Inspector oynasida
Items xossasini tanlab, uch
nuqtali tugmasini bosib,
ro‘yxat muharririni aktiv-
lashtirish lozim.
u s s x m s a m w m ~oj*j
Sfalw nw
|
MMMKlll
r 3
■.piill llu I
I-----------3
MMltJ
r oittn
I C K*n»ii»h
Killmnli
151
www.ziyouz.com kutubxonasi
String list E Jitor
5 t o n
zb e k is :o n
Pci S-Siyy
G e rm a n i/a
'fan^iys
LJ
ЈodeEd)« C * Y ti
Dastur matni:
Unit Unitl;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
Type
TForml = class(TForm)
Editl: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Buttonl: TButton;
ComboBoxl: TComboBox;
ComboBox2: TComboBox;
RadioGroupl: TRadioGroup;
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure ButtonlClick(Sender: TObject);
private
152
www.ziyouz.com kutubxonasi
{ Private declarations } public
{ Public declarations } end;
TKind = (GOLD, SILYER, BRONZE);
TMedal=record
country: string[20];
sport: string[20];
person: string[40];
kind: TKind;
end;
Var
Forml: TForml;
f: file of TMedal;
implementation
{$R *.DFM}
procedure TForml.FormActivate(Sender: TObject);
var
resp : word;
begin
AssignFile(f,' a:\medals.db');
{$1-}
Reset (f);
Seek(f, FileSize(f));
{$1+}
if IOResult = 0
then buttonl.enabled:=TRUE;
else begin
resp:=MessageDlg('
topilmagan.
+ 'Yangi MB yaratasizmi?', mtinformation,[mbYes,mbNo],0);
if resp = mrYes then begin {$1-}
rewrite(f); {$1+}
if IOResult = 0
then buttonl.enabled:=TRUE
else ShowMessage('Omn6Ka co3/iaHHa (Jjanjia B/l.'); MB faylini
yaratishda xatolik.
end;
end;
end;
Procedure TForml.ButtonlClick(Sender: TObject);
var
medal: TMedal;
153
www.ziyouz.com kutubxonasi
begin
with medal do begin
country := ComboBoxl.Text;
sport := ComboBox2.Text;
person := Editl.Text;
case RadioGroupl.ItemIndex of
0: kind := GOLD;
1: kind := SILVER;
2: kind := BRONZE;
end;
end;
write(f,medal);
end;
procedure TForml.FormClose(Sender: TObject;
var
Action: TCloseAction);
begin
CloseFile(f);
end.
Bu dasturda TForml.FormActivate protsedurasi faylni ochadi.
Fayl matnli bolmagani uchun Rewrite protsedurasi bilan ochilib
Seek protsedurasi ko‘rsatgichni fayl oxiriga o‘rnatadi.
TForml.ButtonlClickprotsedurasi faylgayozuv qo‘shishni amalga
oshiradi.
TFormLFormClose protsedurasi faylni berkitadi.
Ko‘rilgan dasturda ro‘yxat loyihalashtirish jarayonida o‘rnatiladi.
Dastur bajarilish jarayonida ro‘yxatni o‘rnatish uchun items xossasiga
Add usulini qollash kerak.
Masalan:
Forml.ComboBoxl.Item.Add(' Rossiya');
FormLComboBoxl .Item.Add(' Avstriya');
Forml.ComboBoxl.Item.Add(' Germaniya');
Forml.ComboBoxl.Item.Add(' Fransiya');
Fayldan yozuvni o‘qish
Quyidagi dasturda fayl ochilib, hamma mamlakatlar yoki tanlangan
mamlakat sportchilari tomonidan yutib olingan medallar ro‘yxatini
ekranga chiqaradi.
154
www.ziyouz.com kutubxonasi
Quyidagi jadvalda forma komponentalari xossalari berilgan:
Xossa Qiymat
RadioButtonl .Checked True
Labell.Enabled False
ComboBoxLEnabled False
Memo 1. Readonly True
Memo 1. ScrollBars Vertical
Mamlakat nomini tanlash uchun ComboBoxl komponentasidan
foydalanilgan. Ro‘yxat loyihalashtirish jarayonida kiritilishi lozim.
Dastur matni:
Unit Unitl;
interface
-^ 5 - |Q| xl
C H iin n ih iii
C T b -n ilis ll M.iim1ih.]l
www.ziyouz.com kutubxonasi
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
Type
TForml = class(TForm)
RadioButtonl: TRadioButton;
RadioButton2: TRadioButton;
Buttonl: TButton;
GroupBoxl: TGroupBox;
Labell: TLabel;
ComboBoxl: TComboBox;
Memol: TMemo;
Procedure ButtonlClick(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButtonlClick(Sender: TObject);
private
{ Private declarations } public
{ Public declarations } end;
Var
Forml: TForml;
implementation
{$R *.DFM}
procedure TForml.ButtonlClick(Sender: TObject) ;
Type
/ / tip medali
TKind = (GOLD,SILVER,BRONZE);
/ / zapis fayla
TMedal = record
country:string[20]; sport:string[20];
person:string[40]; kind:TKind;
end;
Var
f: file of TMedal;
rec: TMedal;
n: Integer;
st: string[80];
Begin
AssionFile(f, ’a:\medals.db’);
{$!-}
156
www.ziyouz.com kutubxonasi
Reset (f);
{$1-}
if IOResult 0 then begin
ShowMessaoe('Fayl ochishda xatolik.');
Exit;
end;
/ / o6pa6oTKa BD
MB qayta ishlash
if RadioButton2.Checked then
Memol.Lines.Add('*** ' + ComboBoxl.Text + ' ***'); n := 0;
Memol.Clear; / / OMHCTHTb cnncoK nojia Memo
while not EOF(f) do begin
read(f, rec); / / npoMHTaTb 3anncb
if RadioButtonl.Checked or
(rec.country = ComboBoxl.Text) then begin
n := n + 1;
st := rec.person+ ', ' + rec.sport;
if RadioButtonl.Checked then
st := st + ', '+ rec.country; case rec.kind of
OOLD: st := st+ ', oltin';
SILVER:st := st+ ', kumush';
BRONZE:st := st+ ', bronza';
end;
Memol.Lines.Add(st); end;
end;
CloseFile(f); if n = 0 then
ShowMessage('Kerakli maiumot yo‘q.');
end;
Procedure TForml.RadioButton2Click(Sender: TObject);
Begin
Labell.Enabled := True;
ComboBoxl.Enabled := True;
ComboBoxl.SetFocus;
end;
Procedure TForml.RadioButtonlClick(Sender: TObject);
Begin
Labell.Enabled := False;
ComboBoxl.Enabled := False;
end;
end.
157
www.ziyouz.com kutubxonasi
TForml.ButtonlClick protsedurasi faylni ochib yozuvlami ketma-
ket o‘qiydi. Yozuv Memol maydoniga, mamlakat nomi country maydoni
qiymatibilan mos kelsa yoki RadioButtonl tanlangan bolsa qo‘shiladi.
6.2. Dinamik tuzilmalar
Ko‘rsatkich
Ko‘rsatkich deb qiymati boshqa o‘zgaruvchi yoki m a’lumotlar
tuzilmasi adresiga teng bolgan o‘zgaruvchiga aytiladi.
Ko‘rsatkichlar quyidagicha ta’riflanadi:
Nom: A Tur;
Masalan:
p l: AInteger; r2: Areal;
Agar ko‘rsatkich hech narsaga tengligi ko‘rsatilmasa uning qiymati
N IL ga teng deyiladi.
Ko‘rsatkichga biror o‘zgaruvchi adresi qiymat sifatida berilsa @
adres olish operatoridan foydalaniladi. Masalan:
r := @n;
Ko‘rsatkichga boshqa ko‘rsatkich qiymatini berish mumkin, agar
ular bir turli bo‘lsa. Masalan:
p2 := p l;
Agar ko‘rsatkich i o‘zgaruvchiga ko‘rsatayotgan bo‘lsa.
rA : = 5;
instruksiya bajarilgandan so‘ng i qiymati 5 ga teng boladi.
Dinamik o‘zgaruvchilar
Dinamik o‘zgaruvchi deb dastur bajarilish jarayonida xotiraga
ajratiladigan o‘zgaruvchiga aytiladi. Xotira ajratish new protsedurasini
chaqirish orqali amalga oshiriladi. Dinamik xotiraga faqat ko‘rsatgich
yordamida murojaat qilish mumkin.Dinamik o‘zgaruvchini yo‘qotish.
ya’ni bu o‘zgaruvchi egallagan xotirani ozod qilish uchun Dispose
protsedurasi ishlatiladi.
Quyidagi protsedurada dinamik o ‘zgaruvchilarni yaratish va
yo‘qotish ko‘rsatilgan:
Procedure TForml.ButtonlClick(Sender: TObject); var
pl,p2,p3: Integer; begin
New(pl);
New(p2);
New(p3);
158
www.ziyouz.com kutubxonasi
p r := 5;
p2" := 3;
p3" := pl" + p2";
ShowMessage
('Summa barobar' + IntToStr(p3A);
Dispose(pl);
Dispose(r2);
Dispose(r3);
end;
Ro‘yxat
Ko‘rsatkichlar va dinamik o‘zgaruvchilar ro‘yxati va daraxtlar kabi
murakkab dinamik ma’lumotlar tuzilmalarini yaratishga imkon beradi.
Ro‘yxatni quyidagicha tasvirlash mumkin:
M a’lumot
ko‘rsatkich
Ro‘yxatning harbir elementi ikki qismdan iborat yozuvdir. Birinchi
qism informatsion qism. Ikkinchi qism oldingi elementlar bilan
boglanishni ta’minlaydi.
Dasturda ro‘yxatdan foydalanish uchun ro‘yxat komponentalari
turi va birinchi elementdagi ko‘rsatkich aniqlanishi lozim. Quyidagi
ro‘yxatda talabalar familiyalarining ta’rifi keltirilgan:
Type
TPStudent = ^TStudent;
TStudent = record
sumame: string[20];
name: string[20];
group: integer;
address: string[60];
next: TPStudent;
end;
var
head: TPStudent;
159
www.ziyouz.com kutubxonasi
Rasmda ro‘yxatga yangi element qo‘shish jarayoni ko‘rsatilgan.
Ikkinchi element qo‘shilgandan so‘ng head shu elementni ko‘rsatadi.
head
NtL
nead
h ejd
Sultonov
NIL
Ro‘yxatdan elementni o‘chirish
Ro‘yxatdan elementni o‘chirish uchun oldingi element ko‘rsatgichi
qiymatini o‘zgartirish lozim:
Teaa
160
www.ziyouz.com kutubxonasi
Elem ent dinam ik o'zgaruvchi bo'lgani uchun ro'yxatdan
o‘chirilgandan so‘ng unga ajratilgan xotira ozod qilinishi lozim.
Quyida dinamik o‘zgaruvchi yaratilib, yo‘qotilishi ko‘rsatilgan:
Var
r: 'integer;
begin
new(p);
{ H HCTpyKipiH n p o rp a M M ti } d is p o s e (p );
e n d .
Dinamik ro‘yxat
Quyidagi dastur talaba
familiyasini ro‘yxat boshiga
qo‘shib. talabalar ro‘yxatini
hosil qiladi. M a’lumotlar
tahrirlash komponentasiga
kiritilib, Qo‘shish (buttonl)
tugmasini bosib, ro‘yxatga
kiritiladi. K iritilgan ele-
m entlar ro'yxati Ro‘yxat
(button 2) tugmasini bosib,
alohida oynaga chiqariladi.
Elem entni ro'yxatdan
o ‘chirish uchun, Ro‘yxat
(button 3) o‘chirish tugmasi
bosiladi.
Dastur matni:
Unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
Type
TForml = class(TForm)
Label2: TLabel;
Editl: TEdit;
Label3: TLabel;
Edit2: TEdit;
Buttonl: TButton;
Button2: TButton;
.r Pyvw»»
F*miliya
Km
Pi'yldl Cchnnh
161
www.ziyouz.com kutubxonasi
Button3: TButton;
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Var
Forml: TForml;
implementation
{$R *.DFM}
Type
TPStudent=ATStudent;
TStudent = record
f_name:string[20];
l_name: string[20];
next: TPStudent;
end;
Var
head: TPStudent; / / Hanajio (rojioBa) cnncKa
procedure TForml.ButtonlClick(Sender: TObject);
var
curr: TPStudent;
begin
new(curr);
currA.f_name := Editl.Text;
currA.l_name := Edit2.Text;
currA.next := head; head := curr;
Editl.text:=” ; Edit2.text:= ";
end;
Procedure TForml.Button2Click(Sender: TObject);
var
curr: TPStudent;
n:Integer;
st:string;
begin n := 0; st := ";
162
www.ziyouz.com kutubxonasi
curr := head;
while curr NIL do begin
n := n + 1;
st := st + currA.f_name + " + currA.l_name+#13;
curr := currA.next;
end;
if n 0
then ShowMessage(«CnHcoK:» — Po‘yxat + #13 + st)
else ShowMessage(«B cnncKe HeT 3jieMeHTOB.»);— Ro‘yxatda
elementlar yo‘q.
end;
Procedure TForml.Button3Click(Sender: TObject);
var
curr: TPStudent;
begin
if headONIL then
if headA.next=NIL then
begin
Dispose(head);
head:=NIL;
end
else
begin
new(curr);
curr:=head;
head:=currA .next;
Dispose(curr);
end;
end;
procedure TForml.FormActivate(Sender: TObject);
begin
head:=NIL;
end;
end.
E lem entlarni ro ‘yxatga qo‘shishni T F o rm l.B u tto n lC lick
protsedurasi bajaradi. Bu protsedura dinamik o‘zgaruvchi ro‘yxat
yaratib, maydonlariga qiymat beradi va head ko‘rsatgichi qiymatini
to‘g‘rilaydi.
163
www.ziyouz.com kutubxonasi
Ro‘yxatni TForml.Button2Click protsedurasi chiqaradi. Ro‘yxat
elementlariga murojaat qilish uchun curr ko‘rsatkichidan foydalaniladi.
Oldin uning qiymati birinchi element adresiga teng boladi. Keyin
unga next maydoni qiymati beriladi. Jarayon to next maydonning
qiymati N IL bolmaguncha davom etadi.
Elementni ro‘yxatdan o‘chirish TForml.Button3Clickprotsedurasi
tomonidan amalga oshiriladi.
Tartiblangan ro‘yxat
Odatda ro'yxatlar tartiblangan bo'ladi. Misol uchun talabalar
ro‘yxati familiya bo‘yicha tartiblangan boladi.
Elem entni tartiblangan ro'yxatga qo'shish uchun aw al shu
elementdan oldin turishi kerak bolgan element topiladi. Shundan
so‘ng ko‘rsatkichlar qiymatlari o‘zgartiriladi.
hHd
Alimov
r Shomki.rov
Quyidagi dastur Familiya maydoni bo‘yicha tartiblangan ro‘yxat
hosil qiladi. Dastur formasining ishlash jarayoni rasmda ko‘rsatilgan.
i * J"4-M -131 “ll
Fwnftya
P
L H 1-!.. Јj
^ rn
Akmo»Zefct
BCAKnf-lr;
Kom l
TtipCW
1
Qo'*br»h | Ry*xl O th ris h |
ShCkH
1 1: Ј 1
164
www.ziyouz.com kutubxonasi
Dastur matni:
Unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls;
type
TForml = class(TForm)
Label2: TLabel;
Editl: TEdit;
Label3: TLabel;
Edit2: TEdit;
Buttonl: TButton;
Button2: TButton;
Button3: TButton;
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Var
Forml: TForml;
implementation
{$R *.DFM}
Type
TPStudent=ATStudent;
TStudent = record
f_name:strino [20];
l_name: strino[20];
next: TPStudent;
end;
Var
head: TPStudent;
procedure TForml.ButtonlClick(Sender: TObject);
var
node: TPStudent;
165
www.ziyouz.com kutubxonasi
curr: TPStudent;
pre: TPStudent;
Begin
new(node);
nodeA.f_name:=Editl.Text;
nodeA.l_name:=Edit2.Text;
curr:=head;
pre:=NIL;
while (currONIL) and (node.f_name currA.f_name) do
begin
pre:= curr;
curr:=currA. next;
end;
if pre = NIL then
begin
nodeA.next:=head; head:=node;
end
else
begin
node^ .next:=preA .next;
preA.next:=node;
end;
Editl.text:=” ;
Edit2.text:=” ;
Editl.SetFocus;
end;
Procedure TForml.Button2Click(Sender: TObject);
var
curr: TPStudent;
n:Integer;
st:string;
begin n := 0; st := ";
curr := head;
while curr NIL do begin
n := n + 1;
st := st + currA.f_name + " + currA.l_name+#13;
curr := currA.next;
end;
if n 0
then ShowMessage('Nienie:' + #13 + st)
else ShowMessage('A nienea iao yeaiaioia.');
166
www.ziyouz.com kutubxonasi
end;
Procedure TForml.Button3Click(Sender: TObject);
Var
curr: TPStudent;
begin
if headONIL then
if headA.next=NIL then
begin
Dispose(head);
head:=NIL;
end
else
begin
new(curr);
curr:=head;
head:=currA.next;
Dispose(curr);
end;
end;
Procedure TForml.FormActiyate(Sender: TObject);
Begin
head:=NIL;