O‘ZBEKISTON RESPUBLIKASI OLIY VA O‘RTA MAXSUS TA’LIM VAZIRLIGI AL-XORAZMIY NOMIDAGI URGANCH DAVLAT UNIVERSITETI Baltayeva Iroda, Xudayberganov Yashin, Vaisova Nafosat C# DASTURLASH TILIGA KIRISH Uslubiy qo‘llanma UrDU ilmiy-uslubiy kеngashining yig‘ilishi bayonnоmasiga asosan nashrga tavsiya etilgan. Urganch – 2015 UDK: KBK: Baltayeva Iroda, Xudayberganov Yashin, Vaisova Nafosat. C# dasturlash tiliga kirish. Mas‘ul muharrir Sharipov Maqsud. Uslubiy qo‗llanma. O‗zR Oliy va o‗rta maxsus ta‘lim vazirligi, al-Xorazmiy nomli Urganch davlat universiteti. Urganch, Urganch davlat universiteti noshirlik bo‗limi, 2015. 80 bet. Ushbu qo‗llanmada obyektga yo‗naltirilgan dasturlash tillaridan biri bo‗lgan C# dasturlash tilining sintaksisi va asosiy operatorlari, tayanch tillari va C# dasturlash tilining dasturlash mavzulari bo‘yicha masalalr dastur kodlari, mustaqil yechish uchun topshiriqlar keltirilgan. Mazkur qo‗llanma C# obyektga yo‗naltirilgan dasturlash tilini o‗rganishda muhim ahamiyatga ega bo‗lib, talabalar va bu tilni mustaqil o‗rganuvchilar uchun uslubiy qo‗llanma bo‗lib hizmat qiladi. Mas’ul muharrir Taqrizchilar ISBN: SharipovMaqsud, t.f.n. Qurol Navruzov, f.-m.f.d., prof., Firnafas Yusupov, t.f.n. © UrDU noshirlik bo‘limi, 2015. © Baltayeva Iroda, Xudayberganov Yashin, Vaisova Nafosat C# dasturlash tiliga kirish. Uslubiy qo„llanma. 2 M U N D A R I JA Kirish.................................................................................4 1-§. C# tilining sintaksisi va asosiy operatorlar……..............6 2-§. C# tilida ifoda, instruksiya va operatorlar................15 3-§. C# dasturlash tilida chiziqli dasturlar ........................20 4-§. C# dasturlash tilida tarmoqlanuvchi dasturlar ..........33 5-§. C# dasturlash tilida takrorlanuvchi dasturlar ............43 6-§.Massivlar.....................................................................64 Foydalanilgan adabiyotlar ………..…………....…............74 3 Kirish C# (C-Sharp) - .NET Framework platformasi uchun yaratilgan obyektga yo'naltirilgan dasturlash tili bo‘lib, 2000 yilda A. Haylsberg va P. Goldelar tomonidan yaratilgan. C# yaratilishida ―har bir mavjud narsa – obekt hisoblanadi‖ postulatasiga asos qilingan. Bu dasturlash tilini yaratishda A. Haylsberg va P. Goldelar C++ tilidagi kabi imkoniyatlarni va Java dasturlash tilidagi oddiylik va ko‘rinishni birlashtirib yangi dasturlash tili yaratishni maqsad qilganlar va natijada C# dasturlash tili yaratilgan. Bu dasturlash tili o‘zgarmas turg‘un komponentli arxitekturaga va yuqori saviyadagi xavfsizlik kodiga ega. C # dasturlash tilining C ++ va Java dasturlash tillari bilan xarakterli o'xshashlik tomonlarini quyida sanab o‘tamiz: Java Dasturlash tili bilan • ob'ekt yo'naltirilganlik (vorislilik) • interfeysi • xatoliklarni bartaraf qilish • ko‘p oqimlilik (funksiyalilik) • nomlar turlar turg‘unligi ko‘p masalalik havfsizlik kodiga tegishli suzuvchi nuqtaning arifmetik amallari dastur kodini dinamik tiklash С++ dasturlash tili bilan o‘xshash tomonlari: ko‘p operatorlilik havfsizlik kodiga tegishli suzuvchi nuqtaning arifmetik amallari dastur kodini dinamik tiklash soddalilik ko`p komponentalilik tushunarli interfeysi 4 Hozirgi kungacha C# tilining quyidagi versiyalari ishlab chiqilgan: Versiya C# 1.0 Versiya C#2.0 Versiya C#3.0 Versiya C#4.0 Versiya C#4.5 Mazkur qo‗llanma Versiya C#4.0 imkoniyatlaridan foydalanilgan holda yaratilgan. C# dasturlash tili to‗g‗risida ma‘lumot berilgan bo‗lib, u 5 ta bosma taboqdan iborat. Qo‗llanmada quyidagilar keltirilgan : C# tilining sintaksisi va asosiy operatorlari, tayanch turlari, C# tilida amallar, ifodalar va ularning yozilishi, chiziqli dasturlar tuzish, tarmoqlanuvchi jarayonlarni dasturlash, takrorlanuvchi jarayonlarni dasturlash, massivlar ustida amallar bajarish bo‗yicha amaliy mashg‗ulotlar va shu mavzular bo‗yicha har bir mavzuga alohida topshiriqlar ishlab chiqilgan. Keltirilgan misollarni yechish yordamida talabalar operatorlar ishlatilishi, Math sinfi va uni dasturlarda qo‗llash uchun kerakli bilimlarni olish imkoniyatiga ega bo‗ladilar. Ushbu qo‗llanma C# obyektga yo‗naltirilgan dasturlash tilini o‗rganishda muhim ahamiyatga ega bo‗lib talabalar va bu tilini mustaqil o‗rganuvchilar uchun uslubiy qo‗llanma bo‗lib hisoblanadi. 5 1-§. C# tilining sintaksisi va asosiy operatorlari Consol rejimi. Visual Studio.NET sistemasida dasturni kompilyatsiya qilish va bajarishning bir necha usuli bor. Ko‗p hollarda dasturchilar dasturni alohida kompilyatsiya qilib bir nechta tugmalar kombinatsiyalari orqali ishlatishga o‗rganishgan. <Ctrl> + <Shift> + <B> tugmalarini bosish orqali yoki menyuning Build>Build Solution qismini tanlash orqali dasturni kompilyatsiya qilish mumkin. Alternativ variant sifatida instrumentlar panelidagi Build tugmasini bosish ham mumkin. Dasturni kompilyatsiya qilmasdan ishlatish uchun <Ctrl>+<F5> tugmasini yoki menyuning Debug->Start Without Debugging qismini tanlash yoki panel instrumentlar qismidagi mos tugmani bosish lozim. using System; class Kirish { static void Main(string[] args) { Console.WriteLine(“Kirish!”); } } C# tilida yozilgan dasturni ishlatish. 1. Kodni fayllar sistemasida biror nom bilan saqlash lozim (hello.cs) 2. Kommandalar satrida csc /debug hello.cs buyrug‗ini bajarish lozim Ushbu buyruq bajarilgach, natijaviy .exe kengaytmali fayl hosil bo‗ladi. Agar kompilyatsiya jarayonida xatolik yuzaga kelsa, ma‘lumot chiqariladi. debug parametri bajariluvchi faylga maxsus simvollarni joylashtiradi. Natijada exe faylni qayta ishlovchi dasturda taxlil qilinayotganda stekni kuzatib borishlari mumkin. 3. Dasturni ishlatish natijasida, ekranga Kirish! yozuvi chiqariladi. 6 C# dasturlash tilida Consol rejimda dastur tuzish uchun yangi loyiha yaratamiz. (File/New Project/Visual C#/ Console Application). Ushbu loyihamizning nomini masalan ―Misol‖ deb nomlaymiz. Bizga C# kodini yozish uchun yangi oyna ochiladi. Console rejimida ishlash uchun .NET da Console sinfi ishlatiladi. Bu sinfning afzalligi 2 ta qismdan iborat bo‗lib: uning barcha metodlari o‗zgarmas, sanoqli bo‗lib, uni ishlatish uchun nusxalash shart emas. U kiritish, chiqarish va xatoliklarni chiqarishni o‗z ichiga oladi. Odatda kiritish, chiqarish standart Consolda amalga oshiriladi (agar u bo‗lmasa, masalan oynali masalalarda chiqarish amalga oshirilmaydi), lekin kiritish va chiqarish oqimlarini o‗zgartirish mumkin. Console bilan ishlashda asosan 4 metod ishlatiladi: Read, ReadLine, Write, WriteLine, birinchi ikkitasi kiritish, qolgani chiqarish metodlari hisoblanadi. Read metodi. Read metodi kiritish qurilmalaridan belgini qabul qiladi. U int tipida kiritilgan belgi kodini qaytaradi va hech narsa kiritilmagan bo‗lsa, -1 ni qaytaradi. Masalan: int i = Console.Read(); Console.WriteLine(i) ; Bu dastur kiritilgan belgi kodini ekranga chiqarib beradi. ReadLine metodi. ReadLine metodi kiritish qurilmalaridan matnning satrini qabul qiladi (uning qiymati keyingi satrga o‗tish belgisi bilan tugaydi ). U string tipidagi qiymat yoki null (agar kiritish amalga oshmagan bo‗lsa) qiymatini qaytaradi. Masalan: string s = Console.ReadLine(); Console.WriteLine("Kiritilgan satr : " + s) ; Write va WriteLine metodlari. Write metodi unga yuborilgan o‗zgaruvchi qiymatini ekranga chiqarish vazifasini bajaradi. U string tipini qabul qiladi. U barcha bazali tiplar uchun ishlaydi. Shuning uchun uni parametr sifatida chaqirish mumkin. Console.Write (I); 7 Console.Write (0.75<3) ; Console.Write("kirish”); Undagi satrga o‗zgaruvchi qiymatini qo‗shib e‗lon qilish uchun quyidagi kodni yozish kifoya: Console.Write("Kirish, {0}", I); Writeline metodining farqi shundaki, u keyingi (yangi) satrdan boshlab o‗ziga yuborilgan o‗zgaruvchi qiymatini ekranga chiqarib beradi. Endi ushbu metodlarga misolni kodini to‗liq keltiramiz: using System; namespace _Misol { class Program { static void Main() { Console.Write(“Misol”); Console.ReadKey(); } } } Bu dastur hozircha hech qanday ish bajarmaydi, u faqat ekranga Misol degan yozuvni chiqaradi. C# dasturlash tilining alfaviti Alfavit (yoki literallar yig‗indisi) C# tilida ASCII kodlar jadvali bilan birgalikda quyidagi belgilarni o‗z ichiga oladi: - Lotin harflari; - 0 dan 9 gacha raqamlar; - ―_‖ belgisi (harf sifatida ham ishlatiladi); - maxsus belgilar to‗plami : {}, 1 [] + - % / \ ; : ^ ? <> = ! & # ~ *; - boshqa belgilar. 8 C# alfaviti so‗zlarni tuzishda xizmat qiladi, ya‘ni leksemalarni tuzishda. Leksemalarning 5 turi bor: - Identifikator - Kalit so‗z - Amallar belgilari - Literallar - Ajratuvchilar Deyarli barcha leksemalar o‗zining tuzilishiga ega.Ular ko‗p alfavitlidir. Kalit so‗zlar va nomlar. Quyida C# tilining kalit so‗zlari va nomlari berilgan bo‗lib, dastur tuzilishi paytida ularni boshqa maqsadda ishlatish (masalan o‗zgaruvchi nomini inisializatsiya qilishda) mumkin emas. Kalit so‘zlar va nomlar Abstract , Do , in, protected, true, As, double, int, public, try,Base, else, interface, readonly, typeof, Bool, enum, internal, ref, uint, Break, event, is, return, ulong, Byte, explicit, lock, sbyte, unchecked, Case, extern, long, sealed, unsafe, Catch, false, namespace, short, ushort, Char, finally, new, sizeof, using, Checked, fixed, null, stackalloc, virtual, Class, float, object, static, void, Const, for, operator, string, volatile, Continue, foreach, out, struct, while, Decimal, goto, override, switch, Default, if, params, this, Delegate, implicit, private, throw. Izoh C# tilida boshqa tillarda bo‗lgani kabi dasturning har bir qismiga izoh yozish mumkin. Bu izohlar dastur kompilatsiyasida ishtirok etmaydi va dastur ishiga hech qanday ta‘sir ko‗rsatmaydi. C# da izoh yozish uchun /* */, // belgilaridan foydalanish mumkin. // belgisi shu belgidan keyin to shu satr oxirigacha bo‗lgan barcha belgilarni izoh sifatida qabul qiladi. /* */ bu orqali istalgan qismni izohga olish mumkin. 9 O‘zgaruvchi va o‘zgarmaslar Odatda dasturlar turli sonli va boshqa tipdagi ma‘lumotlarni qayta ishlash uchun yoziladi. Bitta dastur tarkibida uchraydigan ma‘lumotlarni bir-biridan farqlash uchun nomlash lozim bo‗ladi va bunday nomlar identifikator deb ataladi. Identifikator muayyan bir vaqtda ifodalab turgan son yoki boshqa turdagi ma‘lumot uning qiymati hisoblanadi. Dasturda qatnashgan har bir identifikator uchun kompyuter xotirasidan ma‘lum bir joy ajratiladi hamda bu joyga uning qiymati yozib qo‗yiladi va saqlanadi. Identifikatorlar doim lotin xarflari bilan boshlanadi. Ularni yozish uchun zarur bo‗lgan keyingi belgilar esa lotin xarflari, raqamlar va "_" (tagiga chizish) belgisidan iborat bo‗lishi mumkin: Y, Yl, d8, asdr12k, ism, daftar_xajmi. Dastlabki to‗rtta identifikator sintaktik jihatdan to‗g‗ri yozilgan, ammo identifikatorlarni bunday yozish katta hajmli dasturlarni ishlab chiqishda ma‘lum bir qiyinchiliklarni tug‗dirishi mumkin. Chunki, ular o‗zlari ko‗rsatayotgan ma‘lumotlarni to‗la va tushunarli qilib ifodalay olmaydi. Natijada bunday identifikatorlarni boshqasi bilan almashtirib yuborish ehtimolligi ortadi hamda ana shu dasturni o‗qish va tushunish qiyinlashib ketadi. Shuning uchun identifikatorlarni keyingi ikkitasi kabi belgilash maqsadga muvofiq hisoblanadi. Chunki ular o‗zlari ifodalayotgan o‗zgaruvchilarni ma‘lum bir darajada izohlab turadi va shu bilan bog‗liq anglashilmovchiliklarga barham berishda muhim ahamiyat kasb etadi. Identifikator tanlaganda ma‘lumotlarning shakli va mazmunini hisobga olish ham ana shunday omillardan biri hisoblanadi. Masalan, uchburchak haqidagi masalada ehtiyojga qarab a_tomon, b_tomon, c_tomon, yarim_perimetr, yuza,Atomon, Btomon, Ctomon kabi identifikatorlar maqsadga muvofiq hisoblanadi. Identifikatorlarni yozishda C# tili kompilyatori katta va kichik harflarni bir-biridan farqlaydi, ya‘ni yuza, Yuza, YUZA, YuZa kabi identifikatorlar turli xil deb qabul qiladi. 10 Identifikator sifatida xizmatchi so‗zlar, turli tinish va munosabat belgilaridan foydalanib bo‗lmaydi. Shuning uchun ularni quyidagicha yozish noto‗g‗ri hisoblanadi: 4x, X-y, G=dr, !gamma, a?b, k)l. Agar identifikator dasturning bajarilishi davomida o‗z qiymatini o‗zgartirmasa, ularni o‗zgarmaslar yoki konstantalar, aks holda o‗zgaruvchilar deb ataladi. O‗zgarmas ma‘lumotlar dastur matnida maxsus xizmatchi const so‗zi yordamida alohida ta‘kidlab ko‗rsatiladi. Masalan: const int epsilon 25; Shundan keyin bunday o‗zgarmas qiymatlarni dasturning bajarilishi davomida o‗zgartirib bo‗lmaydi. Dastur tarkibida uchraydigan hamma identifikatorlarga kompyuter xotirasidan joy ajratiladi va bu joyda ularning qiymatlari saqlanadi. Bu identifikatorga murojaat qilinganda, uning uchun ajratilgan joy, ya‘ni yacheykada saqlanayotgan ma‘lumot o‗qiladi va bu ma‘lumot identifikatorning o‗rniga qo‗yiladi. Identifikator uchun xotiradan ajratilayotgan joy hajmi uning tipiga bog‗liq bo‗ladi. Haqiqiy sonlarni oddiy usulda yozishda ularni odatdagidek yozish mumkin: 2.0, 3.4563, -1.025, -0.00125. Ko‗chuvchi vergulli yozuvda esa haqiqiy sonning butun va kasr qismini ajratib turuvchi vergulni ehtiyojga qarab o‗ngga yoki chapga surish mumkin. Bunda vergulning surilish xonalariga qarab, sonning tartibi o‗zgaradi. Masalan: 123.0 12.0 101 0.123 103 12300.0 10 2. 11 O‘zgaruvchilar va berilganlar turlari Dastur bajarilishi paytida qandaydir berilganlarni saqlab turish uchun o‗zgaruvchilar va konstantalardan foydalaniladi. O‗zgaruvchi – dastur obyekti bo‗lib, xotiradagi bir nechta yacheykalarni egallaydi va berilganlarni saqlash uchun xizmat qiladi. O‗zgaruvchi nomga, o‗lchamga va boshqa atributlarga – ko‗rinish sohasi, amal qilish vaqti va boshqa xususiyatlarga ega bo‗ladi. O‗zgaruvchilarni ishlatish uchun ular e‘lon qilinishi kerak. E‘lon natijasida o‗zgaruvchi xotiradan qandaydir soha zahiralanadi, soha o‗lchami esa o‗zgaruvchining aniq turiga bog‗liq bo‗ladi. Shuni aytib o‗tish kerakki, bitta tur uchun turli platformalarda turlicha joy ajratilishi mumkin. O‗zgaruvchi e‘loni uning turini aniqlovchi kalit so‗zi bilan boshlanadi va s=a;(const a) belgisi orqali boshlang‗ich qiymat beriladi (shart emas). Bitta kalit so‗z bilan bir nechta o‗zgaruvchilarni e‘lon qilish mumkin. Buning uchun o‗zgaruvchilar bir – biridan ‗,‘ belgisi bilan ajratiladi. E‘lonlar ‗;‘ belgisi bilan tugaydi. O‗zgaruvchi nomi 255 belgidan oshmasligi kerak. Literallar. C# tilida 5 xil literal mavjud ; - Butun tipli literal - Haqiqiy tipli literal - Belgili literal - Satr tipli literal - Mantiqiy tipli literal Literallar – bu tilning maxsus tushunchasidir. Har bir literallar to‗plami uchun alohida yozilish qoidasi mavjud. Masalan: - Butun tipli literallar: 5, 7, 8, -12, 234 - Haqiqiy tipli literallar: 3.6, -56.8, 0.9 - Belgili literallar: ‗a‘, ‗b‘, ‗?‘, - Satr tipli literallar: ―kirish‖, ―aka‖, ―abcd‖ - Mantiqiy tipli literallar: true. false 12 C# tilining tayanch turlari Quyidagi jadvalda C# tilining tayanch turlari, ularning baytlardagi o‗lchamlari va qiymatlarining chegaralari keltirilgan. Tur nomi Baytlardagi Qiymat chegarasi o‗lchami Sbyte 1 -128 ..127 Byte 1 0..255 Short 2 –32768..32767 Ushort 2 0..65535 Int 4 –2147483648..2147483647 Uint 4 0..4294967295 Long 8 -9223372036854775808.. 9223372036854775808 Ulong 8 0..18446744073709551615 Float 4 1.5 1045.. 3.4 1038 Double 8 5.0 10324.. 1.7 10308 Decimal 16 1.0 1028.. 7.9 1028 Boolean 1 False va True Char 2 `u0000`..`uffff` Object 4(32 - razyad),8(64 razryad) String - Mantiqiy tur. Bu turdagi o‗zgaruvchi Bool kalit so‗zi bilan e‘lon qilinadi. U turdagi o‗zgaruvchi 1 bayt joy egallaydi va false (false- yolg‗on) yoki true qiymat (true- rost) qiymat qabul qiladi. Mantiqiy turdagi o‗zgaruvchilar qiymatlar 13 o‗rtasidagi munosabatlarni ifodalaydigan mulohazalarni rost (true) yoki yolg‗on (false) ekanligini tavsiflashda qo‗llaniladi. Mantiqiy tur qiymatlari ustida mantiqiy ko‗paytirish, qo‗shish va inkor amallarini qo‗llash orqali murakkab mantiqiy ifodalarni qurish mumkin. Butun son turlari. Butun son qiymatlarni qabul qiladigan o‗zgaruvchilar int (butun), short (qisqa) va long (uzun) va shu kabi kalit so‗zlar bilan aniqlanadi. O‗zgaruvchi qiymatlari ishorali bo‗lishi yoki unsigned kalit so‗zi bilan ishorasiz son sifatida qaralishi mumkin. Suzuvchi nuqtali son turi. Kasrli sonlarni ifodalashda suzuvchi nuqtali son turi ishlatiladi va u float kalit so‗zi bilan e‘lon qilinadi. Bu turdagi o‗zgaruvchi uchun xotirada 4 bayt joy ajratiladi va (ishora, tartib mantissa) qolipida sonni saqlaydi. Agar kasrli son juda katta (kichik) qiymatlarni qabul qiladigan bo‗lsa, u xotiradi 8 baytda ikkilangan aniqlik ko‗rinishida saqlanadi va double kalit so‗zi bilan e‘lon qilinadi. Belgili tur. O`z nomidan ma`lumki belgili tiplar biron bir belgidan tuzilgan bo`lishi mumkin. Bunda 65535 belgi uchun joy ajratiladi alfavitdan foydalanishda matematik simvolikada shunday belgilardan foydalaniladi. Satrli tip. Satrli tip yoki oddiygina qator string to`plamlarni saqlash va qayta ishlashda bir butun belgilarni ajratishda foydalaniladi. 14 2-§. C# tilida ifoda, instruksiya va operatorlar Ifodalar. Ifoda – qiymatni aniqlovchi kod satridir. Oddiy ifodaga misol: Qiymat1=100; Qiymat1ning o‗zi bir qiymatni aniqlovchi operator bo‗lsada, uni ham qiymat sifatida o‗zlashtirish mumkin. Chunki u 100 qiymatini qabul qiladi. Misol uchun: Qiymat2=Qiymat1=100; Bu misolda 100 literali avval Qiymat1ga keyin ―=― o‗zlashtirish operatori yordamida Qiymat2 o‗zgaruvchisiga o‗zlashtiriladi. Bu bilan 100 qiymati har ikkala o‗zgaruvchiga birdaniga o‗zlashtiriladi. Bu yo‗l bilan siz bir necha o‗zgaruvchiga bitta qiymatni o‗zlashtirish imkoniyatiga ega bo‗lasiz. Int a=b=c=d=g=h=l=20; Instruksiya(Amal) Instruksiya – bu dastur kodida tamomlangan ifodadir. C# tilidagi dastur instruksiyalar ketma – ketligidan iborat. Har bir instruksiya ―;‖ belgisi bilan tugallanishi kerak. Masalan: Int x, y; x=100; y=0; Shu bilan birgalikda C# da tarkibli instruksiya ham mavjud. Bunday instruksiyalar bir necha instruksiyalardan iborat bo‗ladi. Ular ―{ }‖ figurali qavslar orasiga olinadi. Masalan : { x=10; y=9; int a; } Bu misolda 3 ta oddiy instruksiyalar bitta tarkibli instruksiyada joylashadi. 15 Ajratuvchilar C# tilida probel, tabulyatsiya va keyingi satrga o‗tish belgilari ajratuvchilar hisoblanadi. Instruksiyalardagi ortiqcha ajratuvchilar bekor qilinadi. Masalan: Qiymat1 =100 ; Yoki Qiymat1= 100; Komplyator bu ikkita ifodani bir xilda komplyatsiya qiladi. Shuni aytib o‗tish ham kerakki, satrda ajratuvchilar bekor qilinmaydigan payti ham bo‗ladi. Agar siz Console.Writeline(―Kirish yoshlar !!!!!!‖), deb yozsangiz ―Yoshlar ‖ va ―!!!‖ orasidagi probellar (bo‗sh joylar) bekor qilinmaydi balki, bo‗sh joy sifatida qiymat qabul qiladi. Har bir operator boshqa operator orasida kamida bitta bo‗sh joy bo‗lishi shart: Int x; // to‗g‗ri Intx; // noto‗g‗ri Matematik va mantiqiy amallar &,&&(mantiqiy ko‗paytirish amali) bu amal natijasi barcha shartlar rost bo‗lgandagina true qiymat,aks holda false qiymat qaytaradi.Dastur tuzish jarayonida bu amaldan ikki xil ko‗rinishda foydalanish mumkin.Ya‘ni & yoki && ko‗rinishlarda.Lekin bularning birbiridan farqi bor. Bularning farqi shundaki, shart tekshirilayotganda bitta (ya‘ni &) amal qo‗yilsa kompilyator barcha shartlarni tekshiradi,ikkita(ya‘ni &&) amal ishlatilsa shartlar ichida yolg‗oni topilsa shu yerda ish tugatiladi va shart natijasi false qiymat qaytaradi. |,||(matiqiy qo‗shish amali) 16 bu amal natijasi shartlalardan kamida bittasi rost bo‗lsa, true aks holda false qimat qiymat qaytaradi. Bu amaldan ham dastur tuzish jarayonida ikki xil ko‗rinishda foydalanish mumkin.Ya‘ni | yoki || ko‗rinishlarda.Bular ham bir-biridan keskin farq qiladi. Bularning bir-biridan farqi shundaki, Dasturda shartlarni tekshirish jarayonida | amaldan foydalanilsa barcha shartlar tekshiriladi va albatta kamida bitta shart bajarilgandagina true qiymat qaytariladi,aks holda false qiymat qaytariladi.Aksincha || amaldan foyalanilsa shartlar ketma-ket tekshirilayotgan paytda rost qiymat qabul qiluvchi mulohaza topilsa ish tugatildi va shart natijasi true qiymat qaytaradi, aks holda yana jarayon davom ettiriladi va mulohazalardan barchasi bajarilmasa shart natija false qiymat qaytaradi. Taqqоslash amallari C# tilida qiymatlarni sоlishtirish uchun taqqоslash amallari aniqlangan (jadval). Taqqоslash amali binar amal bo‗lib, quyidagi ko‗rinishga ega: <оpеrand1> <taqqоslash amali> < оpеrand2> Taqqоslash amallarining natijasi - taqqоslash o‗rinli bo‗lsa, true (rоst), aks хolda false (yolg‗оn) qiymat bo‗ladi. Agar taqqоslashda arifmеtik ifоda qatnashsa, uning qiymati 0 qiymatidan farqli хоlatlar uchun 1 dеb хisоblanadi. Taqqоslash amallari va ularning qo‘llanishi Amallar Qo‗llanishi Mazmo‗ni (o‗qilishi) < a< b "a kichik b" <= a<= b > a> b "a katta b " >= a>= b "a katta yoki tеng b " == a== b "a tеng b " != a! = b "a kichik yoki tеng b " "a tеng emas b " 17 =! a=!b "a tеng emas b " ++ a=a+1 1 ga oshirish (inkriment) -- a=a-1 1 ga kamaytirish(dekrement) C# tilida sonlar va o‗zgaruvchilar ustida qo‗shish (+), ayirish (-), ko‗paytirish (), bo‗lish (/), qoldiqni aniqlash (%) kabi amallardan foydalanish mumkin. O‘zlashtirish operatorlari ―=‖ ushbu o‗zlashtirish amali hisoblanadi a=b; ―+=‖; a+=b a o‗zgaruvchisiga b sonining qiymati qo‗shilib a o‗zgaruvchisiga o‗zlashtiriladi. ―-=‖ ; a-=b a o‗zgaruvchisidan b soni ayrilib natija a ga o‗zlashtiriladi. *=; a*=b a ning qiymati b ga ko‗paytirilib natija aga o‗zlashtiriladi. /=; a/=b a ning qiymati b ga bo‗linib, natija a ga o‗zlashtiriladi. ―%=‖ a%=b a ning qiymati b ga bo‗linib, a ni bo‗lgandagi qoldiq a o‗zgaruvchisiga o‗zlashtiriladi. 18 C# dasturlash tilining Math sinfi Dasturda standart matematik funksiyalaridan foydalanish uchun C# tili Math kutubxonasini taqdim etadi. Bu sinf Pi va E konstantalar va quyidagi : trigonometrik funksiyalar - Sin, Cos, Tan ; teskari trigonometrik funksiyalar - ASin, ACos, ATan, ATan2 (sinx, cosx) ; giperbolik funksiyalar - Tanh, Sinh, Cosh ; eksponenta va logarifmik funksiyalar - Exp, Log, Log10 ; modul , ildiz, belgi - Abs, Sqrt, Sign ; yaxlitlash funksiyasi - Ceiling, Floor, Round ; minimum, maksimum, daraja, qoldiq - Min, Max, Pow, IEEERemainder kabi funksiyalarni o‗z ichiga oladi. 19 3-§. C# dasturlash tilida chiziqli dasturlar tuzish C# tilida eng sodda dasturlarni yozish uchun quyidagi umumiy tuzilma qabul qilingan: 1-misol. Kvadratning tomoni a berilgan .Uning perimetri aniqlansin. 1)using System; class dars { public static void Main() { double a, P; //o„zgaruvchilarni e‟lon qilish Console.Write("a="); // O„zgaruvchilarni chop qilish operatori a = Convert.ToDouble(Console.ReadLine()); //O„zgaruvchilarni tashqaridan kiritish operotori; P = 4 * a; Console.WriteLine("P=" + P); Console.ReadKey(); //natijalar oynasini tutib turish operatori; } 2-misol.To‗g‗ri to‗rtburchakning a va b katetlari berilgan bo‗lsa uning gipatenuzasi va perimetri aniqlansin. 1-usul. using System; class dars { public static void Main() { double a, b, c, p; Console.Write("a="); a = Convert.ToDouble(Console.ReadLine()); Console.Write("b="); b = Convert.ToDouble(Console.ReadLine()); 20 c = Math.Sqrt(a * a + b * b); p = a + b + c; Console.WriteLine("gipatenuza " + c); Console.WriteLine("perimetr " + p); Console.ReadKey(); } } 2-usul. using System; class dars { public static void Main() { double a, b, c, p; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt32(Console.ReadLine()); c = Math.Round(Math.Sqrt(Math.Pow(a,2)+Math.Pow(b,2)),3); p = a + b + c; Console.WriteLine("c=" + c); Console.WriteLine("p=" + p); Console.ReadKey(); } } 3-misol. A, B va C sonlar berilgan. A ning qiymatini B ga, B ning qiymatini C ga, C ning qiymatini A ga almashtirilsin. A, B va C sonlarning va yangi qiymati ekranga chiqarilsin. using System; 21 class dars { public static void Main() { int a,b,c,d; Console.Write("a="); a=Convert.ToInt32(Console.ReadLine()); Console.Write("b="); b= Convert.ToInt32(Console.ReadLine()); Console.Write("c="); c=Convert.ToInt32(Console.ReadLine()); d=a; a=b; b=c; c=d; Console.WriteLine("a="+a+" b="+b+" c="+c); Console.ReadKey(); } } 4-misol . x ning qiymati berilganda, y 4 * ( x 3) 6 7 * ( x 3) 3 +2 y ning qiymati aniqlansin. 1-usul. using System; class kiritish { public static void Main() { double x,y ; Console.Write("x ="); 22 x =Convert.ToDouble(Console.ReadLine()); y=4*Math.Pow((x-3),6)-7*Math.Pow((x-3),3)+2; Console.WriteLine("y ="+y); Console.ReadKey(); } } 2-usul. using System; class dars { public static void Main() { double x, y; Console.Write("x="); x = Convert.ToDouble(Console.ReadLine()); y = 4 * Math.Pow(x - 3, 6) - 7 * Math.Pow(x - 3,3) + 2; Console.WriteLine(y); Console.ReadKey(); } } Topshiriq 1. Uchburchakning uchta tomoni uchlari koordinatalari (x1,y1), (x2, y2), (x3, y3) berilgan. Uning perimetri va yuzasini toping. 2. Berilgan A va B sonlarning qiymatlari almashtirilsin va yangi qiymati ekranga chiqarilsin. 3. A, B va C sonlar berilgan. A ning qiymatini C ga, C ning qiymatini B ga, B ning qiymatini A ga almashtirilsin. A, B va C sonlarning va yangi qiymati ekranga chiqarilsin. 23 4. A soni berilgan .A sonining A2 , A4 , A8 darajalarini aniqlovchi programma tuzilsin. 5. burchak radianda berilgan (0 2 ) .Berilgan burchakning qiymatini gradusga o‗tkazuvchi dastur tuzilsin. 6. Qayiqning tezligi v km soat , daryo oqimining tezligi u km soat , v u .Qayiqning daryo oqimi bo‗yicha harakatlanish vaqti T1 ,oqimga qarshi suzish vaqti T 2 . Qayiqning S yurgan yo‗lini aniqlovchi dastur tuzilsin. 24 Butun sonlarga oid misollar Har xil toifadagi o‗zgaruvchilar kompyuter xotirasidan turli hajmdagi baytlarni egallaydi. Hattoki bir toifadagi o‗zgaruvchilar ham qaysi kompyuterda va qaysi operatsion sistemada ishlashiga qarab turli o‗lchamdagi xotirani egallashi mumkin. Quyidagi masalalarni yechishda faqat butun sonlardan foydalanamiz. 1-misol . Uzunlik L santimetrda berilgan.Undagi to‗liq metrlar sonini aniqlovchi dastur tuzilsin. 1) using System; class dars { public static void Main() { int L; Console.Write("L="); L = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("L=" + (L/100)+" metr"); Console.ReadKey(); } } 2-misol . A va B (A>B) musbat sonlar berilgan.A kesmada B kesmani nechta marta joylashtirish mumkin. A kesmada B kesmani joylashmagan qismini aniqlovchi dastur tuzilsin. 1-usul. using System; class dars { public static void Main() { 25 int a, b; Console.WriteLine("a va b ni (a>b) qilib kiriting"); Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("b="); b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("a/b=" + a / b + " a%b=" + a % b); Console.ReadKey(); } } 2-usul. using System; class dars { public static void Main() { int a, b,n; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt32(Console.ReadLine()); n = a / b; Console.WriteLine("n=" + n); Console.WriteLine("kesmaning qolgan qismi=" + (a-b*n)); Console.ReadKey(); }} 3-misol .Uch xonali son berilgan. Uning chapdan birinchi raqamini o‗chirib, o‗ng tarafiga yozishdan hosil bo‗lgan sonni aniqlovchi dastur tuzilsin. using System; class intg13 { public static void Main() 26 { int a; Console.WriteLine("uch xonali son kiriting"); Console.Write("abc="); a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("bca=" + (a % 100) + (a / 100)); Console.ReadKey(); }} Topshiriq 1. Og‗irlik M kilogrammda berilgan.Undagi to‗liq tonnalar sonini aniqlovchi dastur tuzilsin. 2. Ikki xonali son berilgan. Uning raqamlari o‗rni almashtirishdan hosil bo‗lgan sonni aniqlovchi dastur tuzilsin. 3. 999 dan katta son berilgan. Bir marta bo‗lib butunni va bo‗lib qoldiqni olish operatsiyasidan foydalanib berilgan sonni mingliklar xonasidagi sonni aniqlovchi dastur tuzilsin. 4. Kun boshidan boshlab N sekund o‗tdi. Kun boshidan boshlab qancha minut va sekund o‗tganini aniqlovchi dastur tuzilsin. 27 Boolean tipiga oid misollar Mantiqiy tip- faqat ikki xil kattaliklarni qabul qilishi mumkin. Rost yoki yolg`on. Bu tip dasturning o‗zidan keyingi jarayonlarni bajarilish yoki bajarilmasligini aniqlab beradi. Bu yerda ikkita o‗zgaruvchi ustida matiqiy amallar bajarilishi natijalari ko‗rsatilgan, ya‘ni chinlik jadvali berilgan. X Y !x x && y x || y x^y True True false True True False True False false False True True False True true False True True False False true False False False 1-misol .A butun son berilgan.Jumlani rostlikka tekshiring:‖ A musbat son‖. 1-usul. using System; class bool_1 { public static void Main() {bool n; int A; Console.WriteLine("Butun son kiriting"); Console.Write("A="); A = Convert.ToInt32(Console.ReadLine()); n = (A >= 0); Console.WriteLine("n=" + n); Console.ReadKey(); }} 2-usul. 28 using System; class bool_1_1 { public static void Main() { int A; bool n; Console.Write("a="); A = Convert.ToInt32(Console .ReadLine()); n = A > 0; Console.WriteLine(n); Console.ReadKey(); }} 2-misol. A, B va C butun sonlar berilgan. Jumlani rostlikka tekshiring:‖A<=B<=C‖ using System; class bool_1 { public static void Main() { bool n; int a, b, c; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt32(Console.ReadLine()); Console.Write("c="); c = Convert.ToInt32(Console.ReadLine()); n = (a <= b) && (b <= c); Console.WriteLine("n=" + n); Console.ReadKey(); }} 3-misol . Uch xonali son berilgan. Jumlani rostlikka tekshiring: ―Ushbu sonning raqamlari ketma-ket o‗suvchi bo‗lib joylashgan‖. 29 1-usul. using System; class bool_1 { public static void Main() { int a,b,c,d; bool n; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); b = a / 100; c = (a % 100) / 10; d = (a % 100) % 10; n = (b < c) && (c < d); Console.WriteLine("n=" + n); Console.ReadKey(); }} 2-usul. using System; class bool_1_1 { public static void Main() { int a; bool n; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); n = (a/100+1==a/10%10 && a/100+2==a%10); Console.WriteLine(n); Console.ReadKey(); }} 3-misol . x, y sonlar berilgan. Jumlani rostlikka tekshiring: ―Koordinatalari (x,y) bo‗lgan nuqta koordinata tekisligining ikkinchi yoki uchinchi choragida yotadi‖. 30 using System; class bool_2 { public static void Main() { int x,y; bool n; Console.Write("x="); x = Convert.ToInt32(Console.ReadLine()); Console.Write("y="); y = Convert.ToInt32(Console.ReadLine()); n = (x < 0) && (y < 0 | y > 0); Console.WriteLine("n=" + n); Console.ReadKey(); }} 4-misol. Shaxmat doskasining ikkita turli (x,y) ,(x1,x2) koordinatalari berilgan(1-8 oraliqda yotuvchi butun sonlar). Jumlani ―Berilgan maydonlar bir xil rangda‖. using System; class dars { public static void Main() { int x, y; bool n; Console.Write("x="); x = Convert.ToInt32(Console.ReadLine()); Console.Write("y="); y = Convert.ToInt32(Console.ReadLine()); n = ((x + y) / 2 != 0) || ((x+y)/2==0); Console.WriteLine(n); Console.ReadKey(); }} 2-usul. 31 rostlikka tekshiring: using System; class dars { public static void Main() { int x, y; bool n; Console.Write("x="); x = Convert.ToInt32(Console.ReadLine()); Console.Write("y="); y = Convert.ToInt32(Console.ReadLine()); n = (x < 0 && y > 0)||(x<0 && y<0); Console.WriteLine(n); Console.ReadKey(); }} Topshiriq 1. A, B butun sonlar berilgan. Jumlani rostlikka tekshiring: ―A<=0 yoki B<-2‖ 2. 4. A, B butun sonlar berilgan. Jumlani rostlikka tekshiring: ―A va B sonlarning hech bo‗lmaganda bittasi toq‖. 3. A, B va C butun sonlar berilgan. Jumlani rostlikka tekshiring: ―A B va C sonlarning hech bo‗lmaganda bittasi musbat‖. 4. ( x, y) , ( x1, y1) va ( x2, y2) sonlar berilgan. Jumlani rostlikka tekshiring: ‖Koordinatalari (x,y) bo‗lgan nuqta chap yuqori uchi (x1,y1) koordinatalarga ega bo‗lgan va o‗ng past uchi (x1,y1) koordinatalarga ega bo‗lgan, tomonlari esa koordinata o‗qlariga parallel bo‗lgan to‗g‗ri to‗rtburchak ichida yotadi‖. 5. a, b va c butun sonlar berilgan. Jumlani rostlikka tekshiring:‖a, b va c tomonli uchburchak teng tomonli bo‗ladi‖. 6. . Shaxmat doskasining ikkita turli (x,y) ,(x1,x2) koordinatalari berilgan(1-8 oraliqda yotuvchi butun sonlar). Jumlani rostlikka tekshiring: ―Shox bir yurishda bir maydondan ikkinchisiga o‗ta oladi‖. 32 4-§. C# dasturlash tilida tarmoqlanuvchi dasturlar O‘tish operatorlari C# tilida o‗tish operatorlari ikki xil bo‗ladi : shartli va shartsiz. 1. Shartsiz o‘tish operatorlari. Shartsiz o‗tish operatorlari ikki xil usulda qo‗llanilishi mumkin. 1–funksiyani chaqirish yo‗li bilan. Bunda dastur davomida komplyator funksiya nomlarini tekshirib boradi, agar shunday funksiya topilsa, dastur o‗z ishini shu yerda to‗xtatib funksiyaning ishga tushishini amalga oshiradi. Funksiya o‗z amallarini bajarib bo‗lganidan so‗ng, komplyator dasturni bajarilishini funksiya nomidan so‗ng turgan instrusiyaga o‗tkazadi. Shartsiz o‗tishning ikkinchi usuli: break, return va throw kalit so‗zlari yordamida bajarish mumkin. Ushbu kalit so‗zlar haqida quyida aytib o‗tamiz. Break Takrorlanish operatorlarining bajarilishida shunday holatlar bo‗lishi mumkinki,unda qaysidir qadamda takrorlanishni yakuniga yetkazmasdan chiqish (‖uzish ‖) zaruriyati bo‗lishi mumkin. Continue operatori Bu opreator ham huddi break operatoridek takrorlash operatori tanasini bajarishni to‗xtatadi, lekin takrorlashdan chiqib ketmasdan keyingi qadamiga ―sakrab‖ o‗tishni tayinlaydi. 33 Shartli o‘tish operatorlari Shartli o‗tish uchun if, else yoki switch kalit so‗zlaridan foydalanish mumkin.Bunday o‗tish faqat shart rost bo‗lganidagina bajariladi. If … else operatori. If…else – bu shartli o‗tish operatori bo‗lib, shart if qismida bajariladi. Agar shart rost bo‗lsa, shartdan so‗ng yozilgan instruksiyalar to‗plami (tarkibli instruksiya) bajariladi, agar yolg‗on bo‗lsa, else qismida yozilgan (yozilmagan bo‗lishi ham mumkin) tarkibli instruksiya bajariladi. Shart operatorining natijasi bool tipiga tegishli bo‗lib, true(rost) yoki false(yolg‗on) bo‗lishi mumkin. if (shart) operator1; else operator2; Agar shart rost bo‗lsa, operator1 bajariladi, agar yolg‗on bo‗lsa, operator2 bajariladi. Shuni alohida takidlab o‗tish lozimki, agarda siz shart yolg‗on bo‗lganda dasturingiz hech bir ish bajarmasligini xohlasangiz, operator2 ni yozmasligingiz mumkin.Bunda dastur if … else dan so‗ng yozilgan kod bo‗yicha o‗z ishini davom ettiradi. Agarda operator1 yoki operator2 dan so‗ng bajarilishi lozim bo‗lgan amallar soni 1 tadan ortiq bo‗lsa ular figurali {} qavslar orasida yozilishi lozim.1-misol . x haqiqiy son berilgan. Quyidagi funksiyani hisoblang. 2 * sin( x), x 0 f ( x) (24) x 6, x 0 1) using System; class Shart_1 { public static void Main() { double x; Console.Write("x="); x = Convert.ToDouble(Console.ReadLine()); if (x > 0) Console.WriteLine("f(x)=" + 2 * Math.Sin(x)); 34 else Console.WriteLine("f(x)=" + (x - 6)); }} 2- misol Uchta butun son berilgan. Shu sonlar orasidan nechta musbat son borligini aniqlovchi dastur tuzilsin. using System; class shart { public static void Main() { int a, b, c,k=0; Console.WriteLine("Butun son kiriting!"); Console.Write("a="); a = int.Parse(Console.ReadLine()); Console.Write("b="); b = int.Parse(Console.ReadLine()); Console.Write("c="); c = int.Parse(Console.ReadLine()); if (a > 0) k++; if (b > 0) k++; if (c > 0) k++; if (k == 0) Console.WriteLine("musbat son yo„q"); else Console.WriteLine(k+" ta musbat son "); }} Ichma-ich shart operatorlari Ichma-ich shart operatorlari - bu C# dasturlash tilining afzalligi bo‗lib, bunda bir necha murakkab shartlarni bir shart orqali tekshirish, aniqlash mumkin. Bir o‗zgaruvchi qiymatini bir necha shartlar orqali tekshirish uchun ichma-ich bir necha shart operatorlaridan foydalanish mumkin: 35 3-misol 1-999 oraliqda bo‗lgan sonlar berilgan. Berilgan sonni ― ikki xonali juft son‖, ― uch xonali toq son‖ va h.k. ekranga yozadigan dastur tuzing. using System; class if_1 { public static void Main() { int a; Console.WriteLine("a ni 1-999 orasidan kiriting."); Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); if ((a >= 10) && (a <= 99)) if (a % 2 == 0) Console.WriteLine("kiritilgan son ikki xonali juft son."); else Console.WriteLine("kiritilgan son ikki xonali toq son."); else if (a<=9) if(a%2==0) Console.WriteLine("kiritilgan son bir xonali juft son."); else Console.WriteLine("kiritilgan son bir xonali toq son."); else if (a%2==0) Console.WriteLine("kiritilgan son uch xonali juft son."); else Console.WriteLine("kiritilgan son uch xonali toq son."); }} Topshiriq 1. Butun son berilgan,agar berilgan son musbat bo‗lsa birga oshiring ,aks holda 2 ga kamaytiring. 2. A, B butun sonlar berilgan.Agar A va B sonlar teng bo‗lsa,A va B ga 0 o‗zlastirilsin,aks holda A va B ning yig‗indisi o‗zlashtirish dastur tuzilsin. 3. Uchta son berilgan.Shu sonlar o‗rtachasini aniqlovchi dastur tuzilsin . 36 4. A, B va C haqiqiy sonlar berilgan.Agar berilgan sonlar o‗sish yoki kamayish tartibida berilgan bo‗lsa sonlarni ikkilantiring,aks holda ishorasini almashtiruvchi dastur tuzing. 5. OX va OY koordinatan o‗qlarida yotmaydigan nuqta berilgan. Nuqta joylashgan koordinata choragini aniqlang. 6. Butun son berilgan. Berilgan sonni ―musbat toq son‖, ―manfiy juft son‖, ― berilgan son nolga teng‖ va h.k. ekranga yozadigan dastur tuzing. 37 Switch operatori Ayrim hollarda ichma-ich yozilgan shart ya‘ni if-else-if yordami bilan bir necha shartni tekshirishimiz mumkin. Lekin bunday yozuv nisbatan o'qishga qiyin va ko'rinishi qo'pol bo'ladi. Bunday murakkab shartlar tekshirilganda if operatoridan ko‗ra, switch operatoridan foydalanish afzal. switch strukturasi bir necha case nishonlari (label) va majburiy bo'lmagan default nishonidan iboratdir. Nishon bu bir nomdir. Lekin bulardan faqat bittasigina bajariladi. Switch operatorining qo‘llanilishi: Switch (ifoda) { case : o‗zgarmas ifoda 1 : instruksiya o‗tish ifodasi case : o‗zgarmas ifoda 2 : instruksiya o‗tish ifodasi …. case : o‗zgarmas ifoda n : instruksiya o‗tish ifodasi default : instruksiya } Switch operatorida ham tekshirilayotgan ifoda if … else dagi kabi, ( ) orasiga olingan va operatordan keyin yozilgan.Case(tekshirish) va default (aks holda) bo‗limlari qaysi amal bajarilishi zarurligini aniqlab beradi.Case operatori albatta biror bir tenglashtirish uchun qiymat talab qiladi. Switch operatorida default amalini yozish shart emas, chunki u berilgan qiymatning tanlangan birorta qiymatga mos kelmaganda bajariladigan amallarni o‗z ichiga oladi. Agarda berilgan qiymat birorta tanlangan qiymatga mos kelsa, u holda case amalidan keyin bajariladigan amallar (ular bir nechta bo‗lsa, { } orasiga olinadi) bajariladi, so‗ng break amali switch operatorining ishini shu joyda to‗xtatadi va switch operatoridan keyin keladigan operator ishini davom ettiradi. Har bir case operatori o‗zida break amalini ushlab turishi lozim. 38 Masalan: 1-misol . 1-7 gacha bo‗lgan butun sonlar berilgan.Kiritilgan songa mos hafta kunlarini so‗zlarda ifodalovchi dastur tuzing. 1) using System; class case1 { public static void Main() { int a; Console.Write("a="); a = Convert.ToInt32(Console.ReadLine()); switch (a) { case 1:Console.WriteLine("dushanba");break; case 2:Console.WriteLine("seshanba");break; case 3:Console.WriteLine("chorshanba");break; case 4:Console.WriteLine("payshanba");break; case 5:Console.WriteLine("juma");break; case 6:Console.WriteLine("shanba");break; case 7:Console.WriteLine("yakshanba");break; default:Console.WriteLine("bunday hafta kuni yo„q!"); break; } }} 2-misol . Sharq kalendarida 60 yillik davr qabul qilingan. Yil muchali 5 ta rang (yashil, qizil, sariq, oq va qora ) va 12 ta hayvon (sichqon, sigir, yo‗lbars, quyon, ajdar, ilon, ot, qo‗y, maymun, tovuq, it, to‗ng‗iz) nomlarining kombinatsiyasidan kelib chiqadi.Yilning raqamiga qarab uning aniqlovchi dastur tuzing. 1984-yil davr boshi ―Yashil sichqon yili ‖. using System; class tanlash{ public static void Main() { int yil; Console.Write(" yil="); yil = Convert.ToInt32(Console.ReadLine()); 39 muchalini yil = yil % 60; Console.Write(" muchalingiz:"); switch (yil % 5) { case 0: Console.Write(" qizil "); break; case 1: Console.Write("sariq "); break; case 2: Console.Write(" oq "); break; case 3: Console.Write(" qora "); break; case 4: Console.Write(" yashil "); break; } switch (yil % 12) { case 1: Console.Write(" tovuq"); break; case 2: Console.Write(" it"); break; case 3: Console.Write(" to„ng„iz"); break; case 4: Console.Write(" sichqon"); break; case 5: Console.Write(" sigir"); break; case 6: Console.Write(" yo„lbars"); break; case 7: Console.Write(" quyon"); break; case 8: Console.Write(" ajdar"); break; case 9: Console.Write(" ilon"); break; case 10: Console.Write(" ot"); break; case 11: Console.Write(" qo„y"); break; case 0: Console.Write(" maymun"); break; } } } 3-misol . Ikkita burj vaqtlarini aniqlovchi butun son berilgan: D(kun), M(oy). Berilgan sana qaysi burjga kirishini aniqlovchi dastur tuzing. (9―‖) ―Qovg‗a (20.1-18.2)‖ , ―Baliq (19.2-20.3)‖ , ― Qo‗y (21.3-19.4)‖ , ―Buzoq (20.420.5)‖ , ―Egizaklar (21.5-21.6)‖ , ―Qisqichbaqa (22.6-22.7)‖ , ― Arslon (23.7-22.8) ‖, ―Arslon (23.8-22.9)‖ , ―Tarozi (23.9-22.10)‖, ―Chayon (23.10-22.11)‖, ―O‗qotar (23.11-21.12)‖, ―Echki (22.12-19.1)‖. 40 using System; class tanlash { public static void Main() { int oy, kun; Console.Write("oy="); oy = Convert.ToInt32(Console.ReadLine()); Console.Write(" kun="); kun = Convert.ToInt32(Console.ReadLine()); Console.Write(" burjingiz:"); switch (oy) { case 1: if (kun >= 20) Console.Write(" qovg„a"); else Console.WriteLine(" echki"); break; case 2: if (kun <= 18) Console.WriteLine(" qovg„a"); else Console.WriteLine(" baliq"); break; case 3: if (kun <= 20) Console.WriteLine(" baliq"); else 19) Console.WriteLine(" qo„y"); else buzoq"); else egizaklar"); else Console.WriteLine(" qo„y"); break; case 4: if (kun <= Console.WriteLine(" buzoq"); break; case 5: if (kun <= 20) Console.WriteLine(" Console.WriteLine(" egizaklar"); break; case 6: if (kun <= 21) Console.WriteLine(" Console.WriteLine(" qisqichbaqa"); break; case 7: if (kun <= 22) Console.WriteLine(" qisqichbaqa"); else Console.WriteLine(" arslon"); break; case 8: if (kun <= 22) Console.WriteLine(" arslon"); else parizod"); else Console.WriteLine(" parizod"); break; case 9: if (kun <= 22) Console.WriteLine(" Console.WriteLine(" tarozu"); break; 41 case 10: if (kun <= 22) Console.WriteLine(" tarozu"); else Console.WriteLine(" chayon"); else Console.WriteLine("o„qotar"); else Console.WriteLine(" chayon"); break; case 11: if (kun <= 22) Console.WriteLine(" o„qotar"); break; case 12: if (kun <= 21) Console.WriteLine("echki"); break; } Console.ReadLine(); } } Topshiriq 1. A ,B haqiqiy va amal butun soni berilgan.A va B son sonlari ustida arifmetik amallar bajaruvchi dastur tuzing.Bunda 1-qo‗shish, 2-ayirish, 3- bo‗lish, 4- ko‗paytirish. 2. D(kun ) va M(oy) ni ifodalovchi ikkita butun son berilgan. Kabisa bo‗lmagan kun sanasi kiritilgansa, shu sanani ifodalovchi dastur tuzing. 3. D(kun ) va M(oy) ni ifodalovchi ikkita butun son berilgan. Kabisa bo‗lmagan kun sanasi kiritilgansa, shu sanadan keyin keluvchi sanani aniqlovchi dastur tuzing. 4. Doiraning elementlari quyidagi tartibda raqamlangan: 1-radius,2-diametr,3doiraning uzunligi,4-doiraning yuzasi. Shu elementlardan bittasi berilganda qolganlarini topuvchi dastur tuzing. 3.14 42 5-§. C# dasturlash tilida takroranuvchi dasturlar Takrorlash (sikl ) operatorlari Bir xil jarayonlarning bir necha bor takrorlanishi sikl deyiladi. C# dasturlash tilida sikl operatorlarining quyidagi turlari mavjud: for sikl operatori while sikl operatori do .. while sikl operatori forech sikl operatori Yechilayotgan masaladan kelib chiqib yuqoridagi sikl operatorlardan mosi tanlanadi. Sikl takrorlanishi jarayonida bajarilishi lozim bo‗lgan operatorlar majmuasi sikl tanasi deyiladi. Sikl tanasi sifatida bir yoki bir nechta operatorlardan foydalanish mumkin. Agar sikl tanasida bir nechta operatorlardan foydalanilsa, bu operatorlar bloki { } belgi orasiga olinadi. For sikl оpеrаtоri For оpеrаtоri — dаvr (sikl)ni tаshkil qilishning eng umumiy usuli. U quyidаgi fоrmаtgа egа: for (1-ifоdа; 2-ifоdа; 3-ifоdа) { sikl tаnаsi} 1-ifоdа оdаtdа dаvrni bоshqаrаyotgаn o‗zgаruvchilаrning tipi va dаstlаbki qiymаtini bеlgilаsh uchun qo‗llаnаdi. 2-ifоdа dаvr tаnаsi bаjаrilishi mumkin bo‗lgаn shаrtni bеlgilаb bеruvchi ifоdа. 3-ifоdа sikl tаnаsi hаr gаl bаjаrilgаnidаn so‗ng siklni bоshqаrаdigаn o‗zgаruvchilаrning o‗zgаrishini (qadamini) bеlgilаydi. For оpеrаtоrini bаjаrish sхеmаsi: 1. 1-ifоdа hisоblаnаdi. 2. 2-ifоdа hisоblаnаdi. 3. Аgаr 2-ifоdаning qiymаti falsedаn fаrqli (rost) bo‗lsа, dаvr 43 tаnаsi bаjаrilаdi, 3-ifоdа hisоblаnаdi vа 2-bаndgа o‗tish аmаlgа оshirilаdi, аgаr 2-ifоdа 0 gа tеng (yolg‗оn) bo‗lsа, u hоldа bоshqаruv for оpеrаtоridаn kеyin kеlgаn оpеrаtоrgа uzаtilаdi. Shunisi muhimki, shаrt hаmmаvаqt dаvr bоshidа tеkshirib оlinаdi. Bu dеmаk, аgаr bаjаrilish shаrti oldindan yolg‗on bo‗lsа, u hоldа dаvr tаnаsi birоn mаrtа hаm bаjаrilmаsligi mumkin. 1-misol. k va n (n>0) butun soni berilgan. k sonini n marta chiqaruvchi dastur tuzing. using System; class takrorlash { public static void Main() { int n, k; Console.Write("n="); n = Convert.ToInt16(Console.ReadLine()); Console.Write("k="); k = Convert.ToInt16(Console.ReadLine()); for (int i = 0; i < n; i++) { Console.WriteLine(k); } } } 2-misol. n (n>0) butun soni berilgan. Shu sonni kvadratini quyidagi formula asosida hisoblovchi dastur tuzing. n 2 1 3 ... (2n 1) using System; class takrorlash { public static void Main() { double s = 0; int n; n = Int16.Parse(Console.ReadLine()); 44 for (int i = 1; i < n + 1; i ++) { s = s + (2*i-1); Console.WriteLine(i+ "^2" + "=" + s); } } } 3-misol . n (n>0) butun soni berilgan. Bir sikldan foydalanib quyidagi yig‗indini hisoblovchi dastur tuzing. 1!2!... n! using System; class for20 { public static void Main() { double p=1, s = 0; int n; n = Int16.Parse(Console.ReadLine()); for (int i = 1; i < n + 1; i++) {p=p*i; s = s +p ; Console.WriteLine( "s=" + s); } } } 4-misol. A va B (A<B) butun sonlar berilgan. A va B sonlar orasidagi barcha butun sonlarni chiqaruvchi dastur tuzing. Bunda har bir son o‗zining qiymaticha chiqarilsin. using System; class for39 { public static void Main() { int a, b, s; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); 45 b = Convert.ToInt16(Console.ReadLine()); if (a > b) { int k; k = b; b = a; a = k; } s=a; for (int i = a; i < b-1; i++) { s+=1; Console.WriteLine( +s ); } } } 5-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUBini toping. using System; class ekub { public static void Main() { int a, b,min=0,ekub=0; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); if (a > b) { min = b; } else { min = a; } for (int i = 1; i < min; i++) 46 { if (a % i == 0 && b % i == 0) { ekub = i; } } Console.WriteLine("a va b sonlarining ekubi=" + ekub); }} 6-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUKini toping. using System; class ekuk { public static void Main() { int a, b,ekuk=0; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); for (int i = 1; i <=a*b; i++) { if (i % a == 0 && i % b == 0) { ekuk = i; break; } } Console.WriteLine("a va b sonlarining ekuki=" + ekuk); } } Topshiriq 1. a va b (a<b) butun soni berilgan. a dan b gacha bo‗lgan barcha butun sonlar yig‗indisini aniqlovchi dastur tuzing. 2. n (n>0) butun soni berilgan . Quyidagi yig‗indini hisoblang: S=1+1/2+1/3+....+1/n 47 3. n (n>0) butun soni va a haqiqiy soni berilgan. Bir sikldan foydalanib quyidagi yig‗indini hisoblovchi dastur tuzing. Shart operatoridan 2 3 n n foydalanilmasin. 1 a a a .... (1) a 4. n (n>0) butun soni va x haqiqiy soni berilgan. Quyidagi yig‗indini hisoblovchi dastur tuzing.( Olingan natija taxminan ex ga yaqinlashadi.) 1 x x 2 / 2!... x n / n! 5. n (n>0) butun soni va x haqiqiy soni berilgan. Quyidagi yig‗indini hisoblovchi dastur tuzing.( Olingan natija taxminan sin(x) ga yaqinlashadi.) x x 3 / 3! x 5 / 5!... (1) n x 2 n 1 /((2n 1)!) 6. n (n>0) butun soni va x haqiqiy soni berilgan. Quyidagi yig‗indini hisoblovchi dastur tuzing.( Olingan natija taxminan cos(x) ga yaqinlashadi.) 1 x 2 / 2! x 4 / 4!... (1) n x 2 n /((2n)!) 7. A va B (A<B) butun sonlar berilgan. A va B sonlar orasidagi barcha butun sonlarni chiqaruvchi dastur tuzing. Bunda A soni bir marta A+1 soni ikki marta chiqarilsin. 48 While takrorlash operatori While takrorlash operatori, operatorlar blokini takrorlash sharti false bo‗lguncha takror bajaradi va uning sintaksisi quyidagicha ifodalanadi: While (shart) { Sikl tanasi(operatorlar bloki); } Agar shart tekshirilganda rost bo‗lsa, operatorlar bloki bajariladi, aks holda while dastur ishlashini o‗zidan keyingi operatorga uzatadi. Agar takrorlash sharti takrorlanishi jarayonida o‗zgarmas true qiymatga bo‗lsa, takrorlanish cheksiz bo‗ladi.Agar shart false qiymatga ega bo‗lsa, operatorlar bloki bajarilmaydi. 1-misol. A va B (A>B) musbat sonlar berilgan. A uzunlikdagi kesmada maksimal darajada B kesma joylashtiring. A kesmaning bo‗sh qolgan qismini aniqlovchi dastur tuzing. Bunda ko‗paytirish va bo‗lish amallarini ishlatmang. using System; class while1 { public static void Main() { int a, b; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); while (a <b) { b-= a; } Console.WriteLine("a=" + b); } } 49 2- misol. 2 sonini qandaydir darajasini bildiruvchi n (n>0) butun soni berilgan. n 2 k k ni ifodalovchi dastur tuzing. using System; class while1 { public static void Main() { int n, k=0, p=1; Console.Write("n="); n = Convert.ToInt32(Console.ReadLine()); while (n < 0) { Console.WriteLine("sonni qaytadan kiriting!!!"); Console.Write("n="); n = Convert.ToInt32(Console.ReadLine()); } while (n > p) { p *= 2; k++; } if (n == p) { Console.WriteLine("Kiritilgan son 2 ning " + k + " darajasi ekan!"); } else { Console.WriteLine("Kiritilgan son 2 ning darajasi emas ekan! Iltomos n sonini qayta kiriting!"); } Console.ReadKey(); } } 50 3- misol. n (n>1) butun soni berilgan. n soni Fibonnachi sonlari orasida bor yo‗qligini aniqlovchi dastur tuzing. Fibonnachi sonlari quyidagi tartibda topiladi: F1 1; F2 1; Fk Fk 2 Fk 1 k=3,4,... using System; class dars { public static void Main() { int n,a=0,a1=1,a2=1; Console.Write("n="); n = Convert.ToInt32(Console.ReadLine()); while(n>a) { a = a1 + a2; a1 = a2; a2 = a; Console.WriteLine("Fibanachi son a=" + a); } Console.ReadKey(); }} 4-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUBini toping. using System; class ekub { public static void Main() { int a, b, ekub = 0, soni = 1,min=0; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); if (a > b) { min = b; } 51 else { min = a; } while (soni <= min) { if (a % soni == 0 && b % soni == 0) { ekub = soni; } soni++; } Console.WriteLine("a va b sonlarining ekubi=" + ekub); }} 5-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUKini toping. using System; class ekuk { public static void Main() { int a, b, ekuk = 0,soni=1; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); while (soni <= a * b) { if (soni % a == 0 && soni % b == 0) { ekuk = soni; break; } soni++; } 52 Console.WriteLine("a va b sonlarining ekuki=" + ekuk); }} Topshiriq 1. n natural soni berilgan. Quyidagi ko‗paytmani hisoblovchi dastur tuzing. n!!=n(n-2)(n-4)... Agar n juft bo‗lsa oxirgi ko‗paytuvchi 2, toq bo‗lsa oxirgi 1 bo‗ladi. 2. n (n>1) butun soni berilgan. 3k n shartni qanoatlantiruvchi eng kichik butun k sonini toping. 3. a (a>1) soni berilgan. 1+1/2+1/3+...+1/k<=a shart bajariladigan eng katta k sonini toping. Yig‗indiham ekranga chiqarilsin. 4. n (n>0) butun soni berilgan. Bo‗lib butun va qoldiq qismlarini aniqlash orqali berilgan son raqamlarini teskari tartibda chiqaruvchi dastur tuzing. 5. n (n>0) butun soni berilgan. Bo‗lib butun va qoldiq qismlarini aniqlash orqali berilgan son raqamlarining orasida 2 soni bor yo‗qligini aniqlovchi dastur tuzing. 6. A,B,C musbat butun sonlari berilgan. AxB to‗rtburchak ichida tomoni c bo‗lgan kvadratdan nechtasi sig‗ishini aniqlovchi dastur tuzing. Ko‗paytirish va bo‗lish amallarini ishlatmang. Do … while takrorlash operatori Shunday hollar bo‗ladiki, while takrorlash operatori sizning talablaringizga javob bermaydi, bunday hollarda do… while takrorlash operatoridan foydalanish qulayroq. do …while takrorlash operatori quyidagi sintaksisga ega: do { <sikl tanasi (operatorlar bloki)> 53 } while (shart); Bu takrorlash operatorining keng qo‗llaniladigan holatlar –bu takrorlash boshlanmasdan turib, takrorlash shartini tekshirishning iloji bo‗lmagan holatlar hisoblanadi. Agar takrorlash sharti takrorlanishi jarayonida o‗zgarmas true qiymatga bo‗lsa, takrorlanish cheksiz bo‗ladi.Agar shart false qiymatga ega bo‗lsa, operatorlar bloki bir marta bajariladi. 1-misol. A va B (A>B) musbat sonlar berilgan. A uzunlikdagi kesmada maksimal darajada B kesma joylashtiring. A kesmaning bo‗sh qolgan qismini aniqlovchi dastur tuzing. Bunda ko‗paytirish va bo‗lish amallarini ishlatmang. using System; class dowhile1 { public static void Main() { int a, b; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); do { a -= b; } while (a > b); Console.WriteLine("a kesmada b kesmaning sig`may qolgan qismi " + a); }} 2-misol. 2 sonini qandaydir darajasini bildiruvchi n (n>0) butun soni berilgan. n 2 k k ni ifodalovchi dastur tuzing. using System; class dowhile1 { public static void Main() 54 { int k, n,p=1; Console.Write("a="); n = Convert.ToInt16(Console.ReadLine()); do { p *= 2; } while (p<n); if (p == n) { Console.WriteLine(" kiritilgan n soni ikkining darajasi"); } else { Console.WriteLine(" kiritilgan n soni ikkining darajasi emas!"); } } } 3- misol. n (n>1) butun soni berilgan. n soni Fibonnachi sonlari orasida bor yo‗qligini aniqlovchi dastur tuzing. Fibonnachi sonlari quyidagi tartibda topiladi: F1 1; F2 1; Fk Fk 2 Fk 1 k=3,4,... using System; class dowhile1 { public static void Main() { int n,f1=1,f2=1,f; Console.Write("n="); n = Convert.ToInt16(Console.ReadLine()); do { f = f1 + f2; f1 = f2; f2 = f; } while (f<n); if (f == n) 55 { Console.WriteLine(" kiritilgan n soni fibonachchi sonlari orasida yotadi"); } else { Console.WriteLine(" kiritilgan n soni fibonachchi sonlari orasida yotmaydi!"); } } } 4-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUBini toping. using System; class ekub { public static void Main() { int a, b, ekub = 0,min=0, soni = 1; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); if (a > b) { min = b; } else { min = a; } do { if (a % soni == 0 && b % soni == 0) { ekub = soni; 56 } soni++; } while (soni <= min); Console.WriteLine("a va b sonlarining ekubi=" + ekub); }} 5-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUKini toping. using System; class ekuk { public static void Main() { int a, b, ekuk = 0, soni = 1; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); do { if (soni % a == 0 && soni % b == 0) { ekuk = soni; break; } soni++; } while (soni <= a * b); Console.WriteLine("a va b sonlarining ekuki=" + ekuk); } } Topshiriq 7. n natural soni berilgan. Quyidagi ko‗paytmani hisoblovchi dastur tuzing. n!!=n(n-2)(n-4)... Agar n juft bo‗lsa oxirgi ko‗paytuvchi 2, toq bo‗lsa oxirgi 1 bo‗ladi. 8. n (n>1) butun soni berilgan. 3k n shartni qanoatlantiruvchi eng kichik butun k sonini toping. 57 9. a (a>1) soni berilgan. 1+1/2+1/3+...+1/k<=a shart bajariladigan eng katta k sonini toping. Yig‗indiham ekranga chiqarilsin. 10. n (n>0) butun soni berilgan. Bo‗lib butun va qoldiq qismlarini aniqlash orqali berilgan son raqamlarini teskari tartibda chiqaruvchi dastur tuzing. 11. n (n>0) butun soni berilgan. Bo‗lib butun va qoldiq qismlarini aniqlash orqali berilgan son raqamlarining orasida 2 soni bor yo‗qligini aniqlovchi dastur tuzing. 12. A,B,C musbat butun sonlari berilgan. AxB to‗rtburchak ichida tomoni c bo‗lgan kvadratdan nechtasi sig‗ishini aniqlovchi dastur tuzing. Ko‗paytirish va bo‗lish amallarini ishlatmang. 58 Foreach takrorlash operatori For оpеrаtоridаn fоydаlаnishning bоshqа bir vаriаnti bu chеksiz sikldir. Bundаy siklni tаshkil qilish uchun bo‘sh shаrtli ifоdаdаn fоydаlаnish mumkin, dаvrdаn chiqish uchun esа оdаtdа qo‗shimchа shаrtdаn fоydаlаnilаdi. Foreach operatorining sintaksisi quyidagicha: for(;;) { ... ... break; ... } C # tilining sintаksisigа muvоfiq оpеrаtоr bo‗sh bo‗lishi mumkinligi tufаyli, for оpеrаtоrining tаnаsi hаm bo‗sh bo‗lishi mumkin.Оpеrаtоrning bundаy shаkli qidirishni tаshkil qilishdа qo‗llаnishi mumkin.1-Misol. N>0 musbat soni berilgan n sonigacha bo‘lgan sonlar ichida 5 soniga karralilarini chop qilmaydigan dastur tuzing. using System; class foreach1 { public static void Main() { int n,k=0; Console.Write("n="); n = Convert.ToInt16(Console.ReadLine()); for (; ; ) { if (k == n) { break; } k++; if (k % 5 == 0) 59 { continue; } Console.WriteLine(k); } }} 2-Misol. n>0 soni berilgan. Shu sonning tub yoki murakkab son ekanligini aniqlang. using System; class foreach1 { public static void Main() { int n,k=0,l=0; Console.Write("n="); n = Convert.ToInt16(Console.ReadLine()); for (; ; ) { if (k == (int)Math.Sqrt(n)) { break; } k++; if (n % k == 0) { l++; } } if (l == 1) { Console.WriteLine("kiritilgan son tub!"); } else { Console.WriteLine("kiritilgan son murakkab son!"); } }} 4-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUBini toping. using System; class ekub 60 { public static void Main() { int a, b, ekub = 0, min = 0, soni = 1; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); if (a > b) { min = b; } else { min = a; } for (; ; ) { if (a % soni == 0 && b % soni == 0) { ekub = soni; } if (soni >= min) { break; } soni++; } Console.WriteLine("a va b sonlarining ekubi=" + ekub); } } 4-misol. a (a>1) soni berilgan. 1+1/2+1/3+...+1/k<=a shart bajariladigan eng katta k sonini toping. Yig‗indiham ekranga chiqarilsin. using System; 61 class foreach1 { public static void Main() { double n,k=0,s=0; Console.Write("n="); n = Convert.ToDouble(Console.ReadLine()); for (; ; ) { k++; if (s >=n) { break; } s += 1 / k; } Console.WriteLine("k="+k); }} 5-misol. A va B musbat sonlar berilgan. Shu ikki sonning EKUBini toping. using System; class ekuk { public static void Main() { int a, b, ekuk = 0, soni = 1; Console.Write("a="); a = Convert.ToInt16(Console.ReadLine()); Console.Write("b="); b = Convert.ToInt16(Console.ReadLine()); for (; ; ) { if (soni % a == 0 && soni % b == 0) { ekuk = soni; } if (soni >= a*b) 62 { break; } soni++; } Console.WriteLine("a va b sonlarining ekuki=" + ekuk); } } Topshiriq 1. Quyidagi (2n 1)(2n 7) n 1( 2n 3)(2n 5) chеksiz ko‘paytmaning qiymatini topish dasturini tuzing? 2.Quyidagi yig‘indini hisoblovchi dastur tuzing. 12 22 x 2 32 x 4 n2 x2n ... ... 22 32 2 42 22 (n 1) 2 2n n 2n 2 3n sonli ketma-ketlik limiti hisoblovchi dastur tuzilsin. 3. lim 2 n 2n 3n 5 63 6-§ Massivlar Matematika, iqtisod, informatika va hokazo sohalarda tartiblangan berilganlar bilan ish ko‗rishga to‗g‗ri keladi. Masalan, sonlar ketma – ketligi, jadvallar, familiyalar ro‗yhati va hokazo. Bir xil turli berilganlar to‗plamini qayta ishlash uchun massivlar tushunchasi kiritilgan. Xotirada ketma- ket (regulyar) joylashgan bir xil turdagi qiymatlarga massiv deyiladi. Odatda massivlarga zaruriyat, katta hajmdagi,lekin cheklangan miqdordagi va tartiblangan qiymatlarni qayta ishlash bilan bog‗liq masalalarni yechishda yuzaga keladi. Massiv – bu fiksirlangan miqdordagi ayrim qiymatlarning (massiv elementlarining ) tartiblangan majmuasidir. Barcha elementlar bir xil turda bo‗lishi kerak va bu tur element turi yoki massiv uchun tayanch tur deb nomlanadi Dasturda ishlatiladigan har bir aniq massiv o‗zining individual nomiga ega bo‗lishi kerak.Bu nomni to„liq o„zgaruvchi deyiladi,chunki uning qiymati massivning o‗zi bo‗ladi. Massivning har bir elementi massiv nomi, hamda kvadrat qavsga olingan va element selektori deb nomlanuvchi indeksni ko‗rsatish orqali oshkor ravishda belgilanadi. Murojaat sintksisi: <massiv nomi>[<indeks>] Massiv indeksi sifatida butun son qo‗llaniladi, ya‘ni indeks sifatida butun son qiymatini qabul qiladigan ixtiyoriy ifoda ishlatish mumkin va uning qiymati massiv elementining tartib nomerini aniqlaydi. Ifoda sifatida o‗zgaruvchi olinishi mumkinki, o‗zgaruvchining qiymati o‗zgarishi bilan murojaat qilinayotgan massiv elementini aniqlovchi indeks o‗zgaradi. Haqiqiy turdagi (float, double,dicimal) qiymatlari to‗plami cheksiz bo‗lganligi sababli ularni indeks sifatida ishlatilmaydi. Massiv dinamik va statik bo‗lishi mumkin. Statik massivning uzunligi oldindan ma‘lum bo‗lib, u xotirada ma‘lum adresdan boshlab ketma-ket joylashadi. Dinamik massivning uzunligi dastur bajarilishi jarayonida aniqlanib,u dinamik xotiradagi ayni paytda bo‗sh bo‗lgan adresga joylashadi. 64 Bir o‘lchamli massivlar Agar massivning elementiga bir indeks orqali murojaat qilish mumkin bo‗lsa, bunday massivga bir o„lchamli massiv deyiladi. Bir o‗lchamli massiv <toifa>[] <massiv nomi>=new <element tipi>[massiv elementlari soni] kabi ko‗rinishda e‘lon qilinadi. C# da massiv indeksi noldan boshlanadi. 1- misol. n natural soni berilgan. 2 sonini dastlabki n ta darajasidan tashkil topgan massivni hosil qiling va elementlarini chiqaring. (1, 2, 4, 8,...) using System; class massiv1 { public static void Main() { int n; Console.Write("n="); n = Convert.ToInt32(Console.ReadLine()); while (n > 10) { Console.Write("n="); n = int.Parse(Console.ReadLine()); } int[] a = new int[n]; for (int i = 0; i < n ; i++) { Console.WriteLine("a[" + i + "]=" + (Math.Pow(2,i))); } } } 2- misol. n natural soni berilgan. Dastlabki n ta Fibonnachi sonlaridan tashkil topgan massivni hosil qiling va elementlarini chiqaring. (1, 1, 2, 3, 5, ...) using System; class massiv1 65 { public static void Main() { int n; Console.Write("n="); n = int.Parse(Console.ReadLine()); while (n > 10) { Console.Write("n="); n = int.Parse(Console.ReadLine()); } double[] a = new double[n]; a[1] = 1; a[2] = 1; Console.WriteLine("a[1]=1"); Console.WriteLine("a[2]=1"); for (int i = 3; i <n; i++) { a[i] = a[i - 1] + a[i - 2]; Console.WriteLine("a[" + i + "]=" + (a[i])); } Console.ReadKey(); } } 3-misol. n ta elementdan tashkil topgan massiv berilgan. Pufaksimon saralash algoritmi orqali massivni o‘sish tartibida chiqaruvchi dastur tuzing. using System; class pufaksimonSaralash { public static void Main() 66 { int n,k; Console.Write("n="); n=Convert.ToInt32(Console.ReadLine()); int[] a = new int[n]; for (int i = 0; i < n; i++) { Console.Write("a[" + i + "]="); a[i] = Convert.ToInt32(Console.ReadLine()); } for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { if (a[i] > a[j]) { k = a[j]; a[j] = a[i]; a[i] = k; } } } for (int i = 0; i < n; i++) { Console.WriteLine("a[" + i + "]=" + a[i]); } } } Topshiriq 1. n ta elementdan tashkil topgan massiv berilgan. Uning elementlarini teskari tartibda chiqaruvchi dastur tuzing. 2. n ta elementdan tashkil topgan massiv berilgan. Massiv elementlari orasidan toqlarini indekslari o‘sish tartibida chiqaruvchi va ularni sonini aniqlovchi dastur tuzing 67 3. n ta elementdan tashkil topgan massiv berilgan. Massiv elementlarini quyidagicha chiqaruvchi dastur tuzing. A[0], A[1], A[n-1], A[n-2], A[3], A[4], A[n-3], A[n-4], ... 4. n ta elementdan tashkil topgan massiv va R butun soni berilgan. Massiv elementlari orasidan R soniga yig‘indisi eng yaqin ikkita qo‘shni elementni chiqaruvchi dastur tuzing. 5. n ta elementdan tashkil topgan massiv berilgan. Massivda qatnashgan sonlardan faqat bittadan chiqaruvchi dastur tuzing. Berilgan massiv: 4 5 7 4 8 4 5 8 9 1 2 3 Natijada: 4 5 7 8 9 1 2 3 6. 5 ta elementdan tashkil topgan a va b massiv berilgan. Har bir massiv elementlari o‘sish tartibida kiritiladi. 10 ta elementdan tashkil topgan c massivni hosil qilingki, c massiv elementlari o‘sish tartibida joylashtirilgan bo‘lsin. 7. n ta elementdan tashkil topgan massiv berilgan. Massivdagi har bir toq sonni oxirgi toq songa orttiruvchi dastur tuzing. Agar toq sonlar bo‘lmasa massiv o‘zgarishsiz qoldirilsin. 8. n ta elementdan tashkil topgan massiv berilgan. Massiv elementlari orasidan juftlarini o‘chiruvchi dastur tuzing. Hosil bo‘lgan massiv elementlari sonini va elementlari chiqaring. Shart operatori ishlatilmasin. 9. n ta elementdan tashkil topgan massiv berilgan. Massivga, massivning juft indeksli elementlarini qo‘shuvchi dastur tuzing . Shart operatori ishlatilmasin. 10. n ta elementdan tashkil topgan massiv berilgan. Oddiy o‘rin almashtirish algoritmi orqali massivni o‘sish tartibida chiqaruvchi dastur tuzing. Algoritm quyidagicha: har bir element o‘zidan keyin turgan elementlar bilan solishtiriladi. Agar o‘zidan keyin turgan element undan kichik bo‘lsa, ularning qiymati almashtiriladi. 68 11. ta elementdan tashkil topgan massiv berilgan. Oddiy tanlash algoritmi orqali massivni o‘sish tartibida chiqaruvchi dastur tuzing. Algoritm quyidagicha: har bir element o‘zidan keyin turgan elementlarning eng kichigi bilan almashtiriladi. 12. ta elementdan tashkil topgan massiv berilgan. Oddiy qo‘shish algoritmi orqali massivni o‘sish tartibida chiqaruvchi dastur tuzing. Algoritm quyidagicha: a[0] va a[1] elementlar o‘sish tartibida joylashtiriladi. Ya‘ni zaruriyat bo‘lsa qiymatlari almashtiriladi.Keyin a[2] element saralangan elementlar a[0] va a[1] elementlar orasiga shunday joylashtiriladiki,natijada a[0], a[1], a[2] tartiblangan holatda bo‘ladi.Shu taruqa har bir element tartiblangan elementlar orasiga qo‘shib boriladi. Ikki o‘lchovli massivlar Kundalik turmushda jadval ko‗rinishidagi massivlar bilan tez-tez ishlashga to‗gri keladi. Chunki ma‘lumotlarni bu ko‗rinishda saqlash ularni qayta ishlashda bir qancha qulayliklarga ega bo‗lamiz. Jadvalning satr va ustunlari qoida bo‗yicha bir xil turdagi ma‘lumotlardan tuzilgan. Shuning uchun jadval bilan ish ko‗radigan dasturlarda massivlardan foydalanish juda qulay. Jadvallarni ikki o‗lchovli massiv ko‗rinishida tasvirlash juda qulay. C# obyektga yo‗naltirilgan dasturlash tilida ikki o‗lchovli massivlar <massiv tipi>[,] <massiv nomi>=new <massiv elementlarining tipi>[<massivning satri soni>, < massivning ustunlari soni>] kabi e‘lon qilinadi. 1-misol. m va n butun musbat sonlari va m ta butun sonlari to‗plami berilgan. mxn o‗lchamli matritsani shunday, uning har bir ustuni kiritilgan m ta sondan iborat bo‗lsin. using System; class massiv1 { public static void Main() { int n, m; 69 Console.Write("n="); n = int.Parse(Console.ReadLine()); Console.Write("m="); m= int.Parse(Console.ReadLine()); while (m < 0 | n < 0) { Console.Write("n="); n = int.Parse(Console.ReadLine()); Console.Write("m="); m = int.Parse(Console.ReadLine()); } float[,] a = new float[n, m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write("a["+i+","+j+"]="); a[i,j] = int.Parse(Console.ReadLine()); } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write( a[i,j]); Console.Write("\t"); } Console.Write("\n"); } }} 70 2-misol. nxn o‗lchamli kvadrat matritsa berilgan. Matritsaning asosiy dioganal elementlarining yig‗indisini chiqaruvchi dastur tuzing. using System; class massiv1 { public static void Main() { int n; Console.Write("n="); n = int.Parse(Console.ReadLine()); while ( n < 0) { Console.Write("n="); n = int.Parse(Console.ReadLine()); } float[,] a = new float[n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write("a[" + i + "," + j + "]="); a[i, j] = float.Parse(Console.ReadLine()); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write(a[i, j] + "\t"); } Console.WriteLine(); } 71 Console.WriteLine(); float s=0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { s += a[i, j]; } } } Console.WriteLine("s=" + s); } } Topshiriq 1. mxn o‘lchamli matritsa va k soni berilgan (0<=k<m). Matritsani k satrini chiqaruvchi dastur tuzilsin. 2. NxN o‘lchamli kvadrat matritsa A hosil qilinsin. A[0,0] elementdan boshlab, soat strelkasi bo‘yicha matritsa elementlariga 1, 2, 3, ..., N 2 gacha bo‘lgan sonlar o‘zlashtirilsin. 3. mxn o‘lchamli matritsa berilgan (m juft son). Matritsani teng yarmidan yuqorisi va pastini almashtiruvchi dastur tuzilsin. 4. mxn o‘lchamli matritsa berilgan (m juft son). Matritsani teng yarmidan chap va o‘ng qismini almashtiruvchi dastur tuzilsin. 72 5. mxn o‘lchamli matritsa berilgan (m, n juft son). Matritsani teng 4 qismga bo‘lingan. 1-chap yuqori, 2-o‘ng yuqori, 3-chap past va 4- o‘ng past.1- va 2- qismini almashtiruvchi dastur tuzilsin. 6. mxn o‘lchamli matritsa berilgan. Matritsa elementlarini quyidagicha almashtiring: 0 va m-1 satr elementlari almashsin, 1 va m-2 satr elementlari almashsin va hakazo. 7. mxm o‘lchamli kvadrat matritsa berilgan. Matritsaning yordamchi dioganal parallel bo‘lgan har bir dioganal elementlari yig‘indisini aniqlovchi dastur tuzing. Bir elementli dioganal a[0,0] dan boshlansin. 8. mxm o‘lchamli kvadrat matritsa berilgan. Matritsaning asosiy dioganalidan va undan pastda joylashgan elementlarini nolga almashtiruvchi dastur tuzilsin. Shart operatoridan foydalanmang. 9. mxm o‘lchamli kvadrat matritsa berilgan. Matritsaning elementlarini yordamchi dioganalga nisbatan almashtiruvchi dastur tuzing. Yordamchi dioganal o‘zgarishsiz qoldiriladi. A[0,0] element A[m-1,m-1] element bilan almashadi, a[0,1] element A[m-1,m-2] element bilan almashadi va hokazo. Yordamchi matritsadan foydalanmang. 10. mxm o‘lchamli kvadrat matritsa berilgan. Matritsani 90 0 ga soat strelkasi bo‘yicha buruvchi dastur tuzilsin. Bunda A[0,0] element A[0,m-1] elementga o‘tadi, A[0,m-1] element A[m-1,m-1] elementga o‘tadi almashadi va hokazo. Yordamchi matritsadan foydalanmang. 73 74 Adabiyotlar ro‘yxati 1. C. Наков, В.Колев и колектив ―Въведение в програмирането със C#‖ София, 2011 йил. 2. Нэш Трей ―C# 2010. Ускоренный курс для профессионалов (2010)‖ 3. Jalolov, Sh.M. Sharipov ―C# dasturlash tilida fayllar bilan ishlash‖ BUXORO 2014 4. SH.F.Madraximov, S.M.Gaynazarov ―C++ tilida programmalash asoslari ‖ Toshkent 2009 5. М.Э.Абрамян Programming Taskbook Электронный задачник по программированию Версия 4.6 Ростов-на-Дону 2007. 6. ПОЛНОЕ РУКОВОДСТВО С#4.0 ГЕРБЕРТ ШИЛДТ Москва • Санкт-Петербург • Киев 2011. 7. http://mycsharp.ru 8. http://www.intuit.ru 9. http://dastur.uz 10.https://msdn.microsoft.com/ru-ru/library 75 76