Pointer15. Дан набор из $$10$$ чисел. Создать две очереди: первая должна содержать числа из исходного набора с нечетными номерами $$(1, 3,…, 9)$$, а вторая — с четными $$(2, 4,…, 10)$$; порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе. Вывести указатели на начало и конец первой, а затем второй очереди.
Решение:
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(i) 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 можно посмотреть здесь.
Комментарии:
Комментарии 1