Сикл. Операторҳои сиклӣ дар с++

Ба дигарон равон намоед

Сикл — ин яке аз конструксияҳои асосии алгоритми мебо- шад, ки барои ташкили иҷрокунии чандинбораи мадмуи коман- даҳои муайян истифода бурда мешавад. Инчунин, сикл гуф- та, дилхоҳ пайдарпаии командаҳои такроршавандаро низ мено- манд, ки ба тариқи дилхоҳ ташкил шудаанд (масалан, бо ёрии операторҳои шарти ва гузариш).

Таърифҳои зеринро дохил мекунем.

Пайдарпаии командаҳои такроршаванда тани сикл номида мешавад. Як маротиба иҷрошавии тани сикл итератсия номи-

да мешавад. Ифодае, ки иҷрошавии итератсияи ояндаро ё ба ин- тиҳо расидани итератсияҳоро муайян мекунад, шарти баромад аз сикл ё шарти интиҳои сикл номида мешавад. Тағйирёбан- дае, ки рақами итератсияи ҷориро нигоҳ медорад, ҳисобкунак (счётчик)-и сикл номида мешавад. Сикл метавонад ҳисобкунак надошта бошад, ё ин ки якчанд ҳисобкунак дошта бошад.

Иҷрошавии дилхоҳ сикл метавонад аз: қимати аввала бах- шидан ба тағйирёбандаҳои сикл, тафтиши шарти интиҳои сикл, иҷрои тани сикл ва навкунии қимати тағйирёбандаи сикл дар ҳар як итератсия иборат бошад. Ба ғайр аз ин, имконияти бар- маҳал баромадан аз сикл ва иҷро накардани итератсияи ҷори низ мавҷуд аст.

Намудҳои сикл. Дар забони барномасозии C++ 3 намуди сикл муайян шудааст:

  • сикл бо шарти пешина

while (ифодаи_шартИ) тани_сикл

  • сикл бо шарти пасина (баъдина)

do

тани_сикл

while (ифодаи_шарти);

  • сикли итератсиони

for (бахшидани_қимати_аввала; ифодаи_шарти; руйхати_ифодаҳо) тани_сикл

Тани_сикл эълонкуни ё муайянкуни шуда наметавонад. Ин ё ягон оператори алоҳида (аз он ҷумла, оператори холи) ки бо рамзи ; ба хотима мерасад, ё оператори таркиби, ё блок мебошад. Ифодаи_шартй дар ҳамаи намудҳои сиклҳо ифодаи доимии (асосан, ифодаи муносибат ё ададии) буда, шарти ин- тиҳои сиклро муайян мекунад (агар қиматаш баробари сифр

бошад). Бахшидани_қимати_аввала дар сикли for ҳамавақт бо ; ба охир мерасад, яъне аз ифодаи_шарти бо ин рамз ҷудо кар­да мешавад. Дар навбати худ, ифодаи_шарти низ бо рамзи ; ба охир мерасад. Дар ҳолати иштирок накардани ифодаҳои бахшидани_қимати_аввала ва ифодаи_шарти рамзҳои ; гузошта мешаванд. Рӯйхати_ифодаҳо — пайдарпаии ифодаҳои скаляри, ки бо вергул , ҷудо карда навишта мешаванд.

Оператори while. Оператори while (оператори «то он вақ- те, ки (шарт ҳақиқат аст) такрор кардан») оператори сикли бо шарти пешина номида мешавад. Ҳангоми оғози сикл, аввал қимати ифодаи_шарти ҳисоб карда мешавад. Агар он ғайринули бошад, онгоҳ тани_сикл иҷро карда мешавад. Баъд, ҳисобкунии қимати ифодаи_шартӮ ва иҷрокунии операторҳои тани_сикл паи ҳам такрор мешаванд, то он вақте ки қимати ифодаи_шартӮ ба сифр баробар мешавад.

Ба сифати ифодаи_шарти асосан ифодаҳои мантиқи бо ало- матҳои муносибатҳо истифода бурда мешавад. Инро дар ҳалли масъалаи зерин дида мебароем.

Масъала. Суммаи n ададҳои аввали натуралиро ҳисоб ку- нед.

Ҳал. Барномаи ҳалли масъала чунин мешавад.

#include <iostream>
using namespace std;
int main()

{
    int n;
    cout << "N-ро дохил кунед: ";
    cin >> n; int i = 0;
    //Хисобкунаки сикл
    int s = 0;
    //Сумма
    while (i < n)
     s += ++i;
     cout << "\n Сумма: " << s;
 return 0;

}

Оператори do…while. Оператори do…while (оператори «такроркуни то он вақте, ки (шарт ҳақиқат аст)») сикл бо шарти баъдина номида мешавад. Дар оғози иҷрошавии сик­ли do…while тани_сикл ҳатман иҷро карда мешавад. Баъд, қимати ифодаи_шартй санҷида мешавад ва, агар қимати он ғай- ринули бошад, тани_сикл бори дигар иҷро карда мешавад. Ҳан- гоми коркарди баъзе пайдарпаии маълумотҳо истифодаи сикли бо шарти баъдина нисбат ба сикли шарти пешина қулайтар аст. Ин дар он ҳолатҳое мешавад, ки агар коркарди пайдарпаиро на пеш аз, балки баъд аз пайдо шудани нишонаи ба интиҳо раси- дани сикл бояд қатъ кард. Барномаи ҳалли масъалаи болои бо ёрии оператори do…while чунин аст.

Оператори for. Оператори сиклии итератсиони for («опе­ратори сикли бо ҳисобкунак») яке аз маъмултарин операто­ри сикли мебошад. Дар ин намуди сикл ягон тағйирёбанда ба сифати ҳисобкунак дида баромада шуда, қиматаш аз қимати аввалаи додашуда то қимати охирин бо қадами муайян тағй- ир меёбад. Барои ҳар як қимати ин тағйирёбанда як маротиба тани_сикл такрор карда мешавад.

#include <iostream>
using namespace std;
int main()
{
int n;
cout << "N-ро дохил кунед: ";
 cin >> n; int i = 0;
 //Хисобкунаки сикл
 int s = 0;
//Сумма
do
s += ++i;
 while (i < n);
 cout << "\n Сумма: " << s;
return 0;
}

Мувофиқи         ситаксиси         забони          С++,

бахшидани_қимати_аввала — ин пайдарпаии муайянкуниҳо (эълонкуниҳо) ва ифодаҳое, ки аз ҳамдигар бо вергул , ҷудо карда шудаанд. Ҳамаи ифодаҳое, ки дар руйхати бахшидани_қимати_аввала навишта шудаанд танҳо як ма- ротиба дар оғози сикл иҷро карда мешаванд. Дар бисёрии ҳолатҳо, дар ин ҷо қимати аввала ба параметрҳои сикл бах- шида мешаванд. Ифодаи_шарти ҳамчунон, ки барои сиклҳои while ва do…while аст: агар қимати он ба сифр баробар бошад, иҷрои (такроршавии) тани_сикл ба охир мерасад. Агар ифодаи_шарти навишта нашуда бошад, онгоҳ қабул карда мешавад, ки қимати он ғайрисифри аст. Ифодаҳое, ки дар рӯйхати_ифодаҳо навишта шудаанд дар ҳар як итератсия баъди он ки тани_сикл як маротиба иҷро карда мешавад ва то санҷида шудани қимати ифодаи_шарти, ҳисоб карда мешаванд. Тани_сикл ягон оператор, блок, оператори таркиби ё оператори холу шуда метавонад.

Масъалаи болоиро бо ёрии оператори for ҳал мекунем.

#include <iostream>
using namespace std;
 int main()
{
int n, s = 0;
cout << "N-ро дохил кунед: "; cin >> n;
for(int i = 1; i <= n; ++i) s += i;
cout << "\n Сумма: " << s;
return 0;
}

Операторҳои for-и зерин бо оператори for, ки дар барномаи болои оварда шудааст, баробарқувва мебошанд:

for(int i = 1; i <= n; s += i++) ; for(int i = 1; i <= n; ) s += i++;

Қатъи иҷрои бармаҳали сикл ва партофтани (гузаронидани) итератсияи сикл. Дар забони C++ чунин опера- торҳо мавдуданд, ки онҳо тартиби идрошавии сиклро вайрон мекунанд: оператори баромад аз сикл break ва оператори гуза- штан ба итератсияи оянда continue.

Оператори баромад аз сикл break барои мадбури ба охир расонидани сикл истифода мешавад. Калимаи «мадбури» маъ- нои онро дорад, ки дар ин ҳолат идрошавии сикл бе тафти- ши қимати ифодаи_шартй қатъ карда мешавад ва идоракуни ба операторе, ки баъди оператори сиклии навишат шудааст, дода мешавад.

Оператори гузариш ба итератсияи оянда (партофтани ите­ратсияи дори) continue барои ба охир расонидани итератсияи дори ва тафтиши қимати ифодаи_шарти барои давом додани си- кл истифода бурда мешавад.

Дар охири мавзиъ қайд мекунем, ки истифодаи дилхоҳ сикл метавонад дар дохили сикли дигар навиштан мумкин аст. дар ҳолати истифодаи сикли for онро дар назар дошт, ки тағйи- рёбандаҳое, ки дар қисми бахшидани_қимати_аввала иштирок мекунанд, берун аз он мавдуд нестанд. Лекин, имконияти исти- фодабарии тағйирёбандаҳои идентификаторашон якхела, лекин барои сиклҳои гуногун эълон ва муайян шудаанд, ҳаст. Гуф- таҳои охиринро дар барномаи зерин шарҳ медиҳем.

#include <iostream>

 using namespace std;

 int main()

{

for(int i = 0; i < 3; ++i)

{

cout << "То сикл: i = " << i;

cout << ", сикли дохили:";

for(int i = 6; i > 3; --i)

 cout << " i = " << i;

 cout << ".\nБаъди сикл: i = " << i <<".\n";

}

 

return 0;

}

Натиҷаи иҷрои ин барнома чунин аст:

То сикл: i = 0, сикли дохили: i=6i=5i=4. Баъди сикл: i = 0.

То сикл: i = 1, сикли дохили: i=6i=5i=4. Баъди сикл: i = 1.

То сикл: i = 2, сикли дохили: i=6i=5i=4. Баъди сикл: i = 2.

Маводҳои ҳамсон