Семинар 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

Оригинальные методы анализа или визуализации

 


Последнее изменение: Суббота, 27 сентября 2025, 19:36