Похожие презентации:
тема 8. Создание и использование функций для структурирования программ
1. Создание и использование функций для структурирования программ
2. ЦЕЛИ ЗАНЯТИЯ
Что мы будем делать:Разбивать программу на функции
Писать функции с параметрами и возвратом
Использовать прототипы
Строить иерархии функций
Что вы освоите:
Структурирование кода
Модульность
Переиспользование функций
3. Актуализация
Вспомним:Функция — именованный блок кода
Синтаксис: тип имя(параметры) { ... return ... }
Прототип — «анонс» функции
Массив передаётся по ссылке, размер — отдельно
Сегодня: применяем функции для структурирования программ
4. Проблема «длинного main»
Без функций — всё в main:int main() {
// 20 строк — заполнение
// 15 строк — вывод
// 30 строк — анализ
// 25 строк — сортировка
// 10 строк — вывод
результата
// Итого: 100+ строк в
одной функции
}
Проблемы:
Сложно читать
Сложно отлаживать
Дублирование кода
5. Решение: разбить на функции
int main() {fill_array(arr, N);
print_array(arr, N);
analyze(arr, N, &sum, &min, &max);
bubble_sort(arr, N);
print_array(arr, N);
}
Преимущества:
main — «оглавление»
программы
Каждая функция — одна
задача
Легко тестировать и
отлаживать
6. Структура программы с функциями
7. Иерархия функций
Функции могут вызывать другие функции:int sum_array(int arr[], int n) { ... }
float average_array(int arr[], int n) {
return (float)sum_array(arr, n) / n;
// вызывает
sum_array
8. Иерархия:
main├── fill_array
├── print_array
├── analyze
│
└── (внутри — цикл)
├── bubble_sort
└── print_array
9. Возврат нескольких значений. Функция может вернуть только одно значение, но можно использовать указатели:
void analyze(int arr[], int n, int *sum, int*min, int *max) {
// Вызов:
*sum = 0;
int sum, min, max;
*min = arr[0];
analyze(arr, N, &sum, &min, &max);
*max = arr[0];
for (int i = 0; i < n; i++) {
*sum += arr[i];
if (arr[i] < *min) *min = arr[i];
if (arr[i] > *max) *max = arr[i];
}
}
10. Практическое задание: Функции для массива
Задача 1: создатьфункции find_min, find_max, find_avg.
int find_min(int arr[], int n) — возвращает минимум
int find_max(int arr[], int n) — возвращает максимум
float find_avg(int arr[], int n) — возвращает среднее
Требование: в main — инициализировать массив и вывести результаты.
11. Шаблон:
int find_min(int arr[], int n) {int min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < min) min = arr[i];
}
return min;
}
12. Задание 2. Математические функции
Задача: Реализовать набор математических функций:int is_even(int n) — возвращает 1, если n чётное, 0 иначе
int is_prime(int n) — возвращает 1, если n простое, 0 иначе
int factorial(int n) — возвращает n!
Требование: протестировать каждую функцию в main для разных
значений.
Критерий успеха: все функции работают корректно на граничных
случаях (0, 1, отрицательные числа).
13. Задание 3. Функция для обработки строки/массива
Задача: Реализовать функции для массива символов:int count_char(char str[], char c) — подсчитывает
количество вхождений символа
void reverse_string(char str[]) — переворачивает
строку «на месте»
int string_length(char str[]) — возвращает длину
строки
14. Задание 4. Комплексное: структурированная
Задача: Написать программу «Управление складом»:1.
Массив из 10 товаров (числовые ID)
2.
Функция add_item — добавляет товар
3.
Функция find_item — ищет товар по ID (возвращает индекс или -1)
4.
Функция remove_item — «удаляет» товар (заменяет на -1)
5.
Функция print_items — выводит все товары
Обратите внимание:
find_item возвращает значение через return — простое число
add_item и remove_item изменяют массив и count через указатели
print_items — вспомогательная функция без возврата
15. ДОМАШНЕЕ ЗАДАНИЕ
1. Написать программу, разбитую на функции:o
fill_array(arr, n) — заполняет массив случайными числами
o
find_second_max(arr, n) — находит второй по величине максимум
o
is_palindrome(arr, n) — проверяет, является ли массив палиндромом
o
print_array(arr, n) — выводит массив
2. Написать программу «Библиотека»:
o
add_book(library, count, id, title) — добавляет книгу
o
find_book(library, count, id) — ищет по ID
o
print_library(library, count) — выводит все книги
o
Использовать структуру для книги (или два массива: ID и названия)
Программирование