Takrorlanuvchi 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);
End.
Aim.uz
100>
Do'stlaringiz bilan baham: |