Chiziqli tarmoqlanuvchi va takrorlanuvchi jarayonlarni algaritmlashchiziqli dasturlar tuzish
Download 77.5 Kb.
|
CHIZIQLI TARMOQLANUVCHI VA TAKRORLANUVCHI JARAYONLARNI ALGARITMLASHCHIZIQLI DASTURLAR TUZISH
- Bu sahifa navigatsiya:
- Takrorlanuvchi dasturlar tuzish
CHIZIQLI TARMOQLANUVCHI VA TAKRORLANUVCHI JARAYONLARNI ALGARITMLASHCHIZIQLI DASTURLAR TUZISH Reja: Chiziqli tarmoqlanuvchi Tarmoqlanuvchi dasturlar tuzish Takrorlanuvchi dasturlar tuzishChiziqli algoritmlar asosida tuzilgan dasturlar chiziqli dasturlar deyiladi. Quyida chiziqli dasturlar tuzishga misollar ko‘rib chiqamiz. Masala-1. ifoda qiymatini toping. Yechish: ifoda paskalda 12+(8-2)/(1+2) ko‘rinishda yoziladi. Program Masala_1; Begin WriteLn(12+(8-2)/(1+2)); End. Masala-2. ifoda qiymatini toping. Yechish: ifoda paskalda sqrt(9+16)-9/(1+2) ko‘rinishda yoziladi. Program Masala_2; Begin WriteLn(sqrt(9+16)-9/(1+2)); End. Masala-3. y=Sin30o+ Cos30o bo‘lsa, y ning qiymatini hisoblang. Yechish: Paskalda trigonometrik funksiyalar radianda hisoblanadi. 30 gradus radianga teng bo‘ladi. Paskalda π sonini ifodalovch maxsus pi konstanta ishlatiladi. U holda: Program Masala_3; Var y:Real; Begin y:= sin(30*pi/180)+ cos(30*pi/180); WriteLn(‘y=’, y); End. Masala-4. Berilgan x da funksiyaning qiymatini hisoblang. Yechish: x ning qiymatini Read operatori yordamida kiritamiz. Program Masala_4; Var x, y:Real; Begin Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi} ReadLn(x); y:=7*sqr(x)-4; WriteLn(‘y=’, y); End. Tarmoqlanuvchi dasturlar tuzish Tarmoqlanuvchi Chiziqli algoritmlar asosida tuzilgan dasturlar tarmoqlanuvchi dasturlar deyiladi. Quyida chiziqli dasturlar tuzishga misollar ko‘rib chiqamiz. Masala-1. bo‘lsa, y ning qiymatini hisoblang. Yechish:
Var x,y: Real; Begin Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi} ReadLn(x); If x>0 Then y:=x Else y:=abs(x); WriteLn(‘y=’, y); End. Masala-2. Berilgan x da funksiyaning qiymatini hisoblang Yechish:
Var x,y: Real; Begin Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi} ReadLn(x); If x>2 Then y:=x-2 Else y:=2*sqr(x)-8; WriteLn(‘y=’, y); End. Masala-3. bo‘lsa, berilgan x da y ning qiymatini hisoblang Yechish:
Var x: Real; y:String; Begin Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi} ReadLn(x); If x>5 Then y:=’katta’ Else y:=”kichik yoki teng”; WriteLn(‘y=’, y); End. Masala-4. Topishmoq: “Yer tagida oltin qoziq”. Topishmoq javobini kiritganda, to‘g‘ri yoki noto‘g‘ri ekanini aniqlovchi dastur tuzing. Yechish:
Var javob: String; Begin WriteLn(‘Yer tagida oltin qoziq’); Write(‘topishmoq javobini kiriting:’); ReadLn(javob); If javob=’sabzi’ Then WriteLn(‘to‘g‘ri’) Else WriteLn(‘noto‘g‘ri’); End. Masala-5. Kiritilgan so‘zda “a” harfi bor yoki yo‘qligini aniqlovchi dastur tuzing. Yechish: Pos funksiyasi satrdan ko‘rsatilgan belgini izlaydi. Masalan, a:=Pos(‘a’, ‘informatika’); operatori bajarilganda a ning qiymati 7 ga teng. Chunki, “informatika” so‘zida birinchi “a” harfi 6-o‘rinda turibdi. a:=Pos(‘v’, ‘sinf’); operatori bajarilganda esa, a ning qiymati 0 ga teng bo‘ladi. Chunki “sinf” so‘zida “v” harfi yo‘q. Program Masala_5; Var satr, javob: String; Begin Write(‘so‘z kiriting:’); ReadLn(satr); If Pos(‘a’,satr)>0 Then javob:=’bor’ Else javob:=’yo‘q’; WriteLn(‘Kiritilgan so‘zda “a” harfi ’, javob); End. Masala-6. Kiritilgan so‘zda nechta “a” harfi borligini aniqlang. Agar kiritilgan so‘zda “a” harfi bo‘lmasa, “yo‘q” degan javob chiqsin. Yechish: So‘z uzunligini L bilan belgilaymiz. L ning qiymatini Length funksiyasi yordamida aniqlaymiz. So‘zdagi harflarni birma-bir “a” harfi bilan taqqoslaymiz. Buning uchun i o‘zgaruvchi kiritamiz va unga ketma-ket 1, 2, …L qiymatlarini beramiz. i ning har bir qiymatida taqqoslashni bajarish uchun i ning qiymatini bittaga orttirish oldidan L1 nishon qo‘yamiz va i ning qiymati L ga teng bo‘lmaguncha shu nishonga qaytamiz. So‘zda uchragan “a” harflarni sanash uchun s – o‘zgaruvchi kiritamiz. Program Masala_6; Label L1; Var satr: String; i,s: Integer; Begin Write(‘so‘z kiriting:’); ReadLn(satr); L:=Length(satr); i:=0; s:=0; L1: i:=i+1; If satr[i]=’a’ Then s:=s+1; If i End. Masala-7. Kvadrat tenglama yechish dasturini tuzing. Yechish: ax2+bx+c=0 (a≠0) ko‘rinishidagi kvadrat tenglamani yechish algoritmini tuzamiz: 1) diskriminant: hisoblansin; 2) agar D<0 bo‘lsa, tenglama yechimga ega emas deb olinsin; 3) agar D=0 bo‘lsa, yagona yechim ga teng deb olinsin; 4) agar D>0 bo‘lsa, birinchi yechim ga, ikkinchi yechim ga teng deb olinsin; 5) tugallansin. Demak, bizga a, b, c, d, x1, x2 haqiqiy sonli o‘zgaruvchilar kerak bo‘ladi. Program Masala_7; Var a, b, c, d, x1, x2: Real; Begin Write(‘a=’); ReadLn(a); Write(‘b=’); ReadLn(b); Write(‘c=’); ReadLn(c); d:=b*b-4*a*c; If d<0 Then WriteLn(Yechim yo‘q); If d=0 Then WriteLn(‘x=’,-b/(2*a)); If d>0 Then begin x1:=(-b-sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a); WriteLn(‘x1=’,x1); WriteLn(‘x2=’,x2); end; End. Takrorlanuvchi dasturlar tuzishTakrorlanuvchi Chiziqli algoritmlar asosida tuzilgan dasturlar takrorlanuvchi dasturlar deyiladi. Quyida chiziqli dasturlar tuzishga misollar ko‘rib chiqamiz. Masala-1. 1 dan 100 gacha butun sonlar yig‘indisini hisoblovchi dastur tuzing. Yechish: 1+2+3+…+100 yig‘indida har bir qo‘shiluvchi o‘zidan oldingisigan bittaga ko‘p. Bu qonuniyatdan foydalanamiz. Yig‘indini s deb olib, avval uning qiymatini 0 ga tenglaymiz. Qo‘shiluvchini i deb olamiz, unga 1 qiymat berib, so‘ngra har safar bittaga orttirib boramiz. i=100 bo‘lganda hisoblashni to‘xtatamiz. 1-dastur: Program Masala_1; Var i, s: Integer; Begin i:=0; s:=0; While i<100 Do begin Inc(i); s:=s+I; end; Writeln(‘S=’,s); End. 2-dastur: Program Masala_1; Var i, s: Integer; Begin i:=0; s:=0; Repeat Inc(i); s:=s+i; Until i=100; Writeln(‘S=’,s); End. 3-dastur: Program Masala_1; Var i, s: Integer; Begin For i:=1 To 100 do s:=s+i; Writeln(‘S=’,s); End. Bu yerda takrorlanishlar soni avvaldan ma’lum bo‘lgani uchun 3-dastur eng sodda ko‘rinishga ega bo‘ldi. Masala-2. 1 dan 500 gacha bo‘lgan toq sonlar yig‘indisini topish dasturini tuzing. Yechish: s=1+3+5+…499 yig‘indini hisoblash kerak. Bu yerda birinchi qo‘shiluvchi 1 ga teng va qolganlari o‘zidan oldingisidan 2 taga ko‘p. 1-misol dasturini bir oz o‘zgartiramiz. Program Masala_2; Var i, s: Integer; Begin i:=-1; s:=0; Repeat i:=i+2; s:=s+i; Until i=499; Writeln(‘S=’,s); End. Aslida 1- va 2- masalalarni takrorlash operatoridan foydalanmasdan, chiziqli dastur tuzib yechsa ham bo‘ladi. Mustaqil o‘ylab ko‘ring. Masala-3. Kiritilgan so‘zda nechta “a” harfi borligini aniqlang. Agar kiritilgan so‘zda “a” harfi bo‘lmasa, “yo‘q” degan javob chiqsin. Yechish: Bu misol oldingi mavzuda berilgandi. Uni tarmoqlanish operatoridan foydalanib yechgandik. Endi takrorlanish operatoridan foydalanamiz. Program Masala_3; Var satr: String; i,s: Integer; Begin Write(‘so‘z kiriting:’); ReadLn(satr); L:=Length(satr); s:=0; For i:=1 To L Do If satr[i]=’a’ Then Inc(s); If s=0 Then WriteLn(‘yo‘q’) Else WriteLn(‘Kiritilgan so‘zda “a” harfi ’, s, ‘ ta’); End. Masala-4. 1 dan 100 gacha bo‘lgan 11 ga karrali sonlar ko‘paytmasini topish dasturini tuzing. Yechish: Ko‘paytmani p bilan belgilaymiz va uning qiymatini avval 1 ga teng deb olamiz. 1 dan 100 gacha sonlarni birma-bir 11 ga bo‘lib chiqamiz va qoldiqsiz bo‘linganlarini p ga ko‘paytirib boraveramiz. Sonni 11 ga qoldiqsiz bo‘linishini mod funksiyasi yordamida aniqlaymiz. Program Masala_4; Var i, p: Integer; Begin p:=1; For i:=1 To 100 Do If i mod 11=0 Then p:=p*i; Writeln(‘P=’,p); End. Bu dastur to‘g‘ri ishlaydi, ammo ortiqcha amallar bajaradi. Masala shartida 11 ga karrali sonlar aytilgan. Birinchi bunday son albatta 11. Keyingilari 22, 33, 44, … va hokazo. Demak biz p=11*22*33*…*99 ko‘paytmani hisoblashimiz kerak. Bu yerda birinchi ko‘paytuvch 11 ga teng va qolganlari o‘zidan oldingisidan 11 taga ko‘p. 3-misol dasturini bir oz o‘zgartiramiz. Program Masala_4; Var i, p: Integer; Begin i:=0; p:=1; Repeat i:=i+11; p:=p*i; Until i=99; Writeln(‘S=’,s); End. Bu dastur avvalgisidan bir oz “uzunroq” bo‘lsa ham takrorlanishlar soni 11 barobar kam, yani 11 barobar tezroq ishlaydi. Masala-5. n natural son berilgan. ko‘paytmani hisoblash dasturini tuzing. Yechish: Bu masala 4-masala kabi yechiladi. Program Masala_5; Var i,n,p: Integer; Begin Write(‘n=’); ReadLn(n); i:=1; p:=1; Repeat i:=i+1; p:=p*(1/i); Until i=n; Writeln(‘p=’,p); End. Dasturda Repeat o‘rniga For dan foydalanish mumkin. Program Masala_5; Var i,n,p: Integer; Begin Write(‘n=’); ReadLn(n); p:=1; For i:=2 to n Do p:=p*(1/i); Writeln(‘p=’,p); End. Masala-6. n natural toq son berilgan. ko‘paytmani hisoblash dasturini tuzing. Yechish: Ko‘paytuvchilar suratida 1 da n gacha toq sonlar, maxrajdagi son esa suratdan bitta ortiq. Program Masala_6; Var i,n,p: Integer; Begin Write(‘n=’); ReadLn(n); i:=-1; p:=1; Repeat i:=i+2; p:=p*(i/(i+1)); Until i=n; Writeln(‘p=’,p); End. Masala-7. ifodani qiymatini hisoblash dasturini tuzing. Yechish: Qo‘shiluvchilarni juft-juft qilib ajratsak (birinchi va ikkinchi, uchunchi va to‘rtinchi va hokazo) i=1,3,5,…,99 bo‘lganda, har safar s ga (1/i)-(1/(i+1)) qo‘shilib boradi. Program Masala_7; Var i,n,s: Integer; Begin i:=-1; s:=0; Repeat i:=i+2; s:=s+(1/i)-(1/(i+1)); Until i=99; Writeln(‘s=’,s); 100>0>0> Download 77.5 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling