Основи програмування на С ++ для початківців

Цикл for в C++

for C++, for С++Как вы заметили в содержании, на главной странице сайта, в языке C применяются несколько видов циклов. Цикл for  ми розглянемо першим, так как его легче понять новичкам, с моей точки зрения. А циклы while і do while, рассмотрены в отдельной статье.

Для начала, разберемся с тем, що означає цикл в програмуванні. Цикл – это специальный оператор, с помощью которого происходит повторение определённого участка кода определённое количество раз (какой участок кода повторять и когда цикл должен прерваться – определяет программист). Ще одне визначення запропонував відвідувач нашого сайту rrrFer: цикл – конструкция языка, предназначенная для организации повторного исполнения команд. Наприклад, щоб вивести на екран числа від одиниці до п'ятисот, можно использовать ручной вывод на экран:

ручной ввод (без цикла for)

Согласитесь – не самое интересное задание и представьте сколько пришлось бы прокручивать колесико мышки, чтобы добраться до конца кода.  А можна скористатися циклом for  і скоротити, тим самим в десятки разів,  час на написання цієї “интересной” программы и сам размер кода. Вот, якомога виконати це завдання із застосуванням for:

Ми починаємо визначати наш цикл в рядку 6 . Для этого пишем ключевое слово for і за ним круглі дужки() . В круглых скобках объявляется управляющая переменная (переменная-счетчик) i. В нашем случае, вона инициализирована нулем. Після ініціалізації стоїть крапка з комою ; . Далі маємо умову: i < 500 (оно означает, что пока i меньше 500, код в теле цикла будет повторяться) и снова точка с запятой ; . Именно оно и будет “говорить” програмі доки буде виконуватися тіло циклу (код в фигурных скобках {}). наостанок вказуємо, как будет изменяться i  з кожним кроком циклу (у нас – увеличение на единицу, используя постфиксный инкремент). Если описать одним предложением, те, что расположено в круглых скобках, команда будет звучать так – выполнять тело цикла, пока переменная i   менше п'ятисот, увеличивая i на единицу, при кожному кроці циклу. Крок циклу ще називають итерацией. А переменную-счетчик – управляющей переменной, так как она управляет количеством итераций.

Розберемо для наочності кілька кроків циклу з нашого прикладу. При першій ітерації циклу керуюча змінна дорівнює 0. Поэтому для вывода на экран единицы используем выражение i + 1 (0 + 1). Когда тело цикла выполнилось, происходит изменение (увеличение) управляющей переменной i  так, як ми вказали в круглих дужках () после оператора for – тобто вона стає рівною одиниці. Вторая итерация начинается с проверки условия (у нас i < 500). Если i действительно< 500, виконання тіла циклу повториться – на экран снова покажется i + 1, что эквивалентно 1 + 1, то есть 2. Последний раз цикл выполнится, когда управляющая переменная будет равна 499 и на экран покажется значение i + 1 (499 + 1). После этого её значение снова увеличится на единицу, но условие повторения цикла уже не будет выполняться, так как i (500) уже не меньше 500.  Після завершення роботи циклу програма перейде до виконання наступного рядка коду, расположенной за закрывающей } фигурной скобкой тела цикла. Результат выполнения программы посмотрите сами, запустив программу.

Управляющая переменная может как увеличиваться так и уменьшаться. В зависимости от того, какая задача поставлена перед программистом. Посмотрите на этот код. При его выполнении, на экране мы увидим числа, розташовані по спадаючій, от 500 до 1.

Не обязательно использовать постфиксный инкремент или декремент. Изменяем управляющую переменную так, как того требует задача. Це може бути++i,  i = 2,  i = 20,  i -= 15… Наприклад:

цикл for - управляющая переменная

управляющая переменная i  змінюється від 8 до 88 включительно, при этом шаг изменения равен 8. То есть сначала i = 8, на второй итерации 16 и так далее до 88.

цикл for - управляющая переменная

управляющая переменная i  змінюється від 3000 до 300 включительно, с уменьшением при каждой итерации на 300 (3000,  2700, 2400…)

цикл for c++, Цикл для C ++

управляющая переменнаяi  змінюється від 0  до 100 включительно, зі збільшенням при кожній ітерації на 10. (0, 10, 20…100)

цикл for - управляющая переменная

управляющая переменнаяi  змінюється від 3000  до 3 включительно, з розподілом при кожній ітерації на 10. (3000, 300, 30, 3)

В дополнение ко всему сказанному, хочу добавить, что все три, використовувані в круглих дужках, выражения необязательны. Если сделать такую, наприклад, запись: for( ; ; ) – это будет воспринято компилятором, как запуск так называемого бесконечного цикла. Здесь нет ни управляющей переменной, ни условия продолжения цикла, ні зміни керуючоїзмінної. Тобто цикл буде виконуватися нескінченно. В этом случае, чтобы все-таки как-то работать с таким циклом, керуюча змінна може бути визначена до циклу, её изменение можно добавить в конец тела for, а условие продолжения цикла можно задать используя оператор if і оператор break. Вот как это будет выглядеть:

Отмечу, что существует такое понятие, як область видимості змінної. В этом примере область видимости переменной i – тело главной функции main(). А в предыдущих примерах, она ограничивалась телом цикла for  і за його межами ця змінна вже була недоступна (к ней уже нельзя было обратиться – вывести её значение на экран, например)  Це треба мати на увазі. Так как, если в программе встречаются несколько циклов и управляющие переменные определяются выше в коде, а не в круглых скобках () після операторівfor , для каждой необходимо придумывать уникальное имя. Или каким-то другим образом выходить из этой ситуации.   Так що краще користуватися стандартним синтаксисом:

for ( определение управляющей переменной ;  умова повторення циклу;  зміна керуючоїзмінної) 

Так код читається легше, всё необходимое для работы цикла находится в пределах одной строки кода и сколько бы не было циклов в вашем коде, вам не придется утруждаться и придумывать новые имена для управляющих переменных.

Рекомендую посмотреть видео по теме. В нем рассмотрен и цикл while

Практика программирования по этой теме находится здесь – Завдання: Цикл for.

50 думки про "Цикл for в C++

  1. * терміни дивні використовуєте типу “управляющая переменная”. Я таких не зустрічав ніде.

    * оператор break ІМХО потрібно було в цій статті описати, а ще перейменувати статтю і тут же описати цикли do і while. Про оператор continue теж не забути.

    * не знаю що саме ви там зібралися писати в окремій статті про break, але ви його вже описували на сайті: https://purecodecpp.com/archives/237

    * область видимості…, а що ви не порушували цю тему, коли розгалуження описували?
    [CPP]
    int a = 100;
    if (true) {
    int a = 50;
    ++a;
    std::cout << a; // виведе 51
    }
    std::cout << a; // виведе 100
    [/CPP]

  2. Вова, мабуть мені тепер треба пояснюватися перед тобою )))

    * термін “управляющая переменная” можна зустріти в книзі “ЯК програмувати С ++” H.M. дані, П.Дж. Дейтел ну і на сайті msdn, наприклад

    * статті навмисне пишу невеликі. це моє право. вважаю, що краще не давати за один раз багато інформації

    * в статті про break опишу і continue

    * область видимості не зачіпали, коли розгалуження описували

    1. звичайно право, я хіба проти. Я ось ще до визначення докапаться б:
      >> Цикл - це повторення певної ділянки коду певну кількість разів

      Визначення на коректне взагалі. Цикл (в цьому контексті) – це конструкція, повторення – це процес. Не можна визначати предмет через процес. Ближче до життя – ти визначив(а):

      автомобіль – перевезення по дорогах людей і вантажів.

      Крім того, ти пишеш “певну кількість разів”. Кількість разів може бути і не визначено заздалегідь. В С ++ по крайней мере.

      Але це я чіпляюся і, як видно, не завжди вдало.

      1. Визначення циклу підправимо! голова розуміє, а словами іноді складно правильно пояснити.
        P.S. “правильно” – це так, щоб Вова схвалив :)

  3. Чето не хорошо я коментую. відмовка, постараюся не лізти з порадами. ти намагаєшся, а я ….

      1. Баг в визначенні начебто логічний.

        >> В круглых скобках объявляется управляющая переменная (переменная-счетчик) i. … Крок циклу ще називають итерацией. А змінну-лічильник - керуючоїзмінної, так как она управляет количеством итераций.

        Тут 2 рази вводиться одне й те саме поняття.

        Не знаю як вам, а мені ріже очі союз “а” на початку речення (спостерігаю по всьому тексту в усіх статтях). Я теж багато пива пив і погано вчився, але пам'ятаю, що на початку пропозиції його ставлять тільки в описових сценах художніх творів, коли хочуть відобразити захопленість (“А скільки навколо беріз і простору!”). Погані поети ще так роблять якщо рима не пре. У технічних текстах жодного разу такого не бачив.

        Коми абияк коштують. скрізь.
        >> Если описать одним предложением, те, что расположено в круглых скобках, команда буде звучати так - виконувати тіло циклу, поки змінна i менше п'ятисот, збільшуючи i на одиницю, при кожному кроці циклу.

        “, те, що” – перед “те” кома не потрібна.
        “Виконувати тіло циклу при кожному кроці циклу.” или “выполнять тело цикла …, збільшуючи на i одиницю при кожному кроці циклу” ?
        “стратити, не можна помилувати” :).

        Відкриває дужка повинна відділятися пропуском від попереднього тексту:
        >> якщо перерва оператора(в про

        XD.

    1. А че там розбиратися?

      змінні глобальні, локальні.
      Можна згадати про extern (http://stackoverflow.com/questions/1787875/use-of-extern-storage-class-specifier-in-c) і статичні (http://msdn.microsoft.com/ru-ru/library/s1sb61xd.aspx), але ось про них краще написати окремо (там є про що писати, начебто).

      А так… є оператор :: для доступу до глобальної області видимості, в іншому область видимості обмежується фігурними дужками. Ну і якщо фігурні дужки не стоять явно після for, while, if, …, то вони маються на увазі.

      Приклад з коментаря вище начебто нормально все пояснює, що ще можна написати про це? У вікі приклад приблизно такий же: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8

      1. А тобі не здається що “область видимості” краще винести на розгляд як окрему тему?
        Я з тобою згоден, її треба було б поставити в самий початок, що б люди які починають кодувати розуміли що до чого!
        Але ось здивувало – що ти сказав мовляв у тебе багато поганих статей було. Може ти просто не вмієш правильно підбирати їм місце і час, коли якась стаття повинна була йти, що б читачеві було зрозуміліше що й до чого?
        Так що виходить що ти сам свого часу купу помилок робив, які потім фіксують тобі довелося, а ось тепер ти такий “герой” тут вже поради роздаєш автору, мовляв це повинно там бути, а це за тим йти…
        І взагалі, чого ти паришся щодо ком? Ти що вчитель зі школи?

  4. rrrFer: ” його ставлять тільки в описових сценах художніх творів” – ну, вважатимемо цю статтю твором мистецтва, якщо вже на те пішло… а з запитом у мене самого проблеми завжди були… хіба це міняє щось? сюди люди приходять щоб почитати тих. літературу, подивитися синтаксис мови, порядок і правила оголошень функції та ін.
    Не будьте таким скурпулезно… Краще випийте пивка і расслабтесь поки читаєте статтю…
    З.Ы. якщо вже Вам не подобається така кількість помилок, чому б Вам не зробити власний сайт, саме таким яким Ви хочете що б він був???

    1. Дак я роблю свій сайт з 2011 року, але от лихо, з 2011 року не залишилося жодної статті і з 2012 теж майже все видалив. Видалив бо статті мені перестали подобатися, виявилися низькоякісними. Зараз я переписую старі статті (в багатьох приблизно ті ж помилки, що і на цьому сайті), але не все можна або є бажання переписати, показувати ж всякі похмурі статті мені якось стрьомно….

      Я вважаю, що зайде хтось випити пивка і мій блог почитати, а там хопу – кома пропущена. Все – пиво не йде, настрій жахливий xD. Хто винен?

      Реально простіше написати відразу без помилок, ніж потім правити. через 2 року тобі 100% не захочеться переписувати статтю про всякі if і for – це ж не дуже цікаво. Залишити їх теж буде стрьомно, а видалення статті дуже погано сприймається пошуковими системами. Пошукова система ще якийсь час видає твою сторінку в результатах пошуку, і отримує інформацію, що замість сторінки користувач отримує помилку, це до безпрідела підвищує відсоток відмов і не тільки.

      Вобщем погані статті – це бич будь-якого сайту. Невже ти жодного разу не бачив блогів з постами типу “на цю адресу залишається архів – старий блог, а новий за новою адресою….”. Тому що простіше запив і крутануть в ПС новий сайт, ніж переписати старий.

      1. якщо вже на те пішло, то ти і сейсчас багато ком або пропускаєш або не там де треба ставиш) так що нетреба тут “ля-ля”, мовляв автор не там щось поставив і т.д.
        имхо, тобі краще за собою дивитися, а автор сам розбереться як і що краще.
        З.Ы. плюс у тебе завжди є вихід – якщо тобі тут багато чого не подобається, ти просто можеш не сидіти на цьому сайті! чи не так?

    2. Ще буває поділяють сайт на “новий” і “архів”, при цьому нічого не видаляють, але дістатися до старих поганих статей юзер по посиланнях з сайту не може – тільки через пошуковик.

      Загалом одні статті для людей, а інші для пошукових роботів. Навіть на Хабре є пісочниця – я думаю у неї схоже призначення.

      Чи не приємно писати для пошукових систем. Тим більше ніхто не впевнений, що ПС не вважає середній відсоток відмов по сайту. якщо вважає – то старі погані статті можуть повиснути каменем на шиї сайту. Видалити їх можна (писав вище чому), але нормальний юзер зайде і майже відразу вийде (що є відмова і сприймається ПС негативно- принаймні чутки такі ходять).

  5. Так знайти погані статті легко. погані – це ті, які не люблять користувачі.
    Якщо на сайті встановлена ​​яндекс.метрика, то на відповідній сторінці можна отримати всю статистику по сайту.

    У мене на блозі зараз є сторінка, дає 11% всього трафіку сайту (і це не головна сторінка, а просто придатна стаття). Інша дає ще 7%. очевидно, це якісні статті. До сих пір залишилися статті дають 0.2% трафіку (а найгірші я взагалі видалив). Відрізняються вони аж в 50 раз за цим параметром. Коротше можна взяти кількістю, а можна якістю.

    ІМХО, якісна стаття містить нормальну введення і, найголовніше, цікавий, красивий приклад. Приклад треба придумувати і ретельно продумувати.

    На тему циклів я б як приклад взяв стандартний – розрахунок значень якої-небудь функції (у = х * х, например) на заданому інтервалі з заданим кроком. Щоб програма таблицю вивела типу
    1 – 1
    2 – 4
    3 – 9
    4 – 16

    І ще один приклад…ігровий який-небудь. типу “вгадай число” – програма загадує число на початку гри, юзер намагається відгадати і на кожному кроці програма повідомляє йому “больше” или “меньше”.
    Другий приклад нормально б показав випадок, коли кількість ітерацій заздалегідь не відомо. При цьому приклади дуже прості.

    Табулювання функції x * без(x)
    [CPP]
    for (int i = 0; i < n; ++i) cout << i < ” i * без(i);
    [/CPP]

    гра “вгадай число”:
    [CPP]
    INT = ранд Вел() % 100, T;
    for (;;) {
    cin >> T;
    if (т == Вел) {
    cout << "победа" << endl;
    break;
    }
    std::cout << (T < val ? "меньше" : "больше") << endl; } [/cpp] Не обязательно такие, можно другие примеры, главное чтобы они были красивыми, короткими и не очень скучными.

  6. >> якщо вже на те пішло, то ти і сейсчас багато ком або пропускаєш або не там де треба ставиш) так що нетреба тут "ля-ля", мовляв автор не там щось поставив і т.д. имхо, тобі краще за собою дивитися, а автор сам розбереться як і що краще.

    <> З.Ы. плюс у тебе завжди є вихід - якщо тобі тут багато чого не подобається, ти просто можеш не сидіти на цьому сайті! чи не так?

    << Можу не сидіти, ти ж якось з адміністрацією сайту пов'язаний? – тоді різко прислухаюся ради. Тим більше, другий раз його читаю.

    хоча, ІМХО, ти не правий. Коментарі індексуються пошуковою системою не гірше ніж текст статті. Нормальні коментарі дуже сильно допомагають сайту.

    1. Коментарі індексуються пошуковою системою не гірше ніж текст статті. Нормальні коментарі дуже сильно допомагають сайту.

      Так ти капітан очевидність) хто ж цього не знає.
      Нормальне все. Ніхто тобі не забороняє на сайті висіти, просто не засмічуй стіну.

  7. Шановні, мені здається чи у вас некоректно написаний приклад:

    “for (int i = 1; i <= 100; I + = 10)
    цикл for – керуюча змінна керуюча змінна i змінюється від 1 до 100 включительно, зі збільшенням при кожній ітерації на 10. (1, 10, 20...)"

    В даному випадку висновком буде: 1, 11, 21, 31..
    Або ж, при виведенні на екран віднімати одиницю з i, тоді результатом буде: 0, 10, 20, 30…

    Я не прав?

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *