Философия программирования на C++ Выпуск 16. Циклы 2 - перебор и завершение
Приветствую всех подписчиков!
Сегодня мы расскажем вам о еще одном виде циклов.
В прошлом выпуске мы прошли два вида: while (...) { ... } и do { ... }
while (...); . Какой именно использовать - остается на ваше усмотрение,
но лично я не люблю пользоваться вторым видом, поскольку с ним
становится сложнее читать код (чтобы узнать как выйти из цикла, по
какому условию - приходится листать исходники вниз, а они бывают порой
очень громоздкими и запутанными).
А теперь - цикл for. Он необходим, когда нужно перебрать какие-то значения от и до. Пример:
#include<iostream>
usingnamespacestd;
intmain(){
//Сначалапросимпользователяввестичисло
intnum=0;
cout<<"Please,enteranumber:";
cin>>num;
//Атеперьсчитаемфакториалотэтогочисла!
intresult=1;
for(inti=1;i<=num;i++){
result*=i;
}
cout<<"Factorial:"<<result<<endl;
}
Эта программа считает факториал от числа - произведение всех целых чисел от 1 до введенного числа (1 * 2 * 3 * ... * N = N! - восклицательный знак - это обозначение факториала в математике).
Здесь использован специальный вид цикла, наиболее удобный для перебора значений от 1 до num. Вот его структура:
for(<инициализация>;<условие>;<счетчик>){
<команды>;
}
В инициализации можно объявить переменные, которые будут использоваться внутри этого цикла. Например, мы объявили переменную i и присвоили ей значение 1. Этот код (инициализации) выполнится ровно один раз перед входом в цикл.
Условие содержит то же самое, что и while. Цикл завершится тогда, когда написанное условие не выполнится. Туда можно написать любое условие, не обязательно связанное с переменной i (однако лучше для
сложных условий использовать циклы while - просто так удобнее читать код). Вообще, циклы for больше предназначены для удобства организации кода, поэтому лучше его использовать в основном при переборе значений.
Условия проверяются каждый раз ПЕРЕД входом в тело цикла (то есть тело цикла может не выполниться никогда - как в случае с циклами while(...) {}
Счетчик - это код, который будет выполняться каждый раз ПОСЛЕ тела цикла. Вообще говоря туда можно запихнуть любой код (только без точек с запятой),
но обычно там пишут увеличение значения счетчика (так обычно называют переменную i в циклах for). Мы использовали оператор i++ - это увеличение значения переменной i на единицу. Называется оператором инкремента. Его мы рассмотрим подробнее в следующем выпуске. Можно было бы увеличивать значение i на любое число, например i += 10 увеличивало бы его на 10, а i += i увеличивало на само себя (в два раза).
Теперь распишем (почти) то же самое, но через цикл while:
<инициализация>;
while(<условие>){
<команды>;
<счетчик>;
}
Кстати, обычно переменные-счетчики в циклах for называют (исторически так сложилось) переменными i, j, k, l (как правило больше не требуется). И это действительно удобно, особенно когда никакие другие переменные так не называются.
И еще одно - циклы тоже могут быть вложенными друг в друга до бесконечности. То, что пишется внутри скобочек {} может быть любым произвольным кодом.
В следующем выпуске мы рассмотрим подробнее
фигурные скобочки {} и оператор инкремента (он не так прост, как кажется!).
Мы закончили статьи о циклах (хотя некоторые секреты будем раскрывать вам и дальше). Удачного вам дня!
P.S.:
Задание. Для тех, кто не знает как можно попрактиковаться - я буду давать каждый выпуск задания.
Попробуйте написать программу, которая проверяет, является ли введенное пользователем число - простым! (Напомню, простым называется число, которое делится только на себя и на единицу).
Подсказка:
вспомните про целочисленное деление - оно отбрасывает остаток.