Сохтори идоракунандаи for

Печать

Агар лозим шавад, ки ягон қисми томи код якчанд маротиба такрор ёбад операторҳои сиклиро истифода мебаранд. Дар С++ се намуди операторҳои сиклӣ мавҷуданд: for, while, do-while. Барои операторҳои сиклиро хуб истифода бурда тавонистан мафҳумҳои TRUE ва FALSE-ро донистан зарур аст. (Нигаред ба дарс дар бораи амалҳои мантиқӣ.)

Дар аввал бо тарзи кори оператори for шинос мешавем. Мебинем, ки чӣ тавр for ба рафтори программа таъсир мекунад. Худи for чунин сохтор дорад:

for(initialization; condition; modification)
оператор;

Дар рафти кори барнома, ҳангоми навбат ба for расидан:

1) қисми initialization иҷро карда мешавад. Дар қисми initialization тағйирёбандаҳоро эълон карда, ба онҳо қиматҳои авваларо мебахшанд, ё ки ба тағйирёбандаҳои пештар эълон кардашуда қимат мебахшанд;

2) баъди иҷро карда шудани қисми initialization, барнома ба санҷидани қисми condition мегузарад. Дар қисми condition ягон ифодаи мантиқӣ меистад;

3) ҳангоми FALSE будани қимати қисми condition иҷрои оператори for қатъ мегардад ва барнома ба иҷрои қисми баъди оператори for шурӯъ мекунад. Ҳангоми TRUE будани қимати қисми condition барнома ба иҷрои қисми оператор оғоз мекунад. Қисми оператор - тани сикл низ номида мешавад (body);

4) баъди иҷрои қисми оператор барнома ба иҷрои қисми modification мегузарад. Дар ин қисм қимати тағйирёбандаҳо тағйир дода мешаванд ва барнома боз ба пункти 3) мегузарад.

Тасвири сохтори идоракунандаи for:

Мисоли истифодаи оператори for:

//namuna07.cpp 
#include <iostream>
using namespace std;
int main() {
int n=10;
for(int k=1; k<=n; k++)
cout<<"Kadami "<<k<<"-um."<<endl;
return 0;
}

Дар мисоли болои оператори афзункунӣ (increment) ++ истифода шудааст, ки вазифаи он як воҳид зиёд кардани қимати аргументаш мебошад. Яъне дар мисоли мо k++ баробарқувва аст ба k=k+1, лекин тезтар иҷро мешавад. Яъне ба k дар қадами аввал 1 бахшида шуда, баъд он чоп карда мешавад. Ҳар дафъа k як воҳид зиёд карда мешавад. Ҳангоми ба 11 баробар шудани қимати k кори сикл ба итмом мерасад. Як чизро қайд кардан зарур аст, ки баъди кори сикл k=11 мебошад, ки инро истифода бурдан мумкин аст.

Дар С++ оператори камкунӣ (decrement) -- мавҷуд аст, ки вазифаи он як воҳид кам кардани қимати аргументаш мебошад. Яъне k-- баробарқувва аст ба k=k-1.

Аз рафтори оператори for хулоса мебарояд, ки агар ба мо ягон сикли беохир лозим бошад, мо дар қисми condition ҳамин хел ифодаи мантиқӣ навиштанамон зарур аст, ки қимати он доимо TRUE бошад, мисол:

//namuna08.cpp
#include <iostream>
using namespace std;
int main() {
for(;1;)
cout<<"In cikl beintihost."<<endl;
return 0;
}

Дар вақти санҷидани ин барнома, барои қатъ кардани кори он CTRL+BREAK ё CTRL+D пахш кардан лозим.

Ҳангоми тартиб додани сикл ҳамаи қисмҳои оператори for-ро санҷидан лозим аст, то ки сикли беохир ҳосил нашавад (агар чунин сикл зарур набошад, албатта).

//namuna09.cpp
#include <iostream>
#include <math>
using namespace std;
int main() {
int n=20;
double pi=3.14159265,h,x;
h=2*pi/n;
for(x=0; x<=2*pi; x+=h;) {
cout<<x<<", "<<cos(x)<<", "<<sin(x);
cout<<", "<<sqrt(x)<endl;
}
return 0;
}

Дар ибтидои ин мисол файли сарлавҳавии math ба коди барномаи мо ҳамроҳ карда шудааст, то ки мо имконияти истифодаи функсияҳои стандартии математикии дар math мавҷуд бударо пайдо кунем. Намуди double барои ададҳои ҳақиқӣ дар ҷойҳое, ки саҳеҳияти баланди ҳисоб зарур аст истифода мешавад. Фарқи float ва double ба фарқи байни калкуляторҳои ҳаштрақама ва шонздаҳрақама монанд аст. Оператори x+=h баробарқувва аст ба x=x+h, лекин тезтар иҷро мешавад. Инчунин дар С++ операторҳои -=, *=, /= мавҷуданд.

Як мисоли дигар:

#include <iostream>
using namespace std;

int main() {
double order; //order's amount
double discount;
double total;
int percent;

order = 100;
for(int i=0; i<6; i++) {

if(order<500) {
percent = 0;
}
else if(order < 1000) {
percent = 2;
}
else if(order < 1500) {
percent = 4;
}
else {
percent = 5;
}

discount = order/100*percent;
total = order - discount;

cout<<"Order: "<<order<<endl;
cout<<"Discount Percent: "<<percent<<endl;
cout<<"Discount Amount: "<<discount<<endl;
cout<<"Total: "<<total<<endl;

cout<<endl;

//order+=500;
order = order + 500;
}

system("pause");
}

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Операторҳои сиклӣ барои чӣ лозим мебошанд?
2. Сохтори оператори for-ро нависед ва фаҳмонида диҳед.
3. Операторҳои афзункунӣ ва камкунӣ кадомҳоанд?
4. Вазифаи аломатҳои // чист?

Добавить комментарий


Защитный код
Обновить

Произведение «OFTOB.COM» публикуется на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Непортированная.