12 ma’ruza. Mantiqiy dasturlash texnoogiyasi. Dasturning mantiqiy tuzilishi. Shartli, shartsiz va tanlash operatorlari. Takrorlanish va ularning turli formalari
Download 399.59 Kb. Pdf ko'rish
|
- Bu sahifa navigatsiya:
- { float
7-misol: z=sin x+cos y funktsiyaning qiymatini x va y o’zgaruvchilarining xb<=x<=xo va
yn<=y<=yo qiymatlarida hisoblash dasturini tuzing. 21a-rasm 21b-rasm //------------------------------------------------------ #include #include #include #include #include #pragma hdrstop //--------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) 1- 2takro 3- 1- 2- S { float x, x0, hx, xn, y, y0, hy, yn, z; Int i, j, nx, ny; cin>>x0>> hx>> xn>> y0>> hy>> yn; Cout<<”x0=”<< x0<<”hx=”<< hx<<”xn=”<< xn; Cout<<”'y0=”<< y0<<”'hy=”<< hy<<”'yn=”<< yn; nx =trunc ( (xn-x0)/hx)+1; ny =trunc ( (yn-y0)/hy)+1; x=x0; for (i=1; i<=nx; i++) {y=y0; for (j=1; j<= ny; j++) { z:=sin (x)+cos (x); Cout<<''x=''<< x<< ''y=''<< y<< '''z=''<< z; y=y+hy; } x=x+hx } getch (); return 0 } Sinf kompanentalari soda holda tiplangan ma’lumotlar va funksiyalardan iborat bo’ladi. Figurali qavslarga olingan kompanentalar ro’yxati sinf tanasi deb ataladi. Sinf tegishli funksiyalar yoki sinf funksiyalari deb ataladi. Sinf kaliti sifatida Struct xizmatchi so’zi ishlatilishi mumkin. Masalan quyidagi konstruksiya kompleks son sinfini kiritadi: struct complex { double real; double imag; void define (double re=0.0, double im=0.0) { real=re; imag=im; } void display (void) { cout<=”real=”< }; Strukturadan bu sinfning farqi shuki, kompanenta ma’lumotlardan (real, imag) tashqi ikkita kompanenta funksiya (define() va display ()) kiritilgan. Bu kiritilgan sinf o’zgaruvchilar deb qaralishi mumkin. Bu tiplar yordamida konkret obyektlarni tavsiflash mumkin: Misol uchun: complex x,y; complex dim[8]; Sinfga tegishli obyektlar quyidagicha tavsiflanadi: Sinf – nomi. Obyekt-nomi. Dasturda obyekt kompanentasiga quyidagicha murojaat qilish mumkin: Sinf-nomi. Obyekt- nomi::kompanenta-nomi yoki soddaroq xolda Obyekt-nomi. Element-nomi Misol uchun: x.real=1.24; x.imag=0.0; dim[3]. Real=0.25; dim[3]. Imag=0.0; Sinfga tegishli funkstiyalarga quyidagicha murojat qilinadi: ob’ekt-nomi. funkstiya-nomi Misol uchun: X. define(0.9) (Bu holda real=0.9 va imag=0.0) X. define(4.3,20.0) (Bu holda kompleks son 4.3+i*20.0) Display funkstiyasi ekranda kompleks son qiymatlarini tasvirlaydi. Kompanenta o’zgaruvchilar va kompanenta funkstiyalar. Sinf kompanenta o’zgaruvchilari sifatida o’zgaruvchilar , massivlar, ko’rsatkichlar ishlatilishi mumkin. Elementlar ta’riflanganda inistializastiya kilish mumkin emas. Buning sababi shuki sinf uchun xotiradan joy ajratilmaydi. Kompanenta elementlariga kompanenta funkstiyalar orkali murojat qilinganda faqat nomlari ishlatiladi Sinfdan tashqarida sinf elementlariga emas ob’ekt elementlariga murojat kilish mumkin . Bu murojat ikki xil bo’lishi mumkindir. Ob’ekt- nomi . Element - nomi. Sinf elementlari sinfga tegishli funkstiyalarida ishlatilishidan oldin ta’riflangan bo’lishi shart emas. Xuddi shunday bir funkstiyadan xali ta’rifi berilmagan ikkinchi funkstiyaga murojaat kilish mumkin. Komponentalarga murojaat xukuklari. Komponentalarga murojaat xukuki murojaat spestifikatorlari yordamida boshkariladi. Bu spestifikatorlar: Protected – ximoyalangan; Private – xususiy; Public – umumiy; Sinf ta’riflangandan so’ng, shu sinf tipidagi o’zgaruvchilarni(ob’ektlarni) quyidagicha ta’riflash mumkin: class_name object_one, object_two, object_three; Quyidagi misolda employee, sinfi kiritilgandir: class employee { public: long employee_id; float salary; void show_employee(void) { cout<<"Nomer: "< }; Bu sinf ikki o’zgaruvchi va bitta funkstiya-elementga ega. Sinf ta’riflangandan so’ng, shu sinf tipidagi o’zgaruvchilarni(ob’ektlarni) quyidagicha ta’riflash mumkin: class_name object_one, object_two, object_three; Quyidagi misolda employee, sinfi kiritilgandir: class employee { public: long employee_id; float salary; void show_employee(void) { cout<<"Nomer: "< }; Bu sinf ikki o’zgaruvchi va bitta funkstiya-elementga ega. #include using namespace std; class employee { public: long employee_id; float salary; void show_employee(void) { cout<<"Nomer: "< }; int main() { employee worker, boss; worker.employee_id = 12345; worker.salary = 25000; boss.employee_id = 101; boss.salary = 101101.00; cout<<"\n"<<"ishchi"< cout<<"\n"<<"boss"< return 0; } Sinf komponenta funkstiyalari Komponenta funkstiya ta’rifi. Komponenta funkstiya albatta sinf tanasida ta’riflangan bo’lishi lozim. Global funkstiyalardan farqli komponenta funkstiya sinfning hamma komponentalariga murojat qilishi mumkin. Funkstiyaning faqat prototipi emas to’la ta’rifi sinf tanasida joylashgan bo’lsa, bu funkstiya joylashtiruvchi (inline) funkstiya hisoblanadi. Ma’lumki inline funkstiyalarda stikllar, kalit bo’yicha o’tish operatori ishlatilishi mumkin emas. Bundan tashqari bunday funkstiyalar rekursiv funkstiya bo’lolmaydi. Sinf-nomi :: Komponenta funkstiya-nomi Sinf tanasiga komponenta funkstiya prototipi quyidagi shaklda joylashtiriladi: Tip funkstiya-nomi(formal-parametrlar-ta’rifi) Sinf tashqarisida funkstiya quyidagi shaklda ta’riflanadi: Tip sinf-nomi :: funkstiya-nomi(formal-parametrlar-spestifikastiyasi) { funkstiya tanasi }; Oldingi misoldagi employee sinfida funkstiya sinf ichida ta’riflangan. Bunday funkstiya joylanuvchi (inline) funkstiya deb qaraladi. Funkstiyani sinf tashqarisida ta’riflab sinf ichiga funkstiya prototipini joylashtirish mumkin. Sinf ta’rifi bu holda quyidagi ko’rinishda bo’ladi: class employee { public: long employee_id; float salary; void show_employee(void); }; Har xil funkstiyalar bir xil nomli funkstiyalardan foydalanishi mumkin bo’lgani uchun funkstiya nomi sinf nomi va global ruxsat operatori belgisi (::) qo’yilishi lozim. void employee::show_employee(void) { cout<<"Nomer: "< Funkstiya sinf tashqarisida ta’riflangan bo’lsa ularni inline funkstiya sifatida qarash uchun funkstiya ta’rifida inline so’zi aniq ko’rsatilgan bo’lishi kerak. Quyidagi dastur show_employee funkstiyasi ta’rifini sinf tashqarisiga joylashtiradi va inline so’zi anik ko’rsatiladi: #include using namespace std; class employee { public: long employee_id; float salary; void show_employee(void); }; inline void employee::show_employee(void) { cout<<"Nomer: "< int main() { employee worker, boss; worker.employee_id = 12345; worker.salary = 25000; boss.employee_id = 101; boss.salary = 101101.00; cout<<"\n"<<"ishchi"< cout<<"\n"<<"boss"< return 0; } Konstruktor va destruktor Konstruktorlar. Konstruktorlar bu sinf komponenta funkstiyalari bo’lib, ob’ektlarni avtomatik inistializastiya qilish uchun ishlatiladi. Konstruktorlar ko’rinishi quyidagicha bo’lishi mumkin: Sinf nomi (formal parametrlar ro’yxati) {konstruktor tanasi} Bu komponenta funkstiya nomi sinf nomi bilan bir xil bo’lishi lozim. Misol uchun complex sinfi uchun konstruktorni quyidagicha kiritish mumkin : complex (double re = 0.0; double im = 0.0 ) {real=re; imag=im;} Konstruktorlar uchun qaytariluvchi tiplar, xatto void tipi ham ko’rsatilmaydi. Dasturchi tomonidan ko’rsatilmagan holda ham ob’ekt yaratilganda konstruktor avtomatik ravishda chaqiriladi. Masalan ob’ekt complex cc; shaklida aniqlangan bo’lsa, konstruktor avtomatik chaqirilib real va imag parametrlari avtomatik ravishda 0.0 qiymatlariga ega bo’ladi. Ko’zda tutilgan holda parametrsiz konstruktor va quyidagi tipdagi nusxa olish konstruktorlari yaratiladi: T :: T (const T&) Misol uchun class F {... public : F(const T&) ... } Sinfda bir nechta konstruktorlar bo’lishi mumkin, lekin ularning faqat bittasida parametrlar qiymatlari oldindan ko’rsatilgan bo’lishi kerak. Konstruktor adresini hisoblash mumkin emas. Konstruktor parametri sifatida o’z sinfining nomini ishlatish mumkin emas, lekin bu nomga ko’rsatkichdan foydalanish mumkin. Konstruktorni oddiy komponenta funkstiya sifatida chakirib bo’lmaydi. Konstruktorni ikki xil shaklda chaqirish mumkin : Sinf_nomi. Ob’ekt_nomi (konstruktor_xaqiqiy_parametlari) Sinf_nomi (konstruktor_xaqiqiy_parametlari) Birinchi shakl ishlatilganda xaqiqiy parametrlar ro’yxati bush bulmasligi lozim. Bu shakldan yangi ob’ekt ta’riflanganda foydalaniladi: complex SS(10.3; 0.22) // real=10.3; SS.imag= 0.22; complex EE (2.3) // EE . real= 2.3; EE.imag= 0.0; complex D() // xato Konstruktorni ikkinchi shaklda chaqirish nomsiz ob’ekt yaratilishiga olib keladi. Bu nomsiz ob’ektdan ifodalarda foydalanish mumkin. Misol uchun : complex ZZ= complex (4.0;5.0); Bu ta’rif orkali ZZ ob’ekt yaratilib, unga nomsiz ob’ekt qiymatlari(real= 4.0; imag= 5.0) beriladi; Konstruktor nomi sinf nomi bilan bir xil bo’lishi lozimdir. Misol uchun siz employee sinfdan foydalansangiz, konstruktor ham employee nomga ega bo’ladi. Agar dasturda konstruktor ta’rifi berilgan bulsa ob’ekt yaratilganda avtomatik chaqiriladi. Quyidagi dasturda employee nomli sinf kiritilgandir: class employee { public: employee(long, float); void show_employee(void); private: long employee_id; float salary; }; Konstruktor ta’rifi: employee::employee(long empl_id, float sal) { employee_id = empl_id; if (salary < 50000.0) salary = sal; else salary = 0.0; } Shu sinfdan foydalanilgan dastur: #include using namespace std; class employee { public: employee(long, float); void show_employee(void); private: long employee_id; float salary; }; employee::employee(long empl_id, float sal) { employee_id = empl_id; if (salary < 50000.0) salary = sal; else salary = 0.0; } void employee::show_employee(void) { cout << "Nomer: " << employee_id << endl; cout << "Maosh: " << salary << endl; } int main() { employee worker(101, 10101.0); cout<<"ishchi"< return 0; } Konstruktordan foydalanib ob’ekt ta’rifilanganda parametr uzatish mumkin: employee worker(101, 10101.0); Agar dasturda employee tipidagi ob’ektlar mavjud bo’lsa har birini quyidagicha inistializastiya qilish mumkin employee worker(101, 10101.0); employee secretary(57, 20000.0); employee manager(1022, 30000.0); Satrli maydonga misol. Keyingi misolda satrli maydon string tipidagi o’zgaruvchi sifatida beriladi. #include #include using namespace std; class employee { public: employee(string , long, float); void show_employee(void); int change_salary(float) ; long get_id(void); private: string name; long employee_id; float salary; }; employee::employee(string name, long employee_id, float salary) { employee::name= name; employee::employee_id = employee_id; if (salary < 50000.0) employee::salary = salary; else employee::salary = 0.0; } void employee::show_employee(void) { cout << "Ism: " << name << endl; cout << "Nomer: " << employee_id << endl; cout << "Maosh: " << salary << endl; } int main() { employee worker("Happy Jamsa", 101, 10101.0); worker.show_employee(); return 0; } Natija: Ism: Happy Jamsa Nomer: 101 Maosh: 10101 Konstruktorlar va ko’zda tutilgan qiymatlar. Konstruktorlarda ko’zda tutilgan qiymatlardan ham foydalanish mumkindir. Misol uchun quyidagi konstruktor employee maoshi qiymatini dasturda ko’rsatilmagan bo’lsa 10000.0 teng qilib oladi: employee::employee(long empl_id, float sal = 100.00) { employee_id = empl_id; if (salary < 50000.0) salary = sal; else salary = 0.0; } Konstruktorlarni qo’shimcha yuklash. C++ tilida konstruktorlarni ham qo’shimcha yuklash mumkindir. Quyidagi dasturda konstruktor employee qo’shimcha yuklangandir. Birinchi konstruktor, dastur xizmatchi, nomer va oyligi ko’rsatilishini talab qiladi. Ikkinchi konstruktor oylikni kiritilishini so’raydi. Sinf ta’rifi ichida ikkala konstruktor prototipi ko’rsatilishi lozim: #include using namespace std; class employee { public: employee(long, float); employee(long); void show_employee(void); private: long employee_id; float salary; }; employee::employee(long employee_id, float salary) { employee::employee_id = employee_id; if (salary < 50000.0) employee::salary = salary; else employee::salary = 0.0; } employee::employee(long employee_id) { employee::employee_id = employee_id; do { cout << "Maosh kiriting $50000 dan kichik: "; cin >> employee::salary; } while (salary >= 50000.0); } void employee::show_employee(void) { cout << "Nomer: " << employee_id << endl; cout << "Maosh: " << salary << endl; } int main() { cout<<"ishchi"< worker.show_employee(); cout<<"manager"< manager.show_employee(); return 0; } Sinov savollari: 1. Munosabat amallari va ularning kattaliklar orasidagi shartlar sifatida qo’llanilishi (shart, ifoda, mantiqiy ifoda, munosabat amallari). 2. Mantiqiy amallar va ularning bajarilishi (|||, &&, !=). 3. Tarmoqlanuvchi hisoblash jarayoniga ta’rif bеring. 4. Shartsiz o’tish opеratori va uning qo’llanishi. 5. Shartli o’tish opеratorining to’liq ko’rinishi. 6. Shartli o’tish opеratorining qisqa ko’rinishi. 7. Tarmoqlanuvchi hisoblash jarayonida 2 tadan ko’p tarmoqdan iborat bo’lgan holni tushuntiring (shartli o’tish opеratorining to’liq ko’rinishi, tanlash opеratori, sеlеktor, bеlgi). 8. Tanlash opеratori va uning dasturda qo’llanishi. 9. . Takrorlanuvchi hisoblash jarayoni dеb qanday jarayonga aytiladi? 10. Takrorlanuvchi hisoblash jarayonlarining algoritmi qanday qismlarni o’z ichiga oladi? 11. Takrorlanuvchi jarayon tanasi va takrorlanish o’zgaruvchisi haqida tushuncha bеring. 12. Takrorlanuvchi hisoblash jarayonlari algoritmlarining turlari. (takrorlash, takrorlanuvchi hisoblash jarayoni, takrorlanishning tanasi, takrorlanish o’zgaruvchisi, takrorlanish jarayonining turlari). 13. Avval sharti tеkshiriladigan takrorlanish jarayonini tashkil qilish (while, takrorlanish, takrorlanuvchi hisoblash jarayoni). 14. Sharti kеyin tеkshiriladigan takrorlanish jarayonini tashkil qilish (do while, takrorlanish, takrorlanuvchi hisoblash jarayoni). 15. Murakkab takrorlanish jarayonlari (takrorlanish, murakkab takrorlanish). Download 399.59 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling