(1 курс ФИИТ) CS101. Основы программирования — практика

fixd

Артем Михайлович, исправьте, пожалуйста, время сдачи 2 бонусного задания (оно завтра закрыться должно, а не сегодня)

Я могу, в принципе,а почему вы решили, что должно завтра? Просто любопытно…

Раньше все во вторник закрывалось + это бонусное вроде и выложено было во вторник. Мы вам про это на лабе сказали в субботу и вы согласились…

Да я-то согласился, но потом понял, что не понял, с чем…

Ну, поменял, в общем, но на самом деле, не из чего не следует, что надо…

Если формат вывода должен совпадать, то чем заполнить четвёртый столбик?

Объясните, пожалуйста, почему не работает такой код?

type
  DNode<T> = class
  public 
    
    /// Поле данных
    data: T;
    
    /// Поле связи с предыдущим узлом
    prev: DNode<T>;
    
    /// Поле связи со следующим узлом
    next: DNode<T>;
    
    /// <summary>
    /// Инициализирует новый экземпляр узла двусвязного списка
    /// со значением dt поля данных и ссылками prev, next на соседние узлы
    /// </summary>
    /// <param name="dt">Значение поля данных узла</param>
    /// <param name="prev">Сслыка на предыдущий узел</param>
    /// <param name="next">Сслыка на следующий узел</param>
    constructor(dt: T; prev, next: DNode<T>);
    begin
      data := dt;
      self.prev := prev;
      self.next := next;
    end;
  end;

/// Тип для облегчения работы с двусвязными списками
type
  DList<T> = (DNode<T>, DNode<T>);

/// Создание узла двусвязного списка
function MkDNode<T>(dt: T; prev: DNode<T> := nil; next: DNode<T> := nil):= new DNode<T>(dt, prev, next);

/// Создание двусвязного списка по массиву заданных элементов
function CreateDList<T>(params a: array of T): DList<T>;
begin
  var firstD: DNode<T> := nil;
  if (a = nil) or (a.Length = 0) then
  begin
    Result := Rec(firstD, firstD);
    exit;
  end;
  
  firstD := MkDNode(a[0]);
  var lastD := firstD;
  
  for var i := 1 to a.Length - 1 do
  begin
    lastD := MkDNode(a[i], lastD);
    lastD.prev.next := lastD;
  end;
  
  Result := Rec(firstD, lastD);
  
end;

begin
  Write(CreateDList&<real>.Item1 = nil);
end.

Но всё работает, если вместо одной строчки вывода написать две таких:

var empty := CreateDList&<real>;
Write(empty.Item1 = nil);

@Ilya раз вы уже удалили отвечу только про цель. Можно считать, что это разминка перед реализацией операции добавления головы первого в хвост второго: можете такое реализовать, на его основе легко делаются split / merge из прошлой работы.

Ну, логично предположить, что misc.

На этой неделе не будет домашнего задания, а в следующую субботу у вас не будет занятий вообще (в том числе, непр. математики). Готовьтесь к катанию на лошадях НАМ!

Кстати, нам говорили, что 3 бонусное могут продлить, так как “Домашнего задания нет, нам нечего делать во время НАМ”. Его будут продлевать?

Аналогичный вопрос.

Судя по явке на вчерашнюю лекцию это точно сказано…

Ну раз говорили, то продлил до 12. Больше продлений не будет.

Я залил неполное решение за 5 минут до прошлого дедлайна. Теперь я никак не смогу дополнить свой ответ, там одна попытка.

Имхо, надо было продлевать до 23.00, а не после закрытия уже. А то как-то несправедливо выходит…

Ну или дать Попытку 2.

Про справедливость тут нежелательно писать. Надо просто описывать проблему и предлагать решение. Я попробовал открыть попытки, проверяйте.

Да, спасибо, теперь можно редактировать ответ.

Подскажите, пожалуйста, частота слова - это количество таковых, встречаемых на миллион слов? “Количество вхождений слова в файл” - это отношение количество данных слов к общему числу слов в файле?

Количество вхождений это не отношение, как мне кажется. А просто количество. Ну то есть для твоего сообщения и слова ‘слов’ количество вхождений это 3.

Количество это не отношение, а частота вполне может быть отношением.

Как я понимаю, в этой задачи не играет роли, как конкретно вычислили эту величину. Важно, что чем больше эта величина, тем чаще слово встречается в некотором тексте.

3 бонусное задание, 2 номер.

Создайте новый текстовый файл из слов файла words.txt, начинающихся с указанного символа. Указание. Напишите строковый предикат для проверки и используйте его в методе массива FindAll. Используйте метод записи/класса в качестве предиката.

Не понятно указание про метод записи/класса. Т.е. какого типа должно быть поле записи/класса и как в дальнейшем реализовать метод?

@KVA заменил это указание другим: «циклы не использовать».