Программы
Циклы в Си

Циклы в Си

For, while и другие способы "крутиться в цикле"

Одна из задач компьютеров после обсчёта ядерных взрывов – автоматизация рутинных повторяющихся операций. А если мы говорим о повторении, то самое время поговорить о циклах.

while

В общем виде while выглядит так:

while (выражение1)
    оператор1

Если выражение1 истинно, то выполняем оператор1, пока выражение1 не станет ложным, либо пока нас не остановят оператором break.

unsigned x = 0;  // unsigned int
unsigned y = 0;  // беззнаковое целочисленное

while (x <= y) {
    x = y;
    y++;
}

Когда остановится цикл? Правильно, когда y переполнится. В x будет лежать самое большое unsigned число.

for

Также известен как "Сишный for":

for (выражение1; выражение2; выражение3)
    оператор1;

Выражение1 выполняется при старте работы цикла.

Выражение2 – условия остановки цикла.

Выражение3 выполняется каждыую итерацию цикла.

Стандартный пример – обход элементов массива, но это будет в следующей теме. Сейчас же – посчитаем факториал:

unsigned fact = 1;
for (int iter = 1; iter <= 5; iter++) {
    fact = fact * iter;
}

Мы можем также сделать это через while:

unsigned fact = 1;
int iter = 1;

while (iter <= 5) {
    fact = fact * iter;
    iter++;
}

А предыдущий пример мы можем записать на for вместо while:

unsigned x = 0;
unsigned y = 0;

for (; x < y; y++) {
    x = y;
}

do-while

do
    оператор1;
while (выражение1);

В отличии от while, do-while выполняет 1 раз оператор1, далее – проверяет выражение1 и, если оно истинно, снова выполняет оператор1, пока выражение1 не станет ложным.

Имеет смысл при операциях, которые нужно повторять, если случилась ошибка. Например, curl-запрос может не выполниться с первого раза – сначала делаем, потом проверяем на наличие ошибки и повторяем в случае её.

break и continue

Оператор break мы уже видели – он прерывает работу цикла или switch, выполнение продолжится с оператора, следующего за циклом или switch.

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

for (int i = 0; i < 100; i++) {
    if (i % 2) {
        continue;
    }

    printf("%d\n", i);
}

Если i нечётное – пропускаем. Если чётное – продолжаем, то есть печатаем.

ДЗ

Написать утилиту, позволяющую считать статистику по символам: цифры, латиница.

Пример работы:

→ cat /etc/passwd | ./counter
Digits: 12
Latin symbols: 112

Подсказка. Читать символы можно функцией getc из stdio, читать нужно из stdin, а символ конца ввода – EOF.

while ((c = getc(stdin)) != EOF)
Также может быть вам интересно:

Оператор switch

Читать »

Лирическое отступление о параметрах main

На паре возник вопрос: а что может стоять в параметрах функции main вместо void

Читать »
Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

Во время работы программы часто нужно сохранять некоторые важные записи о процессе выполнения команды. В Python есть довольно мощный модуль для работы с логами - давайте разберёмся с тем, как его использовать.

Фото Шаблон разработки ПО — Model View Controller (MVC)

Шаблон разработки ПО — Model View Controller (MVC)

MVC - один из самых распространённых архитектурных шаблонов разработки. Часто используется в различных фреймворках. В том числе и в Django.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django - своя регистрация на сайте

Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит - надо уметь создавать пользователей, либо предоставлять возможность регистрации Django пользователей.