USES CRT;CONST MaxLength=50; {do dai danh sach} TYPE Elementtype = Integer; {kieu phan tu trong DS} Position = Integer; {kieu vi tri cac phan tu} List= record {mang chua cac phan tu cua
Trang 1USES CRT;
CONST MaxLength=50; {do dai danh sach}
TYPE Elementtype = Integer; {kieu phan tu trong DS}
Position = Integer; {kieu vi tri cac phan tu}
List= record
{mang chua cac phan tu cua danh sach}
Element: Array[1 MaxLength] of Elementtype;
Last : Integer; { giu do dai danh sach }
End;
{ -}
Procedure Makenull_List(var L: List);
begin
L.Last:=0;
end;
Function Empty_List(L : List ) : Boolean;
Begin
Empty_List:=(L.Last=0);
End;
{ -}
Procedure Insert_List(X:Elementtype; P:Position; var L: List);
Var q:Position;
Begin
If L.last>=MaxLength Then Writeln('Loi : danh sach day ')
Else
If (p>L.Last+1) or (p<1) Then
Writeln('Loi: vi tri khong hop le ')
Else
Begin
{doi cac phan tu tu vi tri P den cuoi danh sach xuong 1 vi tri }
For q:=L.Last Downto p Do
L.Element[q+1]:=L.Element[q];
L.Last:=L.Last+1; {do dai tang len 1}
L.Element[p]:=X; {dat vao vi tri P}
End;
End;
{ -} procedure Delete_List(P:Position ; var L:List);
Var q:Position;
Begin
If (p>L.last) or (p<1) then
writeln('Loi : vi tri cua phan tu xoa khong hop le ')
Else
Begin
{doi cac phan tu tu vi tri P+1 den cuoi danh sach len 1 vi tri }
For q:=p+1 to L.Last do
L.Element[q-1]:=L.Element[q];
L.Last:=L.Last-1;
End;
End;
Trang 2Function End_List(L: List) : Position;
Begin
End_List:=L.Last+1;
End;
{ -} Function Next(p:Position; L: List) : Position;
Begin
If (p>L.Last) or (p<1) Then
writeln('Khong xac dinh ')
Else Next:=p+1;
End;
{ -} Function Previous (p:Position; L: List) : Position;
Begin
If (p>L.Last+1) or (p<2) Then
writeln('Khong xac dinh ')
Else Previous:=p-1;
End;
{ -}
Procedure Read_List(var L:List);{Nhap so lieu cho danh sach}
Var
i,n:integer;
X: ElementType;
Begin
Makenull_List(L);
gotoxy(10,6);Write('Nhap vao so luong phan tu cua mang:');Readln(n); For i:=1 to n do
Begin
Gotoxy(10,6+i); Write('Nhap phan tu thu ',i,' : ');
Readln(X);
Insert_List(X,End_List(L),L);
end;
end;
Procedure Read_List1(var L:List;h:word);{Nhap so lieu cho danh sach} Var
i,n:integer;
X: ElementType;
Begin
Makenull_List(L);
gotoxy(10,h);Write('Nhap vao so luong phan tu cua mang:');Readln(n); For i:=1 to n do
Begin
Gotoxy(10,h+i); Write('Nhap phan tu thu ',i,' : ');
Readln(X);
Insert_List(X,End_List(L),L);
end;
end;
{ -}
Trang 3Procedure Print_List(L:List;n:Word);{Xuat danh sach }
Var
i:integer;
Begin
if (not Empty_List(L)) then
for i:=1 to L.Last do
write(L.Element[i]:n)
else
write('* Danh sach rong');
writeln;
End;
{ -} Procedure KT(L:List;Var n:integer);
Var i:integer;
Begin
i:=1;
While (L.Element[i]<=L.Element[i+1])and(i<L.Last) do
i:=i+1;
n:=i;
End;
Procedure Insert (L:List;Var L1:List;n:position);{Them mot node vao dau, giua, cuoi danh sach} Var i,y:integer;
Begin
L1:=L;
Case n of
1:Begin
Begin
Write('Nhap vao gia tri phan tu muon them vao:');Readln(y);
Insert_List(y,1,L1);
End;
End;
2:Begin
Write('Nhap vao gia tri phan tu muon them vao:');Readln(y);
Insert_List(y,L1.Last+1,L1);
End;
3:Begin
Write('Nhap vao gia tri phan tu muon them vao:');Readln(y);
i:=L1.Last div 2;
Insert_List(y,i+1,L1);
End;
End;
End;
{ -}
Procedure Delete (L:List;Var L1:List;P:Word);{Xoa 1 nut o dau, giua, cuoi danh sach}
Var i:integer;
Begin
L1:=L;
Case p of
1:Delete_List(1,L1);
2:Delete_List(L1.Last,L1);
3:Begin i:=(L1.Last+1) div 2;Delete_List(i,L1);End;
Trang 4End;
{ -} Procedure Tim(x,y:word;L:List;Var L1:List;h:integer);
Var i:integer;
Begin
MakeNull_List(L1);
gotoxy(x,y);Print_List(L,14);Delay(3000);
For i:=1 to L.Last do
Begin
If L.Element[i]<>h then
Begin
Textcolor(4);
gotoxy(x+i*14-2,y); Write('[',L.Element[i],']<>',h,';VT=',i);Delay(5000); Textcolor(7);
gotoxy(x+i*14-2,y); Write(' ',L.Element[i],' ');
End;
If L.Element[i]=h then
Begin
Textcolor(blue);
gotoxy(x+i*14-2,y); Write('[',L.Element[i],']=',h,';VT=',i);Delay(3000); Textcolor(7);
Insert_List(i,End_List(L1),L1);
gotoxy(x+L1.Last*4,y+2); Write(L1.Element[L1.Last]);
gotoxy(x+i*14-2,y); Write(' ',L.Element[i],' ');
End;
End;
If L1.Last=0 then
Begin
Writeln;Writeln;Writeln;Writeln;Writeln;
Writeln('Gia tri ',h,' khong ton tai trong mang');
End;
End;
{ -} Procedure sapxep1(var L1:list;L:List);
var i,j,t:integer;
Begin
L1:=L;
for i:=1 to End_List(L1)-2 do
for j:=i+1 to End_list(L1)-1 do
if L1.element[j]<L1.element[i] then
begin
t:=L1.element[j];
L1.element[j]:=L1.element[i];
L1.element[i]:=t;
end;
end;
{ -} Procedure Giao(L1,L2:list;var L3:list);
Var i,k,j,t,h:integer;
begin
Makenull_List(L3);
Trang 5for i:=1 to End_list(L1)-1 do
for j:=1 to End_List(L2)-1 do
if L1.element[i]=L2.element[j] then
insert_list(L2.element[j],End_List(L3),L3);
k:=1;
j:=End_List(L3);
while k<j-2 do
Begin
t:=End_List(L3);
h:=k;
While h<t-1 do
if L3.Element[k]=L3.Element[h+1] then
Begin
Delete_List(h+1,L3);
t:=End_List(L3);
h:=h;
End else h:=h+1;
j:=t;
k:=k+1;
End;
End;
{ -} Procedure AHieuB(x,y:Word;L1,L2:List;Var L:List);
Var i,j,k,h:Word;
Begin
gotoxy(x,y);Print_List(L1,8);
Gotoxy(x,y+1);Print_List(L2,8);
MakeNull_List(L);
For i:=1 to L1.Last do
Begin
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');delay(2000);
j:=1;
While (j<End_List(L2))And(L1.Element[i]<>L2.Element[j]) do
Begin
gotoxy(x+j*8-2,y+1); Write('[',L2.Element[j],']');delay(1000);
gotoxy(x+j*8-2,y+1); Write(' ',L2.Element[j],' ');
j:=j+1;
End;
IF L1.Element[i]=L2.Element[j] then
Begin
gotoxy(x+j*8-2,y+1); Write('[',L2.Element[j],']');Delay(2000); gotoxy(x+j*8-2,y+1); Write(' ',L2.Element[j],' ');
TextColor(4);
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');
TextColor(7);
End;
if j= End_List(L2) then
Begin
TextColor(blue);
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');
TextColor(7);
Insert_List(L1.Element[i],End_List(L),L);
Trang 6End;
End;
End;
{ -} Procedure DoHoaGhep(x,y:Word;L1,L2:List;Var L:List);
Var i,h:integer;
Begin
L:=L1;
i:=1;
gotoxy(x,y);Print_List(L2,8);
Gotoxy(x,y+1);Print_List(L,8);
While i<=L2.Last do
Begin
gotoxy(x+i*8-2,y); Write('[',L2.Element[i],'] ');delay(2000);
if i<L1.Last then
Begin
TextColor(4);
gotoxy(x+i*2*8-2,y+1); Write('[',L.Element[i*2],']');
gotoxy(x+(i*2-1)*8-2,y+1); Write('[',L.Element[i*2-1],']');Delay(2000); TextColor(7);
gotoxy(x+i*2*8-2,y+1); Write(' ',L.Element[i*2],' ');
gotoxy(x+(i*2-1)*8-2,y+1); Write(' ',L.Element[i*2-1],' ');
h:=L.Last+1;
While h<>i*2 do
Begin
gotoxy(x+(h-1)*8-1,y+1); Write(L.Element[h-1],'->');Delay(3000); gotoxy(x+h*8-1,y+1); Write(L.Element[h-1],' ');
gotoxy(x+(h-1)*8-1,y+1); Write(L.Element[h-1],' ');h:=h-1;
End;
gotoxy(x+h*8-1,y+1); Write(L2.Element[i],' ');
Insert_List(L2.Element[i],2*i,L)
End
Else
Begin
gotoxy(x+(L.Last+1)*8-1,y+1); Write(L2.Element[i],' ');Delay (1000); gotoxy(x+i*8-2,y); Write(' ');
Insert_List(L2.Element[i],L Last+1,L);
End;
i:=i+1;
End;
End;
{ -} Procedure TextList(L:List);
Var i:integer;
Begin
i:=1;
While (L.Element[i]<=L.Element[i+1])and(i<L.Last) do
i:=i+1;
If i=L.Last then
Write('Mang da duoc sap xep') Else
Trang 7Writeln('Mang chua duoc sap xep');
End;
{ -} Procedure XPTT(L:List;Var L1:List);
Var i,j:integer;
Begin
L1:=L;
i:=1;
While i<=L1.Last-1 do
Begin
j:=i+1;
While j<=L1.Last do
If L1.Element[i]=L1.Element[j] then
Begin
Delete_List(j,L1);
j:=j;
End
Else
j:=j+1;
i:=i+1;
End;
End;
{ -} { -} Procedure SumList(L:List);
Var s,i:integer;
Begin
s:=0;
For i:=1 to L.Last do
S:=s+L.Element[i];
Writeln('Tong cua mang la:',s);
End;
{ -} Procedure VeND(x,y,n,mc:byte;ch,k:char);
Var i:byte;
Begin
Gotoxy(x,y);
textcolor(mc);
Case k of
'N':Begin
For i:=1 to n do
Write(ch:2);
End;
'D':Begin
For i:=1 to n do
Begin
Gotoxy(x,y+i);
Write(ch);
End;
End;
End;
Textcolor(7);
Trang 8{ -}
Procedure MCTD(x,y,mc,mn:byte;nd:string);
Begin
Gotoxy(x,y);
TextBackground(mn);
textcolor(mc);
Write(nd);
textbackground(0);
Textcolor(7);
End;
{ -} Procedure CC(x,y,mc,mn,td:byte;nd:string);
Var i:byte;
Begin
For i:=1 to length(nd) do
Begin
MCTD(x+i,y,mc,mn,nd[i]);
delay(td);
End;
End;
{ -} Procedure CG(x,y,mc,mn,t:byte;nd:String);{Chay giua}
var st:string;
i,j,l,giua,x1,x2:byte;
begin
st:=nd;
l:=length(nd);
x1:=x;
y:=y;
x2:=x1+l-1;
giua:=(l+1)div 2;
for i:=giua downto 1 do
begin
for j:=1 to i do
begin
MCTD(x1+j-1,y,2,7,st[i]);
MCTD(x2-j+1,y,2,7,st[l-i+1]);
delay(t);
MCTD(x1+j-1,y,2,7,' ');
MCTD(x2-j+1,y,2,7,' ');
end;
MCTD(x1+j-1,y,2,0,st[i]);
MCTD(x2-j+1,y,2,0,st[l-i+1]);
end;
end;
{ -}
Procedure DoHoaGiao(x,y:Word;L1,L2:List;Var L:List);
Var i,j,k,h:Word;
Begin
gotoxy(x,y);Print_List(L1,8);
Trang 9MakeNull_List(L);
h:=1;
For i:=1 to L1.Last do
Begin
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');delay(1000);
j:=0;
Repeat
j:=j+1;
gotoxy(x+j*8-2,y+1); Write('[',L2.Element[j],']');delay(1000);
gotoxy(x+j*8-2,y+1); Write(' ',L2.Element[j],' ');
Until (j>=L2.Last)or(L1.Element[i]=L2.Element[j]);
k:=1;
While (k<=L.Last)and(L1.Element[i]<>L.Element[k])and(L1.Element[i]=L2.Element[j]) do Begin
gotoxy(x+k*8-2,y+3); Write('[',L.Element[k],']');delay(1000);
gotoxy(x+k*8-2,y+3); Write(' ',L.Element[k],' ');
k:=k+1;
End;
If (L1.Element[i]=L.Element[k]) then
Begin
Textcolor(4);
gotoxy(x+k*8-2,y+3); Write('[',L.Element[k],']');delay(1000);
Textcolor(7);
gotoxy(x+k*8-2,y+3); Write(' ',L.Element[k],' ');
End;
IF (K=L.Last+1)and(L1.Element[i]=L2.Element[j])then
Begin
Textcolor(Blue);
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');
gotoxy(x+(j)*8-2,y+1); Write('[',L2.Element[j],']');Delay(2500);
Textcolor(7);
gotoxy(x+(j)*8-2,y+1); Write(' ',L2.Element[j],' ');
Insert_List(L1.Element[i],L.Last+1,L);
Gotoxy(x+h*8-2,y+3);Write(L.Element[L.Last]);
h:=h+1;
End
Else
Begin
TextColor(4);
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');delay(2000);
TextColor(7);
End;
End;
End;
{ -}
Procedure DohoaHop(x,y:Word;L1,L2:List;Var L,L3:List);
Var i,j,k:Word;
Begin
MakeNull_List(L);
MakeNull_List(L3);
Trang 10gotoxy(x,y);Print_List(L1,8);
Gotoxy(x,y+1);Print_List(L2,8);
k:=1;
For i:=1 to L1.Last do
Begin
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');delay(1000);
j:=0;
Repeat
j:=j+1;
gotoxy(x+j*8-2,y+1); Write('[',L2.Element[j],']');delay(1000);
gotoxy(x+j*8-2,y+1); Write(' ',L2.Element[j],' ');
until ((L1.Element[i]=L2.Element[j]))or(j=L2.Last) ;
If L1.Element[i]=L2.Element[j] then
Begin
Textcolor(4);
gotoxy(x+(j)*8-2,y+1); Write('[',L2.Element[j],']');
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');Delay(3500);
Textcolor(7);
gotoxy(x+(j)*8-2,y+1); Write(' ',L2.Element[j],' ');
End;
If (j=L2.Last)and(L1.Element[i]<>L2.Element[L2.Last]) then
Begin
Textcolor(Blue);
gotoxy(x+i*8-2,y); Write('[',L1.Element[i],']');Delay(2500);
Textcolor(7);
Insert_List(L1.Element[i],L.Last+1,L);
Insert_List(L1.Element[i],L3.Last+1,L3);
Textcolor(3);
Gotoxy(x+(L.Last+L2.Last)*8-2,y+1); Write(L.Element[L.Last]);
Textcolor(7);
End;
End;
End;
{ -} Procedure DoHoaXPTT(x,y:Word;Var L:List);
Var i,j,k,h:integer;
Begin
Gotoxy(x,y); Print_List(L,8);
Begin
i:=1;
While i<L.Last do
Begin
j:=i+1;
gotoxy(x+i*8-2,y); Write('[',L.Element[i],']');delay(1500);
While j<=L.Last do
Begin
gotoxy(x+j*8-2,y); Write('[',L.Element[j],']');delay(1500);
if (L.Element[i]=L.Element[j]) then
Begin
Textcolor(4);
Trang 11gotoxy(x+i*8-2,y); Write('[',L.Element[i],']');
gotoxy(x+j*8-2,y); Write('[',L.Element[j],']'); Delay(3000);
Textcolor(7);
gotoxy(x+i*8-2,y); Write('[',L.Element[i],']');
for h:=j+1 to L.Last do
Begin
gotoxy(x+(h-1)*8-2,y); Write(' ',L.Element[h],' ');
End;
gotoxy(x+L.Last*8-2,y); Write(' ');
Delete_List(j,L);
j:=j-1;
End;
if (L.Element[i]<>L.Element[j]) then
Begin
gotoxy(x+j*8-2,y); Write(' ',L.Element[j],' ');
j:=j+1;
End;
End;
i:=i+1;
End;
End;
gotoxy(x+L.Last*8-2,y); Write('[',L.Element[L.Last],']');
End;
{ -} Procedure GCTT(x,y:word;L1,L2:List;Var L:List);
Var i,j,h,k:integer;L3,L4:List;
Begin
Makenull_List(L);
If L1.Last<L2.Last then
Begin
L3:=L1;
L4:=L2;
End
Else
Begin
L3:=L2;
L4:=L1;
End;
gotoxy(x,y);Print_List(L4,8);
Gotoxy(x,y+1);Print_List(L3,8);
j:=1;
For i:=1 to L4.Last do
Begin
gotoxy(x+i*8-2,y); Write('[',L4.Element[i],'] ');delay(2000);
Insert_List(L4.element[i],L.Last+1,L);
gotoxy(x+(L.Last)*8-2,y+3); Write(L.Element[L.Last]);Delay(2000);
While (L3.Element[j]<=L4.Element[i])and(j<=L3.Last) do
Begin
TextColor(blue);
gotoxy(x+j*8-2,y+1); Write('[',L3.Element[j],'] ');
gotoxy(x+L.Last*8-2,y+3); Write('[',L.Element[L.Last],']');delay(2000);
TextColor(7);
Trang 12gotoxy(x+j*8-2,y+1); Write(' ',L3.Element[j],' ');
gotoxy(x+L.Last*8-2,y+3); Write(' ',L.Element[L.Last],'->');delay(2000);
gotoxy(x+L.Last*8-2,y+3); Write(' ',L.Element[L.Last],' ');
gotoxy(x+(L.Last+1)*8-2,y+3); Write(L.Element[L.Last]);delay(1000);
gotoxy(x+L.Last*8-2,y+3); Write(' ',L3.Element[j]);delay(1000);
Insert_List(L3.Element[j],L.Last,L);
j:=j+1;
End;
If (L3.Element[j]>L4.Element[i])and(J<=L3.Last) then
Begin
TextColor(4);
gotoxy(x+L.Last*8-2,y+3); Write('[',L.Element[L.Last],'] ');
gotoxy(x+J*8-2,y+1); Write('[',L3.Element[j],'] ');Delay(2500);
TextColor(7);
gotoxy(x+L.Last*8-2,y+3); Write(' ',L.Element[L.Last],' ');
gotoxy(x+j*8-2,y+1); Write(' ',L3.Element[j],' ');
End;
If (L3.Element[j]>L4.Element[i])and(i=L4.Last) then
Begin
For k:=j to L3.Last do
Begin
TextColor(blue);
gotoxy(x+k*8-2,y+1); Write('[',L3.Element[k],'] ');delay(1000);
TextColor(7);
gotoxy(x+k*8-2,y+1); Write(' ',L3.Element[k],' ');
gotoxy(x+(L.Last+1)*8-2,y+3); Write(L3.Element[k]);
Insert_List(L3.Element[k],L.Last+1,L);
End;
End;
End;
End;
{ -} Procedure MeNu1;
Var e:char;L,L1,L2,L3,L4:List;n,n1,n2:integer;
Begin
Clrscr;
VeND(11,6,30,2,'*','N');
VeND(11,18,30,2,'*','N');
VeND(12,6,11,2,'*','D');
VeND(70,6,12,2,'*','D');
CC(37,8,4,0,100,'Menu 1');
CC(13,10,7,8,20,'Chon phim 1 de thuc hien cac yeu cau tren 1 danh sach.');
CC(13,12,7,8,20,'Chon phim 2 de thuc hien cac yeu cau tren 2 danh sach.');
CC(13,14,7,8,20,'Chon phim 3 de thoat chuong trinh.');
CC(23,16,7,8,10,'Moi ban lua chon o day:');Readln(e);
case e of
'1':Begin
Repeat
Begin
Clrscr;
CC(30,3,4,0,250,'Menu 11');