Kiritilgan oy tartib raqami j-ga ko‘ra tanlash boshlanadi(oydagi kunlar miqdoriga nisbatan) va shunga mos R-ning qiymati xisoblanadi
2-misol. Uchburchak tomonlarini ifodalovchi uchta son kiritilib bu sonlar uchburchak tomonlari bo‘lganda uning perimetrinida aks holda ularning uchburchak tomonlari bo‘la olmasligi haqidagi ma’lumotni beruvchi dastur yarating(Tanlash indeksi sifatida mantiqiy tipdan foydalanish).
var t:boolean;
a,b,c:real;
begin
writeln ('uchburchak tomonari uzunligini kiriting');
readln(a,b,c);
t:=(a+b>c) and (a+c>b) and (b+c>a);
case t of
true: writeln('bunday uchburchak mavjud va uning perimetri ',(a+b+c):4:0,' ga teng');
false :writeln('bunday uchburchak mavjud emas');
end;
readln;
end.
Dastur natijasi:
3-misol. Kiritilgan a va b haqiqiy sonlar uchun qo‘shish, ayirish, ko‘paytirish va bo‘lish belgisini kiritilganda bu sonlar ustida mos arifmetik amallarni bajaruvchi dastur yarating(Tanlash indeksi sifatida char tipidan foydalanish).
uses crt;
var
t:char;
a,b:real;
begin
writeln ('ikkita sonni kiriting');
readln(a,b);
writeln( 'arifmetik amallarga moc belgini kiriting') ;
readln(t);
Parametrik takrorlash operatori. Yechilayotgan masalaning mohiyatiga qarab, dasturchi tuzuvchi o‘zi uchun qulay bo‘lgan takrorlash operatorini tanlab olishi mumkin.
Takrorlash operatorlarining 3 xil turi mavjud:
· parametrli takrorlash operatori;
· repeat takrorlash operatori;
· while takrorlash operatori.
Dasturlash jarayonida ayrim hollarda bir yoki bir necha amallarni bir necha marotaba takrorlab bajarish zarurati tug‘iladi. Masalan, 1+2+…+2011 yig‘indini hisoblashimiz hisoblash uchun quyidagi dastur tuzadigan bo‘lsak,
..
a:=1; S:=s+a;
a:=2; S:=s+a;
a:=3; S:=s+a;
a:=4; S:=s+a; va hokazo, ya’ni dasturimiz «uzundan-uzun» ko‘rinishga ega bo‘lar edi. E’tibor bilan qaraydigan bo‘lsak a-o‘zgaruvchi har safar 1-ga ortib borib, ega bo‘lgan qiymati S-ga qo‘shilmoqda. Aynan shunday hollar uchun parametrli sikllardan foydalanish dasturchining ishini yengillashtiradi.
Parametrik sikllarning umumiy ko‘rnishi quyidagicha:
For := to do < operator yoki operatorlar>
Bu yerda a-parametr bosh qiymatiga, b-parametr oxirgi qiymatiga teng.
1-misol:
For i:=1 to 23 do
s:=s+1/I;
Siklning bu holatida parametr i-ning qiymati dastlab 1-ga teng bo‘lib, sungra siklning har bir qadamida ‘+1’-ga orta boradi va 2,3,…,23 ga teng bo‘ladi. Zarur hollarda parametrning qiymatini ‘-1’ ortttirish mumkin bo‘lib, bunda «to» o‘rniga «downto» ishlatiladi.
1-misol:
For k:=30 downto 1 do
begin W:=W+sqr(k); R:=r+sqrt(k); end;
ko‘rinishidagi sikl bo‘lib, ayrim xollarda ham ishlatiladi. Sikl parametrining qiymati faqat butun sonlardan iborat va sikl qadami doimo birga teng.
Parametrik sikllarning o‘ziga xos xususiyatlari quyidagilardan iborat:
For siklidan takrorlanishlar soni aniq bo‘lgan hollarda foydalanish maqsadga muvofiqdir.
Sikl parametri qiymati +1 yoki -1 ga avtomatik tarzda oshiriladi(«to» yoki «downto» ishlatilishiga ko‘ra).
Sikl parametri sifatida butun, belgili, mantiqiy yoki sanoq tiplaridan foydalanish mumkin.
Sikl bir necha amalni bajarishga mo‘ljallangan bo‘lsa, sikl tanasida bu amallar «begin» va «end» qavslari ichida berilishi shart(2-misolga qarang).
Parametrik takorlanishlar «ichma-ich» joylashishlari ham mumkin va bu holat juda ko‘p masalalarni yechishda qo‘llaniladi.
Masalan:
for t:=1 to 3 do
for k:=1 to 5 do
writeln(t,k);
Bu sikllarni aniqroq tasavvur etish uchun quyidagi dastur va uning natijasini taqqoslaymiz:
t-parametrning qiymati 1-ga teng bo‘lganda, k-parametr 1,2,3,4,5 qiymatlarni qabul qiladi
t-parametrning qiymati 2-ga teng bo‘lganda, k-parametr yana 1,2,3,4,5 qiymatlarni qabul qiladi vahokazo.
uses crt;
var t,k:byte;
begin clrscr;
writeln('t',' ','k');
writeln('----');
for t:=1 to 3 do
for k:=1 to 5 do
writeln(t,' ',k);
end.
2-misol. 'A' dan 'Z'-gacha va 'z' dan 'a'-gacha bo‘lgan barcha simvollarni chop etuvchi dastur tuzing.
Dastur ko‘rinishi:
var i:char;
begin
for i:='A' to 'Z' do
write(i,' ');
writeln;
for i:='z' downto 'a' do
write(i,' ');
readln;
end
Dastur natijasi:
3-misol. Raqamlari yig‘indisi 8-ga teng bo‘lgan barcha ikki xonali sonlarni aniqlab, chop etuvchi dastur yarating.
uses crt;
var i:10 ..99 ;
a,b:0..9;
begin
clrscr;
for i:=10 to 99 do
begin
a:=i div 10;
b:=i mod 10;
if a+b=8 then write(i,' ');
end;
end.