Pointer16. Дан набор из $$10$$ чисел. Создать две очереди: первая должна содержать все нечетные, а вторая — все четные числа из исходного набора (порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе). Вывести указатели на начало и конец первой, а затем второй очереди (одна из очередей может оказаться пустой; в этом случае вывести для нее две константы $$nil$$).
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
program Pointer16; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; // Prev: PNode; end; procedure Add(var P1,P2:PNode;D:integer); var p :PNode; begin new(p); p^.data:=D; p^.next:=nil; if P2<>nil then begin P2^.Next:=P; P2:=P2^.Next; end else begin P1:=p; P2:=p; end; end; var Even1,Even2,Odd1,Odd2:PNode; a:^Word; i,D:integer; begin new(Even1); new(Even2); new(Odd1); new(Odd2); Even1:=nil; Even2:=nil; Odd1:=nil; Odd2:=nil; for i:=1 to 10 do begin Write('num:'); Readln(D); if odd(D) then Add(Odd1, Odd2,D) else Add(Even1,Even2,D); end; a:=Addr(Odd1); Writeln('odd_begin',a^); a:=Addr(Odd2); Writeln('odd_end',a^); a:=Addr(Even1); Writeln('Even_begin',a^); a:=Addr(Even2); Writeln('Even_end',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
А ничего, что она не работает?!?!
Нет ничего страшного. Вы же знаете особенности своего компилятора и можете поправить этот пример под него. 🙂
Ну или вы можете заняться жуткой не интересной работой… написать то в чём вы компилируете, написать какую ошибку выдаёт ваш компилятор… и прочии не интересные весчи 🙂