21 – DARS. AMALIY MISOLLAR.
Rekurrent qatorlar. Rekurrent qator deb shunday qatorga aytiladiki bu qatorning n chi hadi n ning qiymatiga va qatorning oldingi elementlariga bog’lik buladi. Bu bog’liklikni aks ettiruvchi formula rekurrent formula deb ataladi. Misol uchun n! (faktorial ) ya'ni n gacha sonlar kupaytmasini qo’yidagi rekurrent formula yordamida hisoblash mumkin:
S0=1,Sn=Sn-1*n
Bu formulaga asoslangan dasturning asosiy qismi qo’yidagicha yoziladi:
For(int s=1,i=1;i<=n;i++) s*=i;
Rekurrent qatorga yana bir misol Fibonachchi sonlari qatori bo’lib, bu qator qo’yidagi rekurrent formullalar asosida ifodalanadi:
S0=1, S1=1,Sn=Sn-1+ Sn-2
Berilgan n gacha bulgan Fibonachchi sonlarini hisoblash dasturi:
Main()
{
while (1)
{ Cin>>(“\n %i”,&n);
if (n>2) break;
Cout<<(“ n qiymati notug’ri kiritilgan”);
};
for(int S0=1,S1=1,i=3;i<=n;i++)
{ S=S0+S1;S0=S1;S1=S;Cout<<(“\n i=%i S=%i”,&i,&S);};
}
Cheksiz qatorlar. Matematikada odatda biror qiymatni hisoblash shu miqdorga cheksiz yaqinlashuvchi qator hadlarini hisoblashga olib keladi. Amalda cheksiz qator hadlarini hisoblash yaqinlashish sharti bajarilguncha davom etadi va bu shartga mos keluvchi qator hadi izlanayotgan miqdorning taqribiy qiymati deb olinadi. Odatda yaqinlashish sharti sifatida shart qabul qilinadi. Bu erda eps oldindan berilgan son. Qator hadlarini rekurrent formulalar yordamida ifodalash dasturlashni ancha engillashtiradi.
Matematikada ? sonini ?/4=1-1/2!+1/3!-1/4!+…+(-1)(i+1)*1/i!+... cheksiz qator yordamida hisoblash mumkinligi isbotlangan. Bu qatorni quyidagi rekurrent formulalar yordamida ifodalash mumkindir:
R1=1.0, S1=1.0,Ri=-ri-1*(1/i), Si=Si-1+Ri;
Bu masalani echishning while operatori yordamida tuzilgan dasturini kurib chiqamiz:
#include
{ double eps;
Cout<<(“\n eps=”); Cin>>(“%f”,&eps);
int i=2;
double r=1.0;
double s=1.0;
while(r>eps||r<-eps);
{ s+=r;
r= - r*(1/i);
i++;
}
Cout<<(“pi=%f”,s*4);
}
Shu masalaning do while operatori yordamida tuzilgan dasturi:
#include
{ double eps;
Cout<<(“\n eps=”); Cin>>(“%f”,&eps);
int i=1;
double r=1.0;
double s=0.0;
do
{ s+=r;
r=-r*(1/i);
i++;
}
while(r=>eps||r<=-eps);
Cout<<(“pi=%f”,s*4);
}
Shunga e'tibor berish kerakki tekshirish tsikl tanasi bajarilgandan sung amalga oshirilgani uchun kichik eki teng sharti quyilgandir.
Shu masalani for operatori yordamida tuzilgan dasturi:
#include
{ double eps;
Cout<<(“\n eps=”); Cin>>(“%f”,&eps);
for(int i=1, double r=1.0,double s=1.0; r>eps||r<-eps;i++)
{ r=-r*(1/i);s+=r};
Cout<<(“pi=%f”,s*4);
}
Leksik analiz. Kiritilgan ifoda haqiqiy sonligini tekshiruvchi dastur:
#include
void Main()
{
int k=1; m=0;
while (c!=’\n’) {
if (c=’.’ && m=0) {m=1;continue};
if (c<’0’ || c>’9’) {k=0;break};
}
if (k) Cout<<“\n Hakikiy son”; else Cout<<“\n Hakikiy son emas”;
}
Keyingi dasturimizda kiritilaetgan ifoda identifikator yoki yuqligi tekshiriladi:
#include
void Main()
{
int k=0;
while (c!=’\n’)
{if (k==-1) break;
m=2;
if (c>=’0’ && c<=’9’) m=0;
if (c>=’a’ && c<=’Z’) m=1;
if (c==’_’) m=1;
}
switch(m)
{
case 0: if (k==0) k=-1;break;
case 1: k=1;beak;
default k=-1;break;
}
}
if (k=-1) Cout<<(“\n Identifikator emas”); else Cout<<(“\n Identifikatoras”);
}
Dostları ilə paylaş: |