logo

Takrorlanuvchi jarayonlar va ularni dasturlash

Загружено в:

08.08.2023

Скачано:

0

Размер:

34.3837890625 KB
Mavzu:   Takrorlanuvchi jarayonlar va ularni dasturlash.
                                       Reja :
1. Takrorlanuvchi jarayonlar va ularni dasturlash. For, while va do 
operatorlari yordamida   takrorlanishlarni dasturlash
1.1   Sikl operatorlari
1.2 O’tish operatorlari
2. Umumiy takrorlanish algoritmlari   va ichma-ich takrorlanishlar .
2.1 C++tilida takrorlanuvchi   jarayonlarni dasturlash
2.2   Continue operatori                                                      Sikl operatorlari
 Oldingi shartli while operatori.   Oldingi shartli while operatori quyidagi umumiy
ko’rinishga egadir:
while(ifoda)
Operator
Bu operator bajarilganda avval ifoda hisoblanadi. Agar uning qiymati 0 dan farqli 
bo’lsa operator bajariladi va ifoda qayta hisoblanadi. To ifoda qiymati 0 
bo’lmaguncha sikl qaytariladi.
Agar dasturda while (1); satr qo’yilsa bu dastur hech qachon tugamaydi.
Misol. Berilgan n gacha sonlar yig’indisi.
#include
void main()
{
long n,i = 1,s = 0;
scanf("%d",&n);
while (i< = n )
s+ = i++;
printf("\n s = %d",s);
}
Bu dasturda s+ = i++ ifoda s = s+i; i = i+1 ifodalarga ekvivalentdir.
Quyidagi dastur to nuqta bosilmaguncha kiritilgan simvollar va qatorlar soni  hisoblanadi:
#include
int main()
{  int nc = 0,nl = 0;
char c;
while ((c = getchar())! = '.' )
{  ++nc;
if (c = = '\n') ++nl;
};
printf("satrlar = %d simvollar = %d \n",nl,nc);
return 0;
}
  Keyingi shartli do-while operatori.   Keyingi shartli do-while operatori umumiy 
ko’rinishi quyidagicha:
do
Operator
while(ifoda)
Sikl operatorining bu ko’rinishida avval operator bajariladi so’ngra ifoda 
hisoblanadi. Agar uning qiymati 0 dan farqli bo’lsa operator yana bajariladi va 
hokazo. To ifoda qiymati 0 bo’lmaguncha sikl qaytariladi. Misol. Berilgan n gacha sonlar yig’indisi.
#include <iostream>
int main()
{
long n,i = 1,s = 0;
scanf("%d",&n);
do{
s+ = i++;}
while (i< = n);
printf("\n s = %d",s);
return 0;
}
Bu dasturning kamchiligi shundan iboratki agar n qiymati 0 ga teng yoki manfiy 
bo’lsa ham, sikl tanasi bir marta bajariladi va s qiymati birga teng bo’ladi.
 Parametrli for operatori. Parametrli for operatori umumiy ko’rinishi quyidagicha:
for( 1-ifoda;2- ifoda; 3-ifoda)
Operator
Bu operator quyidagi operatorga mosdir.
1-ifoda;
while(2-ifoda) { operator
3-ifoda
}
Misol. Berilgan n gacha sonlar yig’indisi.
#include
int main()
{
int n;
scanf("%d",&n);
int s = 0;
for(int i = 1;i< = n; i++) s+ = i;
printf("\n%d",s);
return 0;
}
  Siklda bir nechta schyotchikni qo’llanilishi.   Parametrli for   siklining sintaksisi 
unda bir nechta o’zgaruvchi - schyotchikni qo’llanilishiga, siklni davom etishini 
murakkab shartlarini tekshirishga va sikl schyotchiklari ustida ketma-ket bir nechta
operasiyani bajarilishiga imkon beradi.
Agarda bir nechta schyotchikka qiymat o’zlashtirilsa yoki ular o’rtasida   bir nechta 
operasiya bajarilsa , bu ifodalar vergul bilan ajratilgan holda ketma – ket yoziladi. for siklida bir nechta schyotchikni qo’llanilishi
#include<iostream>
#include<iomanip>
int main()
{
int i,j;
for (i = 0, j = 0; i<3; i++, j++)
printf("i:%d j:%d\n",i,j);
getch();
return 0;
}
Hatija:
i: 0 j: 0
i: 1 j: 1
i: 2 j: 2
1.2 O’tish   operatorlari
 Uzish break operatori.   Ba’zi hollarda sikl bajarilishini ixtiyoriy joyda 
to’xtatishga to’g’ri keladi. Bu vazifani break operatori bajarishga imkon beradi. Bu operator darxol sikl bajarilishini to’xtatadi va boshqaruvni sikldan keyingi 
operatorlarga uzatadi.
Misol:
#include<iostream>
int main()
{ int n;
while(1)
{
scanf("%d",&n);
if(n == 1||n == 0) break;
}
printf("Sikl tugadi");
return 0;
}
Bu misolda while(1) operatori yordamida cheksiz sikl hosil qilinadi. Agar 1 yoki 0 
soni kiritilsa sikl to’xtatiladi.
   Qaytarish continue operatori.   Sikl bajarilishiga ta’sir o’tkazishga imkon 
beradigan yana bir operator continue operatoridir. Bu operator sikl qadamini 
bajarilishini to’xtatib for va while da ko’rsatilgan shartli tekshirishga o’tkazadi.
Misol: #include
int main()
{
int n;for(;;)
{
scanf("%d",&n);
if(n == 1||n == 0)   continue ;
break;
}
printf("Sikl tugadi");
return 0;
}
Bu misolda for(;;) operatori yordamida cheksiz sikl hosil qilinadi. Agar 1 yoki 0 
sonlardan farqli son kiritilsa sikl to’xtatiladi.
  O’tish operatori goto.   O’tish operatorining ko’rinishi:
goto   . Bu operator identifikator bilan belgilangan operatorga o’tish kerakligini 
ko’rsatadi.
Misol uchun goto A1;…;A1:y = 5;
Strukturali dasturlashda goto operatoridan foydalanmaslik maslahat beriladi. Lekin
ba’zi hollarda o’tish operatoridan foydalanish dasturlashni osonlashtiradi. Misol uchun bir necha sikldan birdan chiqish kerak bo’lib   qolganda , to’g’ridan-
to’g’ri break operatorini qo’llab bo’lmaydi, chunki u faqat eng ichki sikldan 
chiqishga imkon beradi.
#include<iostream>
int main()
{
int n = 16,s = 0;
int i,j;
for(i = 1;i<5;i++)
for(j = 1;j<5;j++)
{
if(i*j>n) goto A;
C++;
}
A:printf("Sikl tugadi s = %d",s);
return 0;
}
2. Umumiy takrorlanish algoritmlari   va ichma-ich takrorlanishlar
2.1 C++tilida takrorlanuvchi jarayonlarni dasturlash Agar dastur bajarilish jarayonida operator yoki operatorlar guruhi bir necha   marta 
qayta-qayta bajarilsa , bunday jarayonlarni takrorlanuvchi (siklik) jarayon deyiladi. 
C++ tilida siklni 3 xil ko’rinishda tashkil qilish mumkin.
1.Sharti avval tekshiriladigan takrorlanish (oldshartli sikl):
while (shart) operator (lar);
Bu yerda operatorlar while da ko’rsatilgan shart yolg’on bo’lgunicha takrorlanadi. 
Takrorlanish tanasi murakkab bo’lsa, ya’ni 1 tadan ortiq operatorlar qatnashsa, 
ularni alohida {} ichiga olish kerak bo’ladi.
Masalan: b = 2*(a+5); a € [1, 10]; h=1;
#   include <iostream>
void main ( )
{ int a=1, b;
while (a<=10)
{ b = 2*(a+5); cout << “b=” <<="" p="">
cout << “a=” <
a++ ; }
}
Ekranda 10 ta a va b larning qiymatlari paydo bo’ladi.
2- misol. # include
void main ( )
{ int i = 10;
while ( i++ < =15)
cout << “Salom!!!”<< endl; }
Ekranda 5 marta “Salom!!!” yozuvi paydo bo’ladi.
2. Sharti keyin tekshiriladigan takrorlanish (so’ngshartli sikl):
do
operator (lar)
while (shart);
Takrorlanish   while   da ko’rsatilgan shart   yolg’on   bo’lgunicha davom etadi.
Masalan: y=sinx; x € [1,2] ; h=0.1
#include<iostream>
#include<iomanip>
void main ( )
{ float x=1, y;
do { y=sin(x); cout << “x=”<<x<<="" p="">
while (x<=2); getch(); }</x<
Masalaning algoritmi quyidagi ko’rinishga ega bo’ladi:
2- misol. Dastur klaviaturadan 20 soni kiritilishini kutadi.
# include<iostream>
void main ( )
{ int n;
do
{ cin >> n;
cout << “Sonni qayta kiriting!=”< <="" p="" ;
while (n!=20);
}
3. Parametrli takrorlanish (sikl):
Umumiy ko’rinishi
for (bosh qiymat; shart; o’zgarish qadami)
operator (lar);
Operatorlar 1 tadan ortiq bo’lsa ularni alohida qavslar -{} ichiga olinadi. 1-misol. Y = cos x; x € [2,3] ; h=0,2;
# include
# include
void main ( )
{ float x, y;
for (x=2; x<=3; x+ = 0.2)
{ y=cos(x); cout << “x=”<< x << “ y=”<< y << endl; }
}
2-misol. 100 gacha bo’lgan juft sonlarni ekranga chiqarish dasturi.
# include<iostream>
void main ( )
{ int i = 2;
while (i<=100)
{ cout << “i=”<< i; i += 2; } }
….
for (int i=2; i<=100; i +=2)
cout << “i=”<< i; do
cout << “i=”<< i; i += 2;
while (i<=100); 3-misol: 1 dan 100 gacha bo’lgan 3 raqami bilan tugaydigan sonlarni ekranga 
chiqarish dasturini tuzing (2 xil usulda).
……
int i=3;
while (i <=100)
{ cout << “i=”<< i;
i + = 10; } …..
for (i = 3;i <= 100; i + = 10)
cout << “i=”<< i;
4-misol. Qadimiy masala. Bir odam 100 so’m bilan bozorga bordi. Bozorda 1 ta 
sigir 10 so’m, 1 ta qo’y 3 so’m, 1 ta echki 0.5 so’m va xarid qilingan 
qoramollarning umumiy soni 100 ta bo’lsa,   nechta sigir , qo’y va echki sotib olindi?
Sigirlar soni: x, qo’ylar soni y, echkilar soni z deb olinsa,
# include
int main ( )
{
int x, y, z, s; # include
int main ( )
{
int x, y, z, s; for (x=1; x<=100; x++)
for (y=1; y<=100; y++)
if (19*x + 5*y = = 100)
{ z = 100 – x – y;
cout << “x=”<<="" p="">
cout << “y=”<<y;< p=""></y;<>
cout << “z=”<<="" p="">
return 0;
} for (x=1; x<=100; x++)
for (y=1; y<=100; y++)
for (z=1; z<=100; z++)
if (x + y + z = = 100)
{ cout << “x=”<<="" p="">
cout << “y=”<<y;< p=""></y;<>
cout << “z=”<<="" p="">
return 0;
}
2.2   Continue operatori
 Bu operator yordamida sikl parametrining biror qiymatida hisoblashni to’xtatib, 
keyingi qiymatida hisoblashni davom ettirish mumkin. Masalan: y = 2x 
funksiyasini x € [1,18] oraliqda h=1 qiymat bilan hisoblash kerak, lekin x=6 yoki 
x=13 qiymatlarida hisoblashni bajarmaslik kerak.
#   include <iostream>
void main ( )
{ int x, y;
for (x=1; x<=18; x++)
{ if (( x = = 6) || (x = = 13))   continue ;
y = 2*x; cout << “x=”<< x << “ y=” << y << endl; } }
2 - misol. 10 ta ketma-ket kiritiladigan butun musbat sonlar yig’indisini hisoblash 
dasturini tuzing. Agar son manfiy bo’lsa, yig’indiga qo’shmaslik kerak.
# include <iostream>
void main ( )
{ int x, i, s=0;
for ( i =1; i <=10; i ++)
{ cin >> x;
if ( x < 0) continue;
s = s + x; } // s +=x deb yozsa ham bo’ladi.
cout << “s=”<< s << endl; }
3-misol. Y = x n
  funksiyasini rekurrent formula orqali hisoblash dasturini tuzing. Bu
yerda n - butun son, x – ixtiyoriy haqiqiy son.
# include<iostream>
void main ( )
{ float x=2.56, y=1;
for ( int n=1; n<=10; n++)
y = y * x; // y * = x; cout <<”y=”<<y<<endl;< p=""></y<<endl;<>
getch ( ); }
4-misol. Y= = x 2
  + +
x - ixtiyoriy haqiqiy son.
# include
# include
void main ( )
{ float x=3.75, y=0; long p=1;
for ( int n=1; n<=8; n++)
{ p = p * n; y = y + x*x / p; }
cout << “y=”<<y<<endl;< p=""></y<<endl;<>
getch ( );
}
5-misol. S=cosx + ;
bu yerda n=10
# include<iostream>
void main ( )
{ float a, b, h, x, s, pi=3.14;
a = pi / 5; b=9 * pi / 5; h=(b-a) / 10;
x = a; cout. precision (3); while ( x<=b )
{ s = 0;
for ( int n=1; n<=10; n++)
s = s + cos(n*x) / n;
cout <<”s=”<<s<<="" p=""></s<
x = x + h;
}
getch ( ); }
6-misol. Boy bilan olim bahslashibdilar. Olim boyga har kuni (30 kun) 100000 
so’m beradigan bo’libdi. Boy esa olimga 1-kun 1 tiyin, 2-kun 2 tiyin, 3-kun 4 tiyin,
4-kun 8 tiyin va h.k. pul beradigan bo’libdi. Bahsda kim yutadi? Dasturini tuzing.
Olim → 30*100000 = 3000000 so’m
Boy → sum → 10737418 so’m
# include<iostream>
void main ( )
{ int s, s1=1, k = 0;
for ( int i=1; i<=30; i++)
{ k = k + s1; s1 = s1*2; }
k = k / 100;
s = 30*100000;
cout <<”boy olimga beradi:”<<k<<endl;< p=""></k<<endl;<>
cout <<”olim boyga beradi:” << s << endl;
getch ( );
}

Mavzu: Takrorlanuvchi jarayonlar va ularni dasturlash. Reja : 1. Takrorlanuvchi jarayonlar va ularni dasturlash. For, while va do operatorlari yordamida takrorlanishlarni dasturlash 1.1 Sikl operatorlari 1.2 O’tish operatorlari 2. Umumiy takrorlanish algoritmlari va ichma-ich takrorlanishlar . 2.1 C++tilida takrorlanuvchi jarayonlarni dasturlash 2.2 Continue operatori

Sikl operatorlari Oldingi shartli while operatori. Oldingi shartli while operatori quyidagi umumiy ko’rinishga egadir: while(ifoda) Operator Bu operator bajarilganda avval ifoda hisoblanadi. Agar uning qiymati 0 dan farqli bo’lsa operator bajariladi va ifoda qayta hisoblanadi. To ifoda qiymati 0 bo’lmaguncha sikl qaytariladi. Agar dasturda while (1); satr qo’yilsa bu dastur hech qachon tugamaydi. Misol. Berilgan n gacha sonlar yig’indisi. #include void main() { long n,i = 1,s = 0; scanf("%d",&n); while (i< = n ) s+ = i++; printf("\n s = %d",s); } Bu dasturda s+ = i++ ifoda s = s+i; i = i+1 ifodalarga ekvivalentdir. Quyidagi dastur to nuqta bosilmaguncha kiritilgan simvollar va qatorlar soni

hisoblanadi: #include int main() { int nc = 0,nl = 0; char c; while ((c = getchar())! = '.' ) { ++nc; if (c = = '\n') ++nl; }; printf("satrlar = %d simvollar = %d \n",nl,nc); return 0; } Keyingi shartli do-while operatori. Keyingi shartli do-while operatori umumiy ko’rinishi quyidagicha: do Operator while(ifoda) Sikl operatorining bu ko’rinishida avval operator bajariladi so’ngra ifoda hisoblanadi. Agar uning qiymati 0 dan farqli bo’lsa operator yana bajariladi va hokazo. To ifoda qiymati 0 bo’lmaguncha sikl qaytariladi.

Misol. Berilgan n gacha sonlar yig’indisi. #include <iostream> int main() { long n,i = 1,s = 0; scanf("%d",&n); do{ s+ = i++;} while (i< = n); printf("\n s = %d",s); return 0; } Bu dasturning kamchiligi shundan iboratki agar n qiymati 0 ga teng yoki manfiy bo’lsa ham, sikl tanasi bir marta bajariladi va s qiymati birga teng bo’ladi. Parametrli for operatori. Parametrli for operatori umumiy ko’rinishi quyidagicha: for( 1-ifoda;2- ifoda; 3-ifoda) Operator Bu operator quyidagi operatorga mosdir. 1-ifoda; while(2-ifoda) {

operator 3-ifoda } Misol. Berilgan n gacha sonlar yig’indisi. #include int main() { int n; scanf("%d",&n); int s = 0; for(int i = 1;i< = n; i++) s+ = i; printf("\n%d",s); return 0; } Siklda bir nechta schyotchikni qo’llanilishi. Parametrli for   siklining sintaksisi unda bir nechta o’zgaruvchi - schyotchikni qo’llanilishiga, siklni davom etishini murakkab shartlarini tekshirishga va sikl schyotchiklari ustida ketma-ket bir nechta operasiyani bajarilishiga imkon beradi. Agarda bir nechta schyotchikka qiymat o’zlashtirilsa yoki ular o’rtasida bir nechta operasiya bajarilsa , bu ifodalar vergul bilan ajratilgan holda ketma – ket yoziladi.