Лабораторная работа №4

Программы циклической структуры

Изучение циклических алгоритмов и операторов повторения в программировании

Цель работы

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

Задачи лабораторной работы

  1. Изучить понятие циклического алгоритма
  2. Освоить цикл с предусловием (while)
  3. Освоить цикл с постусловием (do-while)
  4. Освоить цикл с параметром (for)
  5. Научиться использовать вложенные циклы
  6. Изучить операторы break и continue
  7. Реализовать программы обработки массивов

Что такое циклический алгоритм?

Циклический алгоритм — это алгоритм, в котором предусмотрено многократное выполнение одной и той же последовательности действий. Количество повторений может быть задано заранее или определяться в процессе выполнения программы.

Итерация

Однократное выполнение тела цикла

Условие

Логическое выражение для продолжения цикла

Счётчик

Переменная для подсчёта итераций

Тело цикла

Повторяющиеся действия

Виды циклов

🔄 Цикл с предусловием (while)

Проверка условия перед выполнением тела цикла

while (условие)
{
    // Тело цикла
    // Выполняется пока условие истинно
}

✅ Может не выполниться ни разу

🔁 Цикл с постусловием (do-while)

Проверка условия после выполнения тела цикла

do
{
    // Тело цикла
    // Выполняется хотя бы один раз
} while (условие);

✅ Выполнится минимум один раз

➿ Цикл с параметром (for)

Цикл с заранее известным количеством итераций

for (инициализация; условие; изменение)
{
    // Тело цикла
    // Компактная форма записи
}

✅ Удобен для работы с массивами

🔁 Цикл foreach

Перебор элементов коллекции

foreach (тип элемент in коллекция)
{
    // Работа с элементом
    // Автоматический перебор
}

✅ Безопасный перебор коллекций

Цикл while - детальный разбор

Синтаксис и работа

int i = 0;  // Инициализация счетчика
while (i < 5)  // Условие продолжения
{
    Console.WriteLine($"Итерация {i}");
    i++;  // Изменение счетчика
}
// Вывод:
// Итерация 0
// Итерация 1
// Итерация 2
// Итерация 3
// Итерация 4

Примеры использования while

Сумма чисел
int sum = 0;
int n = 1;
while (n <= 100)
{
    sum += n;
    n++;
}
// sum = 5050
Поиск делителей
int num = 24;
int div = 1;
while (div <= num)
{
    if (num % div == 0)
        Console.Write($"{div} ");
    div++;
}
// Вывод: 1 2 3 4 6 8 12 24

Цикл for - мощный инструмент

Структура цикла for

for (int i = 0; i < 10; i++)
{
    // i = 0 - инициализация (выполняется один раз)
    // i < 10 - условие (проверяется перед каждой итерацией)
    // i++ - изменение (выполняется после каждой итерации)
    Console.WriteLine($"i = {i}");
}

Вариации цикла for

Обратный отсчёт
for (int i = 10; i >= 0; i--)
{
    Console.WriteLine($"Осталось: {i}");
}
Шаг больше 1
for (int i = 0; i <= 20; i += 2)
{
    Console.WriteLine($"Четное: {i}");
}
Множественная инициализация
for (int i = 0, j = 10; i < j; i++, j--)
{
    Console.WriteLine($"i={i}, j={j}");
}

Вложенные циклы

Циклы могут содержать внутри себя другие циклы. Это позволяет обрабатывать многомерные структуры данных.

Таблица умножения

for (int i = 1; i <= 10; i++)
{
    for (int j = 1; j <= 10; j++)
    {
        Console.Write($"{i * j,4}");
    }
    Console.WriteLine();
}

Рисование фигур

// Треугольник из звездочек
for (int i = 1; i <= 5; i++)
{
    for (int j = 1; j <= i; j++)
    {
        Console.Write("* ");
    }
    Console.WriteLine();
}
// Вывод:
// * 
// * * 
// * * * 
// * * * * 
// * * * * *

Управление циклами

break - выход из цикла

Немедленно прерывает выполнение цикла

for (int i = 0; i < 10; i++)
{
    if (i == 5)
        break;  // Выход при i = 5
    Console.WriteLine(i);
}
// Вывод: 0 1 2 3 4

continue - пропуск итерации

Пропускает остаток текущей итерации

for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
        continue;  // Пропуск четных
    Console.WriteLine(i);
}
// Вывод: 1 3 5 7 9

return - выход из метода

Завершает выполнение всего метода

void FindNumber(int[] arr, int target)
{
    for (int i = 0; i < arr.Length; i++)
    {
        if (arr[i] == target)
        {
            Console.WriteLine($"Найдено на позиции {i}");
            return;  // Выход из метода
        }
    }
    Console.WriteLine("Не найдено");
}

Бесконечные циклы

⚠️ Внимание!

Бесконечные циклы могут привести к зависанию программы. Используйте их осознанно!

Намеренный бесконечный цикл
while (true)
{
    string input = Console.ReadLine();
    if (input == "exit")
        break;  // Выход по команде
    Console.WriteLine($"Вы ввели: {input}");
}
Случайный бесконечный цикл (ошибка)
// ОШИБКА: забыли изменить i
int i = 0;
while (i < 10)
{
    Console.WriteLine(i);
    // i++;  // Забыли увеличить!
}

Блок-схема циклического алгоритма

Начало
Инициализация
Условие?
Да
Тело цикла
Изменение счётчика
Нет
Вывод результата
Конец

Сравнение типов циклов

Характеристика while do-while for foreach
Когда проверяется условие Перед итерацией После итерации Перед итерацией Автоматически
Минимум итераций 0 1 0 0
Известно число итераций Не обязательно Не обязательно Обычно да Зависит от коллекции
Удобен для Неопределённое число повторений Минимум одно выполнение Счётчики, массивы Перебор коллекций
Сложность Простой Простой Средняя Простой

Примеры типовых задач

🔢 Математические вычисления

  • Факториал числа
  • Числа Фибоначчи
  • Возведение в степень
  • НОД и НОК
  • Простые числа

📊 Обработка данных

  • Сумма элементов
  • Поиск максимума/минимума
  • Среднее арифметическое
  • Сортировка массивов
  • Фильтрация данных

📝 Работа с текстом

  • Подсчёт символов
  • Поиск подстроки
  • Замена символов
  • Валидация ввода
  • Парсинг данных

🎨 Генерация паттернов

  • Геометрические фигуры
  • Числовые пирамиды
  • Таблицы данных
  • ASCII-арт
  • Фракталы

Оптимизация циклов

✅ Хорошие практики

  • Вынос инвариантных вычислений из цикла
  • Минимизация операций в теле цикла
  • Использование подходящего типа цикла
  • Кэширование длины массива
  • Избегание лишних проверок

❌ Частые ошибки

  • Забытое изменение счётчика
  • Неверное условие выхода
  • Выход за границы массива
  • Модификация коллекции в foreach
  • Слишком глубокая вложенность

Ключевые навыки

🔄

Итерации

Организация повторяющихся действий

🎯

Управление циклами

Контроль выполнения и завершения

📊

Обработка массивов

Эффективная работа с коллекциями

Оптимизация

Повышение производительности циклов