Средствами PascalABC.NET 3.2 эта задача решается очень просто.
1. Короткое решение, оставляющее в недоумении: а для чего тут было использовать двусвязный список? ответ: потому что таково задание!// PascalABC.NET 3.2, сборка 1439 от 09.05.2017// Внимание! Если программа не работает, обновите версию!function IsFib(n:integer):boolean;begin if (n=1) or (n=2) then Result:=true else begin Result:=false; (var n1, var n2):=(1,2); var Fib:integer; repeat Fib:=n1+n2; if Fib=n then begin Result:=true; break end; (n2,n1):=(Fib,n2) until Fib>n end;end;begin var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList; L:=L.Where(x->not IsFib(x)).ToLinkedList; L.Printlnend.
Примерn= 9-> 3 17 13 10 12 4 11 0 517 10 12 4 11 0
2. Несколько более длинное решение для желающих немного порулить удалением узлов.Функция остается той же, а изменения делаются в главной программе.begin var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList; var a:=L.Where(x->IsFib(x)).ToArray; // список значений для удаления foreach var t in a do L.Remove(t); // собственно удаление узлов L.Printlnend.
3. Бонус. Как это сделать без двусвязного списка (опять же, основная программа).begin var a:=ReadSeqInteger('->',ReadInteger('n=')) .Where(x->not IsFib(x)).ToArray; a.Printlnend.