ループ版 |
---|
前回紹介したもの. 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 |
|