Войти Регистрация

Docx

  • Рефераты
  • Дипломные работы
  • Прочее
    • Презентации
    • Рефераты
    • Курсовые работы
    • Дипломные работы
    • Диссертациии
    • Образовательные программы
    • Инфографика
    • Книги
    • Тесты

Информация о документе

Цена 2000UZS
Размер 21.1KB
Покупки 0
Дата загрузки 07 Ноябрь 2026
Расширение docx
Раздел Рефераты
Предмет Педагогика

Продавец

Bohodir Jalolov

Massivlar va ko‘rsatkichlar

Купить
Massivlar va ko’rsatkichlar
Reja:
 
1.       Bir o‘lchovli	 massivlar.
2.       Ko‘p	
 o‘lchamli	 massivlar.
3.       Satrlar	
 massiv	 sifatida.
4.       Satrlar	
 bilan	 ishlovchi	 funksiyalar.
  Massiv   tushunchasi.   Massiv bu	 bir	 tipli	 nomerlangan	 ma’lumotlar
jamlanmasidir.	
 Massiv	 indeksli	 o‘zgaruvchi	 tushunchasiga	 mos	 keladi.	 Massiv
ta’riflanganda	
 tipi,	 nomi	 va	 indekslar	 chegarasi	 ko‘rsatiladi.	 Masalan	 type
turidagi	
 length	 ta	 elementdan	 iborat	 a nomli	 massiv	 shunday	 e’lon	 qilinadi:
type	
 a[length];
Bu	
 maxsus	 a[0],	 a[1],	 ...,	 a[length	 -1]	 nomlarga	 ega	 bo‘lgan	 type	 turidagi
o‘zgaruvchilarning	
 e’lon	 qilinishiga	 to‘g‘ri	 keladi.
Massivning	
 har	 bir	 elementi	 o‘z	 raqamiga	 - indeksga	 ega.	 Massivning	 x-
nchi	
 elementiga	 murojaat	 indekslash	 operatsiyasi	 yordamida	 amalga	 oshiriladi:
int	
 x=...;                     //butun	 sonli	 indeks
TYPE	
 value=a[x];           //ch-nchi	 elementni	 o‘qish
a[x]=value;                 //x-yxb	
 elementga	 yozish
Indeks	
 sifatida	 butun	 tur	 qiymatini	 qaytaradigan	 har	 qanday	 ifoda
qo‘llanishi	
 mumkin:	 char,	 short,	 int,	 long.	 C++	 da	 massiv	 elementlarining
indekslari	
 0 dan	 boshlanadi	 (1	 dan	 emas),	 length	 elementdan	 iborat	 bo‘lgan
massivning	
 oxirgi	 elementining	 indeksi	 esa	 - bu	 length	 -1	 (length	 emas).
Massivning	
 int	 z[3]	 shakldagi	 ta’rifi,	 int	 tipiga	 tegishli	 z[0],z[1],z[2]
elementlardan	
 iborat	 massivni	 aniqlaydi.
Massiv	
 chegarasidan	 tashqariga	 chiqish	 (ya’ni	 mavjud	 bo‘lmagan
elementni	
 o‘qish/yozishga	 urinish)	 dastur	 bajarilishida	 kutilmagan	 natijalarga
olib	
 kelishi	 mumkin.	 SHuni	 ta’kidlab	 o‘tamizki,	 bu	 eng	 ko‘p	 tarqalgan
xatolardan	
 biridir. Agar massiv	 initsializatsiya	 qilinganda	 elementlar	 chegarasi	 ko‘rsatilgan
bo‘lsa	
 , ro‘yxatdagi	 elementlar	 soni	 bu	 chegaradan	 kam	 bo‘lishi	 mumkin,	 lekin
ortiq	
 bo‘lishi	 mumkin	 emas.
Misol	
 uchun	 int	 a[5]={2,-2}.	 Bu	 holda	 a[0]	 va	 a[1]	 qiymatlari	 aniqlangan
bo‘lib,	
 mos	 holda	 2 va	 –2	 ga	 teng.	 Agar	 massiv	 uzunligiga	 qaraganda	 kamroq
element	
 berilgan	 bo‘lsa,	 qolgan	 elementlar	 0 hisoblanadi:
int	
 a10[10]={1,	 2,	 3,	 4};         //va	 6 ta	 nol
Agar	
 nomlangan	 massivning	 tavsifida	 uning	 o‘lchamlari	 ko‘rsatilmagan
bo‘lsa,	
 kompilyator	 tomonidan	 massiv	 chegarasi	 avtomatik	 aniqlanadi:
int	
 a3[]={1,	 2,	 3};          
Bir	
 o‘lchamli	 massivlarni	 funksiya	 parametrlari	 sifatida	 uzatish.	 Massivdan
funksiya	
 parametri	 sifatida	 foylalanganda,	 funksiyaning	 birinchi	 elementiga
ko‘rsatkich	
 uzatiladi,	 ya’ni	 massiv	 hamma	 vaqt	 adres	 bo‘yicha	 uzatiladi.	 Bunda	 
massivdagi	
 elementlarning	 miqdori	 haqidagi	 axborot	 yo‘qotiladi,	 shuning	 uchun
massivning	
 o‘lchamlari	 haqidagi	 ma’lumotni	 alohida	 parametr	 sifatida	 uzatish
kerak.
Funksiyaga	
 massiv	 boshlanishi	 uchun	 ko‘rsatkich	 uzatilgani	 tufayli	 (adres
bo‘yicha	
 uzatish),	 funksiya	 tanasining	 operatorlari	 hisobiga	 massiv	 o‘zgarishi
mumkin.
Funksiyalarda	
 bir	 o‘lchovli	 sonli	 massivlar	 argument	 sifatida	 ishlatilganda
ularning	
 chegarasini	 ko‘rsatish	 shart	 emas.
Funksiyalarda	
 bir	 o‘lchovli	 sonli	 massivlar	 argument	 sifatida	 ishlatilganda
ularning	
 chegarasini	 ko‘rsatish	 shart	 emas. Ko‘p o‘lchovli	 massivlar	 ta’rifi.   Ikki	 o‘lchovli	 massivlar	 matematikada
matritsa	
 yoki	 jadval	 tushunchasiga	 mos	 keladi.	 Jadvallarning	 insializatsiya
qilish	
 qoidasi,	 ikki	 o‘lchovli	 massivning	 elementlari	 massivlardan	 iborat
bo‘lgan	
 bir	 o‘lchovli	 massiv	 ta’rifiga	 asoslangandir.
Misol	
 uchun	 ikki	 qator	 va	 uch	 ustundan	 iborat	 bo‘lgan	 xaqiqiy	 tipga
tegishli	
 d massiv	 boshlang‘ich	 qiymatlari	 quyidagicha	 ko‘rsatilishi	 mumkin:
float	
 d[2][3]={(1,-2.5,10),(-5.3,2,14)};
Bu	
 yozuv	 quyidagi	 qiymat	 berish	 operatorlariga	 mosdir:
d[0][0]=1;d[0][1]=-2.5;d[0][2]=10;
d[1][0]=-5.3;d[1][1]=2;d[1][2]=14;
Bu	
 qiymatlarni	 bitta	 ro‘yxat	 bilan	 xosil	 qilish	 mumkin:
float	
 d[2][3]={1,-2.5,10,-5.3,2,14};
Initsializatsiya	
 yordamida	 boshlang‘ich	 qiymatlar	 aniqlanganda	 massivning
hamma	
 elementlariga	 qiymat	 berish	 shart	 emas.
        Misol	
 uchun:	 int	 x[3][3]={(1,-2,3),(1,2),(-4)}.
Bu	
 yozuv	 quyidagi	 qiymat	 berish	 operatorlariga	 mosdir:
x[0][0]=1;x[0][1]=-2;x[0][2]=3;
x[1][0]=-1;x[1][1]=2;x[2][0]=-4;
Initsializatsiya	
 yordamida	 boshlang‘ich	 qiymatlar	 aniqlanganda	 massivning
birinchi	
 indeksi	 chegarasi	 ko‘rsatilishi	 shart	 emas,	 lekin	 qolgan	 indekslar
chegaralari	
 ko‘rsatilishi	 shart.
Misol	
 uchun: double x[][2]={(1.1,1.5),(-1.6,2.5),(3,-4)}
Bu	
 misolda	 avtomatik	 ravishda	 katorlar	 soni	 uchga	 teng	 deb	 olinadi.
Funksiyaga	
 ko‘p	 o‘lchamli	 massivlarni	 uzatish.	 Ko‘p	 o‘lchamli
massivlarni	
 funksiyaga	 uzatishda	 barcha	 o‘lchamlar	 parametrlar	 sifatida
uzatilishi	
 kerak.	 C++	 da	 ko‘p	 o‘lchamli	 massivlar	 aniqlanishi	 bo‘yicha	 mavjud
emas.	
 Agar	 biz	 bir	 nechta	 indeksga	 ega	 bo‘lgan	 massivni	 tavsiflasak	 (masalan,
int	
 mas	 [3][4]),	 bu	 degani,	 biz	 bir	 o‘lchamli	 mas	 massivini	 tavsifladik,	 bir
o‘lchamli	
 int	 [4]	 massivlar	 esa	 uning	 elementlaridir
Misol:   Kvadrat	
 matritsani	 uzatish	 (transportirovka	 qilish)
Agar	
 void	 transp(int	 a[][],int	 n){.....}	 funksiyasining	 sarlavhasini	 aniqlasak,
bu	
 holda	 biz	 funksiyaga	 noma’lum	 o‘lchamdagi	 massivni	 uzatishni	 xohlagan
bo‘lib	
 qolamiz.	 Aniqlanishiga	 ko‘ra	 massiv	 bir	 o‘lchamli	 bo‘lishi	 kerak,	 hamda
uning	
 elementlari	 bir	 xil	 uzo‘nlikda	 bo‘lishi	 kerak.	 Massivni	 uzatishda	 uning
elementlarining	
 o‘lchamlari	 haqida	 ham	 biron	 narsa	 deyilmagan,	 shuning	 uchun
kompilyator	
 xato	 chiqarib	 beradi.
Bu	
 muammoning	 eng	 sodda	 echimi	 funksiyani	 quyidagicha	 aniqlashdir:
void	
 transp(int	 a[][4],int	 n){.....},	 bu	 holda	 har	 bir	 satr	 o‘lchami	 4 bo‘ladi,
massiv	
 ko‘rsatkichlarining	 o‘lchami	 esa	 hisoblab	 chiqariladi.
Satrlar.	
 C++	 da	 belgili	 ma’lumotlar	 uchun	 char	 turi	 qabul	 qilingan.	 Belgili
axborotni	
 taqdim	 etishda	 belgilar,	 simvolli	 o‘zgaruvchilar	 va	 matniy
konstantalar	
 qabul	 qilingan.
Misollar:
const	
 char	 c= ' c ' ;//belgi	 - bir	 baytni	 egallaydi,	 uning	 qiymati	 o‘zgarmaydi char a,b;//belgili	 o‘zgaruvchilar,	 bir	 baytdan	 joy	 egallaydi,	 qiymatlari
o‘zgaradi.
  C++	
 dagi	 satr	 - bu	 nul-belgi	 - \0	 (nul-terminator)-	 bilan	 tugallanuvchi
belgilar	
 massivi.	 Nul-terminatorning	 holatiga	 qarab	 satrning	 amaldagi	 uzunligi
aniqlanadi.	
 Bunday	 massivdagi	 elementlar	 soni,	 satr	 tasviriga	 qaraganda,	 bittaga
ko‘p.
Simvolli	
 massivlar	 quyidagicha	 initsializatsiya	 qilinadi:
char	
 capital[]= " TASHKENT " ;	 Bu	 holda	 avtomatik	 ravishda	 massiv
elementlari	
 soni	 aniqlanadi	 va	 massiv	 oxiriga	 satr	 ko‘chirish   '\0' simvoli
qo‘shiladi.
YUqoridagi	
 initsializatsiyani	 quyidagicha	 amalga	 oshirish	 mumkin:
char   capital[]={ 'T' , 'A' , 'S' , 'H' , 'K' , 'E' , 'N' , 'T' , '\0' };
Bu	
 holda	 so‘z	 oxirida   '\0' simvoli	 aniq	 ko‘rsatilishi	 shart.
Qiymat	
 berish	 operatori	 yordamida	 satrga	 qiymat	 berish	 mumkin	 emas.
Satrni	
 massivga	 yoki	 kiritish	 paytida	 yoki	 nomlantirish	 yordamida	 joylashtirish
mumkin.
Funksiyalar	
 va	 satrlar.   Funksiyalarda	 satrlar	 ishlatilganda	 ularning
chegarasini	
 ko‘rsatish	 shart	 emas.	 Satrlarning	 uzunligini	 hisoblash	 len
funksiyasii	
 quyidagicha	 ta’riflash	 mumkin:
int	
 len(char	 c[])
{	
 int	 m=0;
for(m=0;c[m]!=’0’;m++);
return
 m; };
Bu funksiyaning	 standart	 varianti	 strlen	 deb	 ataladi	 va	 bu	 funksiyadan
foydalanish	
 uchun	 string.h	 sarlavxali	 faylidan	 foydalanish	 lozim.
So‘zlar	
 massivini	 kiritish.	 C++	 tilida	 so‘zlar	 massivlari	 ikki	 o‘lchovli
simvolli	
 massivlar	 sifatida	 ta’riflanadi.	 Misol	 uchun:
char	
 name[4][5].
Bu	
 ta’rif	 yordamida	 har	 biri	 5 ta	 harfdan	 iborat	 bo‘lgan	 4 ta	 so‘zli	 massiv
kiritiladi.	
 So‘zlar	 massivlari	 quyidagicha	 initsializatsiya	 qilinishi	 mumkin:
  char	
 Name[3][8]={   " Anvar " , " Mirkomil " , " YUsuf " }.
  Bu	
 ta’rifda	 har	 bir	 so‘z	 uchun	 xotiradan	 8 bayt	 joy	 ajratiladi	 va	 har	 bir	 so‘z
oxiriga   '   \0 '   belgisi	
 qo‘yiladi.
So‘zlar	
 massivlari	 initsializatsiya	 qilinganda	 so‘zlar	 soni	 ko‘rsatilmasligi
mumkin.	
 Bu	 holda	 so‘zlar	 soni	 avtomatik	 aniqlanadi:
char	
 comp[][9]={   " kompьyuter " , " printer " , " kartridj " }.
Funksiyalar	
 va	 so‘zlar	 massivlar.   Satrli	 massivlar	 funksiya	 argumenti
sifatida	
 ishlatilganda	 satrlarning	 umumiy	 uzunligi	 aniq	 ko‘rsatilishi	 shartdir.
S T R I N G   T I P I .   S A T R L A R   B I L N   I S H L A S H   U C H U N
S T A N D A R T   B I B L I O T E K A G A
K I R U V C H I   S T R I N G   M U R A K K A B   T U R I D A N
F O Y D A L A N I S H   Q U L A Y D I R .
Bu	
 tipdan	 foydalanish	 uchun	 quyidagi	 sarlavxali	 faylni	 ulash	 lozim:
#include	
 <string>
Satrlarni
 ta’riflashga	 misollar: string st(	 "BAXO	 \n"	 ); //simvollar	 satri	 bilan	 initsiallash
string	
 st2;	 // bo‘sh	 satr
string	
 st3(	 st ); shu	 tipdagi	 o‘zgaruvchi	 bilan	 initsiallash
S A T R L A R   U S T I D A   A M A L L A R .   S A T R L A R   U S T I D A
Q U Y I D A G I   A M A L L A R   A N I Q L A N G A N :
      qiymat	
 berish	 (=);
      konkatenatsiya
 yoki	 satrlarni	 ulash	 (+);
      qiymat	
 berib	 qo‘shish	 amali	 (+=)
      ikki	
 amal	 ekvivalentlikni	 tekshirish	 uchun	 (==)	 va	 (!=);
      indeks	
 olish	 ([]).
      solishtirish
 amallari(	 <,	 <=,>,	 >=);
  Ko‘rsatkichlar.   Ko‘rsatkich	
 - xotira	 uyasining	 unikal	 adresini	 saqlaydigan	 
o‘zgaruvchi.	
 Ko‘rsatkich	 operativ	 xotiradagi	 biron-bir	 o‘zgaruvchi	 mavjud	 
bo‘lishi	
 mumkin	 bo‘lgan	 biron-bir	 joyni	 belgilaydi.	 Ko‘rsatkichlarning	 
qiymatlarini	
 o‘zgartirish,	 turli	 variantlarda	 qo‘llash	 mumkinki,	 bu	 dasturning	 
moslashuvchanligini	
 oshiradi.
Ko‘rsatkich	
 odatda	 tipga	 ega	 bo‘lib	 quyidagicha	 e’lon	 qilinadi:
<turning	
 nomi>*<ko‘rsatkichning	 nomi>=<dastlabki	 qiymat>
Misol	
 uchun:
int	
 *pr;
char
 *alfa;
Bu
 holda	 ko‘rsatkichlar	 noaniq	 qiymatga	 ega	 bo‘ladi.	 Ko‘rsatkichlar
ta’riflanganda	
 ularning	 tiplari	 ko‘rsatilishi	 shart.	 Ko‘rsatkichlarni	 initsializatsiya
kilish	
 ya’ni	 boshlang‘ich	 qiymatlarini	 kiritish	 mumkin.	 Ma’lum	 turdagi	 biron-
bir	
 o‘zgaruvchi	 adresi	 yoki	 NULL	 qiymat	 dastlabki	 qiymat	 bo‘lishi	 mumkin. Ko‘rsatkichlarga boshlang‘ich	 maxsus	 NULL	 qiymati	 berilsa	 bunday
ko‘rsatkich	
 bo‘sh	 ko‘rsatkich	 deb	 ataladi.
Biron-bir	
 o‘zgaruvchi	 adresini	 olish	 hamda	 uni	 ko‘rsatkichga	 qiymat
sifatida	
 berish	 uchun	 «&»	 operatori	 qo‘llanadi.
Misol:
int	
 I=100;
int*p=&I;
unsigned	
 longint	 *ul=NULL;
Teskari	
 operator	 - «*»	 bo‘lib,	 ko‘rsatkichda	 saqlanayotgan	 adres	 bo‘yicha
uya	
 qiymatiga	 murojaat	 qilish	 imkonini	 beradi.
Misol:
int	
 I=100;
int*p=&I
int
 J=*p;
Ilova	
 tushunchasi.	 Ilova	 (ssыlka)	 – ilova	 ta’rifirda	 ko‘rsatilgan	 ob’ekt
nomining	
 sinonimi.
Ilovani
 e’lon	 qilish	 shakli
tur	
 &	 ism	 =ism_ob’ekt;
Misollar:
int	
 x;	 // o‘zgaruvchining	 aniqlash
int&	
 sx=x;	 //x	 o‘zgaruvchiga	 iqtibosni	 aniqlash const char	 &	 CR= ' \n ' ;	 //konstantaga	 iqtibosni	 aniqlash
Ilovalar	
 bilan	 ishlash	 qoidalari.
1)	
 O‘zgaruvchi	 ilova,	 agar	 u funksiya	 parametri	 bo‘lmasa,	 extern	 sifatida
tavsiflanmagan	
 bo‘lsa	 yoki	 sinf	 maydoniga	 ilova	 qilmasa,	 o‘ziga	 tavsif
berilayotganda	
 ochiq-oydin	 nomlanishi	 kerak.
2)	
 Nomlangandan	 so‘ng,	 ilovaga	 boshqa	 qiymat	 berilishi	 mumkin	 emas.
3)	
 Ilovalarga	 ko‘rsatkichlar,	 ilovalar	 massivlari	 va	 ilovalarga	 ilovalar
bo‘lishi	
 mumkin	 emas.
4)	
 Ilova	 ustida	 o‘tkazilgan	 operatsiya	 o‘zi	 ilova	 qilayotgan	 qiymatning
o‘zgarishiga	
 olib	 keladi
Ko‘rsatkichlar	
 ustida	 o‘tkaziladigan	 operatsiyalar.	 Ko‘rsatkichlar	 ustida
unar	
 operatsiyalar	 bajarish	 mumkin:	 inkrement	 va	 dekrement	 ++	 va	 --
operatsiyalarini	
 bajarishda,	 ko‘rsatkich	 qiymati	 ko‘rsatkich	 murojaat	 qilgan	 tur
uzunligiga	
 ko‘payadi	 yoki	 kamayadi.
Misol:
int*ptr,	
 a[10];
ptr=&a[5];
ptr++;       */	
 = a[6]*/	 elementining	 adresiga
ptr--;       */	
 = a[5]*/	 elementining	 adresiga
Qo‘shish	
 va	 ayirish	 binar	 operatsiyalarida	 ko‘rsatkich	 va	 int	 turining
qiymati	
 ishtirok	 etishi	 mumkin.	 Bu	 operatsiya	 natijasida	 ko‘rsatkich	 qiymati
dastlabkisidan	
 ko‘rsatilgan	 elementlar	 soniga	 ko‘proq	 yoki	 kamroq	 bo‘ladi.
Misol: int*ptr1, *ptr2,	 a[10];
int	
 i=2;
ptr1=a+(i+4);       /*	
 = a[6]*/	 elementining	 adresiga
ptr2=ptr1-i;         /*	
 = a[4]*/	 elementining	 adresiga
Ayirish	
 operatsiyasida	 bitta	 turga	 mansub	 bo‘lgan	 ikkita	 ko‘rsatkich
ishtirok	
 etishi	 mumkin.	 Operatsiya	 natijasi	 int	 turiga	 ega	 hamda	 kamayuvchi	 va
ayiruvchi	
 o‘rtasidagi	 dastlabki	 tur	 elementlarining	 soniga	 teng,	 bundan	 tashqari
agar	
 birinchi	 adres	 kichikroq	 bo‘lsa,	 u holda	 natija	 manfiy	 qiymatga	 ega	 bo‘ladi.
Misol:
int	
 *ptr1,	 *ptr2,	 a[10];
int	
 i;
ptr1=a+4;
ptr2=a+9;
i=ptr1-ptr2;	
 /*=5	 */
i=ptr1-ptr2;	
 /*=-5	 */
Funksiyalarni	
 chaqirishda	 foydalanish.	 C++   tili	 sintaksisiga	 ko‘ra
funksiyaga	
 ko‘rsatkich	 funksiya	 adresini	 aks	 ettiruvchi	 o‘zgaruvchi	 yoki
ifodadir.	
 Funksiyaga	 ko‘rsatkich	 bajariluvchi	 qiymati	 funksiya	 kodining	 birinchi
bayti	
 adresidir.	 Funksiyaga	 ko‘rsatkichlar	 ustida	 arifmetik	 amallar	 bajarish
mumkin	
 emas.	 Eng	 keng	 qo‘llanuvchi	 funksiyaga	 konstanta	 ko‘rsatkich
funksiyaning	
 nomidir.	 Funksiyaga	 o‘zgaruvchi	 ko‘rsatkich	 funksiya	 ta’rifi	 va
prototipidan	
 aloxida	 kiritiladi.	 Funksiyaga	 o‘zgaruvchi	 ko‘rsatkich	 quyidagicha
tasvirlanadi:   <funksiya tipi>	 (*	 ko‘rsatkich	 nomi)(parametrlar	 spetsifikatsiyasi).
Misol	
 uchun	 int	 (*point)	 (void).
Bu	
 ta’rifda	 qavslar	 muxim	 ahamiyatga	 ega,	 chunki	 qavslar	 yozilmasa	 bu
ta’rif	
 parametrsiz	 funksiya	 prototipi	 deb	 karaladi.	 Funksiyaga	 o‘zgaruvchi
ko‘rsatkich	
 qiymatlari	 sifatida,	 bir	 xil	 tipga	 ega	 bo‘lgan	 har	 xil	 funksiyalar
adreslarini	
 berilishi	 mumkin.
Qiymati	
 biror	 funksiya	 adresiga	 teng	 bo‘lgan	 funksiyaga	 o‘zgaruvchi
ko‘rsatkich	
 shu	 funksiyaga	 murojaat	 kilish	 uchun	 ishlatilishi	 mumkin.
Dasturda	
 funksiyaga	 kostanta	 ko‘rsatkich	 ya’ni	 nomlari	 orqali	 va
o‘zgaruvchi	
 ko‘rsatkichlar	 yordamida	 murojaat	 qilishning	 hamma	 usullari
ko‘rsatilgandir.	
 SHuni	 ta’kidlash	 lozimki	 adres	 olish	 * amali	 qo‘llanilganda
qavslar	
 ishlatish	 shartdir.

Massivlar va ko‘rsatkichlar

Купить
  • Похожие документы

  • 2001-yil sentabr voqealri va uning xalqaro munosabatlarga
  • 1945-1990-yillarda Buyuk Britaniya
  • 1918-1923 yillarda xalqaro munosabatlar, Versal Vashington siyetemasining tuzilishi
  • Ahmad al-farg‘oniy
  • Almashlab ekishni loyihalashtirish va joriy etish

Подтвердить покупку

Да Нет

© Copyright 2019-2026.

  • Инструкция по снятию с баланса
  • Контакты
  • Инструкция использования сайта
  • Инструкция загрузки документов
  • O'zbekcha