Avtomatika va elektrotexnologiya
var Form1: TForm1; implementation
Download 5.01 Kb. Pdf ko'rish
|
- Bu sahifa navigatsiya:
- Nazorat savollari.
- Foydalanuvchi modullarini yaratish
- Programma ishini bajaruvchi prosteduralar
- Programma ishini bajarish prosteduralari. Exit
- Tiplarni almashtirish funkstiyalari Chr
- Arifmetik funkstiyalar.
- Obyektlarni aniqlash .
- Vorislikni aniqlanishi .
var Form1: TForm1; implementation {$R *.DFM} type TPStudent=^TStudent; //TStudent tipiga ko'rsatkich TStudent = record f_name:string[20]; // familiya l_name:string[20]; // ism next: TPStudent; // ro'yxatning navbatdagi elementi end; var head: TPStudent; // ro'yxat boshi procedure TForm1.Button1Click(Sender: TObject); var node: TPStudent; // ro'yxatning yangi tuguni curr: TPStudent; // ro'yxatning joriy tuguni pre: TPStudent; // curr ga bog'liq avvalgi tugun begin new(node); // ro'yxatning yangi elementini yaratish node^.f_name:=Edit1.Text; // familiya node^.l_name:=Edit2.Text; // ism // ro'yxatga tugun qo'shish // dastlab tugun uchun ro'yxatdan mos joyni topamiz curr:=head; pre:=NIL; { Diqqat! agar auyidagi shartni (node.f_name>curr^.f_name)and(curr<>NIL) shartga almashtirilsa u holda birinchi tugunni qo'shish vaqtida xatolik yuz beradi. chunki curr=NIL va curr.^name o'zgaruvchisi yo'q! Ishlatilgan variantda xatolik yuz bermaydi, chunki, dastlab qiymati FALSE bo'lgan(curr<>NIL) sharti tekshiriladi va bunday holatda ikkinchi shart tekshirilmaydi.} while (curr <> NIL)and(node.f_name > curr^.f_name) do begin // kiritilgan qiymat joriydan katta pre:= curr; curr:=curr^.next; // keyingi tugunga end; if pre = NIL then begin // yangi tugun ro'yxat boshida node^.next:=head; head:=node; end else begin // yangi tugun pre dan keyin, curr dan oldin node^.next:=pre^.next; pre^.next:=node; end; Edit1.text:=''; Edit2.text:=''; Edit1.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); var curr: TPStudent; // ro'yxatning joriy elementi n:integer; // ro'yxat uzunligi (elementlar miqdori) st:string; // ro'yxatning satrli berilishi begin n:=0; st:=''; curr:=head; while curr <> NIL do begin n:=n+1; st:=st+curr^.f_name+' '+curr^.l_name+#13; curr:=curr^.next; end; if n <> 0 then ShowMessage('Ro`yxat:'+#13+st) else ShowMessage('Ro`yxatda element yo`q.'); end; procedure TForm1.FormActivate(Sender: TObject); begin head:=NIL; end; end. Tform1.Button1Click protsedurasi dinamik o‘zgaruvchi-yozuvni yaratadi, unga muloqot oynasidagi tahrirlash maydoniga kiritilgan ma‘lumotlarni o‘zlashtiradi, tugun uchun mos keluvchi joyni qidirib topadi, va ushbu tugunni ro‘yhatga qo‘shadi. Tform1.Button2Сlick protsedurasi ro‘yhatni chiqarishni amalga oshiradi. Kiritilgan ro‘yhatni chiqarilishi ko‘rsatilgan. Elementni ro‟yhatdan ochirish Tugunni o‘chirish uchun o‘chirilayotgan tugundan oldin joylashgan tugun ko‘rsatkichiga o‘zgartirish kiritish kerak Obidov Obidov Ochilov Ochilov Olimov Olimov Ma‘lumki tugun dinamik o‘zgaruvchi hisoblanadi. Shuning uchun tugunni ro‘yhatdan olib tashlagandan so‘ng, u egallab turgan xotira ham bo‘shatilishi kerak. Dinamik xotirani bo‘shatish dispose protsedurasini chqarish bilan amalga oshiriladi. Bo‘shatilgan xotiradan boshqa o‘zgaruvchilar foydalanishi mumkin. Agar xotira bo‘shatilmasa qandaydir vaqtda dastur bo‘sh xotira yetishmaganligi sababli navbatdagi dinamik o‘zgaruvchini yarata olmaydi. Navbatdagi dastur tartiblangan ro‘yhatga qo‘shish va o‘chirish imkonini beradi. Dasturning muloqot oynasi 8.13-rasmda keltirilgan. Nazorat savollari. 1. Dinamik ro‘yxat deganda nimani tushuniladi? 2. Ko‘rsatkichlar deganda nima tushuniladi? 3. Dinamik o‘zgaruvchilar qanday e‘lon qilinadi? 26-Mavzu. Dasturda ishlatiladigan standart va foydalanuvchi modullari. (2 soat). 1. Dasturda ishlatiladigan standart va foydalanuvchi modullari. 2. Modullarni tashkil etish va ulardan dastur loyixalarida foydalanish uslubi. Kopyuterlarning eng katta kamchiligi ularda amaliy programmalar kutubxonasining to‘liq emasligidadir. Katta EHMlarda programma tuzuvchilar uchun juda katta programmalar kutubxonasi xizmat qilar va ulardan foydalanib tuzilgan programmalar o‘zlarining ishonchlilik darajasi bilan yuqori turar edi. Shaxsiy kompyuterlarning bu kamchiligini yo‘qotish uchun Turbo-Delphida modullar tushunchasi kiritilgan. Umuman olganda, har bir malakali programma tuzuvchi o‘z programmasini prostedura va funkstiyalardan foydalanib tuzadi. Lekin, bu prostedura va funkstiyalardan boshqa programmalarda foydalanish uchun ularning matnlarini qayta ko‘chirib yozish lozim bo‘ladi. Turbo-Delphida bu masalani echish uchun modullar yaratilib, ularni kompilyastiya qilinadi va bu moduldan boshqa programmalarda bemalol foydalanilaveriladi. Turbo-Delphi tilining yaratuvchilari quyidagi zarur va foydali modullarni yaratib, dasturchilar uchun juda katta qulayliklar yaratishgan: 1. System moduli- standart prostedura va funkstiyalarni o‘z ichiga olib, avtomatik tarzda barcha programmalar uchun ochiqdir; 2. DOS moduli- MS DOS operastion sistemasi bilan ishlashni tashkil qiluvchi funkstiya va prosteduralardan tashkil topgan; 3. Crt moduli – ekran, klaviatura va IBM rusumidagi kompyuterlarning tovushli dinamigi bilan ishlash prosteduralarini o‘z ichiga olgan; 4. Grap hmoduli- kompyuterning grafik imkoniyatlaridan foydalanib yaratilgan funkstiya va prosteduralarning katta to‘plami; 5. Printer moduli- bu kichkinagina modul printer qurilmasi bilan ishlashni osonlashtiradi; 6. Overlay moduli– katta programmalarni bir nechta bo‘laklarga ajratishning kuchli vositasi bo‘lib, bir qancha prosteduralar va funkstiyalardan tashkil topgan. Foydalanuvchi modullarini yaratish Modullardan foydalanish uchun programma sarlavhasidan Program ; keyin quyidagi qator yozilishi kerak: Uses Agar programmada bir nechta modul ishlatilsa, ularning ismlari ketma-ket yozib qo‘yiladi: Uses Turbo-Delphi bizga o‘zimizning modullarimizni yaratib olish imkonini ham beradi. Foydalanuvchi modullari quyidagi strukturada bo‘ladi: Unit Interface ... { ochiq e‘lonlar bo‘limi - interfeys sekstiyasi} ... Implementation ... { yopiq e‘lonlar bo‘limi} ... Begin ... { Inistializastiya bo‘limi} ... End. Agar modul o‘z ichida boshqa modullardan foydalansa Interface xizmatchi so‘zidan keyin Uses Interfeysli bo‘lim modulning bir qismi bo‘lib, Interfaceva Implementation so‘zlari orasida joylashadi. Bu bo‘limda o‘zgarmaslar, ma‘lumotlar tipi, o‘zgaruvchilar, prostedura va funkstiyalarni aniqlash mumkin. Bu kiritilganlar mazkur modulda qatnashuvchi barcha programmalar va modullarda bemalol ishlatilishi mumkin. Bo‘limda sanab o‘tilgan prostedura va funkstiyalarning tana qismlari Implementationso‘zidan keyin aniqlanadi (ularning sarlavhalari aynan saqlanib qolishi kerak). Bu bo‘limda ham, faqat shu bo‘lim uchungina "Ko‘rinadigan" (ishlatishi mumkin bo‘lgan) e‘lonlar bo‘limi qatnashishi mumkin. Inistializastiya sekstiyasi Begin va Endso‘zlari ichiga olib yoziladi. Agar Beginso‘zi tushirib qoldirilgan bo‘lsa, demak bu sekstiya yo‘q hisoblanadi. Inistializastiya sekstiyasida boshqarishni asosiy programmaga uzatgungacha bajariladigan operatorlar joylashgan bo‘ladi. Bu operatorlar asosan programmani ishga tushirishga tayyorlab beradi. Misol sifatida X va Y buning sonlarining maksimumi va minimumini aniqlovchi modulni yarataylik: Unit Stud; Interface{ochiq e‘lonlar bo‘limi – interfeys sekstiyasi} function min(x,y:integer):integer; function max(x,y:integer):integer; Implementation{yopiq e‘lonlar bo‘limi} function min(x,y:integer):integer; Begin if x<=y then min:=x else min:=y; End; function max(x,y:integer):integer; Begin if x>y then max:=x else max:=y; End; Begin {Inistializastiya sekstiyasi yo‘q} End. Biz zarur modulni hosil qildik, endi uni kompilyastiya qilishimiz lozim. Kompilyastiya natijasida Stud.tpuismli fayl hosil qilinishi kerak. Kompilyastiya qilinmagan modulning ismi esa shunga mos holda Stud.pasbo‘lishi kerak. Bu moduldan foydalanish dasturi quyidagicha bo‘lishi mumkin: Uses Stud; Var A,b,c,d:integer; Begin Write(‗A va B larni kiriting>‘); Readln(a,b); C:=max(a,b); Writeln(‗Max= ‗,C); C:=min(a,b); Writeln(‗Min= ‗,C); D:=max(a,b)+min(a,b); Writeln(‗Max+Minq‘,D); End. Quyida esa ekran rangini tanlash moduli misol sifatida ko‘rsatilgan: Unit Colors; Interfase Type Colortype =Array[0..15] of Byte; Const Black:byte=0; blue:byte=1; Green:byte=2; cyan:byte=3; Red:byte=4; magenta:byte=5; Brown:byte=6; lightgray:byte=7; Darkgray:byte=8; lightblue:byte=9; Lightgreen:byte=10; lightcyan:byte=11; Lightred:byte=12; lightmagenta:byte=13; Yellow:byte=14; white:byte=15; Var Currcolors:colortype absolute Black; Procedure setMonoColors; Procedure setColorColors; Implementation Const ColorColors:Colortype=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ; MonoColors:ColorType=(0,1,7,7,7,7,7,7,7,7,7,7,7,7,15,15); Procedure SetMonoColors; Begin CurrColors:=MonoColors; End; Procedure SetColorColors; Begin CurrColors:=ColorColors; End; Var Ch:Char; Begin Write( Readln(ch); If ch in [‗M‘,‘m‘,‘M‘,‘m‘] then SetMonoColors; End. Programma ishini bajaruvchi prosteduralar Yuqorida aytganimizdek, System modulining prosteduralari va funkstiyalari barcha programmalar uchun ochiq bo‘lib, ulardan keng foydalanish mumkin. System modulining ismini modullar ro‘yxatida ko‘rsatish shart emas. Quyida ushbu modulning ma‘lum bir qism prosteduralar va funkstiyalari bilan qisqacha tanishib chiqamiz: Programma ishini bajarish prosteduralari. Exit prostedurasi Vazifasi: aktiv ishchi blokidan chiqish, bajarilayotgan ishni yakunlash; Aniqlanishi: Exit. Halt prostedurasi Vazifasi: programma bajarilishini to‘xtatadi va OS ga boshqarishni qaytaradi; Aniqlanishi: Halt[(ExitCode:Word)]; bu erda majburiy bo‘lmagan (o‘rta qavs majburiy emas belgisi) ExitCode parametri programmaning yakunlanish kodini beradi, agar bu parametr bo‘lmasa bu kod nolga teng bo‘ladi. RunError prostedurasi Vazifasi: programmaning bajarilishini to‘xtatadi va bajarilish vaqtidagi xatolarni aniqlaydi; Aniqlanishi: RunError[(ErrorCode:Word)]; bu erda ErrorCode parametrining xatolik nomeri haqidagi ma‘lumoti ekranga chop etiladi. Tiplarni almashtirish funkstiyalari Chr funkstiyasi Vazifasi: ASCII jadvalidagi tartib raqami berilgan butun songa mos bo‘lgan belgini aniqlaydi; Aniqlanishi: Chr(N:Byte):Char; bu erda N belgining ASCII jadvalidagi tartib raqamini ifodalovchi butun, musbat son. Ord funkstiyasi Vazifasi: sanalma tipli qiymatlar bo‘yicha uning tartib sonini aniqlash; Aniqlanishi: Ord(X):LongInt; bu erda X – sanalma tipli qiymat. Round funkstiyasi Vazifasi: haqiqiy tipli qiymatni yaxlitlab, katta butun, son hosil qiladi; Aniqlanishi: Round(X:Real):LongInt; Trunc funkstiyasi Vazifasi: haqiqiy tipli qiymatning kasr qismini tashlab yuborib, butun son hosil qiladi; Aniqlanishi: Trunc(X:Real):LongInt; Arifmetik funkstiyalar. bu funkstiyalarning yozilishi va ulardan foydalanish qoidalari oldingi o‘zlashtirish operatori mavzusida to‘liq berib o‘tilganligi uchun, ularga to‘xtalib o‘tirmaymiz. Sanalma tip funkstiyalari va prosteduralari Dec prostedurasi Vazifasi: o‘zgaruvchi qiymatini kamaytiradi; Aniqlanishi: Dec(Var X[;n]:LongInt); bu erda yozilishi majburiy bo‘lmagan ―n‖ o‘zgaruvchi argumentning qiymatini qanchaga kamaytirish lozimligini ko‘rsatadi. Bu o‘zgaruvchi yozilmasa argument qiymati bir soniga kamayadi. Inc prostedurasi Vazifasi: o‘zgaruvchi qiymatini orttiradi; Aniqlanishi: Inc(Var X[;n]: Integer); bu erda Dec prostedurasiga teskari ish bajariladi. Odd funkstiyasi Vazifasi: argumentning toq yoki juft sonligini tekshiradi; Aniqlanishi: Odd( X:LongInt):Boolean; bu erda natijaviy qiymat rost (True) bo‘lsa son toq, aks holda son juft. Pred prostedurasi Vazifasi: argumetni oldingi qiymatini aniqlash; Aniqlanishi: Pred(X); Succ prostedurasi Vazifasi: argumetni keyingi qiymatini aniqlash; Aniqlanishi:Succ(X); Nazariy savollar. 1. Dasturlar kutubxonasini so‘zining ma‘nosi nima? 2. System moduli qanday vazifani bajaradi? 3. DOS modulining imkoniyatlarini baholang; 4. Graph moduli haqida umumiy ma‘lumotlar bering; 5. Printer moduli qanday qurilma bilan ishlashni ta‘minlaydi? 6. Overlay moduli programmalar ustida qanday ishlar bajaradi? 7. Crt modulining imkoniyatlarini sanab bering; 8. Modullar programmaga qanday bog‘lanadi? 9. Foydalanuvchi moduli deganda nimani tushunasiz? 32,33-Mavzu. Obyektga yo‟naltirilgan dasturlash.Inkapsulyatsiya. Vorislik. Polimorfizm. Dinamik obyektlar. Konstruktorlar.(4 soat). 1. Ob‗yektga yo‗naltirilgan dasturlash. 2. Inkapsulyatsiya. 3. Vorislik. 4. Polimorfizm. 5. Dinamik ob‗yektlar. 6. Konstruktorlar. OYD asosida bitta struktura (tuzilishda) da ma‘lumotlarni va ular ustida bajariladigan amallarni birlashtirish g‗oyasi yotadi. OYD uchta asosiy tushunchaga tayanadi: inkapsulyatsiya, vorislik va polimorfizm. Inkapsulatsiya – ma‘lumotlar va shu ma‘lumotlar bilan ishlaydigan protsedura va funksiyalar aralashmasini hosil qilishdir. Natijada ma‘lumotlarning yangi turi–obyekt hosil bo‗ladi. Vorislik–aniqlangan obyektlardan foydalangan holda ulardan kelib chiquvchi obyektlar iyerarxiyasini hosil qilish. Har bir «voris» o‗z «ajdodi» dagi ma‘lumotlar tavsifi va ulrni qayta ishlovchi usullar (metodlar) ni o‗zlashtiradi. Polimorfizm–vorislik iyerarxiyasidagi barcha obyektlarga bir vaqtda qo‗llanadigan, bir xil nomdagi amallarni (protsedura va funksiyalar) aniqlash imkoniyatidir. Bunda har bir obyekt bu amalni o‗z ustida bajarilishida o‗ziga xosliklarini buyurtma berishi mumkin. OYD murakkab programmalarni yozishni soddalashtiradi va bu jarayonga ixchamlik xususiyatini beradi. OYD ning asosiy afzalligi shundaki programma qo‗llash sohasini o‗zgartirishga dastruni o‗zgartirmasdan, faqat obyektlar iyerarxiyasiga yangi o‗zgartirishlar (satxlar qo‗shish) orqali erishish mumkin. Obyektlarni aniqlash. Obyekt-tarkibida o‗zaro bog‗langan har xil turdagi o‗zgaruvchilar (ma‘lumotlar maydoni) va ularni qayta ishlaydigan protsedura va funksiyalardan (metodlar) tashkil topgan tuzilmadir. Obyekt turini aniqlash uchun ―Object‖ maxsus so‗z aniqlangan va u quyidagicha e‘lon qilinadi. Type Object End; Misol. Belgi va matn ma‘lumotlar bilan ishlaydigan obyekt. Type ObjPos Object Line, Col : Word; Procedure Init (Init_Line,Init_Col : Word); Function GetLine: Word; {Line qiymatini qabul qilish} Function GetCol: Word; {Col qiymatini qabul qilish} Procedure Print; End; Procedure ObjPos.Init(Init_Line, Init_Col : Word); Begin Line : Init_Line; Col : Init_Col; End; Function ObjPos.Get_Line : Word; Begin Get_Line : Line End; Function ObjPos.Get_Col : Word; Begin Get_Col : Col End; Procedure ObjPos.Print; Begin Write(#7); End; ... Var ObjPos_Var : ObjPos; {obyekt nusxasini e‘lon qilish} ... Begin ... ObjPos_Var.Init(5,15); {obyekt uchun boshlang‗ich qiymatlar berish} ... End; Obyektni e‘lon qilishda metodlarning sarlavxalarigina yoziladi. Protsedura va funksiyalar e‘loni programma e‘lon qismining boshqa bo‗lagida bo‗lishi mumkin. Obyekt maydonlariga murojaat yozuv (Record) maydonlariga murojaat bilan bir xil («.» –nuqta va With operatori orqali). Lekin obyekt ma‘lumotlariga quyidagicha murojaat ijobiy baholanmaydi. ObjPos_Var.Line : 5; ObjPos_Var.Col : 15; Umuman, OYDda obyekt ma‘lumotlariga murojaat faqat metodlar orqali amalga oshiriladi. Obyektlarni e‘lon qilishda ma‘lum bir talablar bajarilishi kerak: obyekt turi asosiy daturning (modullarining) Type bo‗limida e‘lon qilinishi mumkin. Qism-programmalarda lokal obyektlarni e‘lon qilish mumkin emas; obyekt turini aniqlashda ma‘lumotlar maydoni metodlar maydonidan oldin kelishi kerak; obyekt komponentasi sifatida fayl kelishi mumkin emas, va aksincha, fayl ―obyekt‖ turidagi komponentaga ega bo‗lishi mumkin emas. ObjPos obyekti orqali matn ekranidagi birorta belgi holati aniqlanadi. Endi belgini o‗zini aniqlovchi va uning ustida ma‘lum bir ish bajaruvchi ObjSym obyektini aniqlaylik. Uses Crt; Type ObjSym Object Line, Col : Word; Sym : Char; Procedure Init (Init_Line,Init_Col: Word; Init_Sym : Char); Function GetLine: Word; Function GetCol: Word; Procedure Print; End; Procedure ObjSym.Init(Init_Line, Init_Col : Word); Begin Line : Init_Line; Col : Init_Col; Sym : Init_Sym; End; Function ObjSym.Get_Line : Word; Begin Get_Line : Line End; Function ObjSym.Get_Col : Word; Begin Get_Col : Col End; Procedure ObjSym.Print; Begin Crt.GotoXY(Col,Line); Write(Sym); End; Agar bu obyektning aniqlanishiga e‘tibor beradigan bo‗lsak, unda ObjPos obyektidagi ma‘lumotlar va Get_line, Get_Col funksiyalaridan foydalanilgan. Sym va Print komponentalari yangidan qo‗shilgan va Init protsedurasi qaytadan yozilgan. Ko‗rinib turibdiki, ObjSym obyekti ObjPos obyekti xususiyatlarini vorislik qilib olgan. Umuman aytganda, OYDda vorislik–bu obyektlarning oddiy tuzilishdan murakkab tuzilishga tomon obyekt xususiyatlarini olib o‗tishi va rivojlanishidir. Vorislikni aniqlanishi. Type Object( End; Uses Crt; { bu yerda ObjPos obyekt e‘loni bo‗lishi kerak} Type ObjSym qObject (ObjPos) Sym : Char; Procedure Init (Init_Line, Init_Col : Word; Init_Sym: Char); Procedure Print; Procedure ObjSym.Init; Begin ObjPos.Init(Init_Line, Init_Col); Sym : Init_Sym; End; Procedure ObjSym.Print; Begin Crt.GotoXY(Col,Line); Write(Sym); End; Bu misoldan ko‗rinib turibdiki, Init protsedurasi Line, Col va ObjPos.Init komponentalarini vorislik bo‗yicha ishlatmoqda. Obyektlarni aniqlashni xuddi shu yo‗sinda davom ettirib belgini, uning ranglar atributi bilan birga aniqlovchi obyekni aniqlashimiz mumkin. Bunda yangi obyekt ObjSym vorisi bo‗lib, unga kerakli maydonlar va atiribut bilan ishlovchi metodni ko‗shish kerak bo‗ladi. Hosil bo‗lgan obyekt ObjPosga nisbatan uchinchi bosqich vorisi bo‗ladi. ObjPosga nisbatan vorislik bosqichi ObjSym bilan bir bosqichda bo‗lgan obyektlarni ham yaratish mumkin. Misol uchun ekranga satr chiqaradigan obyekt yaratmoqchi bo‗lsak, u ObjPos vorisi bo‗ladi. Type ObjStr Object (ObjPos) Substr : String; Procedure Init (Init_Line, Init_Col : Word; Init_Str: String); Procedure Print; End; Procedure ObjStr.Init; Begin ObjPos.Init(Init_Line, Init_Col); Substr : Init_Str; End; Procedure ObjStr.Print; Begin Crt.GotoXY(Col,Line); Write(Substr); End; Vorislikda hosil bo‗luvchi yangi turlarda ajdod obyektlardagi identifikatorlarni qaytadan e‘lon qilish mumkin emas. Lekin bu cheklanish metodlarga taalluqli emas, ya‘ni har bir voris obyekt yuqoridagi aniqlangan metodlarni, yangidan e‘lon qilishi mumkin (o‗ziga xoslikdan kelib chiqqan holda). Bunga misol sifatida Print metodini ko‗rsatishimiz mumkin. Bu hollarda har bir obyekt uchun o‗z metodi (Print) ishlaydi. Vorislikda ham obyektlar iyerarxiyasidagi oxirgi aniqlangan metod ishlaydi. Download 5.01 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling