Pasaytirilgan tartibdagi kuzatuvchilarni qurish algoritimi



Yüklə 22,18 Kb.
tarix28.11.2023
ölçüsü22,18 Kb.
#133178
19sanjarbek 19 iddentifikatsiya MUSTAQIL ISH


Pasaytirilgan tartibdagi kuzatuvchilarni qurish algoritimi
REJA.
1 Barcha juft raqamlarni o'sish tartibida tartiblang va keyin barcha toq raqamlarni kamayish tartibida tartiblang

2 O'sish va kamayish bo'yicha navbatma-navbat tartiblangan bog'langan ro'yxatni tartiblang?

3 Matritsa satrlarini kamayish tartibida, keyin esa o'sish tartibida ustunlarni saralash

4 Adabiyotlar


Barcha juft raqamlarni o'sish tartibida tartiblang va keyin barcha toq raqamlarni kamayish tartibida tartiblang

Kurslar
Amaliyot
Butun sonlar massivini (toq va juft) hisobga olib, ularni shunday tartiblangki, massivning birinchi qismida kamayish tartibida tartiblangan toq sonlar, qolgan qismida esa o‘sish tartibida tartiblangan juft sonlar mavjud.
Misollar:

Kirish: arr[] = {1, 2, 3, 5, 4, 7, 10}


Chiqish: arr[] = {7, 5, 3, 1, 2, 4, 10}

Kirish: arr[] = {0, 4, 5, 3, 7, 2, 1}


Chiqish: arr[] = {7, 5, 3, 1, 0, 2, 4}

Oddiy yondashuv -

Maqsad, barchasini hatto alohida massiv yoki vektorda saqlash va ularni o'sish tartibida saralash va keyin barcha toqlarni alohida massiv yoki vektorda saqlash va ularni kamayish tartibida tartiblashdir. Keyin barcha kirish massiv elementlarini o'sha g'alati massiv/vektor elementlari va undan keyin juft massiv/vektor elementlari bilan almashtiring.

Amalga oshirish uchun qadamlar -

Toq va juft elementlarni saqlash uchun ikkita vektorni toq va juft deb e'lon qiling
Toq va juft elementlarni toq va juft vektorga alohida saqlash uchun kirish massivida for tsiklini ishga tushiring.
Keyin juft elementlarni o'sish tartibida va toq elementlarni kamayish tartibida tartiblang
Keyin, avval toq elementlarni asl massivga, keyin esa juft elementlarni shu massivga nusxalang
Kod -

// C++ dasturi massivni juft va toq tartibda tartiblash.


// Toq sonlar kamayish bo'yicha saralanishi kerak
// tartib va juft sonlar o'sish tartibida
#include
std nom maydonidan foydalanish;
// Ikki tomonlama tartiblash uchun. Avval juft sonlarni tartiblang
// o'sish tartibida, keyin toq sonlar kamayish bo'yicha
// buyurtma.
void twoWaySort(int arr[], int n)
{
//Toq raqamlarni saqlash uchun
vektor toq;
//Juft sonlarni saqlash uchun
vektor juft;
for(int i=0;i//Agar son juft bo'lsa, ularni juft vektorga suring
if(arr[i]%2==0){even.push_back(arr[i]);}
// Agar raqam toq bo'lsa, ularni toq vektorga suring
else{odd.push_back(arr[i]);}
}
// Juft massivni o'sish tartibida tartiblang
sort(juft.begin(),juft.end());
//Toq massivni kamayish tartibida tartiblang
sort(odd.begin(),odd.end(),kattaroq());
int i=0;
//Birinchi navbatda toq raqamlarni massivga saqlang
for(int j=0;jarr[i]=toq[j];
i++;
}
//Keyin massivga juft raqamlarni saqlang
for(int j=0;jarr[i]=juft[j];
i++;
}
}
// Haydovchi kodi
int main()
{
int arr[] = { 1, 3, 2, 7, 5, 4};
int n = sizeof(arr) / sizeof(int);
twoWaySort(arr, n);
uchun (int i = 0; i < n; i++)
cout << arr[i] << " ";
qaytish 0;
}
Chiqish
7 5 3 1 2 4

Vaqt murakkabligi: O(n + n log n), juft vektor va toq vektorni saralash va for tsiklini ishga tushirish uchun


Yordamchi bo'shliq: O(n), chunki ikkala vektorda jami n ta element mavjud

1-usul (bo'limdan foydalanish)

Kirish massivini shunday bo'lingki, barcha toq elementlar chapga, barcha juft elementlar o'ngga ko'chiriladi. Bu qadam O(n) ni oladi.
Massiv qismlarga bo'lingandan so'ng, chap va o'ng qismlarni alohida-alohida tartiblang. Bu qadam O(n Log n) ni oladi.
Yuqoridagi fikrni amalga oshirish uchun quyidagi bosqichlarni bajaring:

Ikki o'zgaruvchini l va r dan mos ravishda 0 va n-1 ga boshlang.


Massivdagi toq elementlar sonini hisoblaydigan k o‘zgaruvchisini 0 ga boshlang.
l < r bo'lganda tsiklni bajaring:
a. arr[l] juftligini tekshirib, massivning chap tomonidagi birinchi juft sonni toping, agar l va k ni 1 ga oshiring.
b. arr[r] toq ekanligini tekshirib, massivning o‘ng tomonidan birinchi toq sonni toping, agar bo‘lmasa, r ni 1 ga kamaytiring.
c. l indeksidagi juft sonni r indeksidagi toq son bilan almashtiring.
Massivning birinchi k elementini solishtiruvchi sifatida kattaroq() bilan o‘rnatilgan tartiblash funksiyasidan foydalanib, kamayish tartibida tartiblang.
O'rnatilgan tartiblash funksiyasidan foydalanib, massivning qolgan n-k elementlarini o'sish tartibida tartiblang.
Saralangan massiv endi chop etishga tayyor.
Quyida yuqoridagi fikrni amalga oshirish ko'rsatilgan.

// C++ dasturi massivni juft va toq tartibda tartiblash.


// Toq sonlar kamayish bo'yicha saralanishi kerak
// tartib va juft sonlar o'sish tartibida
#include
std nom maydonidan foydalanish;
// Ikki tomonlama tartiblash uchun. Avval juft sonlarni tartiblang
// o'sish tartibida, keyin toq sonlar kamayish bo'yicha
// buyurtma.

void twoWaySort(int arr[], int n)


{
// Chapdan va o'ngdan joriy indekslar
int l = 0, r = n - 1;
// Toq sonlar soni
int k = 0;
esa (l < r)
{
// Birinchi juft sonni toping
// chap tomondan.
esa (arr[l] % 2 != 0)
{
l++;
k++;
}
// Birinchi toq sonni toping
// o'ng tomondan.
esa (arr[r] % 2 == 0 && l < r)
r--;
// Chap va toq tomondagi juft sonlarni almashtiring
// raqam o'ng.
agar (l < r)
almashtirish(arr[l], arr[r]);
}

O'sish va kamayish bo'yicha navbatma-navbat tartiblangan bog'langan ro'yxatni tartiblang?


Bog'langan ro'yxat berilgan. Bog'langan ro'yxat o'sish va kamayish tartibida o'zgarib turadi. Ro'yxatni samarali tartiblang.

Misol:


Kirish roʻyxati: 10 -> 40 -> 53 -> 30 -> 67 -> 12 -> 89 -> NULL
Chiqish roʻyxati: 10 -> 12 -> 30 -> 40 -> 53 -> 67 -> 89 -> NULL

Kirish roʻyxati: 1 -> 4 -> 3 -> 2 -> 5 -> NULL


Chiqish ro'yxati: 1 -> 2 -> 3 -> 4 -> 5 -> NULL
Oddiy yechim:

Yondashuv: Asosiy g'oya bog'langan ro'yxatda birlashtirish uchun qo'llashdir.


Amalga oshirish ushbu maqolada muhokama qilinadi: Bog'langan ro'yxat uchun saralashni birlashtirish.

Murakkablik tahlili:

Vaqt murakkabligi: Bog'langan ro'yxatni birlashtirish O(n log n) vaqtni oladi. Birlashtirish saralash daraxtida balandlik log n. Har bir darajani saralash O(n) vaqtni oladi. Demak, vaqt murakkabligi O(n log n) ga teng.
Yordamchi bo'shliq: O(n log n), Birlashtirish saralash daraxtida balandlik log n. Har bir darajani saqlash O(n) bo'sh joy oladi. Demak, fazoning murakkabligi O(n log n) ga teng.
Samarali yechim:

Yondashuv:

Ikki ro'yxatni ajrating.
Birini kamayish tartibi bilan teskari aylantiring
Ikkala ro'yxatni birlashtiring.
Diagramma:

O'sish va kamayish bo'yicha navbatma-navbat tartiblangan bog'langan ro'yxatni tartiblang

Quyida yuqoridagi algoritmning amallari keltirilgan:

// Bog'langanlarni saralash uchun C++ dasturi


// muqobil bo'lgan ro'yxat
// ortish va kamayish tartibida tartiblangan
#include
std nom maydonidan foydalanish;
// Bog'langan ro'yxat tugun
struktur tugun {
int ma'lumotlari;
struct Node* keyingi;
};
Tugun* birlashtiruvchi (tugun* bosh1, tugun* bosh2);
void splitList(tugun* bosh, tugun** oldinda, tugun** Dhead);
bekor teskari ro'yxat (tugun* & bosh);
// Bu tartiblovchi asosiy funksiya
// bog'langan ro'yxat
bekor tartiblash (tugun** boshi)
{
// Ro'yxatni ro'yxatlarga bo'lish
Tugun *Oldinda, *Dhead;
splitList(*head, &Ahead, &Dhead);
// Kamayuvchi bog'langan ro'yxatni teskari o'zgartirish
teskari ro'yxat (Dhead);
// Ikki bog'langan ro'yxatni birlashtiring
*head = birlashuvchi (Oldinda, Dhead);
}
// Yangi tugun yaratish uchun yordamchi dastur
Tugun* yangi tugun (int kaliti)
{
Tugun* temp = yangi tugun;
temp->ma'lumotlar = kalit;
temp->keyingi = NULL;
qaytish harorati;
}
// Bog'langan ro'yxatni o'zgartirish uchun yordamchi dastur
bekor teskari ro'yxat (tugun* va bosh)
{
Tugun * oldingi = NULL, * curr = bosh, * keyingi;
esa (joriy) {
keyingi = curr->keyingi;
curr->keyingi = oldingi;
oldingi = kurs;
curr = keyingi;
}
bosh = oldingi;
}
// Bog'langan ro'yxatni chop etish uchun yordamchi dastur
bekor bosma roʻyxati (tugun* boshi)
{
esa (bosh != NULL) {
cout << head->ma'lumotlar << " ";
bosh = bosh->keyingi;
}
cout << endl;
}
// Ikki tartiblangan bog'langan ro'yxatlarni birlashtirish uchun yordamchi dastur
Tugun* birlashtiruvchi (tugun* bosh 1, tugun* bosh 2)
{
// Asosiy holatlar
agar (!head1)
qaytish boshi2;
agar (!head2)
qaytish boshi 1;
Tugun* temp = NULL;
agar (head1->ma'lumotlar ma'lumotlar) {
temp = bosh 1;
head1->keyingi = birlashtiruvchi (head1->keyingi, head2);
}
boshqa {
harorat = bosh 2;
head2->keyingi = birlashtiruvchi (head1, head2->keyingi);
}
qaytish harorati;
}
// Bu funksiya muqobil ravishda ajratiladi
// boshi ikkiga bo'lgan bog'langan ro'yxat:
// Masalan, 10->20->30->15->40->7 \
// 10->30->40 ga bo'linadi
// va 20->15->7
// "Oldinda" - ortib borayotgan bog'langan ro'yxatning boshiga ishora

// "Dhead" - kamayib borayotgan bog'langan ro'yxatning boshiga ishora


void splitList(tugun* boshi, tugun** oldinda, tugun** boshi)
{
// Boshlash uchun ikkita soxta tugun yarating
// ikkita bog'langan ro'yxatning boshlari
*Oldinda = newNode(0);
*Dhead = newNode(0);
Tugun* ascn = *Oldinda;
Tugun* dscn = *Dhead;
Tugun* curr = bosh;
// Muqobil tugunlarni bog'lash
esa (joriy) {
// O'sib borayotgan bog'langan ro'yxatning muqobil tugunlarini bog'lash
ascn->keyingi = curr;
ascn = ascn->keyingi;
curr = curr->keyingi;
// Kamayuvchi bog'langan ro'yxatning muqobil tugunlarini bog'lash
agar (curr) {
dscn->keyingi = curr;
dscn = dscn->keyingi;
curr = curr->keyingi;
}
}
ascn->keyingi = NULL;
dscn->keyingi = NULL;
*Oldinda = (*Oldinda)->keyingi;
*Dhead = (*Dhead)->keyingi;

}
// Yuqoridagi funktsiyani sinab ko'rish uchun haydovchi dasturi


int main()
{
Tugun* boshi = newNode(10);
head->keyingi = newNode (40);
head->keyingi->keyingi = newNode(53);
head->keyingi->keyingi->keyingi = newNode(30);
head->keyingi->keyingi->keyingi->keyingi = newNode(67);
head->keyingi->keyingi->keyingi->keyingi->keyingi = newNode(12);
head->keyingi->keyingi->keyingi->keyingi->keyingi->keyingi = newNode(89);
cout << "Belgilangan bog'langan ro'yxat" << endl;
bosma ro'yxat (bosh);
sort(&head);
cout << "Tartiblangan bog'langan ro'yxat" << endl;
bosma ro'yxat (bosh);
qaytish 0;
}
Chiqish
Berilgan bog'langan ro'yxat
10 40 53 30 67 12 89
Saralangan bogʻlangan roʻyxat
10 12 30 40 53 67 89
Murakkablik tahlili:

Vaqt murakkabligi: O(n).

Ro'yxatni ajratish va ularni teskari aylantirish uchun bitta o'tish kerak. Saralangan ro'yxatlarni birlashtirish O(n) vaqtni oladi.
Yordamchi bo'shliq: O(1).

Matritsa satrlarini kamayish tartibida, keyin esa o'sish tartibida ustunlarni saralash


Alohida elementlar matritsasi berilgan. Vazifa matritsa satrlarini kamayish tartibida, keyin esa ustunlarni o'sish tartibida tartiblashdan iborat.

Misollar:

Kirish: a[3][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
Chiqish:
3 2 1
6 5 4
9 8 7

Kirish: a[3][3] = {{3, 2, 1},


{9, 8, 7},
{6, 5, 4}};
Chiqish:
3 2 1
6 5 4
9 8 7
Yondashuv:

Barcha satrlarni birma-bir aylantiring va oddiy massiv tartiblash yordamida qatorlarni kamayish tartibida tartiblang.


Matritsani uning transpozitsiyasiga aylantiring.


Yana barcha qatorlarni tartiblang, lekin bu safar o'sish tartibida.
Matritsani yana uning transpozitsiyasiga aylantiring.
Yakuniy matritsani chop eting.
Quyida yuqoridagi yondashuvni amalga oshirish ko'rsatilgan:

// Qatorlarni saralash uchun C++ dasturi


// matritsadan keyin kamayish tartibida
// ustunlarni o'sish tartibida tartiblash
#include
std nom maydonidan foydalanish;
# MAX_SIZE 10 ni aniqlang
// matritsaning har bir qatorini saralash funksiyasi
// tomonidan belgilangan tartibda
// pasayish.
bekor sortByRow(int mat[][MAX_SIZE], int n,
bool pasayish)
{
uchun (int i = 0; i < n; i++) {
agar (kamayish == rost)
sort(mat[i], mat[i] + n, kattaroq());
boshqa
sort(mat[i], mat[i] + n);
}
}
// matritsaning transpozitsiyasini topish funksiyasi

void transpose(int mat[][MAX_SIZE], int n)


{
uchun (int i = 0; i < n; i++)
uchun (int j = i + 1; j < n; j++)
// indeksdagi elementni almashtirish (i, j)
// indeksdagi element bo'yicha (j, i)
almashtirish(mat[i][j], mat[j][i]);
}
// matritsani qatorlar bo'yicha saralash funksiyasi
// va ustunlar bo'yicha
bekor sortMatRowAndColWise(int mat[][MAX_SIZE],
int n)
{
// mat[][] qatorlarini kamayish tartibida tartiblash
sortByRow(mat, n, rost);
// matning transpozitsiyasini olish[][]
ko'chirish (mat, n);
// mat [][] qatorlarini yana oʻsish boʻyicha tartiblash
// buyurtma.
sortByRow(mat, n, false);
// yana matning transpozini oling[][]
ko'chirish (mat, n);
}
// matritsani chop etish funksiyasi
void printMat(int mat[][MAX_SIZE], int n)
{
uchun (int i = 0; i < n; i++) {
uchun (int j = 0; j < n; j++)
cout << mat[i][j] << " ";
cout << endl;
}
}
// Haydovchi kodi
int main()
{
int n = 3;
int mat[n][MAX_SIZE] = { {3, 2, 1},
{ 9, 8, 7 },
{ 6, 5, 4 } };
cout << "Asl matritsa:\n";
printMat(mat, n);
sortMatRowAndColWise(mat, n);
cout << "\nSaralashdan keyin matritsa:\n";
printMat(mat, n);
qaytish 0;
}
Chiqish
Asl matritsa:
3 2 1
9 8 7
6 5 4

Saralashdan keyin matritsa:


3 2 1
6 5 4
9 8 7
Murakkablik tahlili:

Vaqt murakkabligi: O(N2logN)


Yordamchi boʻshliq: O(1)

Tasodifiy DSA mavzulari dunyosida o'zingizni yo'qotib, vaqtni hech qanday taraqqiyotsiz sarf qilyapsizmi? O'zgarish vaqti keldi! Bizning DSA kursimizga qo'shiling, u erda biz sizni DSAni samarali va jadval asosida o'zlashtirish uchun qiziqarli sayohatga yo'naltiramiz.


Siz bizning bosh direktorimiz Sandeep Jeynning ajoyib video mazmuniga kirasiz, umumiy intervyu savollariga javob berasiz va turli DSA mavzularini qamrab oluvchi real vaqtda kodlash tanlovlarida qatnashasiz. Biz sizni onlayn baholash va intervyularga puxta tayyorlash uchun shu yerdamiz.
Suvga sho'ng'ishga tayyormisiz? Bepul demo kontentimizni o'rganing va 100 000 dan ortiq geeks ishonadigan DSA kursimizga qo'shiling! Bu C++, Java, Python yoki JavaScript-da DSA bo'ladimi, biz sizni qamrab oldik. Keling, ushbu qiziqarli sayohatni birgalikda boshlaymiz!

FOYDALANILGA ADABIYOTLAR


1. Charlz K. Aleksandr Metyu N.O. Sadiku "Elektr energiyasi asoslari"
Circuits” Nyu-York, 2014.-458 b
2. Jon Bird. "Elektr va elektron printsiplari va texnologiyasi"
LONDON VA Nyu-York, 2014.-455 b
3. Karimov A.S. Elektrotexnika Nazariy Asoslari. Darslik. -T.:
Ukituvchi, 2003. - 422 b.
4. Rashidov I.R., Abidov K.F., Kolesnikov I.K. Elektrotexnika
nazarius asoslari 1. II. III kismlar (Maruza matinlari tuplami), TDTU,
2002. - 250 6.

5. Amirov S.F.. Yoqubov M.S., Jabborov N.G. Elektrotexnikaning nazariy


asoslari.I-III qismlar. Toshkent; 2007,- 426 b.
6. Amirov S.F., Yoqubov M.S., Jabborov N.G‘., Sattorov X.A., Balg‘ayev
N.E. Elektrotexnikaning nazariy asoslaridan masalalar to’plami.-T.: Adabiyot
uchqunlari, 2015. -420 b.
7. Demirchan K.S., Neyman L.R., Korovkin N.V., Chechurin V.L.
Elektrotexnikaning nazariy asoslari. Sankt-Peterburg Piter, 2003. -462 b.
8. Bessonov L. Elektrotexnikaning nazariy asoslari. 4.1,2,- M.:
Oliy maktab, 1991 yil, - 528 b. - 231 b.
9. Atabekov G.I. Elektrotexnikaning nazariy asoslari Ch. I. - M.:
Energetika 1990. - 592 p.
10. Abidov Q.G'., Jo'rayev R., Ernst I.V., Raxmatullayev A.I.
"Elektrotexnikaning nazariy asoslari" fanining "Nochiziqli zanjirlar" bo`limi
bo`yicha laboratoriya ishlarini boshqarish uslubiy ko`rsatma. TDTU, 2014-
44b.
11. Abidov Q.G'., Begmatov Sh.I. "Eleklrolevnikaning nazariy asoslari"
fanidan virtual laboratoriya ishlarini yaratish bo'yicha uslubiy ko'rsatma. TDTU
2013 yil, - 72 6.
12. Abidov Q.G'., Raxmatullayev A.I., Jo'rayev R., Ernst i.V., Qodirova.
D.R. "Elektrotexnikaning nazariy asoslari" fanining "uch f'azali zanjirlar"
bo'limi bo'yicha hisob-grafik ishlarini harakat uslubiy ko'rsatma.
TDTU, 2013.-32 6.
13. Abidov Q.G'., Qodirova. D.R. “Chiziqli elektr zanjirlarida o‘tkinchi
jarayonlar" bo'yicha hisob - grafik ishini harakat uslubiy ko'rsatma.
TDTU, 2010.- 36 6.
Qo'shimcha adabiyotlar
1. Mirziyoyev Sh.M. Erkin va farovon, O‘zbekiston demokrati
davlatini birlashma barpo. O'zbekiston Respublikasi
Prezidentlik xizmatiga kirishish taitanali marosimiga
Bag'ishlangan Oliy Majlis palatalarining qo'shma majlisidagi nutki.

T.: “O‘zbekiston” NMIU, 2016. 56 6.


2. Mirziyoyev Sh.M. Konun ustuvorligi va inson manfaatlarini
ta'minlash yurt tarakkiyoti va xalq farovonliging garovi. O'zbekiston
Republicasi Constitutionasi Kobul Killinganining 24 yilligiga
bag'ishlangan tantanali marosimdagi maruza 2016 yil 7 dekabr. T.:
“O‘zbekiston” NMIU, 2016. 48 6.
3. Mirziyoyev Sh.M. Buyuk kelajagimizni mard va oliyjanob xalqimiz
bilan birga kuramiz. - T.: "O'zbekiston" NMIU, 2017. - 488 b.
4. Uzbekistan Republicsini yanada rivojlantirish buyicha
Harakatlar strategiyasi Tugrisida. - T.:2017 yil 7 fevral, PF-4947-sonli
Farmoni.
5. Rashidov Y.R., Abidov K.F., Kolesnikov I.K. "Elektrotexnika
nazariy asoslari" fanidan 1-oralik, 2-oralik va yakuniy nazorat savollari
kortejlar. TDTU, 2002.-102 b.
6. Ibodullayev M. Nazariy elektrotexnika asoslari. Masala va mashqlar
to`plami.I- qism. T.: O`zbekiston, 2015.- 328 b.
7. Korovkin N.B., Selina E.E., Chechurin V.L. Nazariy asos
elektrotexnika. Muammolar to'plami. Sankt-Peterburg Piter, 2004. -510 b.
8. Abidov Q.G’., Isamuxamedov S.D., Isamuxamedov U.S.
"Elektrotexnikaning nazariy asoslari" fanining "O'zgarmas tok zanjirlari" bo'limi
bo‘yicha hisob- grafik ishlarini ishlab chiqarish namunalari ko`
odamlar. TDTU, 2010, - 40
6.
9. Abidov Q.G’., Isamuxamedov S.D., Isamuxamedov U.S.
Elektrotexnikaning nazariy asoslari fanining o'zgarishiga zanjirlari
bo'limiyicha hisob- grafik ishlarini bo'yicha kurash uslubiy ko'rsatma.
TDTU, 2010.-31 6.
10. Abidov Q.G'., Ernst I.V. "Elektrotexnikaning nazariy asoslari"
faning "Noziqli magnit zanjirlarini qayta" bo'limi bo'yicha hisob-grafik
ishi harakat uslubiy ko'rsalma. TDTU, 2010 yil, - 32 6.

Elektron resurslar


1. www.gov.uz -O‘zbekiston Respublikasi va Gukumat portali.
2. www.lex.uz-O‘zbekiston Respublikasi Qonun hujjatlari
Ma'lumotlari milliy bazasi.
3. www. ziyonet.uz;
4. www.bilim.uz.
5. www.ni.com/mullisim/
6. knigi.km.ru Barcha loyihalar. Nazariy asos
elektrotexnika. 3 jildda. 3-jild. I.I. Aliyev Virtual
elektrotexnika. Elektrotexnikada kompyuter texnologiyalari.

Yüklə 22,18 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə