А что третью? В моем понимании, вектор - одномерный массив (например, 1::2::3), а преобразовать его надо в списочек: 1->2->3. Это же стандартный алгоритм создания списка с головы (если просматривать массив с первого элемента) или с хвоста (если просматривать массив с конца), который рассказывается в первую очередь при изучении темы "Динамические структуры данных: связные списки". Я это и сам студентам рассказываю. Или я, может, задания не понял?...
По поводу решения без модуля: это действительно только для 16-битных чисел, просто я забыл это указать. Просто как-то раз возникла задача, написать такую прогу. Сперва написал с модулями, а мне говорят, мол, там все равно есть ветвление, хоть его и не видно - при вычислении модуля. Поэтому и придумал такой вот способ, хотя и к нему можно придраться - к сдвигу и xor'у... сказать, дескать, сдвиг на n бит - цикл, исключающее 'или' (т.е. xor) - ветвление.
Кстати, если я не ошибся в своем предположении насчет третьей задачи абзацем выше, то вот код:
Код:
uses
crt;
type
List = ^ListItem;
ListItem = record
info: integer;
next: List;
end;
const
n = 10;
var
a: array [1..n] of integer;
i: integer;
l, p: List;
begin
clrscr;
randomize;
writeln ('vector:');
for i := 1 to n do begin
a[i] := random(100);
write (a[i]:4);
end;
writeln;
l := nil;
for i := n downto 1 do begin
new (p);
p^.info := a[i];
p^.next := l;
l := p;
end;
writeln('list:');
p := l;
while p <> nil do begin
write (p^.info:4);
p := p^.next;
end;
writeln;
readkey;
end.