MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT
TEXNOLOGIYALARI UNIVERSITETI SAMARQAND FILIALI
“KOMPYUTER INJINIRINGI” FAKULTETI
,, Dasturlarni tekshirishning formal usullari ’’ fanidan
3- Lobaratoriya ishi
Bajardi:Allamurotov F.
Fan o‘qituvchisi
:
Saydullayev.E
SAMARQAND _ 2024
Ma'ruzalar kursi dasturlash paradigmalarining turli XIL ko'rinishlari va
ularni dasturlash tillari va tizimlarida qo'llab-quvvatlashga oid yondashuvlar bilan
tanishtiradi (lsp)
KIRISH
Ma'ruzalar kursi dasturlash paradigmalarining turli xil ko'rinishlari va ularni
dasturlash tillari va tizimlarida qo'llab-quvvatlashga oid yondashuvlar bilan
tanishtiradi (LSP). Asosiy e'tibor g'oyalar va ularni amalga oshirishning amaliy
natijalari ko'rinadigan tarixiy ahamiyatga ega va kontseptual dasturlash tillariga
qaratilgan. Ko'rib chiqilayotgan paradigmalarga xos bo'lgan dasturlash uslublari va
tillari dasturiy ta'minotning hayotiy tsiklini qo'llab-quvvatlashni o'z ichiga olgan
apparat va interfeysdagi kompyuter dasturlash vositalaridan interfeysdagi dasturiy
informatika muammolarini echishda qo'llaniladigan dasturlash texnologiyalarining
(TP) evolyutsiyasini aks ettiradi. Hayot sikli). Dasturlash tillari va tizimlarini
yaratish va ulardan foydalanishda rivojlangan ma'lumotni qayta ishlashga muqobil
yondashuvlar odatda dasturlash paradigmalari deb ataladi. Dasturiy ta'minot
dasturlarini o'rganish va aniq tasniflash dasturiy ta'minot loyihalarini
shakllantirishda va axborot texnologiyalarini (IT) takomillashtirishda oqilona
tanlashga ham, kompyuter tillarini yaratishga ham yordam beradi. Dasturlash
tillari va tizimlari ko'rinishidagi dasturiy paradigmalar IT salohiyati haqidagi
bilimlarni aks ettiradi. Yaratilishida dasturlash tili (PL) ITni qo'llash sohasiga
nisbatan ma'lum bir prognozni aks ettiradi. Dasturlash tizimlarini (SP) ishlab
chiqish va ishlatish amaliyoti bunday bilimlarni disk raskadrovka qilingan dasturlar
ko'rinishida ular uchun ma'lumotlar to'plamlari va ularni muvaffaqiyatli qo'llash
pretsedentlari bilan konkretlashtiradi va takomillashtiradi. PL dasturining
muvaffaqiyati , shaxsiy va umumiy tushunchalarni ta'kidlab, faktlar, hodisalar,
hodisalar va jarayonlarni "vakolatli" tavsiflash uchun qulay vosita yordamida
muammolarni qo'yishning kontseptual sxemasini va ularni hal qilish usullarini
belgilaydigan PPni muvaffaqiyatli tanlash natijasi deb hisoblash
mumkin . Dasturiy ta'minotni ishlab chiqish murakkab dasturiy ta'minot tizimlarini
yaratishda foydalaniladigan til tushunchalari va amalga oshirish tuzilmalarining
amaliyligini aks ettiradi. Shunisi qiziqki, dasturlash tillarining mashhurlik darajasi
muvaffaqiyatli bajarilgan loyihalarda qo'llaniladigan dasturlash tillari reytingidan
farq qiladi.
Dasturiy paradigmalarga Robert Floyd Turing ma'ruzasini bag'ishlagan
bo'lib, unda dasturchilarni tayyorlash muammosi nuqtai nazaridan ushbu
kontseptsiyaning ahamiyatiga e'tibor qaratgan. Dasturlarni tahlil qilish va
tekshirish nazariyasining asoslarini yaratgan, ma'lumotlarni qayta ishlashning bir
qator samarali usullari muallifi bo'lgan nufuzli olim dasturiy ta'minotning
dasturlash loyihalarining muvaffaqiyatiga, turli dasturlarni o'rganish
xususiyatlariga va dasturlash tillarida qanday qo'llab-quvvatlanishi kerakligiga
ta'sirini ta'kidlashni lozim topdi. Tarkibiy dasturlash misolini dominant dasturlash
metodologiyasi sifatida ko'rib chiqqan holda, R. Floyd, birinchi navbatda, ushbu
paradigmaning yuqoridan pastga dizayni, bosqichma-bosqich takomillashuvi va
muammoni oddiyroq pastki vazifalarga keltirishga yo'naltirilganligini
ta'kidladi; ikkinchidan, mashina darajasidagi aniq ob'ektlar va funktsiyalardan
ko'proq mavhum ob'ektlar va funktsiyalarga o'tish, yuqoridan pastga loyihalash
paytida ajratilgan modullar orqali fikr yuritish imkonini beradi.
Dasturlash tajribasida R. Floyd qiziqarli kuzatuv o'tkazdi: dasturlash san'ati
ishlatilgan paradigmalar repertuarini kengaytirishni o'z ichiga oladi. Uning
e'tiborini noaniq determinizm nuqtai nazaridan qulay tarzda tuzilgan rekursiv
korutinlarni tayyorlash muammosi jalb qildi, uning samarasizligi
makrotexnologiya tomonidan deyarli bartaraf etiladi. R. Floyd MIT-da yaratilgan
Universal Lisp tilida dasturlash imkoniyatlarining ko'plab misollarini yuqori
baholadi, eng sodda ro'yxatlardan universal ma'lumotlar tuzilmalariga (SD) o'tish
yo'lini ko'rsatdi, bu ma'lumotlar sifatida dasturlarning manipulyatsiyasini
osonlashtirdi.
R.Floyd dasturiy ta'minot loyihasining barcha darajalari uchun bir qator bunday
semantik usullarni aniq o'qitishni yo'lga qo'yish mumkinligiga ishonch hosil qildi,
shunda o'qitilgan talabalar soddalashtirilgan ta'lim muammolari bayonidan tortib to
doimiy ravishda kengayib boradigan amaliy masalalar sinfigacha barcha
muammolarni hal qilish uchun etarlicha boshga ega bo'ladilar.
Shuni ta'kidlash kerakki, R. Floydning Turing ma'ruzasidan beri o'ttiz yil ichida
turli tillar va dasturlash tizimlari soni bir necha yuzdan o'n minglabgacha
ko'paygan. Bundan tashqari, paradigmalar soni unchalik ko'p emas. Turli xil
manbalarda yigirmadan qirqgacha paradigmalar, ko'pincha ularning ro'yxatiga
individual usullar va usullar kiritilgan.
Mavjud dasturiy ta'minotni o'rganish va aniq tizimlashtirish turli xil AT va turli xil
sharoitlarda ishlatiladigan xizmatlardan foydalangan holda ishlab chiqilgan
murakkab ISlarning ishlashi, ishonchliligi va samaradorligini ta'minlashga
qaratilgan yondashuvlarni oqilona tanlashga yordam berish uchun ishlab
chiqilgan. Past darajadagi dasturlash vositalari zaif himoyalangan SD-ga umumiy
kirishdan foydalanish evaziga samarali echimlarni amalga oshirish qobiliyati bilan
tavsiflanishi mumkin. Yuqori darajadagi tillar kengaytirilgan SD ierarxiyasidan
foydalanishga moyil bo'lib, uning tarkibiy qismlari mustaqil ravishda yaratilgan
dastur qismlarining nazoratsiz o'zaro ta'siridan himoyalangan. Yuqori darajadagi
mexanizmlar (spetsifikatsiya tillari, parallel dasturlash tillari, bilimlarni namoyish
qilish tizimlari va boshqalar) uzoq muddatli dasturlarni ishlab chiqish va ulardan
foydalanish bilan bog'liq muammolarning ayrim sohalarida aniqlangan echimlarni
amalga oshirish maydonining to'liqligiga qaratilgan.
Yuqori darajadagi tillar (HLL) tufayli dasturlash ommaviy kasbga aylandi. JCU-da
dasturlash insonning echilayotgan vazifalarni tushunishi va ularni hal qilish
jarayonlarini tashkil etish xususiyatlarini aks ettiruvchi tushunchalarning
kengaytiriladigan iyerarxiyasini ifodalashga moslashtirilgan. JLU ga o'tish dastur
matnlarini tayyorlashda tuzilmalarni muntazam ravishda kattalashtirishga imkon
berdi. Buning uchun murakkab ma'lumotlar tuzilmalari, dasturlash texnikasining
stereotiplari, ob'ekt nomlarining lokalizatsiya qilinadigan ko'lamlari va ularni qayta
ishlash protseduralari talab etilib, dasturni bosqichma-bosqich disk raskadrovka
jarayonini birlashtirishga imkon beradigan tizimli-mantiqiy boshqaruv modeliga
bo'ysunishi kerak edi. Grafik interfeyslar va komponent texnologiyalari samarali
bo'lib, disk raskadrovka qilingan natijalarni turli tizimlarga uzatishni qo'llab-
quvvatlaydi . Asosiy e'tibor protseduralar kutubxonalari bilan integratsiyalashuvga,
dasturlarni samarali kompilyatsiya qilishga, ma'lumotlar turini boshqarishga,
dastur sohasi standartlariga va qulay xizmat ko'rsatiladigan texnologiyalarni tezkor
rivojlantirishga mos keladi. Bir qator samaradorlik muammolari JLDga past
darajadagi vositalarni kiritish orqali hal qilinadi. Blok-diagrammalarga ehtiyoj
deyarli yo'qoladi va o'z-o'zini hujjatlashtirish va mos yozuvlar quyi tizimlarini
amalga oshirish usuli hujjatlarning rolini yumshatadi. Java dasturi odatda qabul
qilinadigan jarayonlar oilasiga to'g'ri keladi , ularning ta'rifi tilning rasmiy
semantikasi bilan ifodalanadi. JVU-ni qo'llab-quvvatlaydigan dasturlash tizimi
(SP), qoida tariqasida, ushbu oilaning jarayonlaridan birini ishlab chiqaradi. Ushbu
torayish nafaqat HLUni amalga oshirish pragmatikasi, balki dasturlarni disk
raskadrovka qilishda jarayonlarni ko'paytirish zarurati bilan ham belgilanadi.
JLU-dagi dastur matni odatda biplanitarlikka ega bo'ladi - undagi ma'lumotlarni
qayta ishlash jarayonining majburiy vakili, ishlov berilayotgan ma'lumotlar turlari,
spetsifikatsiyalar, pragmalar va boshqalarni deklarativ tavsifi bilan birlashtiriladi,
bu erda dasturlarning to'g'riligini tekshirish uchun ishlatiladigan hisoblash
jarayonining fazoviy yaqinlashuvi, ma'lumotlar turlarini statik yoki dinamik
boshqarish kabi narsalar mavjud. HLU kontseptsiyalarini ishlab chiqish aniq
amaliy va noaniqlik, doimiy va o'zgaruvchan qiymatlar bo'shliqlari, boshlang'ich
va kompozit ma'lumotlar bo'shliqlari, ochiq va yopiq protseduralar, satrlar va
fayllarni qayta ishlash vositalari, faol va "dangasa" hisoblash imkoniyatlari, ketma-
ket va parallel hisoblash sxemalaridan foydalanish o'rtasidagi nisbat bilan
tavsiflanadi. Barcha QKlar katta tuzilmalarni amalga oshirishda va mahalliy
ma'lumotlarni himoya qilishda stekdan foydalanadilar. JCU uslubi ma'lumotlar
tuzilmalarini loyihalash, algoritmlarni kodlash, dasturlash nazariyasi mezonlari
asosida dasturlarni tahlil qilish va kompilyatsiya qilish usullari bilan chambarchas
bog'liq.
Odatda tilning yuqori darajasi dasturiy ta'minot bilan ta'minlanadi, ammo
dasturchilar va mikroprogramma paydo bo'lishi bilan dasturiy ta'minot va apparat
o'rtasidagi farq shartli bo'lib qoldi. Lisp, Paskal, Prolog, Smalltalk, Algol va
boshqa HLUlar mashina kodi sifatida kirish tillari sifatida amalga
oshirildi. Assembler Elbrus - bu Java-ning apparat tomonidan amalga
oshirilishining yorqin namunasidir.
JLU paradigmalarini tahlil qilishda quyidagi xususiyatlarni hisobga olish kerak:
- lakonik dasturni yozib olish uchun ma'lum tushunchalarni taqdim etishning yopiq
shakllari qo'llaniladi;
- ifodalar ko'pincha ma'lum uzunlikdagi yoki kompleks qiymatdagi skalar bo'yicha
oldindan hisoblash sxemasi uchun ishlab chiqiladi (birinchi navbatda, operandlar
hisoblanadi, so'ngra amallar natijasi hisoblanadi);
- har xil turdagi shoxchalar va tsikllar, funktsiyalar toifalari va protseduralari;
- ma'lumotlar turlari PLda belgilangan qoidalar asosida tuziladi va qo'shma
korxonada qabul qilingan andozalarga muvofiq amalga oshiriladi;
- hisoblashni boshqarish sxemalari ko'pincha tilda o'rnatiladi va dasturlash tizimida
aniq amalga oshiriladi;
- turli xil semantik tizimlarga taalluqli vositalar va usullarning o'zaro aloqasi va
muvofiqligi, ular dasturlash tizimida amalga oshirilganda, an'analar va
pretsedentlar bilan belgilanadi va kodda u yashirin yoki tarqoq bo'lib, tuzilmaga
ega emas;
- dasturlash samaradorligi xotirada ma'lumotlar tuzilmalari qiymatlari va
ishlovchilarini tatbiq etish usullarini bilishga asoslangan;
- dastur natijasi, qoida tariqasida, har xil o'zgaruvchiga tarqaladi, lekin ko'plab
HLUlarda bitta natijani hosil qiladigan iboralar va funktsiyalar mavjud.
Dastur kodi:
#include
using
namespace
std
;
void
bubbleSort
(
int
arr
[],
int
n
) {
bool
swapped;
for
(
int
i =
0
; i < n-
1
; i++) {
swapped =
false
;
// Loop Invariant: arr[n-1] to arr[n-i-1] are already in place.
for
(
int
j =
0
; j < n-i-
1
; j++) {
if
(
arr
[j] >
arr
[j+
1
]) {
swap
(
arr
[j],
arr
[j+
1
]);
swapped =
true
;
}
}
// If no two elements were swapped by inner loop, then break
if
(!swapped)
break
;
}
}
int
main
() {
int
arr[] = {
64
,
34
,
25
,
12
,
22
,
11
,
90
};
int
n =
sizeof
(arr)/
sizeof
(
arr
[
0
]);
bubbleSort
(arr, n);
cout <<
"Sorted array:
\n
"
;
for
(
int
i =
0
; i < n; i++)
cout <<
arr
[i] <<
" "
;
cout << endl;
return
0
;
}
Dastur kodi:
#include
#include
// Bu funksiya ikki sonning yig'indisini qaytaradi.
int
add
(
int
a
,
int
b
) {
return
a + b;
}
// Bu funksiya ikki sonning ayirmasini qaytaradi.
int
subtract
(
int
a
,
int
b
) {
return
a - b;
}
int
main
() {
// add funksiyasini tekshiramiz
assert
(
add
(
2
,
2
) ==
4
);
assert
(
add
(-
1
,
1
) ==
0
);
assert
(
add
(-
1
, -
1
) == -
2
);
// subtract funksiyasini tekshiramiz
assert
(
subtract
(
5
,
3
) ==
2
);
assert
(
subtract
(-
1
, -
1
) ==
0
);
assert
(
subtract
(
0
,
0
) ==
0
);
// Agar barcha testlar muvaffaqiyatli o'tsa, quyidagi xabar chiqariladi
std
::cout <<
"All tests passed successfully."
<<
std
::endl;
return
0
;
}
Dastur kodi:
#include
#include
// OpenMP kutubxonasi
using
namespace
std
;
int
main
() {
int
n =
100000
;
// Parallel hisoblash uchun qo'llanma soni
int
sum =
0
;
// Yig'indisi
#pragma
omp
parallel
for
reduction
(+:
sum
)
// Parallel sikl
for
(
int
i =
0
; i < n; ++i) {
sum += i;
}
cout <<
"Yig'indi: "
<< sum << endl;
// Yig'indini chiqarish
return
0
;
}
|