Функции
06.12.2024
1. Что такое функция и зачем она нужна?
Функция в программировании — это независимый блок кода, который выполняет определенную задачу. Её цель:
Сократить повторение кода. Если в вашей программе повторяются одинаковые куски кода, их можно вынести в отдельную функцию.
Повысить читаемость и удобство. Программа, разбитая на функции, становится легче для понимания.
Упростить отладку. Исправить ошибку в функции проще, чем искать её по всему коду.
Синтаксис объявления функции
Существует два способа объявления функций:
1. Объявление до main
Функция полностью описывается перед функцией main
.
Синтаксис
2. Объявление с помощью прототипа
Прототип функции размещается перед main
, а её реализация — после.
Прототип:
Пример прототипа и реализации:
2. Вызов функции
Функция вызывается по имени с указанием аргументов (если они есть). Синтаксис вызова:
Если функция возвращает значение, его можно сохранить в переменную:
Пример:
3. Ключевое слово return
return
Ключевое слово return
используется для завершения работы функции и возвращения результата.
Особенности:
Если функция возвращает значение Тип возвращаемого значения должен совпадать с указанным в объявлении функции.
Если функция ничего не возвращает Используется тип
void
. Можно использоватьreturn;
для выхода.
Пример:
4. Примеры создания функций
Функция без параметров и без возвращаемого значения
Функция с параметрами и без возвращаемого значения
Функция с параметрами и с возвращаемым значением
Функция, принимающая два параметра
5. Передача аргументов
Передача аргументов по значению
При передаче данных по значению создается их копия. Все изменения в функции не влияют на оригинальные переменные.
Пример:
Передача массивов
Массивы передаются по ссылке, поэтому изменения внутри функции сохраняются.
Пример работы с массивом:
6. Прототипы функций
Прототип позволяет объявить функцию до её реализации. Это особенно удобно при длинных программах.
Пример:
7. Область видимости
Локальные переменные
Переменные, объявленные внутри функции, видны только в ней.
Глобальные переменные
Переменные, объявленные вне функций, доступны везде.
8. Аргументы по умолчанию
Если аргументы не указаны, используются значения по умолчанию.
Пример:
9. Статические переменные
Переменные, объявленные как static
, сохраняют свое значение между вызовами функции.
Пример:
10. Передача массивов
Одномерные массивы
Массив передается в функцию по ссылке. Это означает, что изменения внутри функции будут сохраняться после её завершения.
Общий синтаксис:
Пример: Заполнение массива случайными числами и их отображение:
Двумерные массивы
При передаче двумерных массивов в функцию обязательно указывается количество столбцов.
Общий синтаксис:
Пример: Инициализация и вывод двумерного массива:
11. Глобальные и локальные переменные
Локальные переменные
Переменные, объявленные внутри функции, существуют только в её области видимости. После завершения работы функции эти переменные уничтожаются.
Пример:
Глобальные переменные
Переменные, объявленные вне всех функций, доступны в любой части программы. Они хранятся в памяти на протяжении всего времени работы программы.
Пример:
Конфликт локальной и глобальной переменных
Если внутри функции создается локальная переменная с тем же именем, что и у глобальной, то она скрывает глобальную.
Пример:
12. Статические переменные
Статические переменные в функции создаются только один раз при первом вызове и сохраняют своё значение между вызовами.
Пример:
Вывод:
13. Аргументы по умолчанию
Если при вызове функции аргумент не указан, используется значение по умолчанию, заданное в объявлении.
Пример:
14. Советы по работе с функциями
Декомпозиция. Разбивайте код на небольшие функции, каждая из которых решает одну задачу.
Имена функций. Используйте осмысленные названия, чтобы код был читаемым. Например, вместо
func1
пишитеCalculateSum
.Минимизируйте использование глобальных переменных. Они усложняют отладку.
Повторное использование. Функции можно вызывать из других функций, что упрощает структуру программы.
Да, метод сортировки "пузырьком" действительно один из классических алгоритмов, который часто рассматривается в курсах программирования. Вот подробное объяснение с реализацией и разбором.
Сортировка пузырьком (Bubble Sort)
Сортировка пузырьком — это простой алгоритм, который многократно проходит по массиву, сравнивая соседние элементы и меняя их местами, если они расположены в неправильном порядке. Этот процесс продолжается до тех пор, пока массив не будет отсортирован.
Принцип работы
Проходим по массиву от начала до конца.
Сравниваем каждый элемент с его соседом:
Если текущий элемент больше следующего, меняем их местами.
Повторяем процесс для всех элементов, кроме последнего (так как он уже на своём месте после первой итерации).
С каждым проходом диапазон проверяемых элементов уменьшается на 1, так как последние элементы уже отсортированы.
Эффективность
Сложность в худшем случае: — требуется nn проходов по массиву, каждый из которых включает n−1n-1 сравнений.
Сложность в лучшем случае: , если массив изначально отсортирован (при использовании оптимизации с флагом).
Реализация
Без оптимизации
Вывод:
С оптимизацией (с флагом)
Если массив уже отсортирован, дополнительное прохождение бессмысленно. Для этого вводится булевый флаг, который отслеживает, были ли произведены обмены на текущей итерации. Если обменов не было, алгоритм завершает работу.
Преимущество оптимизации: Сокращает количество ненужных проходов по массиву, если он уже отсортирован, что улучшает производительность для частично отсортированных массивов.
Визуализация работы алгоритма
Итерации сортировки пузырьком можно представить следующим образом:
Допустим, массив: [5, 3, 8, 6, 2]
.
Первый проход:
Сравниваем
5
и3
, меняем местами:[3, 5, 8, 6, 2]
.Сравниваем
5
и8
, оставляем на месте.Сравниваем
8
и6
, меняем местами:[3, 5, 6, 8, 2]
.Сравниваем
8
и2
, меняем местами:[3, 5, 6, 2, 8]
.
Второй проход:
Сравниваем
3
и5
, оставляем на месте.Сравниваем
5
и6
, оставляем на месте.Сравниваем
6
и2
, меняем местами:[3, 5, 2, 6, 8]
.
Третий проход:
Сравниваем
3
и5
, оставляем на месте.Сравниваем
5
и2
, меняем местами:[3, 2, 5, 6, 8]
.
Четвёртый проход:
Сравниваем
3
и2
, меняем местами:[2, 3, 5, 6, 8]
.
Массив отсортирован.
Когда использовать сортировку пузырьком?
Учебные задачи: Отличный алгоритм для обучения основам сортировки.
Маленькие массивы: Подходит для массивов, где .
Редко изменяемые массивы: Если массив почти отсортирован, оптимизированный алгоритм будет эффективен.
Last updated