| ループ版 |
|---|
| 前回紹介したもの. Hyou[0] を便宜的に使うことと,Hyou[Hyou[P].Next].Ten の複雑な書き方が不満. |
procedure ListWoTsukuru;
procedure ListNiTsuika(N : TSoeji);
var
P : TSoeji;
begin
P := 0;
while (Hyou[P].Next > 0) and (Hyou[Hyou[P].Next].Ten > Hyou[N].Ten) do
P := Hyou[P].Next;
Hyou[N].Next := Hyou[P].Next;
Hyou[P].Next := N;
end; {ListNiTsuika}
var
K : TSoeji;
begin
Hyou[0].Next := 0;
for K := 1 to Ninzuu do
ListNiTsuika(K);
First := Hyou[0].Next;
end; {ListWoTsukuru}
|
| 再帰プロシージャ,値引数版 |
| ループ版を再帰プロシージャに直訳したもの. ループ版の不満は解消していず,再帰を使って複雑になっただけ. 再帰を理解するためのもので,今後使うことはない. |
procedure ListWoTsukuru;
procedure ListNiTsuika(N : TSoeji; P : TSoeji);
begin
if (Hyou[P].Next > 0) and (Hyou[Hyou[P].Next].Ten > Hyou[N].Ten)
then ListNiTsuika(N,Hyou[P].Next) // 再帰呼び出し
else begin
Hyou[N].Next := Hyou[P].Next;
Hyou[P].Next := N;
end;
end; {ListNiTsuika}
var
K : TSoeji;
begin
Hyou[0].Next := 0;
for K := 1 to Ninzuu do
ListNiTsuika(K,0);
First := Hyou[0].Next;
end; {ListWoTsukuru}
|
| 再帰プロシージャ変数引数版 |
| 引数の P を値引数から変数引数に変更したもの. ループ版の不満が解消される. |
procedure ListWoTsukuru;
procedure ListNiTsuika(N : TSoeji; var P : TSoeji);
begin
if (P > 0) and (Hyou[P].Ten > Hyou[N].Ten)
then ListNiTsuika(N,Hyou[P].Next) // 再帰呼び出し
else begin
Hyou[N].Next := P;
P := N;
end;
end; {ListNiTsuika}
var
K : TSoeji;
begin
First := 0;
for K := 1 to Ninzuu do
ListNiTsuika(K,First);
end; {ListWoTsukuru}
|
| 課題 成績管理プログラム SeisekiKanri3 |
|