Практические задания - Урок 22: Методы коллекций
Инструкция: Решите все задания по порядку. Создайте отдельный файл .dart для каждой задачи или решите все в одном файле, разделяя задачи комментариями.
Задача № 1: Фильтрация и подсчет студентов
Дан список студентов с их оценками. Найдите количество студентов, у которых средний балл выше 4.0, и выведите их имена в алфавитном порядке.
Исходные данные
class Student {
String name;
List<double> grades;
Student(this.name, this.grades);
double get averageGrade {
// Написать свою логику работы
}
}
void main() {
final students = [
Student('Анна', [5.0, 4.5, 4.8, 4.2]),
Student('Борис', [3.5, 3.8, 3.2, 3.9]),
Student('Вера', [4.8, 4.9, 5.0, 4.6]),
Student('Денис', [4.2, 4.1, 4.3, 4.0]),
Student('Елена', [3.8, 3.5, 3.9, 3.6]),
Student('Максим', [4.5, 4.7, 4.3, 4.8]),
];
}
Примерный вывод в консоли
Студенты с баллом выше 4.0:
- Анна
- Вера
- Денис
- Максим
Всего: 4
Задача № 2: Обработка списка покупок
Дан список покупок. Посчитайте общую стоимость всех товаров, цена которых ниже 100.0. Также создайте новый список, содержащий только названия этих "скидочных" товаров в верхнем регистре.
Исходные данные
final products = [
{'name': 'Молоко', 'price': 80.0},
{'name': 'Хлеб', 'price': 40.0},
{'name': 'Сыр', 'price': 150.0},
{'name': 'Яблоки', 'price': 95.0},
{'name': 'Говядина', 'price': 450.0},
{'name': 'Сок', 'price': 120.0},
];
Примерный вывод в консоли
Товары со скидкой: [МОЛОКО, ХЛЕБ, ЯБЛОКИ]
Общая стоимость товаров со скидкой: 215.0
Задача № 3: Анализ игровых достижений
Дан список игровых достижений игрока. Необходимо найти первое достижение с очками больше 1000, проверить, все ли достижения имеют положительные очки, и вычислить общий счёт игрока (бонусы минус штрафы).
Исходные данные
class Achievement {
final double points;
final String type; // 'bonus' или 'penalty'
Achievement(this.points, this.type);
@override
String toString() => "Achievement(Очки: $points, Тип: $type)";
}
final achievements = [
Achievement(1200.0, 'bonus'),
Achievement(350.50, 'penalty'),
Achievement(800.0, 'bonus'),
Achievement(150.0, 'penalty'),
Achievement(2000.0, 'bonus'),
Achievement(950.75, 'penalty'),
];
Примерный вывод в консоли
Первое крупное достижение (>1000): Achievement(Очки: 1200.0, Тип: bonus)
Все очки положительные: true
Общий счёт игрока: 2548.75