Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr



Download 5,36 Mb.
Pdf ko'rish
bet217/335
Sana02.08.2021
Hajmi5,36 Mb.
#136132
1   ...   213   214   215   216   217   218   219   220   ...   335
Bog'liq
Dasturlash asoslari(O'zbekcha)

5.3.1 Qism dasturga misol 
2 ta a va b sonlar berilgan ularni o‘rnini almashtirish dasturini S dasturlash 
tilida ko‘rib chiqamiz. 
void swap1 (a,b: integer) 
temp: integer; 
begin 
temp:=a; 
 
a:=b; 
b:=temp; 
end; 
 
swap1 funksiyasini quyidagi ko‘rinishda chaqirish mumkin: 
 
swap1(&c, &d); 
 
swap1 funksiyasining amalini quyidagi psevdokod orqali tavsiflash mumkin: 
 
a=&c   
 
- birinchi parametr qiymatini jo‘natish 


Dasturlash tillari va axborot-kommunikatsiya texnologiyalari                                                              1-semestr
 
 
229 
 
b=&d  
 
- ikkinchi parametr qiymatini jo‘natish 
temp=*a 
*a=*b 
*b=temp 
 
O‘rnatish  funksiyasini  S  tilida  shunday  modifikatsiyalaymizki,  u  ko‘rsatkichlar 
bilan  parametrlar  kabi  ishlasin.  Bu  esa  ssыlka  bo‘yicha  parametrlarni  yuborish 
effektiga erishishga imkon beradi. 
void swap2 (int*a, int*b) 

Int temp =*a; 
*a=*b; 
*b=temp;  

swap2 funksiyasini quyidagi ko‘rinishda chaqirish mumkin: 
Swap2(&c, &d); 
swap2 funksiyasining amalini quyidagi psevdokod orqali tavsiflash mumkin: 
a=&c - birinchi parametr manzilini jo‘natish 
b=&d - ikkinchi parametr manzilini jo‘natish 
temp=*a 
*a=*b 
*b=temp 
Bu holda, to‘xtatish amali samarali bo‘ladi: c va d o‘zgaruvchilarning qiymatlari 
rostdan ham o‘zaro joy almashadi. 
swap2  funksiyasini  S++  tilida  quyida  ko‘rsatilganidek  ssыlkalarni  parametrlar 
kabi qo‘llab yozish mumkin: 
Void swap2 (int &a,int&b) 
{int temp=a; 
a=b; 
b=temp; 

Ushbu  oddiy  to‘xtatish  amali  Java  tilida  mumkin  emas,  chunki  u  yerda  na 
ko‘rsatkichlar va na S++  tilidagi ssыlkalarga muvofiq  bo‘lgan ssыlkalar  mavjud. Java 
tilida ssыlka skalyar kattalikka emas, balki faqat ob’ektgagina yo‘naltirilishi mumkin. 
Pascal tilida swap2 funksiyasini quyidagicha yozish mumkin: 
 
Procedure swap2 (var a, b:integer) 
Temp : integer; 
Begin 
Temp:=a; 


Dasturlash tillari va axborot-kommunikatsiya texnologiyalari                                                              1-semestr
 
 
230 
 
a:=b; 
b:=temp; 
end; 
 
Aytaylik, swap2 amali Pascal tilida quyidagicha chaqirilsin: 
 
swap2 (1, list[1]); 
 
Bu holda, uning amallarini quyidagicha yozish mumkin: 
 
a=&i - birinchi parametr manzilini jo‘natish 
b=&list[i] - ikkinchi parametr manzilini jo‘natish 
temp=*a 
*a=*b 
*b=temp 
Nomi  o‘zgartirilgan  *a  (i  o‘zgaruvchisi  qiymatiga  teng)  ssыlkasining  qiymati 
nomi  o‘zgartirilgan  *b  (list[i]  qiymatiga  teng)  ssыlkasining  qiymati  o‘zgargunigacha 
o‘zgarib  bo‘lganiga  qaramay,  bu  to‘xtatishning  to‘g‘riligiga  hech  qanday  ta’sir 
ko‘rsatmaydi,  chunki  list[i]  o‘zgaruvchisi  qiymati  chaqirish  paytida  hisoblanadi  va 
bundan keyin i o‘zgaruvchisiga nima bo‘lmasin, o‘zgarmas bo‘lib qoladi. 
Parametrlarni qiymat  bo‘yicha yuborish semantikasi ssыlka  bo‘yicha yuborish 
semantikasi  bilan  ismlar  aralashmasi  yuz  bermagan  holdagina  bir  xildir.  Eslatib 
o‘taylik, Ada tilida  kiritishchiqarish  rejimida qiymatlar va natijalar bo‘yicha yuborish 
skalyar  parametrlarni  yuborishda  qo‘llaniladi.  Parametrlarni  qiymatlar  va  natijalar 
bo‘yicha  yuborishni  o‘rganib  chiqish  uchun,  keyingi  swap3  funksiyasini  ko‘rib 
chiqamiz,  bunda  ushbu  metod  qo‘llaniladi.  U  Ada  tiliga  yaqin  bo‘lgan  sintaksis 
yordamida yozilgan. 
 
procedure swap3 (a: in out integer, b : in out integer) is 
temp : integer; 
begin 
temp := a; 
a:= b; 
b:= temp; 
end swap3; 
 
Aytaylik, swap3 protsedurasi quyidagicha chaqirilsin: 
 
swap3(c,d); 
 


Dasturlash tillari va axborot-kommunikatsiya texnologiyalari                                                              1-semestr
 
 
231 
 
swap3 funksiyasi amallarini ushbu chaqiruvda quyidagicha yozish mumkin: 
 
addr_c = &c - birinchi parametr manzilini jo‘natish 
addr_d = &d 
- ikkinchi parametr manzilini jo‘natish 
a = *addr_c - birinchi parametr qiymatini jo‘natish 
c = *addr_d - ikkinchi parametr qiymatini jo‘natish 
temp = a 
a = b 
c = temp 
*addr_c = a - birinchi parametr qiymatini qaytraish 
*addr_d = b - ikkinchi parametr manzilini jo‘natish 
 
Shunday  qilib,  ushbu  to‘xtatish  quyi  dasturi  to‘g‘ri  ishlayapti.  Endi  quyidagi 
chaqiruvni ko‘rib chiqamiz: 
 
swap3(i, list[i]); 
 
Bu holda swap3 protsedurasi amallarini quyidagi ko‘rinishda yozish mumkin: 
 
addr_i = &i birinchi parametr manzilini jo‘natish 
addr_listi = &list[i] - ikkinchi parametr manzilini jo‘natish 
a = *addr_i - birinchi parametr qiymatini jo‘natish 
b = *addr_listi 
 - ikkinchi parametr qiymatini jo‘natish 
temp = a 
a = b 
b = temp 
*addr_i = a - birinchi parametr qiymatini qaytarish 
*addr_listi = b - ikkinchi parametr qiymatini qaytarish 
 
Bu  holda  quyi  dastur  yana  to‘g‘ri  ishlayapti,  chunki  parametrlarning 
qaytariluvchi  qiymatlari  yoziluvchi  katakcha  manzillari  quyi  tizimdan  qaytarish 
vaqtida emas, balki chaqirish vaqtida hisoblanadi. Agar faktli parametrlar manzillari 
quyi tizimdan qaytarilish vaqtida hisoblanganida edi, natijalar noto‘g‘ri bo‘lgan bo‘lar 
edi. 
Ismlarni  aralashtirib  yuborishda  nima  yuz  berishini  ko‘rib  chiqaylik.  Bunda 
parametrlar  qiymatlar  va  natijalar  orqali  jo‘natiladi.  S  tiliga  yaqin  bo‘lgan  sintaksis 
yordamida yozilgan skelet dasturn ko‘rib chiqamiz: 
 
int i =3; /* i- dunyoviy o‘zgaruvchi */ 
void fun (int a, int b) { 


Dasturlash tillari va axborot-kommunikatsiya texnologiyalari                                                              1-semestr
 
 
232 
 
i=b; 

void main() { 
int list[10]; 
list[i]=5; 
fun (i, list[i]); 

 
fun  funksiyasida  ssыlka  bo‘ylab  parametrlarni  jo‘natish  amalga  oshiriladi, 
bunda  i  va  a  o‘zgaruvchilari  alternativ  nomlar  bo‘ladi.  Agar  parametrlar  qiymat  va 
natijalar  bo‘ylab  yuborilsa,  i  va  a  o‘zgaruvchilari  alternativ  nomlar  bo‘lmaydi.  Bu 
holda fun funksiya amallari quyidagicha: 
 
addr_i = &i - birinchi parametr manzilini jo‘natish 
addr_listi = &list[i] - ikkinchi parametr manzilini jo‘natish 
a = *addr_i   
- birinchi parametr qiymatini jo‘natish 
b = *addr_listi 
 
- ikkinchi parametr qiymatini jo‘natish 
i = b   
 
- i ni 5 ga tenglash 
*addr_i = a   
- birinchi parametr qiymatini qaytarib olish 
*addt_listi = b 
 
- ikkinchi parametr qiymatini qaytarib olish 
 
Bu  holda,  fun  quyi  dasturida  i  global  o‘zgaruvchisini  qabul  qilish  natijasida 
uning  qiymati  2dan  3ga  o‘zgaradi,  orqaga  esa  3  qiymatni  saqlovchi  birinchi  rasmiy 
parametr  nusxasi  qaytariladi.  Bu  yerda  ssыlka  bo‘ylab  xabar  jo‘natish  amalga 
oshirilsa,  nusxa  qaytarish  parametrlarni  jo‘natish  semantikasi  bo‘limi  bo‘lmasligini 
yodda  tutish  lozim.  Shuning  uchun  i  o‘zgaruvchisi  5  ga  tengiligicha  qoladi.  Ikkinchi 
parametr  manzili  fun  funksiyasi  bajarilishidan  oldin  hisoblangani  uchun,  global  i 
o‘zgaruvchisidagi o‘zgarishlar uning manziliga ta’sir ko‘rsatmaydi. Ushbu manzil list[i] 
o‘zgaruvchisining qiymati qaytarilganida chiqishda qo‘llaniladi. 
 

Download 5,36 Mb.

Do'stlaringiz bilan baham:
1   ...   213   214   215   216   217   218   219   220   ...   335




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish