You are on page 1of 115

Mühazirə 1

Giriş
Əsas anlayışlar.

“Məlumat”, “informasiya”, “verilənlər”, “xəbər”, “fakt” və


“bilik”daşıdıqları mənaya görədanışıqdilində istifadələrinə uycun olur.
«Məlumat» (xəbər) və «informasiya» anlayışlarını bir-biridən
fərqləndirmək üçündanışıqdilindəki bu ifadəyə nəzər salaq: «Bu məlumat
mənə heç bir informasiya vermir.» Bu ifadə informasiya və məlumat
anlayışları arasındakı aşacıdakı əlaqəni əks etdirir:məlumat özündə
informasiya daşıyır.
Informasiya və məlumat arasındakı əlaqə heç də həmişə qarşılıqlı-
birmənalıdeyildir. Eyni informasiya müxtəlif məlumatlarla ötürülə bilər və
onların arasında heç bir informasiya dəyərinə malik olmayanlarıda ola
bilər. Eləcə də, eyni bir məlumatı qəbul edən müxtəlif istifadəçilərin
maraqdairəsindən asılı olaraq fərqli informasiya kimi qəbul oluna bilər.
Məsələn, təyyarə qəzasının baş verməsi xəbəri həlak olanların qohumları
üçün bir informasiya, hava yolları şirkəti üçün isə başqa bir informasiya
daşıyır. Eyni məqalədən hər bir oxucu özünün maraqdairəsinə uycun
olaraq müxtəlif informasiya götürür.
Belə demək olar ki, müxtəlif şəkildə interpretasiya olunan bir məlumat
müxtəlif informasiya ötürə bilər. Buna əsaslanaraqdemək olar ki,
interpretasiya qaydası məlumatla informasiya arasındakı əlaqədə həlledici
rolu oynayır.
Baxılan məlumat üçün interpretasiya qaydası adətən məlumatlar çoxlucu
üçün tətbiq edilən ümumi qaydaların xüsusi halı olur.
Beləliklə, məlumatın köməyi ilə konkret subyekt, obyekt, mühit, hadisə, və
s. haqqında bilik əldə edilir.
Məlumat vasitəsilə əldə qazanılan biliklər artımına informasiya (latınca
informatio)deyilir. Informasiyanın kəmiyyət baxımından təyini Şennon
tərəfindən təklif edilmiş elə bu fikrə əsaslanır.
«Verilən» anlayışını belə bir nümunə ilə izah etmək olar. Fərz edək ki,
müşahidəçi hər hansı obyektin vəziyyəti haqqında məlumatı toplayıb və
onu müəyyən formada yaddaşında saxlayır. Bu halda deyilir ki,
müşahidəçi yaddaşında obyektin vəziyyətini əks etdirən verilənlər saxlayıb.
Beləliklə, verilənlər - saxlamaq, emal etmək və ötürmək üçün müəyyən
formada toplanmış və qeyd olunmuş məlumatdır. Ingiliscə verilənlər
1
sözünü ifadə edən «data» termini latınca «datum» (fakt) sözündən
yaranmışdır. Buna baxmayaraq verilənlər bəzən konkret və ya real fakta
uycun gəlməyə bilər. Verilənlər qeyri-dəqiq, həqiqətdə mövcud olmayan
anlayışlarla da ifadə edə bilərlər. Odur ki, veriləndedikdə bizim üçün
əhəmiyyətli olan istənilən hadisə və ya fikrin strukturlu təsviri başadüşülür.
Ümumiyyətlə, verilənlər konkret ünsiyyət vasitələri ilə (məsələn,dil, şəkil
və ya video vasitəsilə) konkretdaşıyıcıda (məsələn,daşda, lövhədə, kacızda,
elektron daşıyıcıda və s.) qeyd olunur. Zaman keçdikcə verilənlərin təsvir
olunması üsulları vədaşıyıcıları təkmilləşmişdir (məsələn, ibtidai insanların
macara rəsmləri, papirus yarpacı üzərində yazılar, daş özərində qədim
yazılar və rəsmlər, və s.). Əksər hallarda verilənlər təbiidildə kacız üzərində
qeyd olunur. Kompüterdədaşıyıcı kimi maqnitdaşıyıcıdan (lent,disk, kart
və s.) çevik optikdisklərdən, fləş yaddaşdan və s. istifadə olunur.
Verilənlər ümumi halda aşacıda qeyd olunmuş xarakteristikalarla təyin
olunur:
 verilənlərin adı
 qiyməti
 tipi
 strukturu
Verilənin adı onun semantikasını (mənasını) ifadə edir. Verilənin qiyməti
isə verilənin daşıdığı məna ilə xarakterizə edilir. Faktları bir-birindən
ayırmaq üçün onları qiymətləndirmək lazımdır. Verilənlər bazalarındada
verilənlər və onların semantikası əksər hallarda ayrı-ayrı saxlanır. Bu hal
verilənlərin səmərəli axtarışını və emalını təşkil etməy imkanı yaradır.
Verilənlərin tipi xarakteristikası əsasən proqramlaşdırmada istifadə olunur.
Qeyd edək ki, proqramlaşdırmada verilənləri həmçinin təsvir formasına,
uzunlucuna, say sisteminin əsasına görədə xarakterizə edirlər.
Verilənlər sadə informasiya vahidi - bitdən başlayaraq fayl və fayllar
sisteminə qədər müxtəlif mürəkkəblikdə və təşkil səviyyəsində ola bilərlər.
Verilənlərin strukturunu onların ala biləcəyi mümkün qiymətlər çoxlucu,
təşkil xarakteri, üzərində aparıla bilən əməliyyatlar toplusu əks etdirir.
Verilənin strukturu hər bir informasiya elementinin başlıca və ümumi
xarakteristikasıdır.
Verilənlərin struktur xarakteristikasına iki cəhətdən baxılır:
 məntiqi struktur
 fiziki struktur

2
Verilənin məntiqi strukturu onun kompüterdən kənardakı modeli və ya
təsviridir. Verilənlərin məntiqi strukturunun müəyyənləşdirilməsi, başqa
sözlə, verilənlərin əlverişli formada təsviri və onların strukturlaşdırılması
verilənlər bazalarının layihələndirilməsinin əsasını təşkil edir.
Verilənin fiziki strukturu informasiyanın kompüterin yaddaşında
yerləşdirilməsinin struktur sxemini təyin edir. Ümumi halda verilənlərin
fiziki və məntiqi strukturları bir-birindən fərqlənə bilər.
«Verilənlər» və «informasiya» məna baxımından bir-birinə çox yaxın
anlayışlardır. Lakin onlar arasındakı fərqi bilmək lazımdır. Verilənlər
üzərində əməliyyat aparılaraq informasiya alınır. İdarəetmə üçün qərarların
qəbul edilməsində əsasən bu üsulla alınan informasiyadan istifadə olunur.
Müxtəlif səviyyəli verilənlər ola bilər. Məsələn, müəssisənin bir ayda
istehsal etdiyi ümumi məhsulun miqdarını göstərən verilənlər ayrı-ayrı
məhsul növlərinə görə aylıq istehsal olunan məhsul miqdarlarının
verilənlərinin cəmindən, yəni həmin verilənlərin aqreqasiyasından alınır.
Aqreqasiyanın müəyyən səviyyəsində alınan verilənlər əhəmiyyət
dərəcəsinə görə informasiya xarakterli ola bilərlər. Beləliklə, müxtəlif
əhəmiyyətlə informasiya almaq üçün verilənləri emal etmək lazımdır. Buna
görə də ,əldə olunmuş hər bir informasiyanın itirilməməsi üçün informasiya
sistemi verilənlər bazasına malik olmalıdır. Aqreqasiya və müqayisənin
aşacı səviyyəsini verilənlər, yuxarı səviyyələrini isə informasiya əhatə edir.
Çox vaxt «verilənlər» və «informasiya» terminləri nisbi olaraq sinonim
kimi işlədilir, yəni onlar arasında göstərilən fərqlər nəzərə alınmır. Bizdə
sonrakı mülahizələrimizdə bu xətti tutacacıq. Bunun səbəbi budur ki,
kompüterdə emal olunan və saxlanan verilənlərin informasiyadaşıyıb-
daşımaması emal prosesi üçün əhəmiyyəti kəsb etmir. Nəticəvi verilənlərin
informasiya yükü isə istifadəçi maracından asılı olaraq qiymətləndirilir.
«Bilik» anlayışıda ifadə etdiyi mənaya görə məlumat, informasiya və
verilənlər anlayışlarına yaxındır. Biliyi digərlərindən ayıran əsas cəhət
onun müəyyən kontekstlə bağlı olması və həmin kontekstdə müəyyən
semantika (məna)daşımasıdır. «Bilik» anlayışından daha çox süni
intellektdə, eləcə də, ekspert sistemlərində geniş istifadə olunur.
Verilənlərin struktur təsnifatı

Verilənlərin strukturu anlayışı aşağıdakı suallara cavab verir :


- Verilən kompüterdən kənarda hansı formadadır (məntiqi
struktur);
3
- Verilən kompüterdə hansı formada təsvir olunurlar (fiziki
struktur);
- Verilənlər hansı qiymətlərə malik ola bilər;
- Verilənlər necə emal olunurlar.
Verilənlərin bir neçə xarakteristikası mövcuddur. Ən vacibi və
digər xarakteristikaları təyin edən struktur xarakteristikasıdır. Ən
sadə strukturdan - bitdən başlayaraq ən mürəkkəb struktur olan fayl,
baza bütün bunlar verilənlərin strukturudur.
Verilənlərin strukturu təsvir olunma və saxlanma mühitinə görə
iki sinifə bölünürlər :
- Fayl ( xarici yaddaş ) ;
- Əməli ( əməli yaddaş );
Strukturun elementlərin sayını və elementlər arasındakı əlaqə
strukturları aşağıdakı siniflərə bölürlər:
- Statik struktur ;
- Yarım statik və yarım dinamik struktur ;
- Dinamik struktur.
Strukturların elementlərinin yaddaşda yerləşmə xarakterinə görə
onları iki yerə bölürlər :
- Xətti struktur ;
- Qeyri – xətti struktur.
Verilənlərin strukturuna fiziki və məntiqi baxış mövcuddur.
Fiziki baxışda verilənlərin kompüterdəki strukturuna, məntiqi
baxışda verilənlərin kompüterdən kənar strukturuna baxılır. Onlar
uyğun olaraq fiziki və məntiqi struktur adlanırlar.
Əməli yaddaş (ƏY) ünvanların yaddaş sinifinə aiddir. Yəni ki,
yaddaşın hər bir elementi yalnız ona məxsus olan ünvanla təyin
olunur.

4
Şəkil 1.1.Əməli yaddaşın təsviri
ƏY aşağıdakı xarakteristikalarla təyin olunur:
Yaddaş tutumu. Minimal informasiya vahidi kimi bit (ingiliscə binary digit
sözündən) qəbul edilmişdir. Bit çox kiçik vahid olducundan, əsas
informasiya vahidi kimi 8 bitə bərabər olan baytdan istifadə olunur.
Kilobayt (Kb), meqabayt (Mb), qiqabayt (Qb) və terabayt (Tb) kimi
vahidlərin baytla ifadəsinə baxaq:
1Kb = 1024 bayt = 210bayt;
1Mb = 1024 Kb = 220bayt;
1Qb = 1024 Mb = 230 bayt;
1Tb = 1024 Qb = 240 bayt.
Bu ölçü vahidlərindən ən çox kompüter yaddaşının tutumunu göstərmək
üçün istifadə olunur.
Yaddaşa müraciət vaxtı.Bu vaxt yaddaşa müraciət əmri alınanda
verilənlərin yazılma və oxunması qurtarana kimi bir periodu təşkil edir.
Yaddaşın işləmə sürətinin göstəricisi bununla bağlıdır.
Müraciətin eni. Müraciət eni maşın sözü ilə təyin olunur. Maşın sözü
xananın enidir.

Şəkil 1.2. Maşın sözü

5
Mühazirə 2
Sadə strukturlar

Proqramlaşdırma dillərində onlara verilənlərin tipləri deyilir. Sadə


strukturlara ümumi halda aşağıdakılar daxildir :
- tam ədəd ;
- həqiqi ədəd ;
- simvol ;
- məntiqi;
- göstərici;
Tam tip –mənfi və ya müsbət işarəli nöqtəsiz ədəddi təsir edir. Ədədin
işarəsi mərtəbə şəbəkəsinin soldan ilk, yəni 0-cı (nömrələnmə sıfırdan baş-
lanır) mərtəbəsində yazılır.Ədəd müsbət olduqda "0", mənfi olduqda isə "1"
kimi qeyd olunur.

мяртябяляри
н
0 1 2 нюмряляри 3
1 0 1 ... 0

Ядядин Ядядин 2-лик коду


ишаряси
Şəkil 1.3. Tam və sabit nöqtəli ədədlərin kompüterdə təsviri

Növbəti mərtəbələrdə isə tam ədədin ikilik kodu təsvir olunur (16 mərtəbəli
kompüterlərdə 15 mərtəbə, 32 mərtəbəli kompüterlərdə 31 mərtəbə) (şəkil
1.3). KompüterlərdəЯдядин 2-лик bilən
təsvir oluna коду tam ədədlərindiapazonu belə təyin
olunur:
16 mərtəbəli kompüterlərdə: - 32768÷+32767
32 mərtəbəli kompüterlərdə: - 147483648÷+2147483647.
6
Sabit nöqtəli ədədlərdə kəsr hissəni tam hissədən ayıran nöqtənin yeri
kompüter layihə olunarkə birdəfəlik qeyd olunur və məsələlərin həll
prosesindədəyişilmir. Tam ədədlərdəki kimi burada da ədədin işarəsi
mərtəbə şəbəkəsinin soldan 1-ci mərtəbəsində yazılır (mənfi – "1", müsbət
– "0"). Kompüterin quruluşunda mürəkkəbliyi və əməliyyatların icra
vaxtını azaltmaq məqsədilə sabit nöqtəli formada yalnız vahiddən kiçik
ədədlər təsvir olunur, yəni ki, nöqtənin yeri ədədin işarəsindən dərhal sonra
qeyd olunur və nöqtə işarəsi aşkar şəkildə yaddaşda yazılmır. Buna görə
də, sabit nöqtəli ədədlərin təsviri 2-lik say sistemində istifadə olunan tam
ədədlərin təsvirinə uycundur (şəkil 1.3).
Üstünlüklərinə baxmayaraq, sabit nöqtəli ədədlərlə işləyərkən hesablama
prosesi zamanı verilənlərin göstərilən aralıq və son nəticələrinin qəbul
olunmuşdiapazondan kənara çıxmaması tələb olunur. Digər halda mərtəbə
şəbəkəsinindolubdaşması baş verir, bu isə səhv nəticələrin alınmasına
səbəb olur. Bu catışmazlıqlardan azad olmaq üçün ədədlərin sürüşən
nöqtəli formasından istifadə olunur.
Sürüşən nöqtəli formada ədəd belə təsvir olunur:
x=±mq±p ,
burada ədədin mantissası - m ,
say sisteminin əsası –q,
tərtib isə – p ilə işarə edilib.
Istənilən həqiqi ədədi sürüşən nöqtəli formada təsvir etmək olar.
Misal. 18.5 ədədini sürüşən nöqtəli formada təsvir etməli.
18.5=18.5x100=1.85 x101=0.185 x 102
Göründüyü kimi, eyni ədədi müxtəlif cür yazmaq üçün sadəcə mantissada
nöqtənin yerini sürüşdürmək lazımdır. Bu zaman tərtibin qiyməti nöqtənin
yerinə uycun olaraqdəyişir.
Sürüşən nöqtəli ədədin kompüterdə birmənalı təsvirini almaq üçün ədədin
normallaşdırılmış formasından istifadə olunur. Normallaşdırılmış formada
olan ədəddə mantissa bu şərti ödəməlidir:
q-1m<1
Yəni nöqtənin yeri ədədin sıfırdan fərqli rəqəmindən əvvəl qeyd edilir.
Misalda verilən 18.5 ədədinin normallaşdırılmış forması 0.185 x102-dir.
Şəkil 1.4-də kompüterdə sürüşən ədədlərin təsvir sxemi verilib

Şəkil 1.4. Sürüşkən nöqtəli ədədlərin kompüterdə təsviri

7
мантиссанын мантисса тяртибин тяртиб
ишаряси ишаряси

Şəkildən aydın olur ki, 32 mərtəbəli kompüterlərdə tərtib ücün 8 mərtəbə (1


bayt) , mantissa üçün 24 mərtəbə (3 bayt) ayrılır. Mantissanın işarəsi 0-cı,
tərtibinki isə 24-cü mərtəbədə yazılır (müsbət – "0", mənfi – "1"). Tərtibin
üçün ayrılan 7 mərtəbədə -127~+127diapazonunda onluq ədəd
yazıla bilər ki, buda istənilən qədər kiçik və böyük ədədlərin təsviri üçün
tam kifayət edir.
Simvol tipli verilənlərin təsviri.
Müasir kompüterlər yalnız rəqəm tipli informasiyandeyil, həmçinin
hərflərdən və işarələrdən ibarət olan simvol tipli informasiyada emal edir.
Kompüterdə həll olunan plan, iqtisadi, informasiya-məntiqi, uçot-hesabat,
idarəetmə və modelləşdirmə məsələləri simvol tipli verilənlərlə xarakterizə
olunurlar . Kompüterdə bu tip informasiyanın təsviri üçündəyişən
uzunluqlu sözlər tələb olunur. Simvol tipli informasiyanın kompüterədaxil
edilməsi, xaric edilməsi və emalı hesablama nəticələrinin mətn, cədvəl,
qrafik şəklində alınmasına, lazımi izahatlar, başlıqlar verilməsinə imkan
yaradır.
Ümumi vəzifəli kompüterlərdə simvol verilənlərin təsviri üçün beynəlxalq
miqyasda qəbul olunmuş
- EBCDIC (Expanded Binary Coded Decimal Interchange Code
– informasiya mübadiləsi üçün genişləndirilmiş ikilik
kodlaşdırılmış kod)
- DKOI (onun rus hərfləri ilə genişləndirilməsindən ibarət olan
-dvoicnıy Koddlə Obmena Informaüiey)
kodundan istifadə olunur. Fərdi kompüterlərdə və mikroprosessor
sistemlərində simvol verilənlərin təsviri üçün ASCII (American
Standart Code for Information Interchange – Informasiya
Mübadiləsi üçün Amerika Standart Kodu) kodundan istifadə
olunur. Beynəlxalq miqyasda qəbul olunan bu koda milli
hərfləridaxil etməklə genişləndirmək olur.
Kodların hamısında simvollar 8 mərtəbəli (1 bayt) ikilik kodla təsvir
olunur. Bu kodlar vasitəsilə 256-ya qədər müxtəlif simvolları kodlaşdırmaq
olar. Bununla da latin əlifbasından başqa bir neçədigər əlifbanı
kodlaşdırmaca imkan yaranır.
Dünya miqyasında Milli əlifbaların hamısının ASCII kodu ilə kompüterdə
təsviri mümkün deyildi. Odur ki, 2000-ci ildən başlayaraq simvol tipli
verilənlərin təsviri üçün 2 bayt yer ayıran UNİCOD (universal kod)
adlanan standart koddan istifadə edilir. Buda 32768 sayda müxtəlif
8
simvolları təsvir etməyə imkan verir.
Simvol tipli verilənlər yalnız simvol tipli konstanta (qiymət) ola bilər,
bu qiymət istənilən simvol ola bilər.
A : = ‘ C ‘;
Strukturlar üzərində yalnız bir əməliyyat aparmaq mümkündür.
Birləşdirmə əməliyyatına baxaq.
‘C’| ‘B’= ‘CB’
Lakin simvol tipli verilənlər müqayisə və mənsubetmə
əməliyyatlarında operand kimi iştirak edə bilərlər. Əməliyyat zamanı
istifadə edilən kəmiyyət – operand adlanir.
Mənsub etmə :
M : = ‘N’
Müqayisə :
‘L’= ‘P’ False
‘A’ < ‘M’ True
‘B’ < ‘F’ True
Məntiqi verilənlərin təsviri. Məntiqi verilənlər yalnız iki qiyməti ("yalan-
0" və "docru-1") olducundan, onların kompüterdə təsviri xeyli asanlaşır.
Kompüterindaxili kodu ikilik say sistemində olducundan, məntiqi
verilənlərin təsviri belə sadə üsulla aparılır:
"Yalan" 0
"Docru" 1
Proqramlaşdırmadillərində isə açağıdakı kimi söz və ya hərflə təsvir
olunur:
"Yalan" FALSE və ya F
"Docru" TRUE və ya T
Məntiqi verilənlər müqayisə və mənsubetmə əməliyyatlarında operand
kimi verilə bilər və onlar üzərində dörd məntiqi əməliyyat yerinə
yetirmək mümkündür:
And – və ;
Not – yox ;
Or – və ya ;
Xor – istisna.

A B A or B A xor B
0 0 0 0
0 1 1 1
9
1 0 1 1
1 1 1 0

Göstərici struktur: Yaddaş ünvanları ilə işləyərkən göstərici tipli


veilənlərdən istifadə olunur. Göstəricilərdən siyahı strukturlarının
proqramlaşdırılmasında geniş istifadə olunur.
Göstəricinin aldığı qiyməti yaddaşın ünvanıdır. Göstərici tiplidəyişən üçün
yaddaşda 4 bayt yer tutur. Birinci söz ünvanın sürüşməsi, ikinci isə ünvanın
seqmentidir.
Göstərici tiplərlə işləyərkən, boş ünvanı göstərən nil standart sabitindən
istifadə olunur.
Siyahı kimi dinamik strukturlu verilənlərin təsvirində hər hansı tipdəyişənin
özü yox, onun göstəricisi göstərilir.Siyahı elementləri dinamik olduğundan
göstərici adidəyişən olur,dəyişəni göstərən isədinamik olur. Məsələn,
var
M:^Char; M:^Char; M^:
begin Char;
M^:='*'; цнван '*'
. . .
end.
Burada M dəyişəni elan olunur və ona yeni qiymət mənsub edilir.
Mdəyişən göstəricisi üç vəziyyətdə ola bilər.
1. Yaddaşda yeri ayrılan hər hansıdəyişənin ünvanını saxlayır.
2. Xüsusi nil-boş ünvanı saxlayır.
3. Naməlum vəziyətdə yerləşir.
nil vəziyyətinin naməlum vəziyyətdən fərqi ondadır ki, bu iki
göstəricinindəyişəni bərabərdeyil.

Mühazirə 3
Xətti statik strukturlar.Əsas anlayışlar
Ardıcıl strukturlu verilənlər

Elementlərin məntiqi ardıcıllığı onların fiziki ardıcıllığı ilə ardıcıl


strukturlu verilənlərdə uyğun gəlir. Bu tip strukturlara yazı, vektor,
cədvəl, massiv misal ola bilər. Statik strukturlarda elementlər arasındakı
əlaqələr və onların sayı dəyişmir.
10
B : array [ 1..7 ,1..4 ] of integer;
Vektor. Birölçülü massiv vektor adlanır. Vektorlarda fiziki strukturla
məntiqi struktur eynidir. Vektorların məntiqi strukturu belədir: {B1, B2,
B3, B4, B5}
B [ 3] – B massivinin 3-cü elementidir, B[ 3] indeksli dəyişəndir.
Dəyişənin indeksli adi dəyişəndən fərqi yoxdur. Vektorda elementin
tipi onun elementlərinin qiymətlərini və onlar üzərində aparılan
əməliyyatları təyin edir. Əməli yaddaşda B adlı vektor belə yazılır :
ƏY
B1
B2
B3
B4
B5

Şəkil 1.5. Əməli yaddaşda B adlı vektor

Massiv. Massiv verilənlərin elə bir strukturudur ki, sabit ölçülü, bircins,
nömrələrinə görə nizamlanmış elementlərdən təşkil olunub. Massiv ölçüsü
və identifikatoru (adı) ilə təyin olunur.
Massiv hər bir elementi ayrıca bir vektor olan vektordur. Məsələn,
vektorlardan ibarət vektor- 2 ölçülü massiv, vektorlar vektorlarının vektoru
3 ölçülü massiv və s.
Massivin fiziki və məntiqi strukturu bir – birindən fərqlənir. Məsələn,
ikiölçülü massivin məntiqi strukturu matrisdir. Üçölçülü massivin məntiqi
strukturu isə kubdur.

Şəkil 1.6. M(1..4;1..5) adlı massivin fiziki və məntiqi strukturu

11
Məntiqi strukturu fiziki struktura çevirmək üçün aşağıdakı düsturdan
istifadə olunur:
A = Ab + ( i – 1 ) n + j
Burada, n - sütunların sayı, i-sütunun , j-isə sətrin nömrəsi, A b –massivin
birinci elementinin yerləşdiyi yerdir.
Massivdə də vektorda olduğu kimi elementlər üzərində əməliyyatlar
və onların qiyməti elementin tipi ilə təyin olunur. Massivin hər bir
elementinə ayrıca müraciət massivin ölçüsündən asılı olaraq bir və ya bir
neçə(sətir və sütun rəqəmi ilə) indeksin köməyi ilə mümkündür. Indeks
kimi sabit vədəyişən sıra tipindən, tam ədədlərdən istifadə etmək olar.
Massivin elementləri isə istənilən tipdə- həm sadədəyişənin ixtiyari tipi,
həmdədəyişənin mürəkkəb tipi (sətir, yazı, massiv və s.) ola bilər.
Məsələlərin həllində adətən birölçülü, ikiölçülü və üçölcülü massivlərdən
istifadə olunur. Praktikada çox nadir hallardadaha böyük ölçülü massivlərə
rast gəlinir.
Yazı. Cədvəl
Yazı müxtəlif tipli elementərin toplusudur, məntiqi baxımdan nəzər
saldıqda hər hansı obyektin elementlərinin xarakteristikaları toplusudur.
Bildiyimiz kimi yazı müəyyən obyekti və ya obyektin elementini
xarakterizə edən müxtəlif tipli elementlər toplusudur.
Massiv, fayl və çoxluq öz tərkibinə bir tipdə elementləridaxil etdiyi halda
yazılar tərkibində ixtiyari sayda müxtəlif tipli verilənləri ( sadədəyişənlər,
çoxluqlar, massivlər və fayllar) birləşdirə bilər. Yazıyadaxil olan bu
verilənlər yazının sahələri adlanır. Yazı tipinin elan edilməsində record və
end açar sözlərindən istifadə olunur. Yazı tipinin ümumi yazılış strukturu
aşacıdakı kimidir:
type
<yazı tipinin identifikatı> =record A1:Q1; A2:Q2; . . . ;An:Qn; end;
Burada Si – yazı sahələrinin adları, Ti – sahələrin tipləridir.
Yazı iyerarxik (pilləvari) struktura malikdir:

12
Şəkil 1.7. Yazının iyerarxik strukturu

Yazının fiziki strukturu yaddaşda ardıcıl olaraq yerləşdirilmiş


elementlərdir.
Cədvəl (table). Cədvəl strukturların ümumiləşdirilmiş variantıdır.
Bildiyimiz kimi cədvəlin elementləri yazılardır. Başqa sözlə təsvir
etsək cədvəl elə bir çoxölçülü massivdir ki, elementləri yazılardan
ibarətdir. Cədvəl müəyyən əlamətin qiymətlərinə görə nizamlanmış
və ya nizamlanmamış ola bilər. Hər bir yazı bir mənalı təyin edilir.
Həmin əlamətə yazının açarı deyilir. Hər yazı uzunluğu ilə
xarakterizə olunur.
Yazıdakı simvolların sayı onun uzunluğu adlanır və baytlarla ölçülür.
Formalarına görə yazılar dəyişən, sabit və qeyri-müəyyən uzunluqlu
ola bilərlər. Məsələlərdə adətən sabit uzunluqlu yazıları olan
cədvəllərə baxırlar. Sabit uzunluqlu yazılarda ünvan belə təyin oluna
bilər:
Ai = A1 + ( i – 1 ) L e
A1 - 1-ci yazının ünvanı, Ai – i-ci yazının ünvanı, L - yazının
uzunluğudur.
1-ci yazının ünvanı (cədvəlin başlanğıc ünvanı), yazının uzunluğu
və sonuncu yazının ünvanı və ya strukturdakı yazıların sayı ilə
cədvəl tipli verilənlərin ardıcıl strukturunu təyin etmək olur.
Ardıcıl strukturlar digərlərinə nəzərən üstünlüyə malikdilər.
Ardıcıl strukturlarda yazılar bir-birinin ardınca arakəsmələr olmadan
13
yerləşdirilir bu da yaddaşın qənaətlə istifadə olunmasına şərait
yaradır.Bu yalnız sabit ölçülü cədvəllərdə özünü biruzə verir.
Yazıların sayı naməlum olduqda bu üstünlüyün əhəmiyyəti itir. Bu
halda yazıların planlaşdırılan maksimum sayına uyğun olaraq yaddaş
sahəsi ayrılmalıdır.
Mövcud yüksək səviyyəli alqoritmik dillərin çoxunda cədvəllərin
təşkili və işlənməsi üçün vasitələr mövcuddur.
Cədvəl üzərində aparılan tipik əməliyyatlar aşağıdakılardır:
- cədvələ yeni yazının daxil edilməsi
- tələb olunan yazının axtarışı
- lazımsız yazının cədvəldən kənar edilməsi
Cədvəldəki elementlərin sayı və axtarış üsulu bu əməliyyatların
yerinə yetirilməsi sürətinnə təsir edir. Çox böyük olmayan
cədvəllərdə və bəzi məsələlərin həllində(cədvəlin) axtarış ardıcıl
üsulla aparılır, yəni cədvəlin əvvəlindən başlayaraq axtarılan
elementi tapanadək yazılara bir-bir müraciət edilir.
Mühazirə 4
Xətti yarımstatik strukturlar.Əsas anlayışlar. Stek.
Yarımstatik strukturlarda elementlərin sayı qabaqcadan təyin
olunan müəyyən sərhəd çərçivəsində dəyişə bilər, əlaqələr isə
elementlər arasında adətən xətti ardıcıl olur. Struktur üçün
əvvəlcədən ayrılan yaddaş sahəsinin ölçüsü ilə fiziki strukturda
elementlərin sayına qoyulan məhdudluq müəyyən olunur.
Stack deyildikdə bir tərəfli giriş və çıxışlara malik olan ADT
(Abstract Data Type) nümunəsi başa düşülür. Digər strukturlardan
fərqli olaraq Stack nümunəsi üçün LİFO(Last in First out) qanunu
ödənilir. Bunun məğzi ondan ibarətdir ki, yığına sonuncu əlavə
olunan element birinci yerdə dayanır və yığın üzərində əməliyyat
aparılarkən (məs. Pop() funksiyası) sonuncu əlavə olunmuş
elementdən başlanılır. Yarımstatik strukturlara aiddir: stek, növbə və
dek. Qeyd edək ki, göstərilən bu strukturlara yarımstatik struktur
kimi baxılması şərti xarakter daşıyır. Bu strukturların dinamik
variantlarını da qurmaq mümkündür. Belə olan halda strukturun
elementlərinin sayına məhdudluq qoyulmur və əlaqələndirilmiş
14
siyahı strukturlarında olduğu kimi, elementlər bir-birilə göstəricilər
vasitəsilə əlaqələndirilir.
Elementlərin daxil olunması və onların xaric edilməsi ancaq
siyahının bir tərəfindən aparılan dəyişən uzunluqlu ardıcıl siyahıya
stek deyilir. Belə strukturda sonuncu daxil olunan element birinci
xaric olunur.
Stek elementləri eyni tipli skalyar kəmiyyət ,eləcə də sabit
uzunluqlu yazı ola bilər. Elementlərin daxil və xaric edilməsi prosesi
stekin təpəsindən aparılır. Stekin təpəsi xüsusi göstərici ilə
ünvanlaşdırılır.

Şəkil 2.1. Stekin ümumi strukturu

yuxarı sərhəddi aşarsa, onda “ dolub-daşma “ siqnalı hasil


edilir.
Alqoritmin təsviri.
1. Göstəricinin yuxarı sürüşdürülməsi.
Ps := Ps + L ;
2. Daşmanın yoxlanması.
Əgər Ps > Ay olarsa, onda “dolub-daşma“ siqnalı hasil edib alqoritmi
bitirməli.
3. Yeni elementin stekə yazılması.
X – E { Ps }
15
Yeni elementi Ps göstəricisinə uyğun sahəyə yazıb alqoritmi
bitirməli.
Stekdən elementin xaric edilməsi ( SXAR alqoritmi ) :
İlk növbədə stekin boş olub-olmaması yoxlanır. Əgər stek boş olarsa,
lazım olunan siqnal hasil olunur. Əks halda isə göstəricinin
ünvanlaşdırdığı element işçi sahəyə ( İS ) köçürülür və göstərici bir
slot yəni, bir elementin uzunluğu (L) qədər “aşağı“ sürüşdürülür.
Alqoritmin təsviri.
1. Stek boşdur. Əgər Ps < Aa onda stekin boş olması haqqında
məlumat çap edib alqoritmi bitirməli.
2. Stekdən elementin xaric olunması.
E { Ps } – İS
Ps göstəricisinə uyğun olan element işçi sahəyə yazılır.
3. Göstəricinin dəyişdirilməsi.
Ps := Ay – L
qəbul edib alqoritmi bitirməli.
Yığından söhbət gedərkən ilk olaraq təməlində 3 əsas funksiyanın
olmasını qeyd etmək lazımdır. Stack’in işlədilə bilinməsi bu
funksiyalar sayəsində mümkün olur. Bunları aşağıdaki formada
qruplaşdırmaq olar:
Push() – Stack’in içərisinə dəyər daxil etmək üçün istifadə olunur;
Pop() – Stack’in içərisindən mövcud dəyəri götürmək üçün istifadə
olunur;
Top() – Stack’in təpə nöqtəsindəki dəyəri almaq üçün istifadə olunur;
Onuda qeyd edək ki, Push() və Pop() funksiyaları LİFO qanununa
uyğun şəkildə müvafiq olaraq Stack’in təpə nöqtəsinə dəyər əlavə
edir və götürür. Top() funksiyası isə dəyəri Stack’dən çıxartmır onu
sadəcə oxuyur.
Aşağıdaki şəkildə Stack’in quruluşu vizual olaraq təsvir olunmuşdur.

16
Stack’lər bir qayda olaraq ya Massivlər(Arrays) yada Əlaqəli
Siyahılar (Linked Lists) üzərində qurulurlar. Bu laboratoriya işi
çərçivəsində həm Massivlər həmdə Əlaqəli Siyahılar vasitəsilə Stack
strukturları inşa edəcək və bu strukturlar üzərində Push(), Pop() və
Top() funksiyalarını icra edəcəyik.
Kodlaşdırmaya keçməzdən əvvəl onuda qeyd edək ki, Stack
strukturlarını massivlərin köməyi ilə qurmaq əslində praktikada o
qədər də təsadüf olunan məsələ deyil. Sonradan kodda da
görəcəyimiz kimi, məsələn 4 elementə sahib bir massivə 5.ci
elementi əlavə etmək lazım gəldikdə bu massivdən iki dəfə böyük
olan başqa bir massiv yaradılır və əvvəlki massivin elementləri yeni
massivə kopyalandıqdan sonra massivə son olaraq yeni element
əlavə olunur. Buradan göründüyü kimi bu üsul RAM-da həddindən
artıq yer tutulmasına, əlavə kopyalanma ilə CPU-nun yorulmasına və
nəticə etibarilə performansı çox zəif olan bir əməliyyatın yerinə
yetirilməsinə səbəb olur. Üstəlik funksional proqramlaşdırma
dillərində (məsələn bizim nümunəmizdəki C dili kimi) Garbage
Collector olmadığından RAM-da istifadəsi mümkün olmayan əvvəlki
massivlərin yaddaşdan boşaldılması lazım gəlir( free() funksiyası ilə)
17
ki, bu da əlavə bir əməliyyat deməkdir. Odur ki, praktik məqsədlər
üçün Massivlər vasitəsilə Stack qurmaq tövsiyyə olunmur.
Yaddaş sahəsinin ölçüsünün yuxarı və aşağı sərhədləri təyin olunur.
Əgər ayrılmış sahədə növbəti elementin struktura daxil edilməsi üçün
boş yer ( slot ) yoxdursa, o zaman bu haqda istifadəçiyə strukturun “
dolub-daşması ” haqqında məlumat verilir.

Stek üzərində əməliyyatlar

push (s, i) əməliyyatında S steki və i elementi üçün təyin


olunur və i elementi s stekinə yerləşdirilir. Analoji olaraq, stekdən
seçmək üçün pop (s) əməliyyatından istifadə olunur, burada s
stekindəki yuxarı element xaric olunur və funksiyanın qiyməti
şəklində qaytarılır. Deməli,
i = pop (s)
mənimsəmə əməliyyatı vasitəsi ilə stekin təpəsindən elementi xaric
olunur və onun qiymətini i dəyişəninə mənimsədir.
Stek üzərində aparılan digər əməliyyatlardan biri də empty (s)
əməliyyatıdır və bu əməliyyat onun boş olub-olmadığını yoxlayır.
Stek boş olduğu halda empty (s) əməliyyatı “həqiqi“ , əks halda isə
“yalan“ qiyməti qaytarır.
stacktop ( s ) əməliyyatından isə stekin təpəsindəki elementi təyin
etmək üçün ( onu xaric etmədən )
istifadə etmək olar. O stekin təpəsindəki elementi qaytarır.
Göründüyü kimi,
i = stacktop ( s ) əməliyyatı
i = pop ( s ); push ( s,i )
əməliyyatları ilə eyni funksiyasını yerinə yetirir.
Qeyd etmək lazımdır ki, pop (s) və stacktop (s) əməliyyatları boş
stek üçün təyin edilməyib.
Misal: Bir neçə səviyyəli daxili mötərizələrə malik olan riyazi
ifadəyə baxaq, məsələn :
(b+ (a – [x + y]) *d – ((c + e))) / (h – (c – (k – [i – n])))
18
və biz mötərizələrin düzgün qurulub-qurulmasına əmin olmaq
istəyirik. Deməli, biz ilk növbədə bilməliyik ki, 1) sağ və sol
mötərizələrin sayı eynidir; 2)hər bir sol(açan) mötərizədən sonra
sağ(bağlayan) mötərizə gəlir ; 3) bağlayan və açan mötərizələrin sayı
eynidir, yəni (və).
Stekdən mötərizələrin tiplərini izləmək üçün istifadə etmək olar.
Mötərizə aşkar olunduqda isə o stekə yazılır. Bağlayan mötərizə rast
gəlinən zaman stekin məzmunu analiz olunur. Əgər stek boş olarsa
bu o deməkdir ki , açan mötərizə yoxdur həmçinin sətir düzgün
qurulmayıb. Əgər stek boş deyilsə, o zaman biz stekdən element
seçirik və daha sonra onun bağlayan mötərizənin tələb olunan tipinə
uyğun gəlib gəlməməsini yoxlayırıq. Üst-üstə düşmə halında isə
proses davam edir. Uyğun gəlmədiyi halda sətrin təşkili səhv hesab
olunur. Biz sətrin sonuna çatarkən stekin boş olduğuna əmin
olmalıyıq. Bu proseduranın alqoritmi aşağıda verilmişdir:
valid = true
s = boş stek
While ( bütün sətir hələ oxunmayıb ) and ( valid = true ) do
read növbəti simvol ( symb )
if symb = “ ( “ or symb = “ [ “ or symb = “ { “
then push ( s, symb )
end if
if symb = “ ) “ or symb = “ ] “ or symb = “ } “
then valid = false
else i = pop ( s )
if i symb üçün açar mötərizəyə uyğun gəlmir
then valid = false
end if
end if
end if
end while
if empty( s ) = false
then valid = false
end if
19
if valid = true
then print ( “ Sətir düzgün təşkil olunub “ )
else print ( “ Sətir düzgün təşkil olunmayıb “ )
end if
Bu məsələnin həlli üçün nəyə görə stek lazım olur ?
Axırıncı açan mötərizənin tipi ilə bağlayan mötərizənin tipi bir-
birinə uyğun gəlməlidir. Axırıncı yerləşən element birinci xaric
olunduğundan bu tamamilə steklə imitasiya olunur. Stekin hər bir
elementi hələ bağlanmamış açan mötərizəni təmsil edir.
Stekin alqoritmik dillərdə həyata keçirilməsi.
Eyni tipli verilənlər yığımından ibarət ardıcıl təşkil olunan stek kimi
proqramlaşdırma dillərində bu cür xarakteristikaya malik verilənlər
tipi – massiv artıq mövcuddur. Ona görə də hər hansı məsələnin həlli
üçün stek lazım olarsa, o zaman proqramda massiv obyektindən
istifadə etmək olar. Lakin qeyd etmək lazımdır ki, stek dinamik
strukturaya malik dir və bu o deməkdir ki ,elementləri ona daxil
edildikcə və xaric olunduqca onun ölçüsü dəyişir və digər tərəfdən
massiv sabit strukturaya malik olduğundan, steklə massiv tamamilə
eyni obyektlər sayıla bilməz. Nəticədə demək olar ki, massiv stek
üçün hər hansı bir baza ola bilər. Beləliklə, massiv stekin maksimal
ölçüsünü örtə bilən ölçü ilə elan oluna bilər. Digər tərəfdən sadə
dəyişəndən istifadə etmək olar ki, bu da hər anda stekin təpəsini cari
vəziyyət üçün izləməyə imkan verir.
İndi isə C dilində sözü gedən Stack strukturunu quraq;
Və özümüzün Pop(), Push() funksiyalarımızı yazaraq nümunədə
işlədək;
Aşağıdaki C kodunu təhlil edək;
Burada Custom Pop() və Push() funksiyaları təyin olunmuşdur.
Əlavə olaraq əməliyyatların nəticəsini vizual olaraq görmək üçün
Ekranacixart() funksiyası var.
Üstündə əməliyat aparılan massiv dinamik Memory Allocation ilə
təyin olunmuşdur buda bizə lazım gəldikdə massivin ölçüsünü artırıb
azaltmağa imkan verəcək. Göründüyü kimi ilk olaraq 35 və 45

20
ədədləri Push olunmalı və daha sonra isə Pop() funksiyası işə
düşərək son əlavə olunan elementi Pop etməlidir.

Bu proqramı başlatsaq aşağıdaki nəticəni alırıq;

Gözlədimiz kimi ilk olaraq Push() funksiyası 35 və 45 ədədlərini


əlavə etmiş və daha sonra Pop() funksiyası son əlavə olunan elementi
(45) silmişdir. Və sondaki 35 massivin son halını görmək üçün
yazdığımız Ekranacixart() funksiyasının nəticəsidir (24.cü sətir).
21
Stekin tətbiq sahələri

Stekdən həm proqramlaşdırmada, həm də kompüterin


strukturunda geniş istifadə olunur. Kompüterdə ünvansız yaddaş
qurulması üçün stekdən istifadə edilir. Stekdən daha çox rekursiv
prosedurların yerinə yetirilməsi üçün və eləcə də
proqramlaşdırmada stek tipli yaddaşın proqramlaşdırma vasitəsilə
qurulması üçün istifadə edilir. Stek vasitəsilə rekursiv prosedurun
yerinə yetirilməsinə baxaq:
k=n!
1 , əgər n ≤1
fact ={¿!1 , əgər n ≥ 1
İndi baxacağımız alqoritmdə yuxarıdakı düsturdan istifadə olunur.

Şəkil 2.2. Stek vasitəsilə faktorialın hesablanması

22
Mühazirə 5
Növbə

Elementlərin daxil edilməsi siyahının bir tərəfindən, xaric


edilməsi digər tərəfindən aparılan dəyişən uzunluqlu ardıcıl xətti
siyahıya növbə deyilir. Belə ki, burada birinci daxil edilən element
birinci də xaric olunur. Bəzən növbəyə ingiliscə FİFO da deyilir.
Fiziki strukturu belədir. Yaddaşda yuxarı və aşağı sərhədləri
təyin olunmuş sahə növbənin fiziki strukturudur.

Şəkil 2.3. Növbənin fiziki strukturu

Stekdən fərqli olaraq iki göstəricidən istifadə olunur. Biri


elementlərin daxil olunması, digəri isə elementlərin xaric edilməsi
üçündür. P1- göstəricisi elementlərin daxil edilməsi, P2- göstəricisi
elementlərin xaric edilməsi üçün istifadə olunur.
Yeni elementin daxil edilməsi iki addımla aparılır.
1) P1 göstəricisi 1 slot artırılır. P1 := P1 + 1 ( slot )
2) Həmin göstəriciyə görə yeni element növbəyə daxil edilir.
Növbədən elementin çıxarılması da iki addımla aparılır.
1) P2 göstəricisinə görə element növbədən çıxarılır.
2) Göstəricinin qiyməti 1 slot artırılır. P2 := P2 + 1(slot)
Sonuncu alqoritmdən aydındır ki, element növbədən çıxarıldıqdan
sonra o məntiqi silinmiş hesab olunur. Yeni elementin növbəyə daxil
edilməsi zamanı əgər ( P1 + 1 ) >= Ay olarsa, o zaman növbə dolub-
daşmış hesab olunur. Növbənin sonu ilə əvvəlini əlaqələndirib
dövrəli növbə adlanan struktur alındırmaqla dolub daşmanın
qarşısını qismən almaq olar.
23
Şəkil 2.4. Dövrəvi növbənin fiziki strukturu

Adi növbədə
P2≤ P1 ; P2= P1+1
olur.
Dövrəvi növbədə isə aşağıdakı üç hal ola bilər.
P1>P2; P1 =P2 ; P1<P2
Əgər dövrəvi növbə üzərində əməliyyat aparan zaman elementin
növbəyə daxil edilmə əməliyyatlarının sayı elementin növbədən xaric
edilmə əməliyyatlarının sayından çox olarsa, sonun göstəricisinin
əvvəlin göstəricisini ötməsi vəziyyəti baş verə bilər. Bu vəziyyətdə
növbə tam dolduğu halda göstəricilər müqayisə olunur və növbə dolu
olduğu halda boş qeyd olunur.
Dövrəvi növbədə bu iki vəziyyəti -növbənin dolu və ya boş olması
vəziyyətini fərqləndirmək etmək üçün sonun və əvvəlin göstəricisi
arasında boş elementlərdən “aralıq” olmalıdır. Bu “aralıq “ 1 elementə
kimi azaldıqda növbə tamamilə dolmuş olur və növbəyə yeni
elementin daxil edilməsi mümkün olmur. Növbənin təmizlənməsi,
boşalldılması isə hər iki göstəricinin ( başlanğıc olması vacib deyil )
eyni qiymət daşıdığı yazıda uzlaşır. Dövrəvi növbədə ölçünün təyin
edilməsi göstəricilər fərqinin hesablanması ilə aparılır. Növbəti proqram
nümunəsində növbənin təşkil edilməsi və onun üzərindəki əməliyyatlar
təsvir edir:
unit Queue; { Dövrəvi FIFO növbəsi }
Interface
const SIZE=...;{növbənin son həddi }
type data = ...;{ elementlər istənilən tipə aid ola bilərlər}
Procesure QInit;
Procedure Qclr;

24
Function QCreate(a: data) : boolean;
Function QRead(var a: data) : boolean;
Function Qsize : integer;
Implementation {Dövrəvi növbə}
var QueueA : array[1..SIZE] of data; {Növbənin verilənləri}
top, bottom : integer;{ Başlanğıc və son}
Procedure QInit; {**təsvir - başlanğıc=son=1 }
begin top:=1; bottom:=1; end;
Procedure Qclr; {**təmizləmə - başlanğıc=son }
begin top:=bottom; end;
Function QCreate(a : data) : boolean; {**Sonda yazı }
begin
if bottom mod SIZE+1=top then { növbə dolub} QCreate:=false
else begin
Queue[bottom]:=a; bottom:=bottom mod SIZE+1; QCreate:=true;
end; end; { QCreate }
Function QRead(var a: data) : boolean; {** başlanğıcdan seçim }
begin
if top=bottom then QRead:=false else
begin a:=Queue[top]; top:=top mod SIZE + 1; QRead:=true;
end; end; { QRead }
Function QSize : integer; {**ölçünün təyin edilməsi }
begin
if top <= bottom then QSize:=bottom-top
else QSize:=bottom+SIZE-top;
end; { QSize }
END.
Növbədən kompüter resurslarının çatışmazlığı hallarında paralel
yerinə yetirməli olan məsələləri, məsələn idarəetmə üçün istifadə olunur.

Dek

25
Dek(double ended queue) elə ardıcıl siyahıdır ki, elementlərin daxil
və xaric edilməsi siyahının hər iki tərəfindən aparıla bilər. Dekin
strukturunu aşağıdakı kimidir:

Şəkil 2.5. Dekin fiziki strukturu

Dek növbənin bir formasıdır, açıqlaması 2 sonluqlu növbə deməkdir.


Növbədən fərqli - burada P1 , P2 həm giriş həm çıxış ola bilər. Növbədə
daxil-xaric etmə haqqında qeyd edilənlər dekə də aiddir. Lakin bu zaman P 1
və P2 – nin təyinatını nəzərə almaq lazımdır.
Dekin iki xüsusi halı ola bilər :
 girişi məhdud dek
 çıxışı məhdud dek
Girişi məhdud dekdə elementlərin daxil edilməsi yalnız bir sonluqdan,
çıxışı məhdud olan dekdə isə elementlərin xaric edilməsi yalnız bir
sonluqdan aparılır.

Mühazirə 6
Xətti dinamik strukturlar. Siyahı strukturları
Dinamik strukturlarda elementlərin sayı dəyişkən olur.
Elementlər arasındakı əlaqə xətti ardıcıl, xətti əlaqələndirilmiş və
qeyri-xətti əlaqələndirilmiş olur.
Xətti əlaqələndirilmiş dinamik strukturlara aşağıdakılar
aiddir:
1) birəlaqəli siyahı strukturları;
2) ikiəlaqəli siyahı strukturları;
3) Sətr, mətn əlaqəli siyahı strukturları .
Üzərilərində daxil etmə və xaric etmə əməliyyatının
aparılması mümkün olan, dəyişən rəqəmli elementdən təşkil
26
olunan nizamlanmış çoxluq siyahı adlanır. Elementləri arasında
qonşuluq munasibəti təsvir olunan siyahı xətti adlanır. Məntiqi
siyahıya əvvəl ki, bölmədə nəzər saldıq. Ancaq orada söhbət
verilənlərin yarımstatik strukturundan gedirdi və siyahının
ölçüsünə məhdudiyyətlər qoyulurdu. Əgər siyahının
uzunluğuna məhdudiyyət qoyulmursa onda o, yaddaşda
əlaqəli struktur şəklində təsvir ediləcəkdir. Əlaqəli xətti
siyahılar verilənlərin dinamik strukturunun ən sadə təsvir
formasıdır.
Siyahılarda qrafiki əlaqələri oxların köməyi ilə təsvir
etmək daha asandır. Əgər element heç bir başqa elementlə
əlaqəli deyilsə, onda göstəricinin sahəsində heç bir elementi
göstərməyən qiymət yazılır. Belə istinad xüsusi adla - nil
adlanır.
Şəkil 5.1 – də birəlaqəli siyahının strukturu verilmişdir.
INF hissəsi verilənlərin informasiya sahəsinin, NEXT növbəti
elementin göstəricisidir. Hər bir siyahının xüsusi elementi
olmalıdır hansı ki, siyahının başlanğıcının göstəricisi və ya
digər elementlərdən adətən formatına görə fərqlənən siyahının
başlanğıcı olur.Sonuncu elementinin göstərici sahəsində xüsusi
nil göstəricisi var, hansı ki, siyahının sonunu bildirir.

Şəkil 3.1. Birəlaqəli siyahı strukturu


Ancaq birəlaqəli siyahının emalı heç də rahat deyil.
Buna səbəb əks istiqamətdə hərəkətin mümkün olmamasıdır.
Bu hal iki əlaqəli siyahıda mümkündür, burada hər bir
elementin iki göstəricisi: siyahının öncəki və sonrakı
elementini göstərir.İki əlaqəli siyahı struktur şəkil 5.2 – də
verilib, harada ki, NEXT – göstəricisi növbəti elementi,
PREV – göstəricisi öncəki elementi göstərir. Kənar
27
elementlərdə uyğun göstəricilərdə NİL hissəsi olmalıdır,
şəkildə göstərilən kimi.

Şəkil 3.2. İkiəlaqəli siyahının struktur

Siyahının emalını asanlaşdırmaq üçün siyahının sonuna


sonu göstərən göstərici əlavə edilməlidir. Hər bir elementdə
iki göstəricinin olması siyahının emalını çətinləşdirir və
bununla yanaşı yaddaşın hərcmərcliyinə səbəb olur. Bununla
yanaşı siyahı üzərində aparılan bəzi əməliyyatları daha
effektiv edir. Baxılan xətti siyahıların daha çox istifadə edilən
forması halqavari formadır hansı ki, həm bir əlaqəli, həm də
iki əlaqəli siyahı formasında verilə bilər.Bu halda bir əlaqəli
siyahıda sonuncu elementin göstəricisi birinci elementi
göstərməlidir. İki əlaqəli siyahı formasında isə birinci və
sonuncu elementin göstəricisi ünvanlanmanı şəkil 5.3 – də
verilən kimi dəyişir.

Şəkil 3.3. Halqavari ikiəlaqəli siyahının strukturu.


28
Bu cür siyahılarla iş siyahılar üzərində bəzi
əməliyyatları asanlaşdırır. Siyahının emalı zamanı bəzi
təhlükəsizlik əməllərinə nəzarət etmək lazımdır ki, dövrənin
uyğunluğu pozulmasın.
Yaddaşda siyahı özlüyündə deskriptorla birliyə, formata
və ölçüyə görə eyni yazıları hansılar ki, yaddaşın bir
hissəsində bir – biri ilə göstəricinin sayəsində xətti ardıcıllıq
şəklində əlaqələnmişdir. Yazı informasiya sahəsi və siyahının
qonşu elementinin göstəricisinin sahəsini özündə cəmləyir.
İnformasiya bölməsinin bir çox sahələri yaddaş blokunda bu
elementə aid əlavə informasiya ilə verilir. Siyahı deskriptoru
xüsusi yazı formasında reallaşdırılır və özündə siyahının
başlanğıc ünvanını, struktur kodunu, siyahının adını,
siyahıdakı axıcı elementin rəqəmini və s. özündə cəmləyir.
Deskriptor yaddaşın siyahısının elementləri təyin edilən
bölməsində yerləşə bilər.

İndi isə C dilindən istifadə edərək yuxarıda verilən məlumatları


kodlaşdıraq. C dilində iki ədəd elementi və iteratoru olan bir struktur
yaradaraq və listdə saxlanılan verilənləri ekrana çıxaran proqramı
tərtib edək. Strukturun təsviri aşağıdaki kimidir:

29
Burada işlədilən malloc() (Memory Allocation) funksiyası verilmiş
struktura uyğun olaraq yaddaşda (RAM-da) düyüm üçün yer
ayrılmasını təmin edən C funksiyasıdır. Digər tərəfdən verilənlər
ekrana çıxardılarkən root-dan istifadə olunub. İlk anda root və
iterator eyni düyümü göstərdiyindən root->x yerinə iterator->x də
yaza bilərdik. Bu proqramın yekun nəticəsi aşağıdaki kimidir:

Nəticədən gördüyümüz kimi RAM-da iki düyüm üçün yer ayrılmış


və dəyişənlərə müvafiq olaraq 10 və 20 qiymətləri təyin olunmuşdur.

30
Tapşırığın davamı olaraq yaradılan əlaqəli listin sonuna yeni bir
düyüm əlavə edək və listin son halını ekrana çıxaran proqramı tərtib
edək;
Bunun üçün yuxarıda yazdığımız kodda dəyişiklik etməliyik. Əlaqəli
listin sonuna bir düyüm əlavə edəcəyimizdən ilk olaraq listin sonunu
tapmaq lazımdır. Listin sonunu tapmaq üçün bir dövr ifadəsi istifadə
edəcəyik. Əvvəlki iki düyümü manual olaraq yaratdığımıza görə
listin sonunun NULL olmasını da təmin etməliyik. Bu halda kod
aşağıdaki formaya düşür:

Proqramı başlatsaq aşağıdaki nəticəni alarıq.

31
Nəticədən görüldüyü kimi dövr hər dəfəsində siyahıya yeni bir
element əlavə etmişdir.

Növbəti nümunədə əlaqəli listdən element silmə prosesini ələ alırıq.


Silmə əməliyatını yerinə yetirərkən ehtiyatlı davranmaq lazımdır. İlk
olaraq silinəcək elementdən əvvəl gələn elementi tapmaq və onu
silinəcək elementdən sonra gələn elementlə əlaqələndirmək lazımdır.
Əks təqdirdə listin silinən elementdən sonrakı hissəsi ilə əlaqə
kəsildiyindən bu hissə fəzada qalır və əlçatmaz hala düşür. Ona
görədə əvvəlki və sonraki elementləri əlaqələndirmək, daha sonra isə
silinən elementin yaddaşda tutduğu yeri boşaltmaq lazım gəlir. Bu
əməliyat C dilində free() funksiyası ilə yerinə yetirilir. Bu nöqtədə
free() funksiyası ilə birbaşa element silmək mümkün olmadığından
silinəcək elementi saxlamaq üçün bir başqa pointerə ehtyac yaranır.
Bu pointeri temp (temporary-müvəqqəti) ilə qeyd ettikdən sonra
silmə əməliyatını yerinə yetirə bilərik.

Aşağıda silmə əməliyatını yerinə yetiran funksiya üçün yazılmışdır.


Qeyd etmək lazımdırki silinənəcək elementin listin başında,
ortasında vəya sonunda gəlməsini kodda nəzərə almaq lazımdır.
Aşaıdaki kod bu tələbləri ödəyir.

32
İndi isə bu funkisyadan istifadə edərək və əvvəlcədən yaratdığımız
və elementləri 10 və 20 dəyərlərini saxlayan listdə 20 elementini
silməyə çalışaq;

33
Gözlədiyimiz nəticə:
İlk olaraq EkranaCixart() funksiyasi hər iki elementi ekrana
çıxartmalı;
Daha sonra sil() funkisyası ilə 20 dəyərinə malik düyüm listdən
silinməli;
Sonda isə Listin son halı yəni geriyə qalan 10 dəyəri ekrana
çıxarılmalıdır.
Proqramı başlatsaq aşağıdaki nəticəni alırıq:

Gözlədiyimiz nəticəni aldığımızı görürük.


İndi isə siyahıda olmayan ixtiyari bir dəyəri silməyə çalışaq və kodun
düzgün işləyib işləmədiyi test edək;

44 dəyərinə malik düyümü silməyə çalışırıq və listdə belə düyüm


olmadığından aşağıdaki nəticəni alırıq.

34
Bununlada verilənlərin strukturu mövzusunda Əlaqəli Siyahılar
mövzusunu əhatə etmiş olduq.

İki əlaqəli siyahılar

Birəlaqəli siyahıdakı bəzi çatışmamazlıqlardan azad olmaq üçün


iki əlaqəli siyhıdan istifadə olunur. Siyahıda axtarış hər iki
istiqamətdə aparılır: irəli və geri. Iki əlaqəli olmasının səbəbi
siyahının hər elementində iki göstəricinin (düz və əks) olmasıdır.
Siyahının sonu və əvvəli də ayrıca göstəricilərlə qeyd olunur.
Çatışmamazlığı hər bir elementdə iki göstəricinin olması
siyahının strukturunu mürəkkəbləşdirir və yaddaş sərfini çoxaldır.
Lakin siyahı üzərində əməliyyatlarda səmərəlilik artır.
Birəlaqəlidək kimi iki əlaqəli siyahını da dövrəvi yaratmaq da
mümkündür. Bunun üçün siyahının sadəcə 1-ci və sonuncu
elementlərində SS(siyahının sonu)-in yerinə uyğun ünvan
göstəriciləri yazılmalıdır. Bu halda isə siyahının son göstəricisi lazım
olmur. Siyahıda bütün lazımi əməliyyatların aparılması üçün yalnız
siyahının başlanğıc göstəricisi kifayət edir.
Bir əlaqəli siyahıda olduğu kimi iki əlaqəli siyahıda elementin daxil
və xaric edilməsi alqoritmləri aparılır. Lakin bu zaman uyğun
elementlərdə iki göstəricinin (əks və düz) qiymətləri dəyişdirilir.
Ikiəlaqəli siyahıya aid nümunəyə baxaq.
public class DoublyLinkedList extends linkedList{
35
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
LinkedList list = new LinkedList(); /* siyahının obyektinin
yaradılması */
System.out.println("Doubly Linked List Test\n");
char ch;
do /* siyahı üzərində aparılacaq əməliyyatlar */
{
System.out.println("\nDoubly Linked List Operations\n");
System.out.println("1. insert at begining");
System.out.println("2. insert at end");
System.out.println("3. insert at position");
System.out.println("4. delete at position");
System.out.println("5. check empty");
System.out.println("6. get size");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter integer element to insert");
list.insertAtStart( scan.nextInt() );
break;
case 2 :
System.out.println("Enter integer element to insert");
list.insertAtEnd( scan.nextInt() );
break;
case 3 :
System.out.println("Enter integer element to insert");
int num = scan.nextInt() ;
System.out.println("Enter position");
int pos = scan.nextInt() ;
if (pos < 1 || pos > list.getSize() )
System.out.println("Invalid position\n");
36
else
list.insertAtPos(num, pos);
break;
case 4 :
System.out.println("Enter position");
int p = scan.nextInt() ;
if (p < 1 || p > list.getSize() )
System.out.println("Invalid position\n");
else
list.deleteAtPos(p);
break;
case 5 :
System.out.println("Empty status = "+ list.isEmpty());
break;
case 6 :
System.out.println("Size = "+ list.getSize() +" \n");
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
list.display(); /* siyahının çapı */
System.out.println("\nDo you want to continue (Type y or
n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
////////////////////////////////////////////////////////////////////////////////
public class LinkedList {
protected Node start;
protected Node end ;
public int size;
public LinkedList() /* konstruktor */
{
37
start = null;
end = null;
size = 0;
}
public boolean isEmpty() /* siyahının boş olduğunu yoxlayan
funksiya */
{
return start == null;
}
public int getSize() /* siyahının lçüsünü qaytaran funksiya */
{
return size;
}
public void insertAtStart(int val) /* siyahının əvvəlinə element
daxil etmək üçün funksiya */
{
Node nptr = new Node(val, null, null);
if(start == null)
{
start = nptr;
end = start;
}
else
{
start.setLinkPrev(nptr);
nptr.setLinkNext(start);
start = nptr;
}
size++;
}
public void insertAtEnd(int val) /* siyahının sonuna element
daxil edən funksiya */
{
Node nptr = new Node(val, null, null);
38
if(start == null)
{
start = nptr;
end = start;
}
else
{
nptr.setLinkPrev(end);
end.setLinkNext(nptr);
end = nptr;
}
size++;
}
public void insertAtPos(int val , int pos) /* siyahının istəniən
yerinə elementi daxil edən funksiya */
{
Node nptr = new Node(val, null, null);
if (pos == 1)
{
insertAtStart(val);
return;
}
Node ptr = start;
for (int i = 2; i <= size; i++)
{
if (i == pos)
{
Node tmp = ptr.getLinkNext();
ptr.setLinkNext(nptr);
nptr.setLinkPrev(ptr);
nptr.setLinkNext(tmp);
tmp.setLinkPrev(nptr);
}
ptr = ptr.getLinkNext();
39
}
size++ ;
}
public void deleteAtPos(int pos) /* siyahının istənilən yerindən
elementin silinməsi */
{
if (pos == 1)
{
if (size == 1)
{
start = null;
end = null;
size = 0;
return;
}
start = start.getLinkNext();
start.setLinkPrev(null);
size--;
return ;
}
if (pos == size)
{
end = end.getLinkPrev();
end.setLinkNext(null);
size-- ;
}
Node ptr = start.getLinkNext();
for (int i = 2; i <= size; i++)
{
if (i == pos)
{
Node p = ptr.getLinkPrev();
Node n = ptr.getLinkNext();

40
p.setLinkNext(n);
n.setLinkPrev(p);
size-- ;
return;
}
ptr = ptr.getLinkNext();
}
}
public void display() /* siyahının dolu və ya boş olduğunu
göstərən funksiya */
{
System.out.print("\nDoubly Linked List = ");
if (size == 0)
{
System.out.print("empty\n");
return;
}
if (start.getLinkNext() == null)
{
System.out.println(start.getData() );
return;
}
Node ptr = start;
System.out.print(start.getData()+ " <-> ");
ptr = start.getLinkNext();
while (ptr.getLinkNext() != null)
{
System.out.print(ptr.getData()+ " <-> ");
ptr = ptr.getLinkNext();
}
System.out.print(ptr.getData()+ "\n");
}

////////////////////////////////////////////////////////////////////////////////////////////////////
41
class DoublyLinkedList<T> {
private int n; // siyahıdakı elementlərin sayı
private Node pre; // birinci elementin əvvəlki göstəricisi
private Node post; // sonuncu elementin göstəricisi
public DoublyLinkedList() {
pre = new Node();
post = new Node();
pre.next = post;
post.prev = pre;
}
private class Node { // siyahı elementinin tipi
private T item;
private Node next;
private Node prev;
}
public boolean isEmpty() { return n == 0; }
public int size() { return n; }
public void add(T item) { // asiyahıya elementin daxil edilməsi
Node last = post.prev;
Node x = new Node();
x.item = item;
x.next = post;
x.prev = last;
post.prev = x;
last.next = x;
n++;
}
public ListIterator<T> iterator() { return new
DoublyLinkedListIterator(); }
private class DoublyLinkedListIterator implements
ListIterator<T> {
private Node current = pre.next;
private Node lastAccessed = null;
private int index = 0;
42
private DoublyLinkedListIterator() {
throw new UnsupportedOperationException("Not supported
yet."); }
public boolean hasNext() { return index < n; }
public boolean hasPrevious() { return index > 0; }
public int previousIndex() { return index - 1; }
public int nextIndex() { return index; }
public T next() {
if (!hasNext()) throw new NoSuchElementException();
lastAccessed = current;
T item = current.item;
current = current.next;
index++;
return item;
}
public T previous() {
if (!hasPrevious()) throw new NoSuchElementException();
current = current.prev;
index--;
lastAccessed = current;
return current.item;
}
public void set(T item) {
if (lastAccessed == null) throw new IllegalStateException();
lastAccessed.item = item;
}
public void remove() {
if (lastAccessed == null) throw new IllegalStateException();
Node x = lastAccessed.prev;
Node y = lastAccessed.next;
x.next = y;
y.prev = x;
n--;
if (current == lastAccessed)
43
current = y;
else
index--;
lastAccessed = null;
}
public void add(T item) { // siyahıya elementin daxil
edilməsi
Node x = current.prev;
Node y = new Node();
Node z = current;
y.item = item;
x.next = y;
y.next = z;
z.prev = y;
y.prev = x;
n++;
index++;
lastAccessed = null;
} }
Mühazirə 7
QEYRİ-XƏTTİ DİNAMİKİ STRUKTURLAR
Çoxəlaqəli siyahı strukturları

Bir əlaqəli siyahı həmişə xəttidir. İki əlaqəli siyahı isə xətti
olmaya da bilər. Ümumi halda nəzər salsaq əlaqələndirilmiş
siyahının hər bir elementiləriningöstəriciləri istənilən sayda ola bilər.
Fərqli elementlərdə göstəricilərin sayı fərqli ola bilər. Nəticədə isə
çox əlaqəli siyahı strukturu alınır. Belə strukturda hər element
göstəricilərin sayı qədər bir əlaqəli siyahılara daxil olur. Ədəbiyyatda
çox əlaqəli siyahılara həmçinin multi siyahılar və ya plekslər da
deyilir. Bəzi ədəbiyyatda çox siyahılı assosiyativ strukturlar ifadəsi
işlədilir, belə siyahıların elementlərinə isə assosiyativ qovşaqlar
deyilir.

44
Sadə hal üçün çox əlaqəli siyahıların hər elementində eyni sayda
göstərici qeyd olunur. Amma praktiki olaraq bu göstəricilərdən
çoxları boş olur. Daha yığcam hal üçün elementlərin ölçüsü dəyişən
olur və burada hər bir elementin yalnız qiyməti olan göstəriciləri
yazılır. Bu hala baxsaq- göstərici 2 hissədən ibarət olur: elementin
başlanğıc və göstəricinin nisbi ünvanı.
Siyahının başlanğıc və son göstəriciləri onun aşlığında qeyd
olunur. Yeni elementlər başqa hallar olmadıqca siyahıların sonuna
birləşdirilir. Başlanğıc göstəricidən axtarış aparmaq üçün, son
göstəricidən isə yeni elementin daxil edilməsi üçün istifadə olunur.

Başlıq qrup 613.6

Şəkil 4.1. Çoxəlaqəli siyahı strukturunun məntiqi strukturu

Şəkil 4.2. Çoxəlaqəli siyahı strukturunun fiziki sxemi

Burada, es-elementlərin sayı , ə1-əlamət 1.


45
Çoxəlaqəli siyahılardan yalnız yazıların bir neçə müxtəlif verilənə
görə paralel axtarışının təşkilində geniş istifadə olunur.
Axtarış belə aparılır:
Müəyyənləşdirilmiş axtarış əlamətlərinə görə siyahı
başlıqlarından siyahıların başlanğıc göstəriciləri müqayisə üçün
seçilir. Bu göstəricilər əvvəl öz aralarında bərabərliyə görə
yoxlanılır. Onların qiymətlərinin uyğun gəlməsi həmin göstəricilərin
bərabərliyi ilə təyin olunur. Həmin yazı çapa çıxarıldıqdan sonra
axtarışı bitirmək və ya davam etdirmək olar. əks halda, göstəricilərin
bir-birilə uyğun gəlmədiyi halda göstəricilərin ünvanlaşdırdıqları
elementlərdən növbəti-next göstəriciləri götürüb, təkrarən müqayisə
əməliyyatı aparılır. Əgər gələcək addımda göstəricinin qiyməti SS
olursa, axtarış dayandırılır.
Çox siyahılı strukturların xəttiləşdirilməsi axtarışın səmərəliliyini
artırmaq üçün məqsədə uyğundur. Bu halda göstəricilərlə
müqayisəsiz addımlama MAKS GOS-ə çatana qədər aparılır.
Bu strukturlara yeni elementin daxil edilməsi siyahının sonundan
aparılır. Yeni ki, element yaddaşda formalaşmadan sonra onun ünvan
göstəricisi yazının əlamətlərinə uyğun siyahıların son elementlərinə
köçürülür. Bu elementlərin ünvan göstəriciləri isə siyahıların
başlıqlarında da son elementlərin göstəriciləri uyğun sürətdə
dəyişdirilir. Yeni elementdə isə ünvan göstəriciləri yerində SS kodu
yazılır.
Elementin strukturdan xaric edilməsi isə belə aparılır:
Əvvəlcə bilavasitə verilmiş ünvan göstəricisinə və axtarış
əlamətlərinə ya görə bütün elementlər arasından xaric edilməli olan
element tapılır. Həmin elementdəki ünvan göstəriciləri uyğun
siyahıların əvvəlki elementlərindəki göstəricilərin yerində yazılır.
Xaric olunan element isə boş elementlər siyahısına daxil edilir.
Çoxəlaqəli strukturların ən ümumi forması olan şəbəkə strukturu
aşağıda qeyd olunmuş xassələrə malik çoxəlaqəli struktura deyilir.
1. Strukturun hər bir elementi digər elementlərlə ixtiyari sayda
əlaqəsi vardır.

46
2. Hər bir element ixtiyari sayda başqa elementlərlə əlaqə
saxlaya bilər.
3. Strukturda hər bir əlaqə yalnız istiqamətə deyil, həm də
çəkiyə malikdir.

Ağacvari strukturlar

Kompüter elmlərində verilənləri saxlamaq üçün istifadə olunan


üsullardan biri də ağaclardır. Bu strukturlar da qeyri - xətti dinamik
strukturlara aiddir. Bu strukturlar açarlı axtarışda açarın səmərəli
təşkili və axtarışı üçün istifadə olunur. Açar hər bir yazının
( söhbət cədvəldən və fayldan gedir ) bir mənalı təyin edən
əlamətidir. Açarları yazılarla birlikdə və ya onlardan ayrıca
saxlamaq olar. Açarın ən yaxşı təsvir üsulu indeks hesab olunur.
İndekslə açarın axtarışı üçün ağacvari strukturlardan geniş
istifadə olunur.
Ağacvari strukturun məntiqi forması təbiətdə mövcud olan ağacı
xatırladır. Burada ağac başayaq təsvir olunur.
Proqramlaşdırmada ağacvari struktur aşağıdakı xassələrlə təyin
olunur :
1. Ağacın kökü yuxarıda, budaq və yarpaqları isə aşağıda təsvir
olunur.
2. Ağac təpə və budaqlardan ibarətdir.
3. Ağacın təpələri içərisində eləsi var ki, ona budaq daxil
olmur, ondan yalnız budaqlar xaric olur. Buna ağacın kökü və ya
baş təpəsi deyilir.
4. Təpələr içərisində elələri var ki, onlardan heç bir budaq çıxmır,
onlara yalnız budaqlar daxil olur. Belə təpələrə ağacın yarpaqları
deyilir.
5. Ağacın hər bir təpəsinə baş təpədən başlayan yalnız bir yol
var. Təpəyə başqa yolla müraciət mümkün deyil.
47
Əgər bir qarafik bağlı deyilsə və dövrü olmayandırsa onda belə
qrafikə ağac deyilir. Bu strukturda verilənlər ağac formasında (kök,
gövdə, yarpaq) saxlanılır.
Məsələn aşağıdaki şəkildə 7 düyümdən (node) ibarət olan və
yarpaqlarında (leaf) 4 düyüm olan bir ağac strukturu göstərilmişdir.

Bu ağacın dərinliyi (depth) 2-yə bərabərdir və hər səviyyənin (level)


nömrəsi yanında verilmişdir. Ağacların bir ədəd başlanğıc düyümü
olur ki buna da kök (root) deyilir.

Ağacların xüsusi bir forması olan ikili ağaclarda hər düyümün


maksimum iki uşağı ola bilər. Bir düyümdə daha az uşağın olması (0
və ya 1) ağacın strukturuna xələl yetirmir. Yarpaqları çıxsaq qalan
bütün iki uşağı olarsa və yarpaqlar eyni dərinliyə sahib olduqda belə
ağaca balanslı (balanced) ağac deyilir. Yuxarıdaki şəkildə təsvir
olunan ağac balanslaşdırılmış bir ağacdır.

Həmin ağacı fərqli sıralarda yenidən qura bilərik. Məsələn aşağıda


təsvir olunan ağac da yuxarıdaki ağac ilə eyni verilənləri saxlayır:

48
Bu ağacın ilk şəkildəki ağacdan fərqli cəhəti balanslaşdırılmamış
olması və xüsusi olaraq hər düyümün bir uşağının olmasıdır. Əgər
tərifə fikir versək bu ağacında ikili ağac olaraq qəbul edilməli
olduğunu görərik.

İkili ağacların xüsusi bir halı olan ikili axtarış ağaclarındakı (Binary
Search Tree) düyümlərdə saxlanılan verilənlərin arasında böyükdür-
kiçikdir əlaqəsi olur. Məsələn tam ədədlərdən (integer) ibarət olan
verilənlər saxlanılırsa bu verilənlərin aralarında böyükdür-kiçikdir
əlaqəsi olmalıdır.

İkili axtarış ağacı hər düyümün solundaki qoldan çata biləcəyimiz


bütün verilənlərin həmin düyümün dəyərindən kiçik, sağ qolundan
çata biləcəyimiz bütün verilənlərin isə həmin düyümün dəyərindən
böyük olmasını təmin etməlidir.

Misal üçün aşağıda bir ikili axtarış ağacı təsvir olunmuşdur. Bu


ağaca diqqətlə fikir versək kökün solunda olan bütün ədədlərin
kökdən kiçik, sağında duran bütün ədədlərin isə kökdən böyük
olduğunu görərik:

49
İkili axtarış ağacları olduqca populyardır və qanunauyğunluq
gözləndiyindən bu ağaclar üzərində əməliyyatlar aparmaq olar. Qeyd
edək ki, hər hansı bir əməliyyat aparıldıqdan sonra ikili axtarış
ağacının strukturu pozulmamış olaraq qalmalıdır.

Ağacın məntiqi strukturu aşağıdakı kimidir:

Şəkil 4.3. Ağacın məntiqi strukturu

Ağacın hər bir təpəsi bir açar üçün nəzərdə tutulur. Yəni hər bir təpədə bir
açar saxlanılır. A,B, C, D, E, F – açarlardır.

50
Şəkil 4.4. Ağacın fiziki strukturu

Py – yazının göstəricisi, yəni baxılan açara malik olan yazının saxlandığı


yerin (o əməli və ya xarici yaddaşda ola bilər) ünvanıdır.
Ø – göstəricinin olmamasıdır.
Praktikada ən çox binar ( ikilik ), nizamlanmış və balanslaşmış
ağaclardan istifadə edilir.
Biz də burada C dilindən istifadə edərək ikili axtarış ağacının
yaradılması, onun üzərində axtarış, əlavə etmə və silmə
əməliyyatlarının yerinə yetirilməsi məsələlərinə nəzər yetirəcəyik.

Binar ( ikilik ) ağac

Bu ağaclarda hər bir təpədən çıxan budaqların sayı ikidən çox


ola bilməz. Formal şəkildə ikilik ağacı belə ifadə edirlər. ( T1, R, T2 ).
Burada R – kök, T1 – sol yarım ağac, T2 – sağ yarım ağacdır.

51
Şəkil 4.5. Binar ağac
Göstərilən ağacvari strukturda açarların axtarışı çox vaxt aparır.
Odur ki, səkildə onlardan praktikada istifadə olunmur. Praktikada əsas
etibarilə nizamlanmış və balanslaşmış ağaclardan istifadə olunur.

Binar ağaclar üzərində sadə əməliyyatlar.


Əgər binar ağacın nd qovşağının göstəricisi p isə, onda info(p)
funksiyası nd qovşağının məzmununu qaytarır. Left(p), right(p), father(p)
və brother(p) funksiyaları müvafiq olaraq nd-nin qardaşının göstəricilərini
qaytarır. Əgər nd sol oğul, sağ oğul, ata və ya qardaş qovşaqlarına malik
deyilsə, onda bu funksiyalar boş göstərici qaytarır. Məntiqi left(p) və
right(p) funksiyaları əgər nd müvafiq olaraq hər hansı qovşağın sol və ya
sağ oğludursa həqiqi(true) qiyməti və əks halda yalan(false) qaytarır.

Binar ağacların təsvir olunması .


Cədvəl tip dəyişənlərin köməyi ilə binar ağacları Paskalda asanca
reallaşdırmaq olar. Bunun üçün binar ağacın hər bir qovşağını aşağıdakı 4
elementin köməyi ilə təsvir edək.
- İNFO – qovşağın məzmunu (qiyməti)
- LEFT – qovşağın sol oğlu varsa-true qiyməti əks halda-false
- RİGHT- qovşağın sağ oğlu varsa-true qiyməti əks halda false
- FATHER- qovşaq ata varsa true qiyməti əks halda false
Onda müvafiq Paskal təsvir operatorları belə yazılacaq:

Nizamlanmış ağaclar

Axtarışı asanlaşdırmaq və sürətləndirmək üçün ağacı


nizamlayırlar. Nizamlanma hər bir səviyyədə açarların qiymətinin
soldan – sağa azalma va artma ardıcıllığı ilə yerləşdirilməsi ilə əldə
edilir.

52
Şəkil 4.6. Nizamlanmış ağac

Nizamlanmış ikilik ağacda axtarış.


Axtarılan açar baş təpədəki açarla müqayisə olunur . Əgər cavab
müsbətdirsə, onda yazı tapılır və axtarış bitir. Əgər bərabərlik yoxdursa,
onda açarların kiçik və ya böyük olması yoxlanılır. Əgər axtarılan açar
saxlanan açardan kiçikdirsə, onda sol əks halda sağ göstərici seçilir.
Sonrakı səviyyədə axtarış davam etdirilir. Əgər uyğun göstərici yoxdursa,
(Ø) onda axtarış dayandırılır və axtarılan açarın ağacda olmaması haqqında
məlumat verilir. [5]

Şəkil 4.7. Nizamlanmış ağacin fiziki strukturu


Ağaca yeni yazının, yəni yazıya uyğun açarın daxil edilməsi uçun əvvəlcə
onun yeri müəyyən edilir, sonra həmin yer ondan əvvəlki uyğun təpə ilə
əlaqələndirilir.
Yazının ağacdan silinməsi ən ağır və xoşa gəlməz əməliyyat hesab olunur.
Belə ki, bir çox halda bu əməliyyatın aparılması üçün ağacı yenidən
qurmaq tələb olunur. Əgər silinən təpə ağacın yarpağıdırsa, bu əməliyyat
53
nisbətən sadə yerinə yetirilir. Bu halda silinən təpəyə keçid verən təpədəki
uyğun göstərici sıfırla (Ø) əvəz olunur.

Balanslaşdırılmış ağac

Balanslaşdırma təpənin hündürlüyü anlayışı ilə əlaqədardır.


Təpənin hündürlüyü belə təyin olunur:
L=k+1
k – baxılan təpəyə qədər budaqların sayıdır.
İstənilən açarın tapılması üçün müqayisə elementlərinin sayı açarın aid
olduğu təpənin hündürlüyü ilə təyin olunur. Ağacın hündürlüyü
maksimum hündürlüyə malik olan yarpağın hündürlüyü ilə təyin
olunur. Ağac o vaxt balanslaşdırılmış hesab olunur ki, yarpaqların
hündürlükləri arasındakı fərq 1 – dən böyük olmasın.

Şəkil 4.8. Balanslaşdırılmış ağac

Ağacın balanslaşdırılmaması onunla işləməyi çətinləşdirir. Bu zaman


axtarıs üçün müqayisələrin sayı çox olur. Odur ki, praktikada əsasən
balanslaşdırılmış ağaclardan istifadə olunur. Bu ağaclara ümumi adla B-
trie deyilir.

54
B ağaclar

Bu ağaclar açarların (indekslərin) təşkili üçün ən səmərəli


vasitə hesab olunurlar. Balalanslaşma belə aparılır: Ağacda saxlanan
açarların təxmini sayı təyin olunur və hər təpədən açarlar elə
bölüşdürülür ki, ondan solda və sağda yerləşdirilmiş alt ağaclardakı
açarların ( təpələrin ) sayı bir – birindən çox fərqlənməsin, təxminən
eyni olsun. Ağaca eyni açarların (təpələrin) daxil edilməsi və lazımsız
açarların silinməsi də binar ağacdakı kimi aparılır. Praktikada ən böyük
həcmli fayllarla işləyərkən açarların (indekslərin) təşkili üçün ən çox B –
ağacdan istifadə olunur. B ağacda axtarış nizamlanmış və binar
ağacdakı kimi aparılır.

Şəkil 4.9. B ağaclar

55
Trie ağaclar

Trie(sınaq). Bu ağaclardan simvol tipli açarların təşkili üçün və


həmçinin maşın lüğətlərinin təşkili üçün istifadə edilir. Burada mövqeli
kodlaşdırma prinsipindən istifadə olunur. Bu o deməkdir ki, ağacin hər
bir təpəsi əlifbadakı hərflərin sayı qədər mövqelərə ayrılır. Hər mövqe bir
hərfə uyğun götürülür. Hərf aşkar şəkildə təpədə yazılmır:

Şəkil 4.10. Trie ağaclar

Burada verilmiş ağacın axtarışı belə aparılır. 1-ci səviyyədə (baş təpədə) 1-
ci hərfə uyğun mövqe təyin olunur. Həmin mövqedəki göstəricisi 2-ci hərfə
uyğun mövqe təyin olunur. Bu proses açarın sonuncu hərfinə qədər davam
edirilir. Ola bilsin ki, axtarışın açarı ağacda olmasın. Bu halda P y yerinə Ø
işarəsi durur.

Ağaclar üzərində aparılan əsas əməliyyatlar

1. Ağacdan yan keçmə.


2. Altağacın ləğv edilməsi.
3. Altağacın araya salınması. 
Ağacdan yan keçməkdən ötrü aşağıdakı 3 prosedurları yerinə
yetirmək lazımdır:
56
1.Ağac kökünün emalı.
2.Sol budağın emalı.
3.Sağ budağın emalı.
Bu prosedurların hansı ardıcıllıqla yerinə yetirilməsindən asılı olaraq,
3 növ ağacdan yan keçmə mümkün olur: 
1.Yuxarıdan aşağıya yan keçmə. Prosedurlar 1-2-3 ardıcıllığında
yerinə yetirilirlər.
2.Soldan sağa yan keçmə. Prosedurlar 2-1-3 ardıcıllığında yerinə
yetirilirlər.
3.Aşağıdan yuxarı yan keçmə. Prosedurlar 2-3-1 ardıcıllığında yerinə
yetirilirlər.
Ağacdan yankeçmə istiqaməti şək.49-da verilmişdir.

Şək.Ağacdan yan keçmə istiqaməti

Şəkildən aşağıdakıları görmək olar:


A-B-C-E-D-F-G  – yuxarıdan aşağı
C-B-D-E-F-A-G – soldan sağa
C-D-F-E-B-G-A – aşağıdan yuxarı
Qovşağa daxil olmağın hansı sayından sonra onun emala məruz
qalmasından asılı olaraq, aşağıdakı 3 yan keçmələrdən biri həyata
keçirilir:
-Əgər emal olunma qovşağa birinci dəfə daxil olduqdan sonra baş
verirsə, onda bu yan keçmə yuxarıdan aşağıyadır,

57
-əgər ikinci dəfədən sonra baş verirsə - onda bu soldan sağadır,
-əgər üçüncü dəfə baş verirsə - onda bu aşağıdan yuxarıdır.
Altağacın ləğv edilmə əməliyyatı
Bu məqsədlə ləğv olunan altağacın birləşəcəyi qovşağı və bu
altağacın kökünü göstərmək lazımdır.
Altağacın aradan götürülməsi ondan ibarət olur ki, ləğv olunan
altağacla olan əlaqə qırılır, yəni, ləğv olunan qovşaq-köklə əlaqəli
olan element göstəricisi “nil” vəziyyətinə quraşdırılır. Həmin
qovşağın çıxış dərəcəsi bir vahid kiçildilir.
Altağacın araya salınma əməliyyatı
Bu halda araya salınan altağacın kökünün göstəricisini və altağacın
asılı olacağı qovşağı bilmək lazımdır.
Bu qovşağın göstəricisini altağac kökünə quraşdırmaq, həmin
qovşağın çıxış dərəcəsini isə bir vahid artırmaq lazımdır.
Bu zaman, ümumi halda, altağacın asıldığı qovşaq oğullarını yenidən
nömrələmək lazım olacaqdır.
Binar axtarış ağacının yaradılması
Fərz edək ki, aşağıdakı açarlara malik olan elementlər verilmişdir:
14, 18, 6, 21, 1, 13, 15.
Bu açarlar üzrə nizamlanmış binar ağacı quraq.
Yaradılma alqoritmi belə olacaqdır:
read (key, rec)
tree = maketree (key, rec)
while not eof do
  p = tree
  q = tree
  read (key, rec)
  v = maketree (key, rec)
  while p <> nil do
    q = p
    if key < k(p) then
        p = left(p)
                 else
        p = right(p)
58
    endif
  endwhile
if key < k(q) then
        left(q) = v
               else
        right(q) = v
  endif
endwhile
return

Yuxarıda verilmiş alqoritmi yerinə yetirdikdən sonra şək.50-də


göstərilən ağac alınacaqdır.

Şək.Binar axtarış ağacının yaradılması

Binar ağaclardan yan keçmənin rekursiv


alqoritmləri
Altağaclardan yan keçmə ardıcıllığından asılı olaraq, ağaclardan yan
keçməyin 3 növü vardır (şək.51):
1. Yuxarıdan aşağıya - А, В, С.
2. Soldan sağa və ya simmetrik keçmə - В, А, С.
3. Aşağıdan yuxarı - В, С, А.

59
Şək.Ağaclardan yan keçməyin növləri

Ən çox istifadə olunan ikinci üsuldur.


Alqoritmlər:
 “yuxarıdan aşağı”  
subroutine pretrave (tree)
 if tree <> nil then
  print info(tree)
  pretrave(left(tree))
  pretrave(right(tree))
endif
return
 
 “simmetrik və ya soldan-sağa”
 subroutine intrave (tree)
if tree <> nil then
  intrave(left(tree))
  print info(tree)
  intrave(right(tree))
endif
return
 
Binar ağacdan yan keçmə rekursiyanı intrave (tree) proseduru
misalında daha ətraflı izah edək.
Prosedur alqoritminin sətirlərni nömrəliyək.  
1. if tree <> nil
2. then intrave (left(tree))

60
3. print info (tree)
4. intrave (right (tree))
5.endif
6.return

Göstəriciləri belə işarə edək: t → tree;  l → left;  r → right.


Şək.52-də 3 qovşaqdan ibarət olan ən sadə ağacın qovşaqlarından
yan keçdikcə intrave (tree) prosedurunun çağrılma ardıcıllığı təsvir
olunmuşdur.

Şək.İntrave (tree) prosedurunun çağrılma


ardıcıllığı

Mühazirə 8

61
FAYL STRUKTURLARI

Fayl xarici yaddaşda adlandırılmış hər hansı bir sahədir. Bu faylın


fiziki mövcudluğudur.Digər tərəfdən fayl proqramlaşdırmada istifadə
olunan çoxlu sayda verilənlər strukturundan biridir. Bu halda məntiqi
fayl terminindən istifadə olunur.
Fayl (ingiliscə «file»- iş, tikilmiş kacızlar) termini verilənlərin yüksək
səviyyəli struktur növünü təsvir edir. Hal-hazırda fayl anlayışına iki tip
baxış mövcuddur: klassik baxış və müasir baxış .
Fayla klassik baxış - ilkdəfə onun COBOL proqramlaşdırmadilində qəbul
olunmuş təyinatına əsaslanmışdır. Belə halda müəyyən əlamətlərə görə bir
yerdə toplanmış yazılar çoxlucuna fayl kimi baxılır. Proqramlaşdırmada
daha çox, verilənlər bazasında isə həmişə, faylın klassik təyinatından
istifadə olunur.
Fərdi kompüterlər meydana gələndən sonra fayla müasir baxış yaranmışdır
və xarici yaddaş qurğularında (maqnit və kompaktdisk, fləş yaddaşda və s.)
saxlanan verilənlər mənasında işlədilir. Informasiyanın xarakteri faylın
atributları (məsələn, «yalnız oxumaq üçün», «gizli fayl», «sistem faylı» s.)
və tipi (məsələn, verilənlər faylı(dat), mətn faylı(txt), proqram faylı(exe) və
s.) ilə təyin edilir. Bir verilənlər strukturu kimi fayl haqqında məlumat
(faylın adı, ölçüsü, tipi, yarandıcı və ya sondəyişilmə tarixi, 1-ci klasterin
nömrəsi, atributları, məntiqidiskin kataloqunda saxlanır.
Proqramlaşdırmada yazı (inçiliscə «record») verilənlərin strukturunun növü
kimi müxtəlif tipli verilənlər toplusunu ifadə edir. Yazının fiziki və məntiqi
təsvir üsullarına uycun olaraq «fiziki yazı» və «məntiqi yazı» anlayışlarını
ayırırlar.
Fiziki yazı məntiqi yazının kompüterdə əks olunmasıdır, yəni məntiqi
yazıyadaxil olan verilənlərin kompüter yaddaşında saxlanma sxemidir.
Proqramın işi fiziki yazılarla aparır.
Məntiqi yazı müəyyən obyekti (məsələn, məhsulu, tələbəni, işçini,
materialı, avadanlıcı və s.) xarakterizə edən verilənlər toplusudur. Həmin
verilənlər müxtəlif tipli (məsələn, həqiqi və ya tam ədəd, simvol və s.)
eləcə də, müxtəlif ölçülü ola bilər. Ayrıca hər bir verilən obyektin fərqli
xassəsini ifadə edir, məsələn, işçinin soyadı, adı, iş yeri,doculducu tarix və
s. Yazı anlayışında adətən məntiqi yazı nəzərdə tutur.

62
Mövcud proqramlaşdırmadillərinin hamısında fayllarla işləmək üçün
lazımlı elementlər nəzərə alınmışdır. Proqramlaşdırmadilində faylın yalnız
bir təsvirindən istifadə olunur. O, faylın həm fiziki , həmdə məntiqi
səviyyədə təsvirini əvəz edir. Verilənlərin istifadəçi səviyyəsində yəni
xarici təsviri, lazımi yazıların seçilməsi və verilənlərin həmin yazılardan
götürülməsi üçündilin uycun operatorları vasitəsilə aparılır.
Ayrı fayllarla işləyərkən istər-istəməz aşacıdakı çatışmazlıqlarla rastlaşmaq
olar:
-bir çox ümumi əlamətlərə malik olan oxşar obyektləri xarakterizə edən
müxtəlif təyinatlı fayllarda verilənlərin dəfələrlə təkrarlanması baş verir və
bunun qarşısını almaq mümkündeyil. Faylın həcmi (yazıların sayı) böyük
olduqda təkrarlanan verilənlərin sayı artır, bu isə öz növbəsində yaddaş
sərfini artırır;
-faylın hər üç səviyyədə (xarici, məntiqi və fiziki) təsviri proqramda
aparıldıgından, həm məntiqi səviyyədə faylda aparılandəyişikliklər, həmdə
fiziki səviyyədə aparılandəyişikliklər proqramda uycundəyişikliklər
edilməsinə səbəb olur. Yəni verilənlərlə proqram arasında asılılıq yaranır:
1-ci halda-məntiqi asılılıq, 2-ci halda-fiziki asılılıq;
- verilənlər mərkəzləşdirilməmiş şəkildə, yəni hər bir fayl ayrıca idarə
olunur. Faylla işləmək üçün ən azı 3 proqram olmalıdır: 1) faylı yaradan və
ona yeni yazı əlavə edən proqram; 2) fayldadəyişikliklər edən proqram; 3)
lazımi yazıları tapıb emal edən proqram. Əslində bu proqramlar kiçik
həcmli olur və əsas proqramın tərkib hissələri (prosedurlar) kimi tərtib
olunurlar. Həmin proqramların sayı əsas proqramda faylların sayına
mütənasib olaraq artır;
-verilənlərdə ziddiyyətliliyin mümkünlüyü. Verilənlərin təkrarlanmasına
yol verildiyindən, müxtəlif fayllarda eyni verilənlər arasında uycunsuzluq
yarana bilər. Bu, o vaxt baş verir ki, müəyyən faylda
verilənlərdəyişdirilir,digər faylda isə hansı səbəbdənsə həmin
verilənlərdəyişdirilmir;
-verilənlərin mühafizəsinin lazımi səviyyədə təmin olunmaması və
verilənlərə icazəsiz müraciətin qarşısının alınmasında çətinliklərin olması;
-verilənlərin tamlıcının qorunmaması. Kompüterdə və sistemdə qəzalar baş
verdikdə və ya proqram xətaları yarandıqda verilənlərin itkisiz bərpa
olunması vacib şərtlərdən biri hesab olunur. Xüsusi tədbirlər görülmədikdə
buna nail olmaq çətin olur.
Maqnit disk yaddaşının (MDY)strukturu:
63
Maqnit disk yaddaşı ünvanlaşdırıla bilən başqa sözlə desək, birbaşa
müraciətli yaddaşdır. Fərdi kompüterlərdə 2 tip MDY-dan istifadə olunur:
1) Floppy disk (dəyişdirilə bilən) və ya disket (FD);
2) Hard(Sərt dik) disk (HD).
Yaddaş qurğusuna isə FDD, HDD deyilir. Burada D=draver.
Maqnit diskdə ünvanlar 3 komponentdən ibarətdir:
1) Tərəfin nömrəsi (TN);
2) Cığırın (silindrin) nömrəsi (SN);
3) Sektorun nömrəsi (SeN)
Məntiqi disk disket, ya da HD-nin bir bölməsidir. Disketin adı A və ya B
ilə işarələnib. HD C,D,E,F kimi qəbul olunur.

Faylın əsas xarakteristikaları


Fayllarda işləyərkən aşağıdakı suallara cavab vermək tələb olunur
1. Faylın identifikasiyası ( təyini).
2. Yazıların bloklaşdırılması və tipləri .
3. Fayla müraciət üsulu.
4. Faylın təşkil üsulu.
Faylların identifikasiyası.
Faylların identifikasiyası dedikdə aşağıdakılar nərəzdə tutur :
1.Faylın adı - faylın tam adı - xüsusi addan (istifadəçinin verdiyi addan)
və faylın tipindən ibarət olur. DOS əməliyyat sistemində yalnız faylın
adı üçün 11 simvolluq yer ayrılır. Onun 8 – i xüsusi ada, qalan 3-ü
faylın genişlənməsi üçün ayrılır. Tipə başqa sözlə faylın genişlənməsi də
deyilir.
Faylın tipi. Faylın tipi onun daxilindəki verilənlərin tipi ilə təyin
olunur. Əməliyyat sistemində faylın adının göstərilməsi olduqca vacib
hesab olunur. Elə fayl tipləri mövcuddur ki, onlar dəyişilməzdirlər.
txt-mətn faylı;
exe-istifadəçinin proqramı;
pas-Pascal dilində yazılmış ilkin proqram;
com-işçi sistem proqramı;
bat-tərcümə olunmuş, lakin redaktə olunmamış proqram;
dat-verilənlər faylı
lpt-çap faylı;

2.Faylın ölçüsü – informasiya vahidi ilə byte-larla göstərilir.


64
3.Faylın sonuncu versiyasının formalaşdırıldığı tarix – saniyəyə qədər
dəqiqliklə göstərilir.
4.Faylın atributları – aşağıda göstərilən atributlar mövcuddur:
- Sistem həmin fayl əməliyyat sisteminin proqramı olduğunu faylı
göstərir.
- Gizli fayl həmin fayl haqqında informasiya almaq mümkün
olmadığını göstərir.
- Arxiv.
- Yalnız oxumaq üçün.
- Faylın birinci klasterinin nömrəsi.
Yazı tipi. Yazının üç tipi mövcuddur :
- F- (fixed), sabit uzunluqlu yazı. VBİS və ƏS – də ancaq bu tip
yazılar dəstəklənir.
- U –( undefined), qeyri - müəyyən uzunluqlu yazı tipi.
- V- (variable), dəyişən uzunluqlu yazılar.
Bloklaşdırma.
Məlum olduğu kimi faylların emalı əməli yaddaşda həyata keçirilir. Odur
ki, xarici yaddaşda saxlanan fayl da emal etmək üçün əməli yaddaşa
yüklənməlidir.
Fayla yazılar toplusu kimi baxılarsa əməli yaddaşla xarici yaddaş
arasında informasiya mübadiləsi fiziki yazılarla aparılacaq. Maqnit
diskə müraciət sayını azaltmaq üçün fiziki yazının ölçüsünü artırmaq
məqsədəuyğundur. Bunun üçün bir neçə məntiqi yazını blok şəklində
birləşdirmək lazımdır. Termin olaraq bloklaşdırma adlanır. Yalnız müasir
əməliyyat sistemlərində bloklaşdırma dəstəklənir.

Faylların təşkil üsulu

Aşağıdakı təşkil üsulları mövcuddur :


- ixtiyari ;
- ardıcıl ;
- indeksli.

İxtiyari üsulu. Yalnız ünvanlaşdırıla bilən yaddaşda mümkündür. Ona görə


ki, orada verilənlər daşıyıcının istənilən ünvanla təyin olunan yerində
65
yerləşdirilə bilər . Proqramçı ünvanlarla deyil, açarlar vastəsiylə işləyir.
Bundan ötrü, əvvəlcə yazının açarı ünvana çevrilir, daha sonra isə yazı
həmin ünvana yerləşdirilir. Burada əsas məsələ açarın ünvana
çevrilməsidir. Ixtiyari üsulla təşkil olunmuş fayl ixtiyari fayl adlanır.
Ixtiyari fayla müraciət yalnız açarla mümkündür. Yəni bu tip fayla açarsız
müraciət mümkün deyil. Üsulun çatışmayan cəhəti də elə bundan ibarətdir.
Ardıcıl təşkil üsulu. Daşıyıcıda faylın yazıları bir–birinin ardınca
yerləşdirilir.

Y1 Y2 Y3 ..........

Şəkil 5.1. Faylın yazılarının daşıyıcıda yerləşdirilməsi

Bu ən sadə üsuldur və asan reallaşdırılır. Hər dəfə fayla müraciət edərkən


ardıcıl müraciət zamanı yazılara ardıcıl olaraq baxılır. Çatışmazlığı ondan
ibarətdir ki, bu cür təşkil olunan fayla yalnız ardıcıl müraciət mümkündür.
Bu zaman, sonda yazılan yazını tapmaqçün çoxlu sayda müraciət etmək
lazımdır. Buna baxmayaraq praktikada elə məsələlər var ki, faylın
yazılarının hamısına onların yerləşmə ardıcıllığı ilə bir-bir baxmaq lazım
olan fayıllala işləyərkən ardıcıl təşkil üsulundan geniş istifadə olunur.
İndeksli təşkil üsulu. Mahiyyətcə ixtiyari üsula oxşayır. Bu üsul iki
növdə mövcuddur:
1.Tam indeksləşmiş – burada faylın yazılarının hamısı indeks cədvəli
vasitəsilə əhatə olunur.
2.Natamam indeksləşmiş –üsulun mahiyyəti aşağıdakı kimidir. Açarların
qiymətləri daşıyıcıda artma ardıcıllığı ilə nizamla yerləşdirilir.Yazılara
əsasən açarların ünvanları üç səviyyəli indekslər vasitəsilə təşkil edilir.
- Trek səviyyəsi:
Açar Trekin nömrəsi

- Tərəf səviyyəsi:

Açar Tərəfin nömrəsi

- Sektorun indeksi:

Açar Sektorun nömrəsi


66
Şəkil 5.2. Açarların ünvanları

Ardıcıl və birbaşa müraciətin təşkili. Randomlaşdırma üsulları.

Fayla müraciət üsulları. Fayla iki müracət üsulü mövcuddur:


1. Ardıcıl
2. Birbaşa
1.Ardıcıl. Bu üsulda faylın yazılarına birincidən sonuncuya tərəf ardıcıl
olaraq müraciət edilir. Yəni n-ci elementə müraciət etməzdən öncə n – 1
-ci elementinə müraciət etmək lazımdır.
2.Birbaşa. Birbaşa müraciət isə yalnız ünvanlaşdırılan yaddaş üçün
mümükündür.Yazıya birbaşa müraciət etməkdən ötrü üçün onun ünvanı
tələb olunur. Əksər halarda ünvan bəlli olmur. İstifadəçi bu səbəbdən də
açarlardan istifadə edir. Bildiyimiz kimi açar bir və ya bir neçə
birləşdirilmiş verilənlərdən ibarətdi və yazını bir mənalı təyin edir.
Açarın ünvana çevrilməsi zərurəti yazı bəlli olmadıqda yaranır. Bir
neçə üsula baxaq.

Açarın ünvana çevrilməsi üsulları :

1) Açarın özündən dolayı yolla ünvan kimi istifadə olunur


(hesablanan ünvan)-bu üsuldan yalnız rəqəm tipli açarlar üçün istifadə edilə
bilər. Falın ilk yazısının ünvanı həmişə bəlli olur. Bunu translyator
vasitəsiylə təyin edilir. Biz burada yalnız eyni ölçülü (F tipli) yazılara
baxırıq.

Şəkil 5.3. F tipli yazı

67
Bu halda yazı ünvanları aşağıdakı düsturla hesablanır:
Ak = Ab +(k+1)*l
Bu üsuldan ardicil təşkil üsulu ilə yaradılmış yazılar daşıyıcıda
yerləşdirildiyi halda istifadə olunur.
1) İndeks üsulu- İndeks cədvəlindən açarın ünvana çevrilməsi üçün
istifadə olunur. İndeks 2 sütundan ibarət olan cədvəldir. İlk sütunda açar,
növbəti sütunda ünvan yerləşdirilir.

Axtarış üçün verilmiş açar indeks faylından tapılır sonra isə uyğun
ünvana əsasən yazı seçilir. Sadə halda cədvəldə axtarış ardıcıl aparılır.
Bu üsullardan əlavə rondonlaşdırma adı ilə məlum olan bir neçə üsul
da mövcuddur.

Randomlaşdırma üsulları.
Randomlaşdırma üsulları nəticəsində açar hər hansı təsadüfi bir ədədə
çevrilir və bu ədəddən ünvan kimi istifadə olunur.
Randomlaşdırmanın aşağıdakı üsulları mövcuddur:
1) Say sisteminin əsasının dəyişdirilməsi;
2) Qalıqla bölmə-verilmiş açarın bütün açarların ümumi sayına yaxın
olan sadə ədədə nisbəti tapılır. Əməldən alınan qalıq ədədi açarlar üçün
ünvan kimi istifadə edilir;
Bükmə (sıxlaşdırma-hərf tipli açarlarda da istifadə ounur)-verilmiş açar bir
neçə hissəyə bölünür. Bu hissələrin rəqəm kodları üzərində əməliyyat
aparılır. Nəticədən ünvan kimi istifadə edilir.Nümunəyə baxaq-
Fərz edək ki, verilmiş açar simvol tiplidir:

Abbasov_Abbas_Abbas_oğlu_ _ _ _

68
3) Açarda təkrarlanan hərflər və ya rəqəmlər silinir.

Təkrarlanan simvollar silindikdən sonra qalan hissə açar kimi istifadə


olunur. Randomlaşdırma üsullarının çatışmayan cəhəti ondan ibarətdir ki,
bir neçə müxtəlif açara bu üsullardan biri tətbiq olunduqda eyni ünvana
çevrilir. Bu halda açarlara sinonimlik açarlar deyilir. Aydındır ki, düzgün
nətiə almaq üçün sinonimliyi ləğv etmək lazımdır. Odur ki, bu üsullar
tətbiq edilməzdən öncə müqayisə aparılır. Hansı üsulda az sinonimlik aşkar
edilirsə, o üsuldan istifadə edilir. Praktikada, adətən eyni zamanda 2 və
daha çox üsul tətbiq edilir.

69
Muhazirə 9
Verilənlər bazası
Verilənlər bazası və modellər

Fayldan sonra yaradılan və onun çatışmayan cəhətlərinin aradan


qaldırılmasına xidmət edən ən yüksək səviyyəli struktur verilənlər
bazasdır.
Faylların aşağıdakı çatışmamazlıqları vardır:
- verilənlərin dəfələrlə təkrarlanması ;
- verilənlərlə onları emal edən tətbiqi proqramlar arasında
asılılıq ;
- faylların mərkəzləşdirilməmiş idarə edilməsi. Bu idarə
olunmaya qoyulan xərcləri artırır və nəticədə məsələnin həlli və ya
sistemin yaradılması baha başa gəlir.
- Informasiya təhlükəsizliyinin lazimi səviyyədə olmaması ;
- Fayllarla işləyərkən qurulan sistem daha baha olur.
VB konsepsiyası (60 – cı illərin sonunda) bütün bu göstərilən
çatışmamazlıqları aradan qaldırmaq üçün təşkil olundu. Yuxarıda qeyd
edilən çatışmamazlıqları aradan qaldırılması mümkün oldu. Bu cür
sistemlərin tətbiqi 50 faizə kimi qənaətə səbəb oldu.
Verilənlər bazası nədir ?
VB özü də fayıllar toplusudur lakin əvvəlki topludan fərqi əlaqələndirilmiş
olmasıdır. Qısaca desək, VB bir – biri ilə əlaqələndirilmiş
mərkəzləşdirilmiş idarə olunan fayllar toplusudur. Bazaya daxil olan
faylların təşkili, dəyişiklik aparılması, əlavə edilməsi, lazimi verilənlərin
tapılması, silinməsi, informasiyanın qurulması xüsusi proqram - dil
kompleksi vasitəsilə reallaşdırılır. Həmin proqram kompleksinə VBİS-
verilənlər bazasının idarəetmə sistemi deyilir.
VB – də isə verilənlərin strukturu anlayışı əvəzinə verilənlərin modeli
sözündən istifadə edilir. Verilənlərin aşağıdakı modelləri mövcuddur :
- İyerarxik;
- Relyasiya;
- Postrelyasiya;
- Şəbəkə;
- Çoxölçülü.
- Obyektyönlü;
Verilənlərin modelləri.
70
VB-də verilənlər müəyyən məntiqi strukturla saxlanılır.
Verilənlərin modeli anlayışı onların necə və hansı qaydalarla
strukturlaşdığını təyin edir. Lakin belə struktkur xassələri verilənlərin
istifadə üsullarını və onların semantikasını tam açmaca imkan vermir.
Bundan ötrü verilənlər üzərində aparılacaqa əməliyyatlar əvvəlcədən
müəyyən olunmalıdır və həmin əməliyyatlar verilənlərin strukturlarına
uycun seçilməlidir.
Verilənlərin modelləri yüksəkdərəcədə tipikləşdirilmiş modellər sinfinə
aiddir. Yəni ki, hər bir verilən bu və yadigər kateqoriyaya aid ediləcək.
Əgər bütün verilənləri kateqorizasiyaya uğratmaq mümkündeyilsə, veriləni
süni yolla müəyyən kateqoriyaya gətirib çıxarmaq lazım gəlir.
Kateqoriyalar əvvəlcədən müəyyənləşdirilir, məsələn, «atribut», «əlaqə» ,
«mahiyyət» kateqoriyaları. Kateqoriyalar və kateqoriyalar arasındakı
əlaqələr bir yerdə sxem adlanır.
İstifadəçilərin tələblərindən və tətbiq sahəsinin xüsusiyyətlərindən asılı
olaraq verilənlərin modelləri müxtəlif olur. Buna baxmayaraq, bütün
modellərə ümumi təyinetmələr və anlayışlar aid etmək olar. Hər bir model
aid olduğu real obyektlərin statik vədinamik xassələrini tam əks
etdirməlidir. Vaxta görə invariant(dəyişməz) olan xassələr statik xassələrə
aiddir. Onlar seçilmiş müəyyən zaman intervalında və ya həmişədocru
vədəyişməz olur. Statik xassələr verilənlərin təsviridili ilə əlaqələndirilir və
verilənlər modelinin yaranma qaydalarını ifadə edir. Burada başlıca məqsəd
verilənlərin mümkün strukturlarını təsvir və onlar arasındakı əlaqələri təyin
etməkdir. Verilənlərin yaranma qaydalarına cavab verən uycun
kateqoriyaların müəyyənləşdirilməsi ilə onların strukturunun təyini
aparılır. Atributlar və onların mümkün qiymətləri vasitəsilə isə
kateqoriyaların müəyyənləşdirilməsi aparılır. Bu zaman«tamlıcın
məhdudlucu» hər bir kateqoriya üçün nəzərə alınmalıdır. Məsələn, işçinin
əmək haqqı məbləği 5 rəqəmli ədəddən böyük olmamalıdır və ya tabel
nömrəsi unikal olmalıdır. Modeldə aşkar məhdudluqlarla yanaşı onun
struktur spesifikasiyalarına aid olandaxili məhdudluqlarıda göstərilə bilər.
Məsələn, acacvari strukturla obyektlər arasındakı əlaqələr məhdudlaşa
bilər.
Obyektlərə təsir edən əməliyyatlar nəticəsində hazırkı vəziyyətlərinin
dəyişilmələrini isə dinamik xassələr əks etdirirlər.
Verilənlər üzərində aparılan əməliyyatlar çoxlucu verilənlər
modelinindinamiki xassələrini ifadə edir və verilənlərlə əməliyyatdili ilə
71
əlaqələndirilir. Verilənlər bazasının VB i vəziyyətindən VBj vəziyyətinə
çevrilməsi üçün aparılan əməliyyatlar əməliyyatlar çoxlucununa daxildir.
Bu çoxlucun istənilən bir əməliyyatı VB-nin vəziyyətini bir haldandigərinə
çevirə bilər.Buna baxmayaraq, VB-nin məntiqi strukturudəyişməz olaraq
qalır. Bu odeməkdir ki, istənilən haldadaxili məhdudluqların pozulmasına
icazə verilmir.
Əvvəl də qeyd etdiyimiz kimi, verilənlər bazasının idarəetmə sistemi
(VBIS) vasitəsilə verilənlər bazasının idarə olunması prosesi həyata
keçirilir. VBIS verilənlər üzərində əməliyyatların aparılması və onların
təsviri üçün uycun vasitələrə malik olmalıdır və qəbul olunmuşdilləri
(hazırda bütün bu funksiyaları SQLdili yerinə yetirir)dəstəkləməlidir. Yəni
ki, VBIS ilə verilənlərin modelinin reallaşdırılması təmin olunmalıdır.
VBIS model-yönlü olur-yəni verilənlərin konkret tip modelinə yönəldilir.
Klassik və onların əsasında yaradılmış yeni modellərdən verilənlərin
struktur modelləşdirilməsi üçün istifadə olunur. Klassik modellər:
relyasiya, şəbəkə və iyerarxik modelləri. Son illərdə yaradılan və
praktikada aktiv tətbiq olunan yeni modellər: obyektyönlü, çoxölçülü və
postrelyasiya modellər.
Göstərilən modellərin genişləndirilməsindən yaradılandigər modellər :
obyekt-relyasiya, konseptual-yönlü, semantik,deduktiv obyekt-yönlü
modelləri misal göstərmək olar. Bu modellərdən bəziləri verilənlər
bazalarını, biliklər bazalarını və proqramlaşdırmadillərini inteqrasiya etmək
məqsədilə tətbiq olunur.
Bəzi VBIS-lərdə eyni zamanda verilənlərin bir neçə
modelidəstəklənir.INTERBASE sistemində tətbiqi proqramlar verilənlərlə
əməliyyatlar üçün şəbəkədilindən istifadə edir, istifadəçi interfeysi isə QBE
və SQLdillərində reallaşdırılır.

Iyerarxik model

VB –də ilk yaradılan və tətbiq edilən modeldir. Bu klassik


modelin bir növüdür. İyerarxik model – ağacvari strukturludur. Bu
strukturun müsbət cəhəti axtarışın sürətli aparılması, mənfi cəhəti isə
strukturdan verilənlərin silinməsinin çətin olmasıdır.
Iyerarxik model verilənlərin nizamlı qraf (və ya acac) şəklində təsvirinə
əsaslanır. Qrafladiaqramındadüyünlər (təpələr) mahiyyətlərin tipini,
72
budaqlar isə mahiyyətlər arasındakı əlaqələri əks etdirir. Iyerarxik modelin
məhdudluqları bunlardır:
- əlaqələr acacvari struktura malikdirlər
- əlaqələrin bütün tipləri funksional xarakterlidir (1:1,1:M, M:1);
Verilənlər arasında VB-də 1 : 1 ( birin –birə ), 1 : M ( birin – çoxa ), M :
1 ( çoxun – birə ), M : N ( çoxun - çoxa ) əlaqələri yaradılmalıdır.
İyerarxik modeldə isə yalnız 1 : 1 və 1 : M əlaqələri mövcuddur.Bu
modelin digər çatışmamazlığı M : N əlaqəsinin mövcud olmamasıdır.Elə
bu çatışmamazlığa görə iyerarxik modeldən demək olar ki, heç
istifadə edilmir.Vaxtilə bu model əsasında IMS adlı sistem
qurulmuşdur.
Verilənlər bazasının əlaqələr sxemini əks etdirən qraf-diaqram təyinat
acacı adlanır. Əgər verilənlər ilkin olaraq acacvari struktura malikdirsə,
iyerarxik modelin tətbiqində heç bir problem yaşanmır. Lakin acacvari
strukturdan fərqli olan strukturların təsviri üçün modelə əlavə köməkçi
vasitələrdaxil edilməlidir. Iyerarxik modeldə strukturdəyişikliklərinin
edilməsi, ələlxüsus altacacların acaca əlavə edilməsi və ya acacdan
kənarlaşdırılması böyuk çətinliklərlə əlaqədardır.
Iyerarxik modelin proqramlaşdırmadilində təsviri üçün «acac» («tree») adlı
verilənlər tipindən istifadə olunur. «Acac» tipi PASCALdilində «yazı»
(«record») tiplərinə, C və PL/1dillərində isə «struktur»a, oxşardır. Burada
tiplərin bir-birinədaxil olması, yəni iç-içə tiplər mövcuddur.
«Acac» tipi tərkiblidir. O, altacaclardan («alttiplərdən») ibarət ola bilər, hər
bir altacac isə öz növbəsində «acac» tiplidir. Hər bir «acac» tipi bir ədəd
əsas tipdən və nizamlıdəstdə tabeli tiplərdən (onların içində boş tipdə ola
bilər) ibarətdir. «Acac» tipinədaxil olan hər bir tip sadə və ya tərkibli
«yazı» tipi ola bilər. Sadə «yazı» bir tipdən (məs., tam), tərkibli «yazı» bir
neçə tipin (məs., tam və simvol) birləşməsindən ibarət olur.
Tabeli tiplərə malik olan və özü alttip olmayan tipə baş tipdeyilir. Tabeli
tip valideyn tipinin törəməsi hesab olunur. Eyni tipin törəmələri bir-birinə
münasibətdə əkizlər hesab olunur.
Ümumiyyətlə, «acac» tipi «yazı» tipinin iyerarxik təşkil olunmuşdəstindən
ibarətdir. Iyerarxik VB-nin yazılarına baxış yuxarıdan kökdən aşacıya
aparılır.
VBİS «Acac» tipinin təyinatına uycun olaraq valideyn və törəmələr
arasında əlaqələrin tamlıcına avtomatik nəzarəti təmin edir.

73
Belə modelli VBIS-lərin sayı çoxdeyil. Onlara misal olaraq PC/Focus,
Team-Up,data Edge, IMS və
onun əsasında yaradılmış OKA sistemlərini göstərmək olar.

Şəbəkə modeli

Verilənlər ixtiyari qraf şəklində təsvir şəbəkə modelində realizə


olunur. Şəbəkə modelində iyerarxik modeldən fərqli olaraq 1:1, 1:M, M:1
əlaqələriylə yanaşı M:N tipli(çoxun-çoxa) əlaqələrində qurmaq
mümkündür.
M:N tipli əlaqənin reallaşdırılması onun k(1 k M) sayda 1:N əlaqəsinə
çevrilməsi ilə əldə edilir. Bu isə həm məntiqi, həmdə fiziki səviyyədə
çətinlik və mürəkkəblik yaradır. Bununla əlaqədar olaraq şəbəkə modelli
VBIS-in mürəkkəb olur və çox baha başa gəlir. Modelin çatışmamazlığı
bundan ibarətdir.
CODASYL komitəsinin verilənlər bazaları üzrə işçi qrupunun (DBTG)
verdiyi tövsiyyələri və təlimatları şəbəkə modellərinin və onlara uycun
VBIS-lərin yaradılmasında və inkişafında verilənlərin emalı sistemləri
üçündil vasitələrinin yaradılmasında böyük rolu olmuşdur. CODASYL
modeli müxtəlif məsələlərin həlli üçün tətbiq edilən fayl sistemlərinin və
onların sonrakı inkişafı nəticəsində yaranan ilk şəbəkə sistemlərinin təsiri
altında yaradılmışdır. Şəbəkə modelli VBIS-lərə misal olaraq TOTAL,
MARK-I, MARK-II, SETOP, 9 PAC, ADABAS, CET, IDMS sistemlərini
göstərmək olar.

Relyasiya modeli

İngiliscə tərcümədə mənası nisbət ( relation ) deməkdir. Bu


modeli məhşur ingilis riyaziyyatçısı Eduart Kodd təklif etmişdir.
Modelin riyazi əsası riyaziyyatdakı məlum nisbətlər cəbrindən
götürülmüşdür.
Nisbət (ingiliscə-relation)-kortej adlanmış elementlər çoxlucundan
ibarətdir. Nisbətin əyani təsviri forması bizim üçün adi olan ikiölçülü
cədvəldir. Bildiyimiz kimi, cədvəl sütunlardan və sətirlərdən ibarət
formadır. Cədvəlin hər bir sətri eyni struktura, tipə malik olan sahələrdən
74
ibarətdir. Nisbət baxımından cədvəlin sütununadomen, sətrinə isə
kortejdeyilir. Adlandırılmışdomenlər isə atribut adlanır.
Fayl strukturu ilə müqayisədə isə cədvəl-fayla, cədvəlin sütunu -elementar
yazıya, sətri isə verilənə uycun gəlir.
Nisbətlər cəbri adlanan riyazi aparatın verilənlər bazasına tətbiqi
nəticəsində relyasiya modeli yaranmışdır. Həmin riyazi aparat relyasiya
modelinin xassələrini aydın və yıccam formada təyin etməyə imkan verir.
Bundan əlavə, relyasiya modeli nisbətlər arasında istənilən tip əlaqənin
(1:1, 1:M, M:N) reallaşdırılmasına və nisbətlər üzərində müxtəlif
əməliyyatların (çıxma,dekart hasili, bölmə, seçmə, birləşmə, proyeksiya,
kəsişmə və s.) aparılmasına imkan yaradır. Bu cəhətlərə əsasən 70-ci illərin
sonlarından başlayaraq yaradılan verilənlər bazalarının əksəriyyətində
relyasiya modelindən istifadə olunur.
Nisbətlər cəbrində nisbət dedikdə aşağıdakı ifadə nəzərdə tutulur.
R ( A1, A2, ... An )
R – nibətin adı , A1, A2, ... An - nisbətin n-ci atributlarıdır.
Relyasiya modelində nisbətə çoxluq kimi baxılır və həmin çoxluqlar
üzərində aşağıdakı əməliyyatlar aparılır:
- vurma ( dekart hasil ) ;
- toplama ( birləşdirmə ) ;
- çıxma ;
- bölmə;
- kəsişmə ;
Bunlardan əlavə nisbətlər üzərində iki xüsusi əməliyyat yerinə
yetirilir:
- proyeksiya ;
- seçmə ;
Mövcud bütün VBİS – lərdə göstərilən əməliyyatlar nəzərə alınır. Bu isə
mürəkkəb sorğulara cavab vermək üçün vacib məsələdir.
Tələbə ( N, Soyad, Ad, Atası, ... )
Belə yazılışa nisbətin sxemi deyilir. Doldurulmuş cədvələ nisbətin
genişlənməsi deyilir. Cədvəlin sətirləri kortej , sütunlari domen adlanır.
Sütunun adı isə atribut adlanır.

N Soyad Ad Atasının adı Doğulduğu il


1 Əhmədov Vəli Nəbi 1990
2 Quliyev Qulu Əhməd 1994
75
3 Nəsibov Əli Nazim 1996
4 Əliyev İsa Xəzri 1992
Şəkil 6.1. Tələbə cədvəli

Relyasiya modelinin ümumi əsasları


Verilənlərin relasiya modeli müəyyən problem
sahəsinin vaxta görə dəyişən nisbətlər toplusu deməkdir.
Informasiya sisteminin yaradılması zamanı nisbətlər
toplusu problem sahəsinin obyektləri haqqında verilənləri
saxlamağa və onlar arasında əlaqələri modelləşdirməyə
imkan verir. Relasiya modelinin elementləri və onların
məzmunu cədvəl 3.1.-də verilmişdir.
Cədvəl 3.1.
Relasiya modelinin elementləri
Relasiya Məzmunu
modelinin
Elementləri
Nisbət Cədvəl
Nisbətin sxemi Cədvəlin sütunlarının adlarından
ibarət sətir
Kortej Cədvəlin sətri
Mahiyyət Obyektin sinonimii. Cədvəldəki
verilənlər həmin obyektin
76
xassələrini əks etdirir.
Atribut Cədvəlin sütunun adı
Domen Atributun mümkün qiymətlər
çoxluğu
Atributun Yazı sahəsinin qiyməti
qiyməti
Birinci açar Bir və ya bir-birilə birləşdirilmiş
bir neçə atribut
Verilənin tipi Domendəki elementlərin tipii

Nisbət- relasiya modelinin vacib anlayışı olub,


verilənləri saxlayan ikiölçülü cədvəldir.
Mahiyyət-xassələri haqqında verilənləri nisbətdə
saxlanan obyektdir.
Atribut –mahiyyəti xarakterizə edən xassədir.
Cədvəlin strukturunda hər bir atiributa ad verilir və həmin
ad cədvəlin sütununun başlığı olur.
Domen – nisbətin hər hansı atributunun mümkün
qiymətlər çoxluğudur.
Riyazi baxımdan nisbət D1,D2,…,Dn domenlərinin
D=D1xD2x…xDn

77
dekart hasilinin hər biri n sayda elementdən ibarət olan
d=(d1,d2,…,dn), di∈Di,i-1,2,…n
nizamlanmış kortejlər çoxluğudur. Dekart hasili ilkin
çoxluqların (domenlərin) elementlərinin mümkün olan
bütün kombinasiyalarını almağa imkan verir.
D1,D2,…Dn çoxluğunda təyin edilmiş Rn nisbəti
D=D1xD2x…xDn dekart hasilinin altçoxluğudur:
Rn⊆ D
n ədədi nisbətin dərəcəsini və ya arlığını təyin edir. n=1
olduqda nisbət unar, n=2 olduqda-binar, n=3 olduqda-
ternar adlanır. Rn nisbətini təşkil edən müxtəlif kortejlərin
d=(d1,d2,…,dn) sayına həmin nisbətin kardinal ədədi
deyilir. Nisbətdə eyni kortejlər ola bilməz.
Misal 1.
D1=A, B, D2=C, D, D3=E, F domenlərinin
dekart hasilinin:
D=D1xD2xD3=(A,C,E), (A,C,F), (A,D,E), (A,D,F),
(B,C,E), (B,C,F),
(B,D,E), (B,D,F)

78
R1=(A, C,E), (A,C,F)
R2=(A, D,E)
R3=(B, C,E), (B,C,F), (B,D,E, (B,D,F)
R4=⌀
altçoxluqları nisbətlərdir.
Ümumi halda kortejlərin nisbətdə yerləşmə
ardıcıllığının əhəmiyyəti yoxdur. Lakin emal edilmənin
rahatlığı üçün kortejlər müəyyən atributun qiymətlərinə
görə nizamlanır. Həmin atributun qiymətlərinin artma və
ya azalma ardıcıllıçına görə relasiya modelli VBIS
kortejləri nizamlayır. Əgər istifadəçi nizamlanma
atributunu təyin etmirsə, sistem avtomatik olaraq
kortejlərə, onların xronoloji (VB-yə daxil edilmə)
ardıcıllığına uyğun nömrələr qoyur.
Şəkil 3.10- da IŞÇI nisbətinin təsviri verilmişdir.
Formal olaraq nisbətdə atributların yerlərinin
dəyişdirilməsi yeni nisbətə gətirib çıxarmalıdır. Lakin
relasiya verilənlər bazasında atributların yerlərinin
dəyişdirilməsi yeni nisbət yaratmır.

79
Nisbətin adı (R) və onun atributlarının siyahısı (A1,
A2, . . ., An,) birlikdə nisbətin sxemi adlanır:
R(A1, A2, . . ., An)

Nисbят aтrиbут (сaщя) ИШЪИ


SN Adı Atasının adı Soyadı Doğum Şöbə
(cядvяl)
tarixi

1 Abbas Abbas oğlu Abbaslı 1950 001

2 Əli Əvəz oğlu Əliyev 1960 002

3 Fuad Pənah oğlu Abbaslı 1967 003

4 Vəli Əli oğlu Həsənli 1965 001

Şəkil 3.10. Işçi nisbətinin (cədvəlinin) təsviri

Nisbətin sxemi nisbətə uyğun cədvəlin intensionalı


(qısalması), nisbətin (cədvəlin) özü isə onun ekstensionalı
(genişlənməsi) hesab olunur. Relasiya modelli verilənlər
bazasının intensionalı bir və ya bir neçə nisbət sxemindən
80
ibarət olan relasiya sxemi ilə əks olunur. Verilənlər
bazasının relasiya sxemi ümumi halda belə göstərilə bilər:
R1(A11, A12, . . ., A1k1,),
R2(A21, A22, . . ., A2k2),
----------------
Rm(Am1, Am2, . . ., Amkm,)
Nisbətlə fayl terminologiyaları arasında aşağıdakı
uyğunluq mövcuddur: nisbət-fayl, nisbətin sxemi-yazının
tipi, relasiya sxemi-verilənlər bazasının sxemi, kortej-yazı
(yazının nüsxəsi), atribut-sahə, domen-sahənin qiymətlər
çoxluğu.
Aşağıda baxılan misal tibbi verilənlər bazasının
relasiya sxemindən bir fraqmenti əks etdirir.
Misal 2.
XƏSTƏXANA (Kodu, Adı, Ünvanı, Telefonu,
Çarpayıların sayı)
PALATA (Xəstəxananın kodu, Palatanın kodu, Adı,
Çarpayıların sayı)
PERSONAL (Xəstəxananın kodu, Palatanın kodu, Işçinin
kodu, Soyadı, Adı, Vəzifəsi)
81
HƏKIM (Xəstəxananın kodu, Həkimin kodu, Soyadı,
Adı, , Ixtisas,Staj)
XƏSTƏ (Qeydiyyat nömrəsi, Palatanın kodu, Soyadı, Adı,
Təvəllədü, Ünvanı, Diaqnoz)
LABORATORIYA (Kodu, Adı, Ünvanı, Telefon)

MÜALICƏ HƏKIMI (Qeydiyyat nömrəsi, Həkimin kodu)

Relasiya modelində nisbətlər arasında əlaqələr qeyri-aşkar


formada təsvir olunur. Məsələn, baxılan modeldə XƏSTƏXANA
və PALATA nisbətləri arasında əlaqə «Xəstəxananın kodu»
atributu vasitəsilə yaradılır. Əlaqəyaradıcı atribut nisbətdə açar
və ya onun bir hissəsi kimi iştirak edir.

(M:N) tipli əlaqələri yaratmaq üçün bəzən relyasiya


sxeminə əlavə nisbətlər daxil edilir. Məsələn, yuxarıda göstərilən
sxemdə «MÜALICƏ HƏKIMI» nisbəti «XƏSTƏ» və «HƏKIM»
nisbətləri arasında əlaqə yaratmaq üçün istifadə olunur. Bu cür
əlaqələndirici nisbətlərin sxemə daxil edilməsi relyasiya
sxemində nisbətlərin sayının həqiqi saydan artıq olmasına səbəb
olur.

Relasiya sxeminin ekstensionalı cədvəllər dəsti ilə təsvir


olunur. Hər cədvəl relasiya modelinin bir nisbət sxeminə uyğun
gəlir.

Hər bir nisbətdə bir və ya bir neçə atributdan açar kimi


istifadə oluna bilər.
Açar- elə atribut və ya atributlar birləşməsidir ki, onun
qiyməti ilə nisbətin hər bir korteji (faylın yazısı) birmənalı
82
təyin olunur. 2-ci misalda baxılan nisbət sxemlərində
açarlar altxətlərlə ayrılmışlar.
Nisbət bir neçə açara malik ola bilər. Onlara mümkün
və ya potensial açarlar deyilir. Baxılan halda onlardan biri
seçilir və ona birinci və ya əsas açar deyilir. Açarlardan
aşağıdakı məqsədlər üçün istifadə olunur.:
1) nisbətin kortejlərinə (yazılara) müraciəti
sürətləndirmək;
2) nisbətlər arasında əlaqələri təşkil etmək;
3) açar atributlarda qiymətlərin təkrarlanmasını
aradan qaldırmaq;
4) kortejləri nizamlamaq. Kortejləri açara daxil olan
bütün atributların qiymətlərinin artma və ya azalma
ardıcıllığı ilə və ya qarışıq (birinin artması, digərinin isə
azalması) nizamlamaq mümkündür.
Relasiya modeli nəzəriyyəsində xarici açar anlayışı da
var. Fərz edək ki, R1 nisbətində açar olmayan A atributu
var və həmin atribut R2 nisbətində əsas açar rolunda çıxış
edir. Onda R1 nisbətinin A atributuna xarici açar deyilir.
Xarici açarlar vasitəsilə nisbətlər arasında əlaqələr
83
yaradılır. Məsələn, 2-ci misalda baxılan relasiya sxemində
MÜALICƏ HƏKIMI nisbətindəki «Qeydiyyat nömrəsi» və
«Həkimin kodu» atributları ayrı-ayrılıqda xarici açar kimi
XƏSTƏ və HƏKIM nisbətlərinə müraciət etmək üçün
istifadə edilə bilər.
Relasiya modeli verilənlərin istinad tamlığı adlanan
tamlığını təmin etmək üçün xarici açarlara müəyyən
məhdudluqlar qoyur. Bu o deməkdir ki, xarici açarın hər
bir qiymətinə əlaqələndirilən nisbətlərdə sətirlər uyğun
gəlməlidir.
Nisbətin cədvələ uyğün gəlməsi üçün cədvəl aşağıdakı
şərtlərə cavab verməlidir:
- cədvəlin hər bir sətri unikal olmalıdır, yəni
təkrarlanan sətirlərə icazə verilmir;
- sütunların adları müxtəlif, qiymətləri isə sadə
(bölünməz) olmalıdır, yəni eyni sətrin eyni sütununda
yalnız bir qiymət ola bilər;
- cədvəlin bütün sətirləri sütunların adlarına və tipinə
uyğun gələn eyni struktura malik olmalıdırlar;

84
- cədvəldə sətirlər ixtiyari ardıcıllıqla yerləşdirilə
bilərlər.
Verilənlər cədvəli adətən xarici yaddaşda əməliyyat
sisteminin ayrıca faylında saxlanır. Odur ki, onun adına
məhdudluqlar qoyula bilər. Sahələrin adları cədvəlin
içərisində saxlanır. Onların tərtibatı VBIS tərəfindən
aparılır. Sahələrin adlarına və istifadə edilən əlifbaya
məhdudluq qoyulmur.
Əgər nisbət açara malikdirsə, ona uyğun cədvəlin də
açarı olmalıdır. Bu cür cədvələ açarlı və ya açar sahəli
cədvəl deyilir.
VBIS-lərin çoxunda cədvəlin faylı idarəetmə
hissəsindən (sahələrin adlarının, tiplərinin təsviri və s.) və
yazıların yerləşdikləri sahədən ibarət olur.

Postrelyasiya modeli

Klassik relyasiya modelində nisbətin atributlarının bölünməz


(atomar) olduqlarını nəzərdə tutur, yəni cədvəldə informasiya ən azından 1-
ci normal formada olmalıdır. Lakin bəzi halda bu məhdudluq tətbiqin
səmərəli reallaşdırılmasına maneçilik törədir.
Cədvəldə saxlanan verilənlərin bölünməzliyinə qoyulan məhdudlucu
aradan qaldırmaqla postrelyasiya modeli relyasiya modelinin
genişlənməsinə imkan yaradır. Məhz postrelyasiya modelində çoxqiymətli
sahələrə icazə verilir. Çoxqiymətli sahələrin qiymətlərdəsti əsas cədvələ
85
salınan ayrıca cədvəl hesab olunur. Yəni cədvəllərin bir-birinin içərisinə
salınmasına icazə verilir.
Relyasiya modeli ilə müqayisədə postrelyasiya modelində verilənlər daha
səmərəli saxlanır və onların emalı zamanı iki cədvəldəki verilənlərin
birləşdirilməsi əməliyyatına ehtiyac olmur. Bunun sübutu kimi, şəkil 3.7-də
relyasiya (a) və postrelyasiya modelli (b) VB-nin bütün sahələrindən
verilənlərin seçilməsi üçün SQLdilində SELECT operatorlarına aid misal
göstərilmişdir.
a) SELECT
IŞÇI.SN, SOYAD, AD, VƏZIFƏ, UŞAQ, YAŞI
FROM
IŞÇI, IŞÇI- UŞAQ
CHERE
IŞÇI.SN = IŞÇI- UŞAQ.SN;

b) SELECT
SN, SOYAD, AD, VƏZIFƏ, UŞAQ, YAŞI
FROM
IŞÇI-VƏ- UŞAQLAR;
Cədvəldə sahələrin sayının və uzunlucunundəyişdirilməsinə tələb
qoyulmur. Bu odeməkdir ki, cədvəlin və verilənlərin strukturu yüksək
çevikliyə malik olur.
Burada verilənlərin tamlıcı və ziddiyyətsizliyi probleminin həlli qarşıya
çıxır. Buna səbəb postrelyasiya modelinin normallaşdırılmamış
cədvəlləridəstəkləməsidir. Kliyent-server sistemlərində saxlanan
prosedurlara oxşar mexanizmləri VBIS-ədaxil etməklə bu problemi həll
etmək olur . Verilənlərə müraciətdən əvvəl və ya sonra cədvəlin
sahələrindəki qiymətlərə nəzarət edən funksiyaların təsviri üçün avtomatik
çacrılan korrelyasiya və konversiya prosedurlarını qurmaca imkan var.
Korrelyasiya prosedurları verilənlər oxunandandərhal sonra yəni,
verilənlərin emalından əvvəl, konversiya prosedurları isə verilənlərin
emalından sonra həyata keçirilir.
Postrelyasiya modelinin üstünlüyü əlaqəli relyasiya cədvəllərini bir
postrelyasiya cədvəli ilə təsvir etmək imkanının olmasıdır. Bununla
informasiyanın təsvirinin yüksək əyaniliyi təmin edilir və onun emalının
səmərəliliyi artır. Modelin çatışmazlıcı isə saxlanan verilənlərin
ziddiyyətsizliyinin və tamlıcının təmininin mürəkkəbliyindən ibarətdir.
86
Postrelyasiya modelinidəstəkləyən VBIS-lərə misal olaraqdasdb, Bubba və
UniVers sistemlərini göstərmək olar .

Çoxölçülü model

Verilənlərin təsvirinə relyasiya yanaşması ilə eyni vaxtda çoxölçülü


yanaşma yaranmışdır, lakin real işləyən çoxölçülü VBIS-lər çox azdır. Bu
sistemlərə maraq 90-cı illərin ortalarından başlayaraq xeyli artdı. Artım
relyasiya modelinin əsasını qoyan E.Koddundərc etdirdiyi proqram
məqaləsindən sonra 1993-cü ildə baş verdi. Həmin məqalədə OLAP
(Online Analytical Processing – Operativ Analitik Emal) sinif sistemlərinə
12 təlabat formalaşdırılmışdır və onlardan əsasları çoxölçülü verilənlərin
emalına və konseptual təsvirinə aiddir. Çoxölçülü sistemlər qərar qəbul
etmək və təhlil aparmaq üçün informasiyanın operativ emalına imkan verir.
Informasiya sistemi konsepsiyasının inkişafında iki istiqaməti ayırmaq olar:
- operativ emal sistemləri;
- analitik emal sistemləri (qərarların qəbulunudəstəkləyən sistemlər);
Relyasiya VBIS-ləri informasiyanın operativ emalı tipli informasiya
sistemləri sahəsində çox səmərəli idilər.Analatik emal sistemlərində isə
VBIS-lər kifayət qədər çevik və səmərəlideyillər. Bu baxımdan çoxölçülü
VBIS-lərdaha səmərəli hesab olunur.
Çoxölçülü VBIS informasiyanın interaktiv analitik emalı üçün nəzərdə
tutulub vədar çərçivədə ixtisaslaşdırılmış sistem hesab olunuru. Bu cür
VBIS-lərə xas olan əsas anlayışlar aşağıdakılardır: verilənlərin
proqnozlaşdırılması, statikliyi aqreqatlaşması və.
Verilənlərin vaxtla başlılığı sorğuda göstərilmiş tarixə və vaxta görə seçim
aparmaq məqsədini güdür. Verilənlərin emalı və istifadəçiyə təqdim
edilməsi prosesində informasiyanın vaxta görə nizamlanması verilənlərin
seçilməsi və saxlanması mexanizminə müəyyən tələblər qoyur. Məsələn,
sorcunun emal vaxtını azaltmaq üçün verilənlərin hansı ardıcıllıqla tələb
olunmasından asılı olaraq uycun qayda ilə nizamlanması məsləhətdir.
Verilənlərin praqnozlaşdırılması prosesi proqnozlaşdırma funksiyalarının
təyin edilməsini və onların müxtəlif vaxt intervallvrına tətbiqini nəzərdə
tutur.

а)
87
Cəlvəl 6.1. Zavod üzrə məhsul istehsalı
Məhsulun markası Il Miqdarı (min ton)
AI-83 2003 19
AI-83 2004 25
AI-83 2005 27
AI-93 2003 32
AI-93 2004 35
AI-93 2005 36
AI-95 2004 15
AI-95 2005 16

b)
Məhsulun markası 2003 2004 2005
AI-83 20 25 28
AI-93 30 35 37
AI-95 Nul 15 17
Şəkil 6.3. Verilənlərin relyasiya (a ) və çoxölçülü (b) təsviri

Verilənlərin statikliyi verilənlərin və onlar arasındakı əlaqələrin yüksək


səviyyədədəyişməzliyini və onların vaxtla baclılıcını nəzərdə tutur.
Verilənlərin statikliyi onların emalında xüsusiləşdirilmiş, saxlam a,
yükləmə seçmə və indeksləşdirmə metodlarından istifadə etməyə imkan
verir.

Verilənlərin aqreqatlaşması-onların müxtəlif səviyyələrdə ümumiləş-


dirilməsinə imkan verməkdeməkdir. Təqdim edilən
informasiyanındetallaşdırılmadərəcəsi müxtılif informasiya sistemlərində
istifadəçinin səviyyəsindən asılı olur, məsələn: istifadəçi- rəhbər ,
istifadəçi-operator, istifadəçi-analitik, istifadəçi-idarəedici.
Verilənlərin təsviri və emalı zamanı onların strukturunun çoxölçülü məntiqi
təsviri - verilənlərin modelinin çoxölçülüyüdeməkdir. Relyasiya modeli ilə
müqayisədə verilənlərin çoxölçülü təşkilidaha artıq əyaniliyə və
informativliyə malik olur. Nümayiş üçün şəkil 6.3-də neftayırma
zavodunda illər üzrə məhsul istehsalına aid eyni verilənlərin relyasiya (a)
və çoxölçülü (b) modellərlə təsviri göstərilmişdir.

88
Əgər iki ölçüdən daha artıq çoxölçülü modeldən söhbət gedirsə,
informasiyanın vizual olaraq çoxölçülü obyektlər formasında (üç,dörd
vədaha böyük ölçülü hiperkublarla) təsviri vacibdeyil. Belə hallarda
istifadəçiyə yalnız ikiölçülü qrafiklər və ya cədvəllərlə işləməkdaha
əlverişlidir. Bu zaman verilənləri müxtəlifdetallaşdırmadərəcəsi ilə
hazırlanan «kəsiklər»lə təsvir etmək olar.
Verilənlərin çoxölçülü modellərinin əsas anlayışlarına baxaq.
Ölçü (Dimension)-hiperkubun bir üzünü təşkil edən eyni tipli verilənlər
çoxlucudur. Ən çox istifadə edilən zamanla əlaqəli ölçülərinə misal olaraq
Günləri, Ayları, Kvartalları və Illəri göstərmək olar. Cocrafi ölçülər kimi
Rayonlar, Şəhərlər, Ölkələr, Ərazilər geniş tətbiq olunur. Çoxölçülü
modeldə ölçü hiperkubun xanalarındakı konkret qiymətləri təyin edən
indeks rolunu oynayırlar.

Obyektyönümlü model

Obyektyönümlü proqramlaşdırmadillərindəki uycun vasitələrə VB-


nin yazıları ilə onların emalı funksiyaları arasında oxşar mexanizmlərin
köməyilə qarşılıqlı əlaqələr qurulur. Obyektyönümlü model ilə verilənlərin
təsvirində VB-nin ayrı-ayrı yazılarını təyin etmək mümkün olur.
Obyektyönümlü model Objectdatabase Management Group-93 (ODMG) -
Obyektyönümlü verilənlər bazasının idarə olunması üzrə qrup standartının
tövsiyyələrində standartlaşdırılmış olaraq şərh olunur. ODMG-93
standartının tövsiyyələrini tam şəkildə reallaşdırmaq hələ ki mümkün
olmamışdır. Obyektyönümlü modelin ideyalarını dəqiq nümayiş etdirmək
üçün obyektyönümlü VB-nin sadələşdirilmiş modelində iş prinsipinə
baxaq.
Qrafiki olaraq hər bir təpəsi müxtəlif obyekt olan acac köməyi ilə
obyektyönümlü VB-nin strukturunu təsvir etmək mümkündür. Obyektlərin
xassələri isə hər hansı mövcud standart tiplə (məsələn, String- sətir) və ya
istifadəçi tərəfindən «class» (sinif) kimi təyin edilə bilən bir obyekt tipi ilə
təsvir olunur.
«String» tipli belə xassənin qiyməti simvollardan ibarət bir sətr ola bilər.
Uycun sinfin nüsxəsi olan obyekt «Class» tipli xassənin qiymətidir. Həmin
obyekt Class-da göstərilən bütün xassələrə malik olan obyektin törəməsi,
oxşarı hesab olunur. Hər bir obyekt – yəni sinfin nüsxəsi öz sinfinə mənsub
89
olub, bir valideyn sinfə malikdir. Obyektlərin iyerarxik əlaqələri VB-də
cədvəllərin qohumluq munasibətlərini təşkil edir.
Xarici görünüşünə görə obyektyönümlü VB-nin məntiqi strukturu iyerarxik
VB-nin məntiqi strukturuna oxşayır. Onlar verilənlərin emalı metodları ilə
fərqlənir. Polimorfizm, varislik inkapsulyasiya və mexanizmləri ilə
gücləndirilmiş məntiqi əməliyyatlardan obyektyönümlü VB-nin
verilənlərinin emalında tətbiq olunur. Müəyyən məhdudluqlarla SQL
operatorlarına oxşar əməliyyatlarda tətbiq edilə bilər (məsələn, VB-nin
yaradılması üçün).
VB-nin yaradılması və modifikasiyası, verilənlərin axtarışını
sürətləndirmək üçün tətbiq edilən indeks cədvəllərinin avtomatik tərtib və
təshih edilməsi ilə müşayiət olunur.
Polimorfizm eyni proqram kodunun müxtəlif tipli obyektlərlə işləyə
bilməsini təmin edən bir xassədir. Başqa sözlə, polimorfizm eyni adlı
metodların müxtəlif tip obyektlərdə olmasını mümkün edir.
Obyektyönümlü proqramın icrası zamanı arqumentin tipindən asılı olaraq
eyni metodlar müxtəlif obyektlərlə onlara uyğun əməliyyat aparır.
Varislikdə isə, əksinə, obyektin xassələrinin görünmə sahəsini bütün
varislər üçün genişləndirir. Əgər varislik mexanizminin təsir sahəsinin
bilavasitə qohum olmayan obyektlər üçündə genişlənməsi tələb olunursa,
onda həmin obyektlərin ümumi valideyni olan obyektdə «abs» tipli
mücərrəd xassə təyin edilir.

Inkapsulyasiya xassənin adının görünmə sahəsini, ona müdaxiləni həmin


xassənin aid olducu sinfin sərhədləiridairəsində məhdudlaşdırır. Buna aid
nümunəyə nəzər salaq
public class Employee{
private String name;
private String surname;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
90
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public class MainClass {
public static void main(String[] args) {
Employee emp = new Employee();
emp.setName("Fuad");
emp.setAge(25);

System.out.println(emp.getName() + " " + emp.getAge());


}
}

İstifadəçinin sorcuda göstərdiyi obyektlə VB-də saxlanan obyekt arasındakı


oxşarlıcı müəyyənləşdirməklə obyektyönümlü VB-də axtarış həyta
keçirilir. Istifadəçinin təklif etdiyi və «məqsəd» adlandırılan obyekt
(xassəsi «goal» tipi ilə təyin edilir). Bu ümumi halda VB-də saxlanan
bütün obyektlər iyerarxiyasının alt çoxlucu ola bilər. Sorcunun nəticəsi və
obyekt-məqsəd VB-nin özündə saxlana bilər.
Obyektlərin mürəkkəb əlaqələri haqqında informasiyani əks etdirmək
imkanının olması verilənlərin obyektyönümlü modelinin relyasiya modeli
ilə müqayisədə üstünlüyünü göstərir. Obyektyönümlü model imkan verir
ki, VB-nin ayrı-ayrı yazıları və onların emalı funksiyaları təyin edilsin.
Obyektyönümlü modelin çatışmazlıcı isə onun strukturunun
mürəkkəbliyindən, eləcə də, verilənlərin emalının rahat olmamasından və
sorcuların yerinə yetirilmə müddətinin yüksək olmasından ibarətdir.
90-cı illərdə obyektyönümlü verilənlər bazalarının yalnız eksperimental
protipləri mövcud idi. Hazırda bu tip sistemlər geniş yayılmışdır. Misal
olaraq Iris, ODB-Jupiter, Orion, POET (POET Softcare firması), Versant
91
(Versant Technologies),Jasmine (Computer Associates), Postyres, O2
(Ardent Softcare) sistemlərini göstərmək olar.

Mühazirə 10
Əsas alqoritmlər

Alqoritmlər nəzəriyyəsi
 Alqoritm — verilmiş məsələni həll etmək üçün ilkin verilənlərlə
icra olunan hesabi və məntiqi əməliyyatların sonlu sayda
ardıcıllığıdır.
 Latınca qayda-qanun deməkdir.
 Alqoritm 783 - 850-ci illərdə Xarəzmdə (indiki Özbəkistanda
şəhər) yaşamış IX əsrin məşhur fars riyaziyyatçısı Məhəmməd İbn
Musa əl-Xarəzminin (yəni Xarəzmli Musa oğlu Məhəmmədin)
adının latın hərflərilə olan "alqoritmi" yazılışıyla bağlıdır.
 Əl-Xarəzminin yazdığı traktatın XII əsrdə latın dilinə tərcümə
olunması sayəsində avropalılar mövqeli say sistemi ilə tanış olmuş,
onluq say sistemini və onun hesab qaydalarını alqoritm
adlandırmışlar.
 Ümumiyyətlə, alqoritm-verilmiş məsələnin həlli üçün lazım olan
əməliyyatları müəyyən edən və onların hansı ardıcıllıqla yerinə
yetirilməsini göstərən formal yazılışdır. Hesablama maşınlarının
əsas fərqləndirici xüsusiyyətlərindən biri də onun proqramla idarə
olunmasıdır. Yəni, istər sadə, istərsə də mürəkkəb məsələni
maşının həll etməsi üçün proqram tərtib edilməlidir.
 Alqoritmik problemlərdə ümumiliyi pozmadan həmişə
arqumentləri mənfi, olmayan tam qiymətlər alan funksiyanın mənfi
olmayan tam qiymətlərinin tapılmasından söhbət gedir. Ümumiliyi
pozmadan bunu həmişə qəbul etmək olar. Qiyməti müəyyən
alqoritm vasitəsilə tapılan funksiyalara hesablanan funksiyalar
deyilir. Bu tərif intuitivdir. Dəqiq riyazi deyil. Çünki burada
alqoritm anlayışından istifadə olunur. Arqumentlərinin heç də
hamısında təyin olunmayan funksiyalar, yəni arqumentlərinin
müəyyən hissəsində təyin olunmuş funksiyalara qismən funksiyalar
deyilir. Qiyməti hər hansı alqoritmin tətbiqi ilə tapıla bilən qismən
funksiyalara hesablanan qismən funksiyalar deyilir. Bu vaxta qədər
məlum bütün hesablanan qismən funksiyalar məlum olmuşdur ki,
92
qismən rekursiv funksiyalardır. Rekursiv funksiyaların isə ciddi
riyazi tərifi var. Bundan sonra biz funksiya dedikdə ilkin verilənlər
üzərində müəyyən əməllər ardıcıllığı, yığımı başa düşəcəyik.
Deməli, bizə məlum olan alqoritmin hər birinə biz müəyyən
funksiya kimi baxa bilərik. Klini belə bir tezisi irəli sürmüşdür ki,
alqoritmik hesablanan qismən funksiyalar sinfi ilə qismən rekursiv
funksiyalar sinfi üst-üstə düşür. Qeyd edək ki, hesablanan qismən
funksiyaların tərifi intuitiv olduğu halda qismən rekursiv
funksiyaların tərifi dəqiq riyazi şəkildə verilir. Klinidən bir qədər
əvvəl Çerç belə bir tezis vermişdir ki, hər yerdə təyin olunmuş
hesablanan qismən funksiyalar sinfi ilə qismən rekursiv funksiyalar
sinfi eynidir. Bu iki tezis birləşdirilib Klini-Çerç tezisi adı ilə
verilir. Tezisin əhəmiyyəti ondan ibarətdir ki, hər hansı problemi
əks etdirən funksiyaların rekursiv funksiyalar tərifini ödədiyini
bilsək onun həll alqoritminin olduğu birbaşa aydındır. Lakin o,
problemi əks etdirən funksiya rekursiv funksiya tərifini
ödəmədikdə deyirik ki, Klini-Çerç tezisinə görə həmin məsələnin
həll alqoritmi yoxdur. Beləliklə, rekursiv funksiya anlayışını
verməliyik. Onun tərifini və xassələrini göstərməklə, alqoritmin
tərifini dəqiqləşdirmək olar. Alqoritmin tərifini dəqiqiləşdirmək
üçün yuxarıdakı birinci yanaşmadır.
Əsas Alqoritmlər
 Axtarış və Sıralama Alqoritmləri
 Ədədlər Nəzəriyyəsi
 Sadə Ədədlər üçün alqoritmlər
 Qraflar
 ƏBOB-ƏKOB hesablanması
 Dinamik Proqramlaşdırma
 Ağac, Stek, Növbə, siyahı və s.

Məşhur Sıralama Alqoritmləri


 Bubble Sort
 Selection sort
 Insertion sort
 Merge Sort
 Quick Sort
93
 Radix Sort
 Bucket Sort və s.
Verilənlərin çeşidlənməsi və axtarışı

Çeşidləmə və axtarış verilənlər üzərində ən çox aparılan


əməliyyatlardır. Bu əməliyyatların səmərəli alqoritmlərini yalnız
verilənlər yaxşı strukturlaşdırıldıqda qurmaq mümkün olur.
Aşağıda baxılan metodlar yalnız əməli strukturlara tətbiq edilə
bilər. Odur ki, həmin metodlara çox vaxt daxili çeşidləmə və axtarış
metodları deyilir.

6.1. Çeşidləmə metodları

Çeşidlənən verilənlər istənilən əməli struktura malik ola bilərlər.


Massiv, cədvəl, stek, növbə, dek, siyahı, ağac. Baxılan metodlar üçün
hansı strukturlardan istifadə edilməsinin prinsipal əhəmiyyəti yoxdur.
Əsas o götürülür ki, çeşidlənən verilənlər ardıcıl verilənlərdən
ibarətdir. Hər bir element skalyar və ya yazı şəklində istifadə oluna
bilər. Hər bir yazı açarla birmənalı təyin olunur.
Çeşidləmə əməliyyatı nəticəsində yazılar açarların qiymətlərinə
görə nizamlı qaydada düzülür. Açar ədəd olduqda yazılar açarların
qiymətlərinin artan və ya azalan ardıcıllığı ilə nizamlanır. Açar
simvol tipli olduqda isə nizamlama adətən əlifba qaydası üzrə
aparılır. Lakin bu halda da çeşidləmə əməliyyatı açarı təşkil edən
simvolların kodlarına görə aparılır. Aşağıda baxılan metodlarda
açarların ədəd tipli olduğu nəzərə alınır.
Baxılan metodların çoxunda çeşidlənmə zamanı yazılar cədvəlin
bir yerindən digərinə köçürülür. Yazıların uzunluğu böyük olduqda
bu əməliyyat baha başa gəlir. Bu çatışmazlığı aradan qaldırmaq
məqsədilə cədvəli əlaqələndirilmiş siyahı şəklində təsvir etmək və ya
yazıların ünvan göstəricilərindən istifadə etmək olar.

Seçmə üsulu ilə çeşidləmə

94
Bu üsul çeşidləmənin ən sadə üsulu hesab olunur. Bu üsulda
yazıların içərisində açarın qiyməti ən kiçik olanı tapılır. Həmin yazı
tapılandan sonra o cədvəlin 1-ci yazısının yeri ilə dəyişdirilir ( hamin
yazı 1-ci yazının yerinə, 1- ci yazı isə həmin yazının yerinə köçürülür
). Sonra 2-ci elementdən başlayaraq açarının qiyməti ən kiçik olan
yazı tapılır və cədvəldə 2-ci yazının yerinə köçürülür. Bu proses
bütün yazıların nizamlanması başa çatanadək davam etdirilir.

Seçmə üsulunun alqoritmi ( Selection alqoritmi )

Fərz edək ki, R 1,R2,Rn elementlərindən (yazılardan) ibarət olan


cədvəl verilib. Cədvəlin elementlərini açarların (Ki) qiymətlərinin
artan ardıcıllığı ilə, yəni K1<K2<….<Kn şərtini nizamlamaq tələb
olunur.
1. Xarici dövrün və onun indeksinin təşkili.
i=1,2,....., 1 üçün 2-4 mərhələlərini təkrar etməli.
2. Daxili dövr üçün indeksin təyini.
r:=i
3. Minimal açarın seçilməsi.
J=i+1, i+2 , … , n qiymətləri üçün.
Əgər Kj<K2 olarsa r:=j qəbul etməli.

4. Yazıların yerlərinin dəyişdirilməsi.


Əgər r=j onda L:=R; R:=R; R:=L
5. [ Son ] Alqoritmi qurtarmalı.
Burada L-uzunluğu bir yazı uzunluğuna bərabər işçi sahəsidir.
Daxili dövrdə minimal açar tapılır və yazıların yerləri dəyişdirilir.
Xarici dövrdə isə daxili dövr üçün indeksin qiyməti təyin edilir. Bu
indeksin hər bir qiyməti üçün daxili dövrün təkrarlanmalarının sayı
( n-i ) –yə bərabərdir.
Beləliklə alqoritmdə yerinə yetirilən ümumi müqayisələrin sayı

n-1
MS= (n-i)= ½ n(n-1)
95
i=1

Qabarcıq üsulu ilə çeşidləmə

Çeşidləmənin sadə və geniş yayılmış üsullarından biri də qabarcıq


üsuludur. Mahiyyətcə seçmə üsuluna oxşayan qabarcıq üsulunun
fərqi ondadır ki, minimal elementin tapılması və yazıların yerlərinin
dəyişdirilməsi əvəzinə, qonşu elementlərin açarları müqayisə olunur
və nizamlığın pozulması aşkar edilərsə, onların yerləri dəyişdirilir.
Bu üsulda xarici dövrlərin maksimal sayı (n-1)-ə bərabərdir.
Xarici dövrün 1-ci icrasında k1 və k2 açarları müqayisə olunur. Əgər
R1>R2 olarsa, onların yerləri dəyişdirilir. Sonra R2 və R3 müqayisə
olunur. Xarici dövrün 1-ci icrasından sonra ən böyük açar n-ci
mövqeyə gətirilir. Xarici dövrün sonrakı icralarında növbəti böyük
açarlar ardıcıllıqla n-1, n-2,...,2 mövqelərində gətirilir. Nəticədə
cədvəl nizamlanmış formaya gətirilir.
Hər dəfə xarici dövrün icrasından sonra yerdəyişmələrin olub-
olmamasını yoxlamaqla çeşidlənmənin sonunu təyin etmək olar.

Qabarcıq üsulunun alqoritmi ( Buble alqoritmi )

1. Xarici dövrün və onun indeksinin təşkili.


i=1,2,....,n-1 qiymətləri üçün 2-4 mərhələlərini təkrar etməli.

2. Yerdəyişmə əlamətinin inisiallaşdırılması.


AL:=0

3. Müqayisə və yerdəyişmə
j=1,2,.....,n-j üçün aşağıdakıları yerinə yetirməli.
Əgər Kj+1<Kj, onda AL:=1
L:=Rj Rj:=Rj+1 Rj+1:=L
96
4. Yerdəyişmə əlamətinin yoxlanması.
Əgər AL=0 olarsa alqoritmi bitirməli.

5. Son. Alqoritmi qurtarmalı.

Müqayisə və yerdəyişmə dövrünün əvvəlində yerdəyişmə


əlamətinə AL sıfır mənsub edilir, dövrün sonunda isə onun qiyməti
yoxlanılır. Əgər bu qiymət dəyişməyibsə, deməli çeşidləmə qurtarıb.
Qabarcıq üsulunda da müqayisələrin və yerdəyişmələrin maksimum
sayı

1/2n(n-1)-ə bərabərdir.

Yerinə salmaqla çeşidləmə

Sadə çeşidləmə üsullarından biri də əvvəlcədən nizamlanmış şərti


ardıcıllıqda sonradan baxılan yazını açarın qiymətinə görə uyğun
yerə salmaqla çeşidləmədir.
Fərz edək ki, Rj,.....,Rj-1 yazıları nizamlıdırlar. Baxılan Rj yazısı
açarın qiymətinə görə bu yazıların arasında uyğun yerə salınır. Kj
açarını növbə ilə Kj-1, Kj-2,...., açarları ilə müqayisə edib, Rj yazısının
Ri və Ri+1 yazıları arasına salınmasını təyin etdikdən sonra
Ri+1,......,Rj-1 yazılarını bir mövqe qədər yuxarı sürüşdürüb, yeni
yazını i+1 mövqeyində yerləşdiririk. Bu əməliyyat cədvəlin bütün
yazıları baxılanadək davam etdirilir.

Yerinə salmaqla çeşidləmə alqoritmi (Versal alqoritmi)

1. Xarici dövrün hazırlanması. J=2,3,....,n üçün 2-5


mərhələlərini icra etməli və sonra 6-ya keçirməli.
2. Daxili dövrün hazırlanması.
97
i=j-1 k:=kj R:=Rj
Sonrakı addımlarda i-nin azalma ardıcıllığı ilə k və ki müqayisə
edilməklə R lazımi yerə salınır.
3. k və ki-nin müqayisəsi Əgər k>=ki onda 5-ci addıma keçməli.
4. Ri-ni sürüşdürməli, i-ni azaltmalı.
Ri+1:=Ri i:=i-1
Əgər i>0 olarsa 3-cü addıma qayitmalı.
Əgər i=0 olsa, onda k açarların içərisində ən kiçiyidir, odur ki, R
1-ci mövqedə yerləşdirilir.
5. Yazının yerinə salınması.
Ri+1:=R 1-ci addıma qayıtmalı.
6. Son. Alqoritmi bitirməli.
5-ci yazı emal olunduqda onun açarı orta hesabla ½ sayda
nizamlanmış açarlarla müqayisə olunur. Odur ki, müqayisələrin
ümumi sayı təxminən

MS=(1+2+….N)2=N/4 olur.

Mühazirə 11
Düz seçim üsulu ilə çeşidləmə
DAXİLİ VƏ XARİCİ ÇEŞİDLƏMƏ

Bu üsuı aşağıdakı prinsiplərə əsaslanmışdır:


1. Ən kiçik açarlı element seçilir.
2. O, öz yerini birinci element olan a1-lə dəyişdirir.
3. Sonra bu proses yerdə qalan (n-1) elementləri, (n-2) elementləri və
s. ilə o vaxta qədər təkrar olunur ki, ən axırda bir dənə ən “böyük”
element qalmış olsun.
Düz seçim üsulu ilə çeşidləmə alqoritmi
for i = 1 to n - 1
  x = a(i)
98
 k=i
  for j = i + 1 to n
    if  a(j) < x  then
        k = j
        x = a(k)
    endif
  next j
  a(k) = a(i)
  a(i) = x
next i
return

Düz seçim çeşidləmə alqoritminin effektivliyi


C açarlarının müqayisələr sayı aydındır ki, açarların başlanğıc
düzülüşündən asılı olmur. Belə demək olar ki, bu mənada bu üsulun
davranışı düz qoşulmadakı davranışla müqayisədə daha az dərəcədə
təbii olur. C üçün açarların istənilən yerləşməsində aşağıdakı ifadəni
yaza bilərik:
  C = n(n-1)/2
Beləliklə, müqayisələrin sayı belə olacaqdır:  О(n2).
Başlanğıcda açarlar nizamlanmış olan zaman yerdəyişmələrin
minimal sayı Мmin = 3(n - 1), başlanğıcda açarlar əks isiqamətdə
yerləşmiş olduqda, maksimal sayı isə Мmax = 3(n - 1) + С, yəni,
tərtib isə О(n2) olacaqdır.
Ən pis halda düz seçimli çeşidləmədə tərtib həm müqayisələr sayı,
həm də yerdəyişmələr sayı üçün n2 olacaqdır.

Düz mübadilə köməkliyi ilə çeşidləmə (qabarcıqlı çeşidləmə)


Bu üsula qədər nəzərdən keçirilən hər iki üsulu da, həmçinin,
“mübadilə” çeşidləmələri kimi nəzərdən keçirtmək olar.
Baxacağımız bu bölmədə təsvir olunan üsulda iki elementlərin
yerlərinin dəyişdirilməsi özlüyündə prosesin ən xarakterik
xüsusiyyətini göstərir. Aşağıda veriləcək düz mübadilə alqoritmi
99
qonşu elementlər cütlüyü üçün müqayisəyə və yerlərinin əvəz
olunmasına əsaslanmış və həmin proses o vaxta qədər davam edir ki,
bütün elementlər nizamlanmış olsunlar.
Düz seçim üsulunda olduğu kimi, biz massiv üzrə keçidləri təkrar
edirik, hər dəfə qalan ardıcıllığın ən kiçik elementini massivin sol
sonuna sürüşdürürük. Massivi üfüqi qurulma kimi deyil, şaqili
qurulma kimi nəzərdən keçirtsək, o zaman elementləri içərisində su
olan çəndəki qabarcıqlar kimi interpretasiya etmək olar və bu halda
onların hər birinin çəkisi onun açarına uyğun olacaqdır. Bu halda hər
bir keçiddə bir qabarcıq elə bil ki, onun çəkisinə uyğun olan
səviyyəyə qədər qalxır

Çeşidləmə - bu seçilmiş parametr üzrə müntəzəm şəkildə yaddaşda


verilənlərin yerləşməsi deməkdir. Müntəzəmlik verilənlər massivinin
əvvəllindən sonuna qədər parametr qiymətinin artması (azalması)
kimi nəzərdən keçirilir.
Verilənlərin emalı zamanı verilənlərin informasiya sahəsini və
verilənlərin maşında yerləşməsini bilmək çox vacibdir.
Daxili və xarici kimi çeşidləməni fərqləndirirlər:
-daxili çeşidləmə - əməli yaddaşdakı çeşidləmədir;
-xarici çeşidləmə - xarici yaddaşdakı çeşidləmədir.
Əgər çeşidlənən yazılar böyük yaddaş həcmini tutmuş olsalar, bu
zaman onların yerdəyişilməsi böyük xərclərə səbəb ola bilər. Onları
azaltmaqdan ötrü çeşidləməni açarlar ünvanlarının cədvəlində
aparırlar, yəni, göstəriciləri yenidən quraşdırırlar, massivin özü isə
yerdəyişmə etmir. Bu – ünvanlar cədvəlinin çeşidləmə üsuludur.
(şək.63).

100
Şək.63.Ünvanlar cədvəlinin çeşidləmə üsulu

Çeşidləmə zamanı yeni açarlara rast gəlinə bilər. Bu halda yaxşı


olardı ki, çeşidləmədən sonra eyni olan açarları ilkin faylda olan
qaydada yerləşdirək. Bu - davamlı çeşidləmədir.
Biz yalnız əlavə yaddaşdan istifadə etməyən çeşidləməni nəzərdən
keçirəcəyik. Bu cür çeşidləmə “həmin yerdə də” adlanır.
Çeşidləmə effektivliyini bir neçə kriterilər üzrə nəzərdən keçirtmək
olar:
•çeşidləməyə sərf olunan vaxt;
•çeşidləmə üçün tələb olunan əməli yaddaşın həcmi; 
•proqramın yazılmasına proqramçının sərf etdyi vaxt.
Birinci kriterini ayıraq. Çeşidləməyə sərf olunan vaxta ekvivalent
olaraq, çeşidləmənin yerinə yetirilməsi zamanı müqayisələrin sayını
və yerdəyişmələrin sayını hesab etmək olar.
•Müqayisələr və yerdəyişmələr sayına qayda aşağıdakı hüdudda
yerləşir:
   О (n log n)-dən    О (n2)-a qədər; 
   О (n) – ideal və nail oluna bilinməyən hadisədir.
Aşağıdakı çeşidləmə üsullarını fərqləndirirlər:
•ciddi (düz) üsullar;
 •yaxşılaşdırılmış üsullar.
Ciddi üsullar:
•düz qoşulma üsulu;
 •düz seçim üsulu;
 •düz mübadilə üsulu.
101
Ciddi üsulların effektivliyi təxminən eyni olur.

3.1. Çeşidləmənin birbaşa üsulları

Elementlər fikrən artıq hazır olan a1,...,ai-1 ardıcıllığına və ilkin


ardıcıllığa bölünürlər.
i = 2-dən başlayarq hər bir addımda i-ni bir vahid artıraraq, ilkin
ardıcıllıqdan i–ci element çıxarılır və hazır ardıcıllığa qoyulur, bu
zaman o, lazım olan yerə araya salınmış olur (şək.64).
Alqoritmin mahiyyəti belə olur:
for i = 2 to n
x = a(i) x-i daxil etmək üçün а(1)…а(i) arasında yer tapırıq
next i

Şək.64.Bir başa qoşulmalı üsulla çeşidləmə

Düz qoşulmalı üsulu ilə çeşidləmənin iki alqoritmi vardır. Birincisi-


maneəsiz
Maneəsiz düz qoşulma üsulu ilə çeşidləmə alqoritmi
for i = 2 to n
    x = a(i)
    for j = i - 1 downto 1
      if x < a(j)
         then  a( j + 1) = a(j)
         else  go to  L               
      endif
     next j
102
 L:  a( j + 1) = x
next i
return

Bu alqoritmin mənfi cəhəti ondan ibarət olur ki, bu halda struktur


proqramlaşdırmanın texnologiyası pozulmuş olur və bu halda şərtsiz
keçidlərin tətbiqi arzu olunmaz olur. Əgərsə daxili dövrü while kimi
təşkil etsək, o zaman “maneəni” quraşdırmaq lazım gələcək ki, onsuz
açarlar mənfi qiymətlərə malik olduqda, əhəmiyyətlilik itmiş olacaq
və kompüter “asılı” vəziyyətdə qalacaqdır.
Maneə olduqda düz qoşulma üsulu ilə çeşidləmə alqoritmi
for i = 2 to n
   x = a(i)
   a(0) = x   {a(0) – maneə}
   j = i - 1
   while  x < a(j )  do
       a( j +1) = a(j )
       j = j - 1
   endwhile 
   a( j +1) = x
next i
return

Birbaşa qoşulmalı alqoritmin effektivliyi


i-cini ələkdən keçirtdikdə, Ci açarlarının müqayisələr sayının ən
böyüyü (i-1)-ə, ən kiçiyi isə - 1-ə bərabər olur; əgər fərz etsək ki, N
açarların bütün yerdəyişmələri bərabər ehtimallı olarsa, o zaman
müqayisələrin orta qiyməti = i/2 olacaqdır. Bir yerdən başqa yerə
keçmə Mi=Ci+3 (maneə daxil olmaqla) olacaqdır. Minimal qiymət-
ləndirmələr artıq nizamlanmış ilkin ardıcıl elementlər halında rast
gəlinir, ən pisi isə - onlar əvvəlcədən əks qaydada yerləşmiş olduqda
olur. Müəyyən bir mənada qoşulma köməkliyi ilə çeşidləmə həqiqi
təbii davranışı nümayiş etdirir. Aydındır ki, göstərdiyimiz alqoritm
103
davamlı çeşidləmə prosesini təsvir edir: bərabər açarlara malik olan
elementlərin düzülüşü bu halda dəyişilməz qalır.
Massiv əks tərəfli çeşidlənəndə ən pis halda müqayisələrin sayı
Сmax = n(n - 1)/2, yəni, - О (n 2).  Yerdəyişmələrin sayı Mmax = Cmax +
3(n-1), yəni,  -  О (n2). Əgər massiv artıq çeşidlənmişsə, o zaman
müqayisələr və yerdəyişmələr sayı minimal olacaqdır: Cmin  = n-1;
Mmin = =3(n-1).
 
Mühazirə 13
Şell çeşidlənməsi

Çeşidləmənin yaxşılaşdırılmış üsuluna aşağıdakıları aid etmək olar:


-Şell çeşidləməsi (azalan addımla çeşidləmə)
-Cəld çeşidləmə (Quick Sort)
1959-cu ildə D.Şell tərəfindən düz qoşulma üsulunun köməkliyi ilə
təkmilləşdirilmiş çeşidləmə təklif edilmişdi. Başlanğıc addımı 4-ə
bərabər olan onun çeşidlənməsi şək.66-da verilmişdir.

Şək.66.Şell çeşidləməsi

Əvvəlcə bir-birindən 4 məsafəsində duran elementlər ayrıca


qruplaşdırılır və qruplarda çeşidlənirlər. Bu cür proses dördlük
çeşidləmə adlanır. Bizim misalda 8 elementlər vardır və hər bir qrup
iki elementlərdən ibarət olur, yəni, 1-ci və 5-ci elementlər, 2-ci və 6-
cı, 3-cü və 7-ci və, nəhayət, 4-cü və 8-ci elementlər. Dördlük
çeşidləmədən sonra elementlər yenidən qruplaş-dırılırlar – indi
qrupun hər bir elementi digərindən 2 mövqe geridə qalır – və yenidən
104
çeşidlənirlər. Bu ikilik çeşidləmə adlanır. Ən nəhayət, üçüncü
keçiddə adi və ya bir qat çeşidləmə aparılır.
 İlk baxışdan şübhəli qala bilərik: əgər çeşidləmənin bir neçə
prosesləri lazımdırsa və bunların hər birinə bütün elementlər
qoşulurlarsa, onda onlar qənaət etmək əvəzinə, daha çox iş əlavə
etməyəcəklərmi? Lakin, hər bir mərhələdə ya nisbətən az elemenlər
çeşidlənirlər, ya da ki, elementlər artıq kifayət qədər yaxşı
nizamlanmışlar və nisbətən bir qədər yenidən yerdəyişmə tələb
edirlər.
Aydndır ki, bu cür üsul nəticədə nizamlanmış massiv verəcəkdir və
əlbəttə ki, o dəqiqə görünür ki, hər bir keçid əvvəlkilərlə müqayisədə
yalnız udur; həmçinin, o da aydındır ki, sonuncunun vahid olması
şərtilə, qruplarda olan məsafəni müxtəlif cür azaltmaq olar, doğrudan
da, ən pis halda sonuncu keçid demək olar ki, bütün işi görür.
Aşağıda verilmiş alqoritm məsafələrin hər hansı bir müəyyən
ardıcıllığına yönəlməmiş və şərti keçidli düz araya salma üsulundan
istifadə edir.
Maneə üsulundan istifadə etdikdə, çeşidləmələrdən hər birisi özünün
özəl maneəsinin qurulması üçün ehtiyacı olur, buna görə də, massivi
[0..n]-dan [-h1..n]-ə qədər genişləndirməyə məcbur oluruq.
Hansı məsafələrin ən yaxşı nəticə verməsi sübut olunmamışdır,
amma onlar bir-birinə vurulanlar kimi olmamalıdırlar. D.Knuth
addımlarının aşağıdakı ardıcıllığını (əks qaydada) təklif etmişdir: 1,
3, 7, 15, 31, …
Yəni:   h m  =2hm-1+1, addımların sayı isə t = log2n - 1.
Alqoritm bu cür təşkil olunduqda, onun effektivlik dərəcəsi belə
olacaqdır: O ( n1.5)

Şell çeşidləmə alqoritmi


Aşağıdakı işarələri qəbul edək:
h[1..t] – addımlar ölçülərinin massivi;
a[1..n] – çeşidlənən massiv
k – çeşidləmə addımı
x – araya salınan elementin qiyməti
105
Shell Sort
const t = 3
          h(1) = 7
          h(2) = 3
          h(3) = 1
  for m = 1 to t
    k = h(m)
    for i = 1 + k to n
      x = a(i)
  for j = i - k to 1 step  -k
  if  x < a(j) then
            a( j+k) = a(j)
                    else goto L endif
   next j
   L: a(j+k) = x
 next i
next m
return 
 
Cəld çeşidlənmə. Müxtəlif çeşidlənmə üsul effektivliyinin qiymətləndirilməsi

Bu üsul mübadilə çeşidləmə üsullarına aiddir. Əsasında seçilmişə


görə münasibətdə açarların bölünmə metodikası durur (şək.67).

Şək.67. Cəld çeşidləmə 


106
Şəkildən göründüyü kimi 6-dan sol tərəfdə 6-dan kiçik olan açarlar,
sağ tərəfdə isə - 6-dan böyük olan açarlar yerləşmişlər.

Cəld çeşidləmə alqoritmi


Sub Sort (L, R)
i=L
j=R
x = a((L + R) div 2)
repeat
  while a(i) < x do
    i = i + 1
  endwhile
  while a(j) > x do
    j = j - 1
  endwhile
  if i <= j then
    y = a(i)
    a(i) = a(j)
    a(j) = y
    i = i + 1
    j = j - 1
  endif
until i > j
if L < j then
    sort (L, j)
endif
if i < R then
    sort (i, R)
endif
return
 
Sub QuickSort 
Sort (1, n)
107
return
Çeşidləmənin mövcud olan üsulları içərisində Quick Sort ən effektli
hesab olunur.
Onun effektivlik dərəcəsi belə olur:  О (n log2 n)

Açarların çevrilməsi. Çevrilmə funksiyasının çevrilməsi

Yerləşdirmə (xeşləmə) üsulu verilənlər strukturunda elementin


yerləşmə məkanı barəsində məsələnin cəld həll olunmasına
istiqamətlənmişdir. Yerləşdirmə üsulunda verilənlər adi massiv kimi
təşkil olumuşdur. Buna görə də, H – açarları massiv indekslərinə
çevirən əks etdirmədir, buradan da adətən bu üsula verilən ad əmələ
gəlmişdir – “açarların çevrilməsi”. Qeyd etmək lazımdır ki,
dinamiki yerləşdirmənin hər hansı bir proseduruna müraciət etməyə
ehtiyac yoxdur, çünki, bütün massiv – bu, əsas, statiki obyektlərdən
biri hesab olunur. Açarların çevrilmə üsulu elə bir məsələlər üçün
tez-tez istifadə olunur ki, orada uğurla ağaclardan da istifadə etmək
mümkün olsun.
Əgər hər bir açar bir müraciət nəticəsində çüxarılmalı olarsa, o
zaman bu cür cədvəlin daxilində yazının vəziyyəti yalnız bir açardan
asılı ola bilər. O, digər açarların yerləşməsindən asılı olmamalıdır,
halbuki ağacda bu cür asılılıq olmur. Bu cür cədvəlin təşkil
olunmasının ən effektiv üsulunu massiv təşkil edir.
Fərz edək ki, hər hansı bir firma detallar istehsal edir və onu 7
rəqəmli ədədlə kodlaşdırır. Tam 7 rəqəmli açardan istifadə etməklə,
düz indeksləşdirməni tətbiq etmək üçün 10 milyon elementlərdən
ibarət olan massiv lazım ola bilərdi. Aydındır ki, bu böyük yaddaş
fəzasının itməsinə gətirib çıxara bilərdi, çünki, tamamilə
inanılmamaq dərəcədə demək olar ki, hər hansı bir firma mindən
artıq məmulatlar adına malik olsun. Buna görə də, açarın məhdud
diapazon daxilində hər hansı bir tam ədədə çevrilmə üsulu zəruridir.
Əgər massivdə məmulat barəsində yazı indeksi kimi məmulatın son 3
rəqəmlərindən istifadə olunsa, o zaman bütün faylın saxlanılması

108
üçün 1000 elementlərdən ibarət olan massiv kifayət edər. Bu massiv
0-dan 999 daxil olmaqla tam ədədlə indeksləşdirilir.
Detallar barəsində yazılar
Qeyd edək ki, ədədlər kimi bir-birinə yaxın olan iki açarlar (4618396
və 4618996 kimi), ədədlər kimi bir-birindən əhəmiyyətli dərəcədə
fərqlənən (0000991 və 9846995 kimi) iki açardan fərqli olaraq,
həmin cədvəldə bir - birindən uzaqda yerləşə bilərlər (şək.68). Bu
ondan irəli gəlir ki, yazının mövqeini təyin etmək üçün açarın yalnız
axırıncı 3 rəqəmlərindən istifadə edirlər.
Xeşləmə - bu, bir böyük çoxluğun kiçiyə doğru və ya “çoxlu
qiymətlərin bir qiymətə” endirilmə üsuludur .
Çevirmə funksiyasının seçilməsi.
Açarı cədvəldəki müəyyən bir indeksə transformasiya edən funksiya
xeş-funksiya adlanır.
Bizim halda h(key) = key mod 1000;
Xeş-cədvəl – bu, xeş-funksiya tərəfindən verilən qeyri-adi
ünvanlaşdırılmalı adi massivdir.
Xeş-cədvəlin yaradılmasının baxdığımız üsulu bir mənfi cəhətə
malikdir.
Tutaq ki, elə bir k1 və k2 kimi iki açar mövcuddur ki, orada
h(k1)=h(k2) olur. K1 açarlı yazı cədvələ daxil edildikdə, o, h(k1)
mövqeinə salınır. Amma k2 açarı xeşləndikdə, alınmış mövqe k1
açarlı yazının saxlandığı həmin mövqe olacaqdır. Aydındır ki, iki
yazı eyni bir mövqeni məşğul edə bilməzlər. Bu cür vəziyyət
xeşləmə zamanı kolliziya və ya toqquşma adlanır.

Qeyd etmək lazımdır ki, yaxşı xeş funksiya elə bir funksiya olmalıdır
ki, o kolliziyaları minimum etmiş olsun və bütün cədvəl üzrə yazıları
bir bərabərdə paylamış olsun.
Mükəmməl xeş-funksiya – bu kolliziyaları yaratmayan funksiyadır.
Xeşləmə zamanı kolliziyaları iki üsulla aradan qaldırmaq olar:
-Açıq ünvanlaşdırma üsulu ilə;
-Zəncir üsulu ilə. 

109
Açarların çevrilməsi ilə əlaqədar olan əsas çətinlik ondan ibarət olur
ki, mümkün ola bilən qiymətlər çoxluğu yaddaş ünvanla-rının
buraxıla bilən çoxluqlarından (massivin indekslərindən) əhəmiyyətli
dərəcədə geniş olur. Misal kimi 16 - ya qədər hərfdən ibarət olan və
minlərlərlə heyətin içərisindən ayrı-ayrı fərdiləri identifikasiya edən
açarlardan ibarət adları götürək. Bu halda biz 216 açarlar
mümkünlükləri ilə işləməli olmalıyıq ki, bunu da 10 3 indekslər
mümkünlükləri ilə əks etdirmək lazım gələcəkdir. Buna görə də,
funksiyası “çoxlu qiymətlər bir qiymətdə” sinifli funksiya kimi
olacaqdır. Əgər hər hansı bir k açarı verilmişsə, o zaman axtarış
əməliyyatının birinci addımı – onunla əlaqəli olan h = H(k)
indeksinin hesablanması, ikinci addım isə (tamamilə vacibdir) -
doğrudanmı h-ın T massivində k açarlı elementi identifikasiya
etməsinin yoxlanılması olacaqdır.
Axtarışın təşkil olunduğu yazı müəyyən bir cədvəldə saxlanılır.
Tələb olunan yazını tapmamışdan əvvəl müəyyəm sayda açarlara
baxış keçirtməyi təşkil etmək lazımdır.

Mühazirə 15
Xeşləmə alqoritmləri. Xeşləmə zamanı kolliziyaların aradan qaldırılma üsulları

Xeşləmə zamanı kolliziyaların aradan qaldırılmasının ən sadə üsulu


həmin yazının massivdəki növbəti boş mövqeyə yerləşdirilməsidir.
Məsələn, 0596397 açarlı yazı hələlik boş olan 398 xanasına
yerləşdirilir, çünki, 397 xanası artıq tutulmuşdur. Bu yazı araya
salınanda, 397 mövqeinə (8764397 kimi açarlı) və ya 398 mövqeinə
(2194398 kimi açarlı) xeşləndirilən digər yazı hal-hazırda 400-ə
bərabər olan növbəti boş mövqeyə salınır.
Bu üsul həmçinin, xətti yoxlama adlandırılır, o, xeşləmə zamanı
kolliziyaların aradan qaldırılmasının müəyyən bir ümumi üsuluna aid
misaldır və o, təkrar xeşləmə adlanır.
Ümumi halda təkrar xeşləmə funksiyası “rh” massivdə bir indeks
qəbul edir və digərini isə çıxışa verir.

110
Əgər h(key) massivinin xanası digər açarın yazısı ilə artıq məşğul
olarsa, o zaman “rh” funksiyası həmin yazının yerləşdirilə biləcəyi
digər xananı tapmaq üçün h(key) qiymətinə tətbiq olunur. Əgər
rh(h(key) xanası da məşğul olarsa, o zaman xeşləmə bir də yerinə
yetirilir və rh(rh(h(key) xanası yoxlanılır və i.a.
Açıq ünvanlaşdırma üsulunun alqoritmi
Function h(key) – xeş-funksiya
  h = key mod n
  return
Function rh(i)  - təkrar xeşləmə funksiyası
  rh = i+1 mod n
  return
Procedure insert(key) – açarın xeş-cədvələ salınma proseduru
i = h(key) {açarı xeşləyirik}
while ((k(i)< >key) and (k(i)< > nullkey )) do
  i = rh(i) { təkrarən xeşləmə}
  if k(i) = nullkey then {açarı boş mövqeyə salırıq}
  k(i) = key
endwhile
return
 
Subroutine heshtable – xeş-cədvəlin yaradılma funksiyası
  while not eof do
  read key
  insert(key)
  endwhile
  return

Subroutine search – xeş-cədvəldə axtarış funksiyası


  read key
  i = h(key) {açarı xeşləyirik}
  repeat
  if k(i) = key
  then {element tapılmışdır}
111
  search = i
  return
  else if k(i) = nullkey
  then {cədvəldə element yoxdur}
  search = 0
  return
  else {münaqişə}
  i = rh(i) {təkrar xeşləmə}
          endif
  endif
  until (k(i) = key) or  (k(i) = nullkey )
  return
 
Açarın axtarışı və araya salınması
i = h(key) {açar xeşlənir}
while (k(i)< >key) and (k(i)< >nullkey) do
  i = rh(i) {təkrar xeşləmə}
endwhile
  if k(i)= nullkey
  then {yazını boş mövqeyə salırıq}
  k(i)=key
  endif
search = i
return 

Açıq ünvanlaşdırma üsulunun mənfi cəhətləri


Birincisi, o, qeyd olunmuş ölçüdə cədvəl tələb edir. Əgər yazıların
sayı bu ölçüdən çox olarsa, o zaman böyük ölçülü cədvəl artırmadan
onları araya salmaq və artıq cədvəldə olan bütün yazıların açarları
üçün yeni xeşləmə funksiyasından istifadə edərək, xeşləmə
qiymətinin təkrarən hesablanması mümkün olmayacaqdır.   
İkincisi, bu cür cədvəldən yazını ləğv etmək çətin olur.

112
Zəncirlər üsulu ilə xeşləmədə kolliziyaların aradan qaldırılması
Bu üsul ondan ibarət olur ki, açarları eyni bir qiymətlə xeşləndirilən
bütün yazılardan əlaqəli siyahılar təşkil olunurlar.
Tutaq ki, xeş-funksiya 0-dan (n-1)-ə qədər olan diapazonda
qiymətləri çıxışa verir. Bu zaman n ölçülü və başlıqlar
qovşaqlarından ibarət olan müəyyən bir “bucket” massivi təsvir
olunur. Bucket (i) elementi açarları i-də xeşlənən bütün yazıların
siyahısını göstərir. Yazının axtarışında qovşaqlar massivində i
mövqeini tutan siyahı başlığına müraciət həyata keçirilir. Əgər yazı
tapılmamışsa, o zaman onu siyahının sonuna salırlar.
Fərz edək ki, 10 elementlərdən ibarət olan massiv vardır və xeş-
funksiya (key mod 10)-a bərabərdir. Açarlr açağıdakı ardıcıllıqda
yerləşmişlər:
75   66   42    192   91    40   49   87   67    16   417    130   372   227
Uyğun bir əlaqəli siyahılı başlıqlar qovşaqlarının massivi aşağıda
verilmişdir (şək69).
Zəncirlər üsulunun həyata keçirilmə alqoritmi
i =  h(key)
q = nil
р = bucket (i)
while p < >nil do
if k(p) = key
  then search = p
  return
endif
q=p
p = nxt(p)
endwhile
{açar tapılmamışdır, yeni yazını araya salırıq}
s = getnode
k(s) = key
nxt(s) = nil
if q = nil
113
  then bucket (i) = s
  else nxt(q) = s 
endif
search = s
return

Şək.68. Uyğun bir əlaqəli siyahılı başlıqlar qovşaqlarının massivi

Zəncirlər üsulu ilə qurulmuş cədvəldən qovşağın ləğv edilməsi


sadəcə olaraq, əlaqəli siyahıdan qovşağın ləğv edilməsindən ibarət
olur. Ləğv olunmuş qovşaq heç cür axtarış alqoritminin effektivliyinə
təsir göstərmir .Alqoritm elə işləyəkdir ki, guya heç vaxt bu qovşaq
cədvələ salınmamışdı. Qeyd etmək lazımdıır ki, axtarışın böyük
effektivliyini əldə erməkdən ötrü bu siyahı dinamiki olaraq, yenidən
nizamlana bilər.
Zəncirlər üsulunun əsas mənfi cəhəti ondan ibarət olur ki, göstəricilər
qovşaqları üçün əlavə fəza tələb olunur. Amma zəncirlər üsulundan
istifadə edən alqoritmlərdə təkrar xeşləmədən istifadə edən
alqoritmlərlə müqayisədə ilkin massiv kiçik olur. Bu ona görə baş
verir ki, zəncirlər üsulunda bütün massivin doldurulması o qədər də
fəlakətli hadisə olmur. Həmişə əlavə qovşaqları ayırmaq və onları
müxtəlif siyahılara əlavə etmək mümkün olur. Əlbəttə ki, əgər bu
siyahılar çox uzun olsalar, o zaman bütün xeşləmə ideyası öz
mənasını itirəcəkdir – düz ünvanlaşdırma və bunun da nəticəsi kimi,
effektiv axtarış olmayacaqdır.
114
115

You might also like