Қатысушы:Gylymbekova/зертхана

Уикипедия — ашық энциклопедиясынан алынған мәлімет
Навигацияға өту Іздеуге өту

C++/ Ілмектер(Циклдер)

Циклдар программистке бір блок кодын бірнеше рет орындауға мүмкіндік береді.Бұл бөлімде шартты операторларды кеңінен қолданатын боламыз.

While циклі[өңдеу | қайнарын өңдеу]

While циклы шын мәнінде қайталаудың жалғыз қажетті құрылымы болып табылады.Қолайлы for циклі while циклымен және үлкен бақылаумен қайталануы мүмкін.Қарапайым терістеу циклмен бірдей әрекетті орындай алады.[1]. Синтаксис төмендегідей:

while ( ''шарт'' ) {
    //дене
}

Тағы да, while циклінің денесін қоршаған фигуралық жақшалар бірнеше оператор осы циклдің бөлігі ретінде орындалатынын көрсетеді. Егер нақты код келесідей көрінсе:

while ( x == 4 )                   
    y += x;
    x += 1;

келесіні білдіреді:

 
while ( x == 4 ) {
    y += x;
}
    x += 1;

Дегенмен,мәселе туындауы мүмкін. Жазылғандарға сәйкес, біраз уақыттан кейін екінші жол шегіндірілген болса да, тек бірінші жол уақыт циклына сәйкес келеді. Бұл үлкен мәселе, өйткені (x) шартына қатысатын айнымалы өзгермейді, сондықтан оны әрдайым шындыққа айналдырып, оны шексіз циклға айналдырады. Мұны {} ішінде цикл денесінің бөлігі болуға арналған барлық мәлімдемелерді қамту арқылы жеңілдетуге болады.

while ( x == 4 ) {
    y += x;
    x += 1;
}

Do... While циклі[өңдеу | қайнарын өңдеу]

Do...while циклі while циклына ұқсас, бірақ цикл басталар алдында шартты операторды тексерудің орнына do орындалады...while loop шартты операторды бірінші іске қосқаннан кейін тексереді, содан кейін басқа итерацияға ауысады.[2]. Синтаксис төмендегідей:

do {
    //дене
} while (''шарт'');

Көріп отырғаныңыздай, ол шартты тексермес бұрын циклді кемінде бір рет іске қосады. Do ... циклі әлі де шексіз ілмектермен жалғасады, do ... while циклын while циклін қолданғандағы сақтықтықпен пайдалану қажет.Оның пайдалылығы while цикліне қарағанда әлдеқайда шектеулі, сондықтан оны тек қажет болғанда қолданыңыз.

For циклі[өңдеу | қайнарын өңдеу]

For циклы-программистке цикл қанша рет қайталанатын дәл бақылауға мүмкіндік береді.[3].

for (инициализация өрнегі; тестілеу өрнегі; жаңарту өрнегі) {
    //дене
}

Мұнда for циклі жұмысының мысалы берілген:

for ( int i = 0; i < 10; ++i ) {
    std::cout << i << std::endl;
}

Жоғарыда және төменде келтірілген код азды-көпті баламалы.

int i = 0;
while ( i < 10 ) {
    std::cout << i << std::endl;
    ++i;
}

Бұл цикл не істейді? Алғашқы итерациядан бұрын, ол i мәнін 0-ге теңестіреді. Келесіде, егер ол 10-дан кем болса, ол (while циклы сияқты) сынайды, егер тұжырым шын болса, цикл денесі іске қосады және бағдарлама қарапайым арифметикалық тұжырымдамамен қайтарылған мәнді i + 1 шығарады, терминал жүгіргіні келесі жолға жылжытады. Цикл аяқталғаннан кейін, i жаңарту мәлімдемесінде көрсетілгендей (1-ге) үлкейтіліп, шартты түрде қайтадан тестілейді. Сонымен, бұл цикл әр уақытта «i + 1» басып шығарып, 10 рет орындалады. Сіз өзіңіздің бағдарламаңызды санауға үйреттіңіз! For циклдерінде қолданылатын айнымалы, әдетте, i, j немесе k атымен бүтін айнымалы болып белгіленеді және жиі for циклінің басталуына дейін іске асырылады. Тағы бір нұсқа - оның бастапқы күйін жариялаумен бір мезгілде айнымалыны инициализациялау:

for (int i = 0; i < 10; i++) {
    std::cout << i+1 << std::endl;
}

Егер бұл дұрыс жасалса, ілмектерге салуға болады.

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

cout << "How many missiles will you fire?»(Сіз қанша зымыран атасыз?) << endl;
cin >> input;
cout << "\n";

for (int i = 0; i < input; i++) {
    for (int j = 10; j > 0; j--) {
       cout << j << " ";
    }
    cout << "Missile "(Зымыран) << i+1 << " has launched."(іске қосылды) << endl;
}

cout << "All missiles have been launched.» (Барлық зымырандар ұшырылды.) << endl;
return 0;
}

Бұл бағдарлама не істейді? Пайдаланушыға цикл үшін бірінші шартты түрде қолданылған бүтін санды таңдау ұсынылады. I-циклдың әр итерациясы j-циклі іске қосылуына әкеледі, ол i-циклдің жалғасуына дейін 10-дан 1-ге дейін есептеледі. Нәтиже келесідей болады: Сіз қанша зымыран атасыз? 3 10 9 8 7 6 5 4 3 2 1 Зымыран 1 іске қосылды. 10 9 8 7 6 5 4 3 2 1 Зымыран 2 іске қосылды. 10 9 8 7 6 5 4 3 2 1 Зымыран 3 іске қосылды. Барлық зымырандар ұшырылды.

C++ циклдік құрылымдардың эквиваленттілігі[өңдеу | қайнарын өңдеу]

While циклі do...while цикының орнын алуы мүмкін, егер while циклының шарты «бұрмаланған» болса және кем дегенде бірінші рет шын болса. While циклы until циклінің орнын алуы мүмкін,егер until циклінде көрсетілген шартты теріске шығарса.

For және While циклы[өңдеу | қайнарын өңдеу]

For циклы келесі құрылымға ие:

for (<бастапқы өрнек>; <шарт>; <жаңарту өрнегі>) {
   <код блогы>
}

Мұны оңай қайта пішімдеуге болады (қосымша жақшалар мен өрнектерден кейін екі қосымша нүктелі үтірді белгілеңіз):

{
     <бастапқы өрнек>;
     while (<шарт>) {
         <код блогы>
         <жаңарту өрнегі>;
     }
}

For циклын көбінесе C ++ тіліндегі программистер ұқыптылығына, сондай-ақ цикл мазмұнынан бөлектеуіне байланысты (жиі циклдің ауыспалы басқаруын пайдалана отырып, "int i" немесе басқа да қарапайым итератор) қолданады. Егер бастапқы оператор немесе update операторы for конструкциясына ұқыпты сай келетін кодтан аса күрделі кодты талап етсе, күрделі кодты қажет етсе, while циклі көбінесе қолайлылырақ.

Шексіз цикл[өңдеу | қайнарын өңдеу]

Бағдарламалық қателіктердің бірі - шексіз цикл құру. Шексіз цикл дегеніміз белгілі бір жарамды (немесе ең болмағанда жарамды) циклды енгізу кезінде ешқашан шықпайтын цикл. Бастаушы программистер әрбір осындай кіріс жиынтығы үшін, шығу шарттары бар екендігіне көз жеткізу үшін циклдегі барлық мүмкін кірістерді мұқият тексеріп шығуы керек. Бағдарламаның ілінуіне жол бермеуге (яғни, әрдайым аяқтамауға), барлық ықтимал енгізулер мен шығу жағдайлары жазылған алгоритмді жақсы түсінетіндігін көрсетеді. Бағдарламалау тілдерін академиялық зерттеу көбінесе студенттердің шексіз ілмектерді анықтау қабілетін тексереді, сондықтан көбінесе негізгі кодты терең түсінуді талап етеді. Компиляторлар, дебаггерлер және басқа бағдарламалау құралдары тек программистке шексіз ілмектерді анықтауға көмектесе алады. Толық жалпы жағдайда шексіз циклды автоматты түрде анықтау мүмкін емес. Бұл тоқтау мәселесі ретінде белгілі. Тоқтату мәселесі толық жалпы жағдайда шешілмесе де, кейбір нақты жағдайлар үшін цикл тоқтап қалмайтынын анықтауға болады.

Шексіз цикл мысалы[өңдеу | қайнарын өңдеу]

#include <iostream>
int main()
{
  while(1) {
    // printf("Infinite Loop\n");
     std::cout << "Infinite loop\n");
  }
  return 0;
}

Бұл код шексіз циклді тоқтатпай басып шығарады.

Сондай-ақ қараңыз[өңдеу | қайнарын өңдеу]

Сілтемелер[өңдеу | қайнарын өңдеу]

  1. Flemming Nielson; Hanne R. Nielson; Chris Hankin (1999). Principles of Program Analysis. Springer. ISBN 978-3-540-65410-0. Retrieved 29 May 2013.
  2. "Microsoft visual basic". msdn.microsoft.com. Retrieved 21 January 2016.
  3. PostScript Language Reference. Addison-Wesley Publishing Company. p. 596. ISBN 0-201-37922-8.