4-Amaliy ish Mavzu: Takrorlanuvchi tuzilmali algoritmlar va ularning dasturi Ishdan maqsad



Yüklə 151,36 Kb.
səhifə2/7
tarix05.11.2022
ölçüsü151,36 Kb.
#67527
1   2   3   4   5   6   7
Dasturlash. 4-amaliy ishi 46b78f5d79eff0b68db01199c725339f

Cheksiz sikl.
while yordamida cheksiz sikl hosil qilish uchun shart ifodaga hamisha rost qiymat qabul qiladigan mantiqiy ifoda, o’zgaruvchi yoki rost konstanta qiymatini yozishimiz mumkin.
while (1) {
cout<<"Cheksiz sikl\n";
}

2) do while sikli.


do while sikli while sikliga o’xshash, farqi shart sikl oxirida tekshiriladi va shart bajarilsin yoki bajarilmasin kamida bir marta(1-sikl) sikl bajariladi.
1 dan n gacha sonlar yig’indisi quyidagicha yoziladi:
#include
using namespace std;
int main() {
int s = 0, i = 1, n;
cout<<"n=";
cin>>n;
do {
s += i;
i++;
}while (i <= n);
cout<<"s="<}

Bu siklda i o’zgaruvchinig qiymati qanday bo’lishidan qat’iy nazar sikl bir marta aylanadi. Bu siklni sonni kiritishda unig tog’riligini tekshirish va toki to’g’ri kiritilmaguncha kiritishni davom qildirish uchun foydalanishimiz mumkin. Masalan yuqoridagi masalamizda n soni natural bo’lishi kerak, agar natural son kiritilmasa yana kiritishni so’rash lozim:


do {
cout<<"n=";
cin>>n;
}while (n < 1);
3) for sikli.
for sikli sintaksisi quyidagicha:
for(sikl boshlanishidan oldingi amallar; sikl davom etish sharti; siklning har bir iteratsiyasi oxiridagi amallar) {
sikl tanasi;
}
Iteratsiya deb siklning bir marta bajarilishiga aytiladi. Agar ma’lum qadam bilan bitta o’zgaruvchining qiymatini o’zgartirib takrorlanuvchi jarayon amalga oshirish lozim bo’lsa, u holda uni quyidagicha xususiy holda yozishimiz mumkin:
for( o’zgaruvchi =boshlang’ich qiymat; o’zgaruvchi <=oxirgi qiymat; o’zgaruvchi +=sikl qadami) {
sikl tanasi;
}
1 dan n gacha sonlar yig’indisini topish uchun quyidagicha sikl amalga oshirishimiz mumkin:
#include
using namespace std;
int main() {
int s = 0, n;
cout<<"n=";
cin>>n;
for (int i = 1; i <= n; i++) {
s += i;
}
cout<}

Bu siklda i ning qiymati sikl boshlanishidan avval 1 ga teng qiymatni qabul qiladi. Yana bitta iteratsiya qilish uchun bajarilishi kerak bo’lgan shart i<=n, agar shart rost bo’lsa, yana bitta iteratsiya bajariladi, iteratsiya oxirida i ning qiymati birga oshiriladi(i++). Keyingi har bir iteratsiyada for siklining ikkinchi va uchinchi qismlari bajariladi, 1-qismi boshqa bajarilmaydi. Eng oxirgi iteratsiyadan oxirida i ning qiymati oshirilgach n+1 ga teng bo’ladi va keyingi iteratsiyada shart yolg’on qiymat qabul qilganligi sababli (n+1<=n yolg’on qiymat qabul qiladi) sikl aylanishi tugaydi.


Sikl o’zgaruvchisi i haqiqiy son ham bo’la oladi. Masalan 1 dan 10 gacha sonlarni 0.01 qadam bilan chiqarish uchun ya’ni 1, 1.01, 1.02, 1.03, …, 10 sonlarini chiqarish uchun quyidagicha sikl yoziladi.

for (double x = 1; x <= 10; x += 0.01) {


cout<}
x sikl parametri bu safar haqiqiy qiymatni qabul qiladi va har bir iteratsiya oxirida qiymati 0.01 ga oshiriladi.
for siklining uchta qismidan istalgan qismini yozmaslik mumkin:

double x = 1;


for (; x <= 10; x += 0.01) {
cout<}
bu kod avvalgi yozilgani bilan bir xil, faqat x=1 dastlabki qiymatni o’zlashtirish for ichida yozilmadi.

double x = 1;


for (; ; x += 0.01) {
cout<}
Bu kod qismida x ning qiymati 1 dan boshlab 0.01 qadam bilan oshirib boriladi, lekin to’xtash sharti yozilmadi, shuning uchun cheksiz sikl hosil bo’ladi.
double x = 1;
for (; ;) {
cout<}
Bu holatda esa x ning qiymati iteratsiya oxirida o’zgartirilmadi shuning uchun cheksiz ko’p marta x ning dastlabki qiymati 1 chirariladi.
break operatori.
break operatori siklni uning bajarilish sharti rost qiymat qabul qilishiga qaramasdan to’xtatish uchun qo’llaniladi. Yuqoridagi x ning qiymati 1 dan 100 gacha 0.01 qadam bilan oshirib boradigan misolda
double x = 1;
for (; ;) {
if (x > 100.000001)
break;
cout< x += 0.01;
}
break operatorining ishlatishga misollardan biri berilgan sonning tub yoki tub emasligini aniqlaydigan dastur yozish.
Sonning tub ekanligini aniqlash uchun uni 2 dan gacha bo’lgan sonlarga bo’linishini tekshiramiz. Agar ulardan biriga qoldiqsiz bo’linadigan bo’lsa, u holda bu son tub emas. 103 sonining tub ekanligini aniqlash uchun 2,3,4,5,6,7,8,9 va 10 sonlariga bo’linishini tekshiramiz.
#include
using namespace std;
int main() {
int n;
cin>>n;
bool is_prime = true;
for (int i = 2; i*i <= n; i++) {
if (n % i==0) {
is_prime = false;
break;
}
}
if (n==1)
is_prime = false;
if (is_prime)
cout<<"Tub";
else
cout<<"Tub emas";
}

Dastur kodini taxlil qilib chiqamiz. cin>>n – n sonini kiritish. is_prime o’zgaruvchisi - berilgan sonning tub ekanligining rost yoki yolg’onligini saqlovchi qiymat. Dastlab sonni tub deb tasavvur qilamiz(is_prime = true). 2 dan gacha sonlarni ko’rib chiqish uchun for (int i=2; i<=sqrt(n); i++) ko’rinishida siklni amalga oshirish lozim. i<=sqrt(n) shartning ikkala tamonini kvadratga ko’tarib, uning o’rniga i*i <= n shartni yozish mumkin.


n soni i ga qoldiqsiz bo’linishi uchun n ni i ga bo’lgandagi qoldiq qiymati nolga teng bo’lishi kerak(if (n % i==0)). Agar bunday shart bajarilsa, u holda tekshiilayotgan son tub emas degan xulosaga kelinadi, ya’ni uning 1 dan kata va o’ziga teng bo’lmagan birorta bo’luvchisi bor. Endi qolgan sonlarga bo’linishini tekshirishning zaruriyati yo’q, siklni to’xtatish mumkin. Berilgan son tub emas degan xulosaga kelamiz(is_prime = false) va siklni to’xtatamiz(break).
Agar n=1 bo’lsa n soni 2 dan boshlab hech bir songa bo’linmaydi va is_prime true qiymatini saqlab qoladi.Buni alohida tekshirish lozim: agar n birga teng bo’lsa u holda u tub emas. Agar berilgan son tub bo’lsa is_prime o’zgaruvchisi true qiymatni saqlab qoladi.

Yüklə 151,36 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin