Семинар 4-задание
Семинар «Массивы, условия и циклы в C++: управление данными и ходом программы»
Кейс: "Анализ сгенерированных данных с использованием случайных чисел"
Формат: Практический воркшоп (90 минут)
Участники: 3-5 студентов в команде + ИТ-практик -наставник
Тайминг семинара
1. Введение и постановка задачи (15 минут)
00:00-00:05 – Приветствие и цели
00:05-00:15 – Разбор учебного кейса
Кейс: "Генерация и анализ случайных данных"
Задача: Создать программу для генерации и анализа наборов данных
Применение: Тестирование алгоритмов, симуляция реальных процессов, анализ производительности
2. Теоретический разбор (15 минут)
00:15-00:30 – Основные конструкции C++ и работа со случайными числами
#include <iostream>
#include <cstdlib>
#include <ctime>
// 1. Инициализация генератора случайных чисел
int main() {
srand(time(0)); // Инициализация текущим временем
// 2. Генерация случайных чисел в диапазоне
int random_number = rand() % 100 + 1; // от 1 до 100
double random_double = (rand() % 1000) / 10.0; // от 0.0 до 99.9
// 3. Заполнение массива случайными значениями
const int SIZE = 10;
int data[SIZE];
for (int i = 0; i < SIZE; i++) {
data[i] = rand() % 50 + 50; // значения от 50 до 99
}
}
3. Практическая работа (40 минут)
00:30-01:10 – Решение кейса в командах
Задания:
Задание 1: "Генератор ежедневных температур"
Задача: Сгенерировать массив температур для небольшого городка за 30 дней.
// Данные: температура за 30 дней
float temperatures[30];
// Задание:
// 1. Заполнить массив значениями от -15.0 до +35.0
// 2. Добавить небольшие случайные колебания (±3°C от предыдущего дня)
// 3. Вывести все значения в формате: "День 1: -2.5°C"
// Пример вывода:
// День 1: -2.5°C
// День 2: -1.8°C
// ...
// День 30: 28.3°C
Задание 2: "Генератор оценок студентов"
Задача: Создать журнал успеваемости группы из 15 студентов по 5 предметам.
// Данные: оценки 15 студентов по 5 предметам
int grades[15][5];
// Задание:
// 1. Заполнить массив случайными оценками от 2 до 5
// 2. Сделать так, чтобы у 2-3 студентов были только хорошие оценки (4-5)
// 3. Вывести таблицу: студент - оценки по предметам
// Пример вывода:
// Студент 1: 5 4 3 5 4
// Студент 2: 4 5 4 4 5
// ...
// Студент 15: 3 4 2 3 4
Задание 3: "Генератор ежечасных продаж кофе"
Задача: Сгенерировать данные о продажах кофе в кофейне за неделю по часам.
// Данные: продажи за 7 дней, по 14 часов в день (с 8:00 до 21:00)
int coffee_sales[7][14];
// Задание:
// 1. Утренние часы (8-11): 20-40 чашек в час
// 2. Обеденные часы (12-14): 30-60 чашек в час
// 3. Вечерние часы (17-20): 15-35 чашек в час
// 4. Остальные часы: 5-15 чашек в час
// 5. В выходные (суббота, воскресенье) увеличить продажи на 20%
// Пример вывода:
// Понедельник, 8:00 - 25 чашек
// Понедельник, 9:00 - 32 чашки
// ...
// Воскресенье, 20:00 - 28 чашек
Задание 4: "Генератор случайных паролей"
Задача: Сгенерировать 10 случайных паролей заданной длины.
// Данные: 10 паролей по 8 символов каждый
char passwords[10][9]; // +1 для символа конца строки
// Задание:
// 1. Пароль должен содержать буквы (a-z, A-Z) и цифры (0-9)
// 2. Первый символ - всегда буква
// 3. Вывести все пароли в столбик
// Пример вывода:
// Пароль 1: Abc34Xy9
// Пароль 2: Qw98erT5
// ...
// Пароль 10: Zx12cvB7
Задание 5: "Генератор графика дел на день"
Задача: Создать расписание дел на день с временными интервалами.
// Данные: 10 дел с временем начала и продолжительностью
struct Task {
int start_hour; // час начала (8-22)
int start_minute; // минута начала (0-59)
int duration; // продолжительность (15-120 минут)
};
Task schedule[10];
// Задание:
// 1. Сгенерировать 10 дел так, чтобы они не пересекались по времени
// 2. Первое дело начинается не раньше 8:00
// 3. Последнее дело заканчивается не позже 22:00
// 4. Вывести расписание в формате "10:30 - 11:45: Сделать задание"
// Пример вывода:
// 8:00 - 9:30: Утренняя пробежка
// 9:45 - 11:15: Работа над проектом
// ...
// 20:00 - 21:00: Чтение книги
Задание 6: "Генератор цветовой палитры"
Задача: Сгенерировать 5 гармоничных цветовых палитр в RGB формате.
// Данные: 5 палитр по 4 цвета в каждой
struct Color {
int red; // 0-255
int green; // 0-255
int blue; // 0-255
};
Color palettes[5][4];
// Задание:
// 1. В каждой палитре 4 цвета должны гармонировать друг с другом
// 2. Использовать принцип: базовый цвет + его оттенки + контрастный цвет
// 3. Вывести палитры в формате RGB
// Пример вывода:
// Палитра 1:
// Цвет 1: (120, 45, 200)
// Цвет 2: (140, 65, 220)
// Цвет 3: (100, 25, 180)
// Цвет 4: (200, 145, 50)
// ...
// Палитра 5: ...
4. Презентация решений (15 минут)
01:10-01:25 – Защита проектов
Каждая команда показывает:
1. Алгоритм генерации – как создаются случайные данные
2. Методы анализа – статистические расчеты
3. Визуализацию – вывод результатов в консоли
Дополнительные материалы
Полезные функции для генерации данных:
// Генерация случайного числа в диапазоне [min, max]
int randomInRange(int min, int max) {
return rand() % (max - min + 1) + min;
}
// Генерация массива со смещением (тренд)
void generateTrendData(int data[], int size, int start, int trend) {
for (int i = 0; i < size; i++) {
data[i] = start + (i * trend) + rand() % 10 - 5;
}
}
// Генерация сезонных данных
void generateSeasonalData(int data[], int size, int base, int amplitude) {
for (int i = 0; i < size; i++) {
int seasonal = amplitude * sin(i * 2 * 3.14 / 7); // недельная сезонность
data[i] = base + seasonal + rand() % 10;
}
}
Критерии оценки
Критерий |
Баллы |
Описание |
Качество генерации |
30 |
Данные соответствуют заданному распределению |
Корректность анализа |
30 |
Статистические расчеты верны |
Читаемость кода |
20 |
Понятная структура, комментарии |
Инновационность |
20 |
Оригинальные методы анализа или визуализации |