К сожалению, задание не доступно, есть вариант использовать из джинерика(если не ошибаюсь) - стек, дабы не использовать системный, а обернуть его в цикле, т.е затраты чуть поменьше, а результат тот же!!!
Реализуйте процедуру печати дерева с переходом на новую строку PrintlnTreeInfix2 (при инфиксном обходе), которая для пустого дерева (то есть значения nil) выводит сообщение “empty tree”
Замечание. Цель задания — альтернативная реализация подпрограммы печати из лабораторной работы.
Указание. На этот раз не используйте уже готовые подпрограммы. Процедура PrintlnTreeInfix2 должна быть реализована рекурсивно без использования вспомогательных подпрограмм.
Да, я думаю тут ошибка. Без вспомогательных п/п нужно реализовать Print
, выводящий <empty tree>
для пустого дерева, а не Println
.
Контрольная работа по рекурсии на следующей неделе.
А можно конкретные даты озвучить? Если это не тайна, конечно.
У 1.8-2 и 1.9-2 в понедельник, у 1.8-2 и 1.9-1 в среду.
Сегодня открывается тест «Динамические структуры данных и рекурсия».
Спешите выполнить тест!
А, так оно ещё не готово, откроется в субботу, как обычно. Спасибо за информацию!
Всем привет! Хочу поделиться прекрасным. Во-первых, сегодня мы нарисовали UML-подобную диаграмму для поездов. Привожу её здесь в надежде, что она кому-то облегчит жизнь. Возможны неточности и расхождения по именам свойств.
Второе, тоже связано с поездами. Сегодня после занятия убил два часа, чтобы выполнить задание:
Напишите функцию, которая по набору активных маршрутов возвращает ассоциативный массив
Dictionary<string, StationTimetable>
(ключи — названия станций/остановок). Замечание. Для реализации запрещается использовать цикл.
Получилось так.
function CreateTimetables(ar: list<ActiveRoute>): Dictionary<string, StationTimetable>;
begin
Result := ar
.Select(TrainStops)
.Aggregate((lhs; rhs) -> lhs.Concat(rhs).ToList())
.GroupBy(t -> t.aroute.RouteInfo.Stops[t.nameId].Name)
.ToDictionary(group -> group.Key, group -> new StationTimetable(group.ToList()));
end;
Select-Aggregate
можно заменить на SelectMany
, но тогда нужно писать внутрь ему странную лямбда-функцию: SelectMany(ar -> TrainStops(ar))
, это на лекциях спрашивайте почему так: что-то там разработчики не допилили.
Благодарю студента Дмитрия Дядичко за терпеливое сопровождение меня в процессе решения.
А с каких пор на первом курсе рассказывают лямбды? о_О
ну, процедурный тип же изучается, а лямбды гораздо проще и понятнее
@ibond, это чистая правда, но от вас я ожидал комментария, почему функцию передать в SelectMany нельзя, а лямбду можно. Наша функция TrainStops возвращает List, а SelectMany принимает Func, которая возвращает IEnumerable. Поскольку в ПАБЦ нет возможности указывать вариантость параметров шаблонных типов, то оно и не компилируется. А лямбда, которая просто взывает эту функцию, почему-то проходит.
Не проходит по совершенно понятной причине.
ar -> TrainStops(ar)
преобразуется в function Anonym1(ar: …): IEnumerable<…> а List преобразуется к IEnumerable, так что всё корректно.
Когда Вы передаёте функцию как параметр, надо следить, чтобы ровно все типы соответствовали - никаких вариантностей.
Почему наша не проходит, я понимаю. Я не понял, почему лямбда возвращает IEnumerable…
Это вот почему. Параметры лямбды и тип возвращаемого значения всегда выводятся наоборот - от формальных параметров к фактическим. То есть, заголовок лямбды вместе с типами определяется формальным параметром, а тело становится телом генерируемой функции. И если тип возвращаемого значения в теле не совместим по присваиванию с типом возвращаемого значения в описании, то будет ошибка. Здесь - совместим. Но не совпадает.
Я всегда считал, что вывод типов параметров и типа возвращаемого значения это разные вещи, но в целом примерно понятно: заголовок лямбды вычисляется из контекста, а потом к нему лепится тело. В такой схеме всё работает. Но ощущения от этого глубоко отрицательные: нужно писать бессмысленную лямбду, которая просто вызывает нашу функцию, вместо передачи самой этой функции.
Группа 1.8, а скажите, пожалуйста, вы хотите контрольную в среду или в понедельник? А то ходят слухи, что в среду коллоквиум по мат. анализу. Если в понедельник, то в среду придётся гулять (а Данилу в среду пропущеную к-р писать).
Поскольку никто не отозвался, в моей подгруппе к-р остаётся на завтра.