Сохтори идоракунандаи 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 
using namespace std;
#include <iostream>
int main() {
int n=10;
for(int k=1; k<=n; k++)
cout<<"Kadami "<<k<<"-um."<<endl;
return 0;
}

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

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

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

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

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

//namuna09.cpp
using namespace std;
#include <iostream>
#include <math>
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.h ба коди барномаи мо хамрох карда шудааст, то ки мо имконияти истифодаи функсияхои стандартии математикии дар math.h мавчуд бударо пайдо кунем. Намуди double барои ададхои хакики дар чойхое, ки сахехияти баланди хисоб зарур аст истифода мешавад. Фарки float ва double ба фарки байни калкуляторхои хаштракама ва шонздахракама монанд аст. Оператори x+=h баробаркувва аст ба x=x+h, лекин тезтар ичро мешавад. Инчунин дар С++ операторхои -=, *=, /= мавчуданд.

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

Дополнительная информация