7.7-jadval.
|
Yanvar
|
Fevral
|
Mart
|
...
|
Noyabr
|
Dekabr
|
Tiko
|
|
|
|
|
|
|
Damas
|
|
|
|
|
|
|
Neksiya
|
|
|
|
|
|
|
Matiz
|
|
|
|
|
|
|
Liganza
|
|
|
|
|
|
|
Bu yerda Nom - massiv nomi; array - kalit so`z; n - satrlarning quyi indeksi, m – yuqori indeksi, k - ustunlarning quyi indeksi, l – esa yuqori indeksi; Tip —elementlar tipi. 7.7-jadvalni quyidagi ikki o`lchovli massiv shaklida yozish mumkin:
yakun: array [1..12, 1..5] of integer
Ikki o`lchovli massiv (m-n1)×(k-l1) ta elementlarga ega. Demak, yakun massivi 60 ta Integer tipidagi ma`lumotlardan iborat.
Massiv elementiga murojaat qilish uchun uning nomi va kvadrat qavslarda indeks nomerlarini ko`rsatish lozim. Birinchi indeks satr nomerini, ikkinchisi esa ustun nomerini anglatadi. Masalan, yakun[2][3] elementi mart oyida sotilgan Neksiya mashinalarini bildiradi.
Massivlar bilan ishlaganda for buyrug’idan foydalanish qulay. Masalan, bir yil davomida sotilgan Damas mashinalarini hisoblash uchun dastur parchasi quyidagicha yoziladi:
s : 0; for j : 1 to 12 do s : s yakun[2][ j];
Quyidagi dastur parchasi massiv elementlarining (bir yilda sotilgan avtomashinalarning umumiy soni) yig’indisini topadi:
S : 0;
for i : 1 to 5 do avtomobillarning 5 ta modeli
for j : 1 to 12 do 12 oydagi
s : s yakun[i][ j];
Yuqoridagi misolda ichki tsikl (j bo`yicha tsikl) har gal bir marta to`la bajarilganda, tashqi tsiklning boshqaruvchi i o`zgaruvchisining qiymati 1 ga ortadi. Shundan keyin ichki tsikl yana bir marta to`la bajariladi va x.k. Shunday qilib, s o`zgaruvchining qiymatiga yakun massivining elementlari yakun[l][l], yakun[l][2], ..., yakun[l][12], yakun [2][l], yakun [2][2], ..., yakun [2][12] va x.k. ketma-ket qo`shiladi.
Misol uchun 2000 yildagi Sidney olimpiadasi natijalarini qayta ishlashni ko’raylik. Boshlang’ich ma`lumotlar 7.8-jadvalda berilgan.
2000 yildagi Sidney olipiadasi natijalari 7.8-jadval
Mamlakat
|
oltin
|
kumush
|
bronza
|
Avstraliya
|
16
|
25
|
17
|
Belarus’
|
3
|
3
|
11
|
Buyuk Britaniya
|
11
|
10
|
7
|
Germaniya
|
14
|
17
|
26
|
Italiya
|
13
|
8
|
13
|
Hitoy
|
28
|
16
|
15
|
Koreya
|
8
|
9
|
11
|
Kuba
|
11
|
11
|
7
|
Niderlandiya
|
12
|
9
|
4
|
Rossiya
|
32
|
28
|
28
|
Ruminiya
|
11
|
6
|
9
|
AQSH
|
39
|
25
|
33
|
Frantsiya
|
13
|
14
|
11
|
Yaponiya
|
5
|
8
|
5
|
Bu dastur har bir mamlakat vakillari olgan medallarning umumiy miqdori hamda har bir mamlakat to`plagan ochkolarni hisoblaydi. Ballarni hisoblashda bitta oltin medal uchun jamoaga – 7, kumush uchun – 6, bronza uchun – 5 ball beriladi. Dasturning dialog oynasi 7.18-rasmda tasvirlangan. Massivga ma`lumotlarni kiritishda StringGrid komponenta-sidan foydalaniladi. Uning qiymatlari 7.9-jadvalda berilgan.
Fiksirlangan birinchi satr yacheykalaridan ustunlarga sarlavha qo`yishda foydalaniladi. Forma qurilayotgan vaqtda massiv yacheykalari qiymatlarini FormCreate (7.11-listing) protsedurasi hisoblaydi. Bu protsedura forma faollashganda ishga tushadi va olimpiada qatnashchilari ro`yxatini 1-ustunga yozadi.
Boshlang’ich ma`lumotlarni qayta ishlash dasturi YAKUNLASH (Button1) tugmasi chertilganda ishga tushadi (7.11-listing).
7.12-listing. Ikki o`lchovli massivni qayta ishlash
procedure TForm1.Button1Click(Sender: TObject);
var
c, r: integer; // jadvalning ustun va satr nomerlari
s : integer; // jamoalarning umumiy medallari
p : integer; // jamoaning ochkosi
m : integer; // eng katta ochko jamoaning satr nomeri
7.18-rasm. Olimpiada yakunlari dasturining dialog oynasi
StringGrid komponentasining hususiyati qiymatlari 7.9-jadval
Hususiyati
|
Qiymati
|
Hususiyati
|
Qiymati
|
Name
|
Tab1
|
Options . goEditing
|
TRUE
|
ColCount
|
6
|
DefaultColWidth
|
65
|
RowCount
|
14
|
DefaultRowHeight
|
14
|
FixedCols
|
0
|
GridLineWidth
|
1
|
FixedRows
|
1
|
|
|
I : integer; // satr nomeri. Tartiblash va=tida foydalaniladi
s1 : string;
begin
for r:=1 to tab1.rowcount do // hamma satrlarni qayta ishlash
begin s:=0;
// medallarning umumiy sonini aniqlash
for c:=1 to 3 do
if tab1.cells[c,r] <>'' then s:=s+StrToInt(tab1.cells[c,r])
else tab1.cells[c,r]:='0';
// ochkolarni hisoblaymiz
p:=7*StrToInt(tab1.cells[1,r])+6*StrToInt(tab1.cells[2, r] )
+ 5*StrToInt(tab1.cells[3,r]);
// natijalarni chiqarish
tab1.cells[4, r]:=IntToStr(s); // jami medallar
tab1.cells[5, r]:=IntToStr(p); // ochkolar
end;
// jadvalni kamayish tartibida, 5-ustun bo`yicha tartiblaymiz
// eng kichik elementlar usuli bilan tartiblash
for r:=1 to tab1.rowcount-1 do
begin
m:=r; // eng katta element r-chi satrda
for i:=r to tab1.rowcount-1 do
if StrToInt(tab1.cells[5,i])>StrToInt(tab1.cells[5,m]) then m:=i;
if r <> m then
begin // r - va m-satrlarni almashtirish
for c:=0 to 5 do begin
s1:=tab1.Cells[c,r];
tab1.Cells[c,r]:=tab1.Cells[c,m];
tab1.Cells[c,m]:=s1;
end; end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
tab1.Cells[0,0]:='Mamlakat'; tab1.Cells[1,0] :='Oltin';
tab1.Cells[2,0] :='kumush'; tab1.Cells[3,0] :='Bronza';
tab1.Cells[4,0] :='Jami'; tab1.Cells[5,0] :='Ballar';
tab1.Cells[0,1] :='Avstraliya'; tab1.Cells[0,2] :='Belorussiya';
tab1.Cells[0,3] :='Buyuk Britaniya';
tab1.Cells[0,4] :='Germaniya'; tab1.Cells[0,5] :='Italiya';
tab1.Cells[0,6] :='Xitoy'; tab1.Cells[0,7] :='Koreya';
tab1.Cells[0,8] :='Kuba'; tab1.Cells[0,9] :='Niderlandiya';
tab1.Cells[0,10]:='Rossiya'; tab1.Cells[0,11]:='AQSH';
tab1.Cells[0,12]:='Frantsiya'; tab1.Cells[0,13]:='YAponiya';
end;
end.
7.19-rasmda bu dasturning dialog oynasi keltirilgan.
7.19-rasm. Sidney olimpiadasi dasturining dialog oynasi
Massivlardan foydalanishda elementlar indeks ko`rsatilgan diapazondan chetga chiqib ketishi mumkin. Bu holda mavjud bo`lmagan elementga murojaat qilinganligi haqida kompilyator
Range check error (diapazon nazoratining hatoligi)
tarzida axborot beradi.
8-BOB. PROTSEDURALAR. PROTSEDURA-FUNKSIYALAR 8.1. Formal va joriy, lokal va global o`zgaruvchilar
Formal va joriy o`zgaruvchilar. Masalalar yechish jarayonini tavsiflashda dastlab shartli ravishda eng muhim parametrlar tanlab olinadi va ana shu o`zgaruvchilar uchun qo`yilgan masalani to`la yechish qonun - qoidalari (algoritmi) ishlab chiqiladi. Bunday o`zgaruvchilarni dasturlashda formal o`zgaruvchilar deb atash qabul qilingan. Turli sohalardagi (masalan, matematika) masalalarning yechish yo`llari ana shu formal o`zgaruvchilarga nisbatan bayon qilinadi. Misol uchun, umumiy ko`rinishi
bo`lgan kvadrat tenglamaning yechish uchun diskriminant topiladi. Agar D0 bo`lsa, kvadrat tenglamaning ildizlarini
formulalar bilan topiladi. Bu formulalardagi barcha o`zgaruvchilar formal hisoblanadi.
Konkret bir masala shartida esa hamma o`zgaruvchilar aniq ko`rsatib qo`yiladi va masalani ana shu o`zgaruvchilar uchun hal qilish talab qilinadi. Bunday o`zgaruvchilar joriy o`zgaruvchilar deb ataladi. Qo`yilgan masalani yechish uchun zarur bo`lgan barcha qonun-qoidalar formal o`zgaruvchilar o`rniga joriy o`zgaruvchilarni qo`yib bajariladi. Masalan, biror hayotiy masalani yechish jarayonida koeffitsientlari p2, q12, r3 va ko`rinishi bo`lgan kvadrat tenglama uchragan bo’lsin. Uni hal qilish uchun umumiy formuladagi a - o`rniga p, b - o`rniga q, c - o`rniga esa r o`zgaruvchilarni qo`yish lozim. Shundan keyin, mavjud umumiy qonuniyatlarga binoan kvadrat tenglamani yechish mumkin.
Lokal va global o`zgaruvchilar. Masala shartida ko`rsatilmagan, lekin masalani yechish uchun hisoblanishi zarur bo`lgan o`zgaruvchilarni oraliq o`zgaruvchilar deyiladi. Masalan, kvadrat tenglama uchun a, b, c koeffitsientlar beriladi va x1, x2 ildizlarni topish talab qilinadi. Diskriminant D - o`zgaruvchi kvadrat tenglamada ko`rsatilmagani holda, qiymatini albatta hisoblash talab qilinadi. Demak, D - oraliq o`zgaruvchi. Odatda oraliq o`zgaruvchilar katta masala tarkibidagi kichik bir jarayon uchun taalluqli bo`ladi va shu sababli ularni lokal (mahalliy) o`zgaruvchilar deb ham yuritiladi.
Global o`zgaruvchilar deb bir vaqtning o`zida ham asosiy masala, ham uning tarkibidagi barcha jarayonlar uchun birdek taalluqli bo`lgan o`zgaruvchilarga aytiladi.
Bu o`zgaruvchilardan Delphi muhitida foydalanish yo`l-yo`riqlari haqida keyinroq to`xtalamiz.
Do'stlaringiz bilan baham: |