2017年09月 / 08月≪ 123456789101112131415161718192021222324252627282930≫10月

2009.11.01 (Sun)

告知

コメントの方法について。

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--:--  |  スポンサー広告  |  EDIT  |  Top↑

2008.01.27 (Sun)

プログラム

プログラムの課題やっていた。
 
program toi(input,output);
 
type
eletype = integer;
tree = ^cell;
cell = record
val : eletype;
left,right,parent : tree;
end;
 
var
root : tree;
 
function empty(s : tree):boolean;
begin
if s = nil then empty := true else empty := false;
end; { empty }
 
procedure preorder(t : tree);
{前順探索法}
begin
if t <> nil then
begin
write(t^.val);
preorder(t^.left);
preorder(t^.right);
end;
end; { preorder }
 
procedure inorder(t : tree);
{中順探索法}
begin
if t <> nil then
begin
inorder(t^.left);
write(t^.val);
inorder(t^.right);
end;
end; { inorder }
 
procedure postorder(t : tree);
{後順探索法}
begin
if t <> nil then
begin
postorder(t^.left);
postorder(t^.right);
write(t^.val);
end;
end; { postorder }
 
procedure create(var t : tree);
begin
t := nil;
end; { create }
 
function search(x : eletype ; t : tree ; var t2 : tree):boolean;
begin
if t = nil then search := false
else if x = t^.val then
begin
search := true;
t2 := t;
end
else if x < t^.val then search := search(x,t^.left)
else search := search(x,t^.right);
end; { search }
 
procedure insert(x : eletype; var t,root : tree);
var
t2 : tree;
begin
if search(x,t,t2) then writeln('すでに登録されている数字です') else
begin
if t = nil then
begin
new(t);
t^.val := x;
t^.left := nil;
t^.right := nil;
t^.parent := root;
end
else if x < t^.val then insert(x,t^.left) else insert(x,t^.right);
end;
end; { insert }
 
function min(t : tree):char;
begin
while t^.left <> nil do t := t^.left;
min := t^.val;
end; { min }
 
procedure disp(var t : tree);
begin
t^.val := nil;
t^.right := nil;
t^.left := nil;
end;
 
procedure shoukaku(var t : tree);
var
t2 : tree;
begin
t2 := t^.parent;
t2^.
 
procedure delete(x : eletype ;var t : tree);
var
t2 : tree;
begin
{1.子がいなければ、そのまま削除する.
2.部分木に子が片方のみの場合はそれを親にする.
3.子が2ついれば、右の部分木の最小値を探索して、自ノードの値にする.参照先のノードを1、2の方法で削除する.}
 
 
if search(x,t,t2) then
begin
{削除する値が見つかった}
if (t2^.right = nil) and (t2^.left = nil) then disp(t2);{1.}
if (t2^.right = nil) or (t2^.left = nil) then shoukaku(t2);{2.}
 
end
else
begin
{削除する値が見つからない}
end;
 
ここで力尽きた。
2分探索木の値の削除するプログラムの作成+レポート。
提出期限
プログラム本文→火曜日の23時50分
レポート→水曜日の13時
おわらねえよぉぉ(泣
と、泣く前にちょっと整理。
削除の実装に必要なこと。
1.子がいないとき、そのまま削除 ←完成
2.子が1つのとき、それを親にもってくる。
・どうやって親にするか?
 削除対象の親からのポインタを削除対象の子にあてればよい。
 →親にポインタがあたってないと、だめ。←木のレコードにparentを作って、親にいけるようにした。
 →しかし、parentでは親から見て、削除対象が左の子なのか、右の子なのか、判定できない。←if root^.left = 削除対象の値っていうように検索すればいい(?)
 →そうすると、
   root := tree^.parent;
   root^.left(もしくは、root^.right) := tree^.left(もしくは、tree^.right);
   で、親の子が削除対象の子になれるはず。たぶん。。。
これで、2の条件クリア。
3.子が2つのとき、右部分木の最小値を削除対象に代入して、その最小値を1.2の方法で削除する。
・右部分木の最小値を検索。←最小値を求める手続きは完成済み。
・削除対象に代入。←普通にすればおk。
・最小値を削除。←1と2が完成すればそれを使えばいいだけ。
 
なんだか目処が立ったような、、、?
01:26  |  diary  |  TB(0)  |  CM(2)  |  EDIT  |  Top↑

*Comment

今大学の授業の先取りで
Pov-RayってソフトでCG書いてるんですがwww
ふゆつきさんのより全然簡単ですけど同じような感じで

エラー出まくってますwww


明日までに動くCylinder完成させないとww


お互い頑張りましょうww
孝之 |  2008.01.27(日) 21:26 |  URL |  【コメント編集】

>>孝之さん
最近は文法的エラーは減りましたが、複雑になってきて、組み立てができないです(^_^;
文法的エラーは数をこなせば段々少なくなってきますよー(・ω・)/
頑張りましょうー。
ふゆつきあおい |  2008.01.28(月) 00:58 |  URL |  【コメント編集】

コメントを投稿する

URL
COMMENT
PASS  編集・削除するのに必要
SECRET  管理者だけにコメントを表示  (非公開コメント投稿可能)
 

▲PageTop

*Trackback

この記事のトラックバックURL

→http://iceuecmizuki.blog67.fc2.com/tb.php/311-e7ff0d07

この記事にトラックバックする(FC2ブログユーザー)

この記事へのトラックバック

▲PageTop

 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。