Практические задания - Урок 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