Đăng ngày: 22:49 28-10-2008
program TuDienNhoAnhViet; {Bui The Tam}
uses crt;
type str20=string[20];
str60=string[60];
str80=string[80];
kieuConTro=^kieuTuMoRong;
kieuTuMoRong=record
Tu : str20;
Nghia : str60;
Trai,Phai : kieuConTro;
end;
var NewWord : str20;
Mean : str60;
Goc : kieuConTro;
TuDien : Text;
dong : str80;
ch : char;
(*------------------------------------------------------------------------*)
procedure DungCay(var ConTro:kieuConTro);
begin
if ConTro=Nil then
begin
New(ConTro); ConTro^.Tu:=NewWord; ConTro^.Nghia:=Mean;
ConTro^.Trai:=Nil; ConTro^.Phai:=Nil;
end
else {ConTro da dang chi vao mot o nho co du lieu}
if NewWord
else
if NewWord>ConTro^.Tu then DungCay(ConTro^.Phai)
end;
(*------------------------------------------------------------------------*)
procedure DuyetNutGiua(ConTro:kieuConTro);
procedure XuLy(ConTro:kieuConTro);
begin
textColor(14); write(ConTro^.Tu,'':21-length(ConTro^.Tu));
textColor(15); writeln(ConTro^.nghia);
end;
begin
if ConTro<>Nil then
begin
DuyetNutGiua(ConTro^.Trai);
XuLy(ConTro);
DuyetNutGiua(ConTro^.Phai);
end;
end;
(*------------------------------------------------------------------------*)
procedure Load;
var ok : boolean;
i,L : byte;
begin
assign(TuDien,'TUDIEN.DOC');
{$I-} reset(TuDien);
if IOResult=0 then
begin
repeat
readln(TuDien,dong);
i:=pos(':',dong); L:=length(dong);
NewWord:=copy(dong,1,i-1);
Mean:=copy(dong,i+1,L-i);
DungCay(Goc);
until eof(TuDien);
close(TuDien);
end
else
writeln('TuDien TuDien.Doc chua ton tai... Ban phai Nhap vai tu da!');
{$I+}
end;
procedure Save;
var ok : boolean;
procedure DuyetChep(ConTro:kieuConTro);
begin
if ConTro<>Nil then
begin
DuyetChep(ConTro^.Trai);
writeln(TuDien,ConTro^.Tu,':',ConTro^.nghia);
DuyetChep(ConTro^.Phai);
end;
end;
begin
if (Goc^.Tu='') or (Goc=Nil) then writeln('Khong co gi ma luu ca!')
else
begin
assign(TuDien,'TUDIEN.DOC');
rewrite(TuDien);
DuyetChep(Goc);
close(TuDien);
writeln('TuDien.doc da duoc cap nhat!');
end;
writeln('Go Esc de thoat!');
repeat until readkey=#27
end;
(*------------------------------------------------------------------------*)
procedure Nhap;
var stt:word;
begin
stt:=0;
writeln('Ban nhap tu va nghia. Tu nghia bo trong de thoat!');
repeat
write('Ten moi = '); readln(NewWord);
while (NewWord[1]=' ') and (length(NewWord)>0) do delete(NewWord,1,1);
if NewWord='' then break;
write('Nghia la = '); readln(Mean);
while (Mean[1]=' ') and (length(Mean)>0) do delete(Mean,1,1);
if Mean='' then break;
DungCay(Goc);
stt:=stt+1;
until false;
writeln('Da them ',stt,' tu moi vao tu dien... Go Esc de thoat!');
repeat until readkey=#27;
end;
(*------------------------------------------------------------------------*)
procedure Xuat;
begin
window(1,1,80,1); textAttr:=31; ClrScr;
write('':30,'TU DIEN ANH - VIET');
window(1,25,80,25); textAttr:=7*16; ClrScr;
write('Theo su chi dan cua chuong trinh.');
window(1,2,80,24); textAttr:=15; ClrScr;
if (Goc^.Tu='') or (Goc=Nil) then writeln('Khong co gi ma xuat ca!')
else DuyetNutGiua(Goc);
writeln('Go Esc de thoat!');
repeat until readkey=#27;
end;
(*------------------------------------------------------------------------*)
BEGIN
textmode(c80);
textAttr:=31;
ClrScr;
writeln('VI DU VE DU LIEU HINH CAY - TU DIEN,...');
Goc:=Nil;
Load;
write('Chon cong viec: Nhap du lieu, Xuat du lieu hay Thoat?-(N,X,T) ');
repeat ch:=upcase(readkey) until ch in ['N','X','T',#27];
gotoxy(1,wherey); ClrEol;
case ch of
'N':Nhap;
'X':Xuat;
end;
Save;
END.