ơ ả Ấ Ấ Ể ậ Ị Các bài t p Pascal c b n, KINH ĐI N, khó, R T KHÓ & R T THÚ V
ệ ở ầ ặ (Đ c bi ầ ph n GRAPHIC và ph n GRAPH THEORY ) t
Ầ
Ơ Ả
PH N I
CÁC BÀI TOÁN C B N.
Ấ
Ậ
A/ L P TRÌNH KHÔNG DÙNG C U TRÚC NÀO.
ỉ ượ ạ ớ 1Ch đ ơ c dùng phép nhân, tính a mũ 28 v i không h n 6 phép nhân (khi Test, b n nên cho a=2)
{Tinh a mu 28 chi dung khong hon 6 phep nhan} Uses crt; var a,b:longint; Begin clrscr; Write('Nhap a='); Readln(a); a:=a*a;
a:=a*a; Writeln('a mu 4=',a);
b:=a; {luu a mu 4 vao b} a:=a*a*a; Writeln('a mu 12=',a); a:=a*a; Writeln('a mu 24=',a); a:=a*b; Writeln('a mu 28=',a); Readln End.
sau: Sách ToanA1 250000, Sách Ly 100000, Sách Anh van 150000, ự ẵ 2 Cho s n xâu ký t Sach Mach IC 80000.
Ế Ủ ố ề Ạ ạ ậ ổ ộ ượ Hãy in lên màn t ng s ti n bán các lo i sách thu c xâu nh p vào trên đây. H N CH C A BÀI TOÁN: Không đ c dùng phép gán sau
ặ ươ ự ể ề ổ ng t khác đ tính t ng ti n Tongsotienbansach:=250000+100000+150000+80000 ho c các phép gán t bán!
Uses crt; Const s='GiaiTich2 250000, Vatly1 100000, Anh2 150000, MachIC 80000'; Var so1,so2,so3,so4:longint;k1,k2,k3,k4:integer; Begin Clrscr; Writeln('Xau cho truoc:',s); val('250000',so1,k1); val('100000',so2,k2); val('150000',so3,k3); val('80000',so4,k4); Writeln('= = = = = = = = = = = = ='); Write('Tong so tien ban cac loai sach:',so1+so2+so3+so4); Readln; End.
ầ
ầ
ế
Th y Tr n Thông Qu
2
ố ọ ừ bàn phím vào. ề ử ờ ớ ồ ử ệ ộ ự ể ế ủ t c a hs v cách dùng toán t gán đ ng th i v i toán t quan h trong m t ấ ỳ ấ 3Không dùng b t k c u trúc nào, hãy so sánh hai s đ c t ể (Bài này ki m tra s hi u bi ệ dòng l nh).
Uses crt; Var a,b:integer; check1,check2,check3:Boolean; Begin clrscr; Write('a,b:'); Readln(a,b); check1:=a>b; check2:=a
Ơ Ả
Ủ
Ấ
Ậ
= = = = = = = = = = = = = = = = = = = = = = =
B/ CÁC C U TRÚC L P TRÌNH C B N C A PASCAL B1) CÁC C U TRÚC R NHÁNH: IF…THEN…; IF…ELSE…; CASE…OF…
Ấ Ẽ
ấ ỳ ấ ỳ ọ ừ ậ ộ 4 L p trình tính xem, m t tháng b t k , năm b t k có bao nhiêu ngày. (tháng, năm đ c t bàn phím)
Uses Crt; Var thang,nam,songay:Integer; nhuan:Boolean; Begin clrscr; Writeln('TINH SO NGAY CUA THANG'); Writeln(''); Write('a/ Nhap thang:'); Readln(thang); Write('b/ Nhap nam (co 4 chu so):'); Readln(nam); Nhuan:=False; If (nam Mod 4)=0 Then Begin Nhuan:=True; If (nam Mod 100=0) And (nam Mod 400 <> 0) Then Nhuan:=False; End; Case thang Of 1,3,5,7,8,10,12:songay:=31; 4,6,9,11:songay:=30; 2:If nhuan Then songay:=29 Else songay:=28; End;
8 h 54 m 28/7/2017
ầ
ầ
ế
Th y Tr n Thông Qu
3
Writeln;
Writeln('Thang ',thang:2,'/',nam:4,' co:',songay,' ngay');
Writeln;
Writeln('Bam phim
ọ ừ ố ự ị ủ ủ ộ ộ bàn phím vào 4 s th c mà tr c a chúng thu c kho ng ị ả [3,0, 3,0]. Tính tr trung bình c ng c a 5 Đ c t chúng.
Test Vào 3 2 1.85 1.05; Ra: Tong=0.20; Trung binh cong=0.4
Uses crt; Var s1,s2,s3,s4,tbc,t:Real; d:byte; Begin clrscr; Write('s1,s2,s3,s4=');readln(s1,s2,s3,s4); tbc:=0;t:=0;d:=0; If (s1>=3.0) and (s1<=3.0) then Begin Inc(d); t:=t+s1; End; If (s2>=3.0) and (s2<=3.0) then Begin Inc(d); t:=t+s2; End; If (s3>=3.0) and (s3<=3.0) then Begin Inc(d); t:=t+s3; End; If (s4>=3.0) and (s4<=3.0) then Begin Inc(d); t:=t+s4; End; tbc:=t/d; Writeln('Tong cua cac so trong khoang [3.0,3.0]=',t:0:2); Write(' va Trung binh cong cua chung =',tbc:0:2); Readln; End.
ộ ươ ị ứ ớ ị ng l ch, in lên màn hình tên năm âm l ch ng v i năm ọ ừ bàn phím vào m t năm d ậ ừ
ậ 6 L p trình đ c t ị ươ ng l ch v a nh p vào. d ụ Ví d . vào:2016, ra: Bính Thân.
Uses crt;
8 h 54 m 28/7/2017
ầ
ầ
ế
Th y Tr n Thông Qu
4
Var Year:integer; Begin clrscr; Write('Cho biet nam duong lich:'); Readln(Year); Write('Nam ',year,' la nam am lich:'); Case (Year Mod 10) of 0:Write('Canh '); 1:Write('Tan '); 2:Write('Nham '); 3:Write('Quy '); 4:Write('Giap '); 5:Write('At '); 6:Write('Binh '); 7:Write('Dinh '); 8:Write('Mau '); 9:Write('Ki '); End;
Case (Year Mod 12) of 0:Write('Than'); 1:Write('Dau'); 2:Write('Tuat'); 3:Write('Hoi'); 4:Write('Ty'); 5:Write('Suu'); 6:Write('Dan'); 7:Write('Mao'); 8:Write('Thin'); 9:Write('Ti'); 10:Write('Ngo'); 11:Write('Mui'); End; Readln; End.
ậ ế ố ươ ứ ấ ỳ ọ ừ ủ ố ậ 7 L p trình cho bi t s La Mã t ng ng c a s th p phân b t k đ c t bàn phím vào.
ụ Ví d vào: 2017; ra:MMXVII.
Write('Nhap so Thap phan can chuyen:'); Readln(n);
Program ThapPhan_LaMa; uses crt; var n:integer; ans:char; Begin clrscr; Repeat Write(n,' > Viet theo chu so La ma la:'); While n>=1000 do Begin Write('M');
8 h 54 m 28/7/2017
ầ
ầ
ế
Th y Tr n Thông Qu
5
Begin
n:=n1000; End; If n>=900 then Write('CM'); n:=n900; End; If n>=500 then Begin Write('D'); n:=n500; End; If n>=400 then Begin Write('CD'); n:=n400; End; If n>=100 then Begin Write('C'); n:=n100; eND; If n>=90 then Begin Write('XC'); n:=n90; End; If n>=50 then Begin Write('L'); n:=n50; End; If n>=40 then Begin Write('XL'); n:=n40; End; If n>=20 then Begin Write('XX'); n:=n20; End; If n>=10 then Begin Write('X'); n:=n10; End;
8 h 54 m 28/7/2017
ầ
ầ
ế
Th y Tr n Thông Qu
6
If n=9 then Begin Write('IX'); n:=n9; End; If n>=7 then Begin Write('VII'); n:=n7; End; If n>=5 then Begin Write('V'); n:=n5; End; If n=4 then Begin Write('IV'); n:=n4; End; If n=3 then Begin Write('III'); n:=n3; End; If n=2 then Begin Write('II'); n:=n2; End; If n=1 then Begin Write('I'); n:=n1; End; Writeln; Writeln; Write(' ANOTHER TEST (Y/N)?'); Readln(ans); Until Ans In ['n','N']; End.
ậ ế ố ươ ứ ủ ố ọ ừ C C A BÀI 7). L p trình cho vi ậ t s Th p Phân t ng ng c a s La Mã đ c t ƯỢ Ủ 8 (BÀI TOÁN NG ụ bàn phím vào.. Ví d . vào: MMXVII, ra: 2017.
Ơ (BÀI NÀY KHÓ H N BÀI TRÊN)
Program LaMa_ThapPhan; Uses crt; Var s:string;
8 h 54 m 28/7/2017
ầ
ầ
ế
Th y Tr n Thông Qu
7
Procedure Nhap; Begin Writeln; Write('Nhap vao so Lama:'); Readln(s); End;
Function GtriThphan(s:string; i:integer):Integer;
Var x:integer;
Function Val(c:char):Integer;
Begin
Case c of
'M','m':Val:=1000;
'D','d':Val:=500;
'C','c':Val:=100;
'L','l':Val:=50;
'X','x':Val:=10;
'V','v':Val:=5;
'I','i':Val:=1;
Else Val:=0;
End;
End;
Begin
x:=val(s[i]);
If i=Length(s) Then GtriLama:=x
Else If x Begin {Main Prog.}
Clrscr;
Nhap;
Write('Gia tri thap phan cua so La ma vua nhap=',gtriThphan(s,1));
Readln
End. Ặ Ấ B2CÁC C U TRÚC L P. Ặ Ệ Ị B.2.1) L NH L P XÁC Đ NH FOR. ế ữ ỉ ượ ế ắ ộ ộ c phép dùng m t bi n n a là bi n Logic đ l p trình ướ ả ứ ể ế
i bài toán d ự
ể ậ
i đây: không tính toán c th , hãy so sánh 2 bi u th c sau: (1+1/2016) ^ 2017 và ự ể 9 Ngoài 2 bi n th c (Real) b t bu c, b n ch đ
gi
(1+1/2017)^2016. (ký t ạ
ụ ể
ừ
“^” hi u là lũy th a) 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 8 Uses crt;
Var a,b:Real; i:integer; check:Boolean;
Begin clrscr;
a:=1+1/2016; b:=1;
For i:=1 to 2016 Do
Begin
a:=a*(1+1/2016);
b:=b*(1+1/2017);
End;
check:=(a>b);
If check then Write('(1+1/2016) mu 2017 lon hon (1+1/2017) mu 2016')
Else
Begin
check:=(a=b);
If check then Write('(1+1/2016) mu 2017 bang (1+1/2017) mu 2016')
Else
Write('(1+1/2016) mu 2017 nho hon (1+1/2017) mu 2016');
End;
Readln;
End. ề ế ả ậ ơ ử
ầ ạ ỉ
ậ
ả
10 Không dùng thu t toán x lý m ng 2chi u, ch dùng các bi n đ n, l p trình in lên màn hình b ng
ượ
ố ự
ứ
ziczac ch a 100 s t
nhiên đ u tiên (B n có làm đ c bài này trong 10 phút không?) 0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
90 91 92 93 94 95 96 97 98 99 Ắ Ơ Ể ƯỚ KHÔNG TH CÓ CODE NÀO NG N H N CODE D I ĐÂY! Uses crt;
Var i,j:Byte;
Begin clrscr;
For i:=0 to 9 do
begin
For j:=0 to 9 do
Write(10*i+j:4);
Writeln;
end;
Readln;
End. ự ế ạ ạ ả ỗ ượ '*', l p trình t o tam giác cân r ng. In k t qu lên màn hình. (B n có làm đ c bài này ậ
11 Dùng ký t
trong 10 phút không?) Uses Crt;
Var chcao,i: Byte;
Begin clrscr; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 9 Write('Nhap chieu cao tam giac:');
Readln(chcao);
Writeln('*':chcao);
For i:=2 to chcao1 do
Writeln('*':chcaoi+1,'*':2*i2);
For i:=1 to 2*chcao1 do
Write('*');
Writeln;
Writeln;
Readln;
End. ậ ộ ể ứ ự ấ ậ ộ ố ố
ố ế ổ ừ
ướ 12 Nh p m t dãy s nguyên t
ằ
ti p có t ng b ng s M cho tr bàn phím vào, l p trình tìm trong dãy y b (không k th t ) 3 s liên
c. Uses Crt;
Var a:array[1..1000] of integer;
n,i,j,k,M:integer;
Begin clrscr;
Writeln;
Write(#32:2,'M='); Readln(M);
Write('n='); Readln(n);
For i:=1 to n do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
Writeln('Cac bo so trong day thoa man yeu cau bai toan la:');
For i:=1 to n do
For j:=1 to n1 do
For k:=j+1 to n do
if (i<>j) and (i<>k) and (j<>k) and (a[i]+a[j]+a[k]=M) then
Writeln(a[i]:3,a[j]:3,a[k]:3)
Readln;
End. ấ ả ả ủ ố ọ ừ ố ấ ế ả t c các s hoàn h o c a s n tùy ý đ c t ầ
bàn phím vào. Yêu c u xu t k t qu theo ẳ ậ
13 L p trình tìm t
Form sau:
ạ
Ch ng h n, Vào: 1200, Ra: ố ả
ứ ấ
ướ ủ
c c a nó là: 1 2 3 ố S hoàn h o th nh t: 6
Và các
= = = = = = = = = = = = = = = = =
ứ
ả
S hoàn h o th hai: 28
ướ ủ
Và các
c c a nó là: 1 2 4 7 14
= = = = = = = = = = = = = = = = =
. . . . . . . . . . . . . . . . . . 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 10 Uses crt;
Var i,j,n,tong_uoc,dem:longint; tt:byte;
Begin clrscr;
Repeat
Write('Nhap so nguyen duong n:'); Readln(n);
dem:=0;
For i:=1 to n Do
Begin
tong_uoc:=0;
For j:=1 to i1 Do
If(i MOD j=0) Then tong_uoc:=tong_uoc+j;
If tong_uoc=i Then
Begin
dem:=dem+1;
Writeln('* So hoan hao thu ', dem,' la:',i);
Write('* va cac uoc so cua no la:');
For j:=1 to i1 Do
If (i MOD J=0) Then Write(j,' ');
Writeln;
Writeln('= = = = = = = = =');
Writeln;
End;
End;
Write('More (1/0)?. Come On > Press 1; Stop > Press 0:');
Readln(tt);
Until tt=0;
End. ọ ố ự Ẵ ớ ể ể ề ả ế Snhirenman: “M i s t ơ
nhiên CH N l n h n 2 đ u có th bi u Ổ thi
ủ ả ế ỉ t ứ – N a đ u t Goldbach –
ố
ế Christian Goldbach – nhà toán h c Đ c
ọ ố ẻ ấ ỳ ề ế ố t: “M i s l b t k đ u vi t đ ề ử ầ th k XVIII
ế ượ ướ ạ
c d
ả ể
*14 Ki m tra gi
Ố
ằ
ễ
di n b ng T NG c a HAI s NGUYÊN T ”.
ọ
(Gi
thi
Euler, Goldbach vi
ố
t ủ
i d ng t ng c a ba s nguyên
t Goldbach) ơ ế ọ ố ẵ ể ể ả ư ử
, năm 1742 trong th g i
ổ
ế
1930, nhà toán h c ọ Nga L.
ề
ế “M i s ch n n ≥ 4 đ u có th bi u c g i là bài toán Goldbach (hay gi
thi
ư ượ
c ch ng minh, và cho đ n năm
ợ
ườ
thi ứ
ỏ ủ
ng h p nh c a gi t: ỉ ứ
ố ễ ổ ố ượ ọ
ệ
“. Sau này m nh đ đó đ
ẫ
H n 250 năm bài toán Goldbach v n ch a đ
ớ
G. Snhirenman m i ch ch ng minh tr
ủ
di n thành t ng c a 2 s nguyên t ”). Uses crt;
Var so1, so2, so3, so4: integer;
kt1, kt2: boolean; {kt=kiem tra}
hoi:char; Begin clrscr;
Repeat
Write(‘Nhap so chan so1>2:’); Readln(so1);
so2:=2;
Repeat
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 11 so3:=so1so2;
so4:=2;
While (so4<=sqrt(so2)) And (so2 Mod so4<>0) do
Inc(so4);
If so4>sqrt(so2) then kt1:=true Else kt1:=false;
so4:=2; While (so4<=sqrt(so3)) And (so3 Mod so4<>0) do
Inc(so4);
If so4>sqrt(so3) then kt2:=true Else kt2:=false;
Inc(so2);
Until (so3<=2) Or (kt1 and kt2);
If kt1 and kt2 then Write(‘GIA THIET GOLDBACH DUNG.’)
Else Write(‘GIA THIET GOLDBACH SAI.’);
Writeln;
Write(‘Another test (y/n)?’); Readln(hoi);
Until hoi In [‘N’, ‘n’];
End. ớ ệ ấ ả t c các s Mersenne nh h n m t s t nhiên N cho tr ố
c (v i n>=3)Các s t kê t ố ự ộ ố ự
ọ ố ố
i d ng 2 ỏ ơ
n – 1 (ns t ướ
nhiên) g i là s Mersenne ễ ượ ướ ạ
c d bi u di n đ *15 Tìm và li
ố ể
nguyên t
uses Crt;
Var so, n, i, ntmin:longint;
check, stop: Boolean; tt:Byte; Begin clrscr;
Repeat
Write(‘Nhap n>=3:’); Readln(n);
stop:=false;
ntmin:=2;
Writeln(#32:20,’CAC SO MERSENNE:’);
While Not stop Do
Begin
i:=2;
While (i<=sqrt(ntmin)) And (ntmin MOD i<>0) Do
Inc(i);
If i>sqrt(ntmin) then check:=true Else check:=false;
If check then
Begin
so:=1;
For i:=1 to ntmin do so:=2*so;
Dec(so,1);
i:=2;
While (i<=sqrt(so)) And (so MOD i<>0) do Inc(i);
If i>sqrt(so) then check:=true
Else check:=false;
stop:=so>n; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 12 If check and Not stop
Then
Writeln(so);
End;
Inc(ntmin);
End;
Writeln;
Write(‘Another Test (1/0)?, Come on ) press 1; Stop > press 0:’);
Readln(tt);
Until tt=0;
End. ớ ộ ệ ậ ậ ướ 16 Không dùng thu t toán đ quy, l p trình tìm và in lên màn dãy FIBONACI v i đ dài cho tr c n. Program Day_Fibo;
Uses crt;
Var i,n,f1,f2,fi,fi_1,fi_2:Integer;
Begin clrscr;
Write(‘Nhap do dai day Fibonaci n=’); Readln(n);
Writeln(‘ DAY FIBONACI UNG VOI DO DAI ‘,N,’ LA:’);
Writeln;
i:=1; f1:=1;f2:=1;
fi:=f1+f2;
Write(f1:3, f2:3);
For i:=3 to n Do
Begin
Write(fi:5);
f1:=f2;
f2:=fi;
fi:=f1+f2;
End;
Readln;
End. ướ ố ọ ừ ớ ố ậ Ệ ấ ủ
c s chung l n nh t c a N s tùy ý đ c t bàn phím vào. 17 L p trình (PHI Đ QUY) tìm
Test. Vào: 72 40 24 48 56, Ra: 8 Uses Crt;
Var a:Array[1..100] of integer;
n,i,tt: Byte; d: Integer; Ẫ ẽ ạ Ữ Ệ Ự Ộ ẽ ơ b n nên dùng PHÁT SINH D LI U NG U NHIÊN T Đ NG, s nhanh h n!} Begin Clrscr; {Có l
Repeat
{Randomize;}
Write(‘ Nhap so luong cac so hang n:’); Readln(n);
For i:=1 to n Do
Begin
Write(‘a[‘,i,’]=’); Readln(a[i]);
End; {a[i]:=Random(20);}
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 13 Writeln(‘Day so vua nhap:’);
For i:= 1 to n Do Write(a[i]:3);
Writeln;
Writeln(‘= = = = = = = = = = = = = = =’);
For i:=1 to n1 do
Repeat
d:=a[i];
a[i]:=a[i+1] MOD a[i];
a[i+1]:=d;
Until a[i]=0;
Write(‘USC max cua ‘,n,’ so vua nhap la:’,a[n]); Writeln;
Write(‘More(1/0)? Continue > 1, Stop > 0:’); Readln(tt);
Until tt=0;
End. ươ ươ ệ
18 Tìm nghi m nguyên d ủ
ng c a ph ng trình sau: ọ ừ ớ a) 4x+3y9z=n, v i 0 ≤ x, y, z ≤ 50; n đ c t bàn phím vào. ặ ướ ị ủ ề ệ ươ ủ ươ Không áp đ t tr c mi n giá tr c a x, y, z hãy tìm nghi m nguyên d ng c a các ph ng trình sau: ọ ừ bàn phím vào. ọ ừ b) x + y + z = n ; n đ c t
c) x2 + y2 = n; n đ c t bàn phím vào. 5 Bài a) Uses Crt;
Var x,y,z,n,d:integer; Begin clrscr;
Write(‘Nhap n:’); Readln(n);
d:=0;
For x:=0 to 50 do
For y:=0 to 50 do
For z:=0 to 50 do
If ((4*x+3*y9*z)=n) then
Begin
Writeln(x:4,y:4,z:4);
Inc(d);
If (d MOD 20)=0 then
Begin
Write(‘Go ENTER > xem tiep.’);
Readln;
End;
End;
End. ạ Các bài còn l ư
i làm t ong t ự
. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 14 ậ ạ ộ ớ ả
19 L p trình t o b ng ba c t GÓC
ứ
ị
SIN COS, tính giá tr hàm Sin, Cos ng v i góc o đ n 360 o nên yêu c u m i l n ch hi n lên màn 20 giá tr k t qu , đ
ả ể ế ỗ ầ ỉ ệ ị ế ầ ừ c t c n trái. (Vì có t góc 0 Ế ở ộ ậ
XEM TI P: gõ phím ENTER.) Uses Crt;
Var goc:word;
gocradian: Real; Begin clrscr;
Writeln(#32:9,’BANG GIA TRI GOC, SIN, COS:’);
Writeln(‘ Nho an ENTER de xem tiep.’);
For goc:=1 To 360 Do
Begin
gocradian:=goc*pi/180;
Writeln(#32:24,goc,#32:5,sin(gocradian):0:4,#32:3,cos(gocradian):0:4);
If (goc MOD 20) = 0 then Readln;
End;
End. Ặ Ệ Ị
B.2.2) CÁC L NH L P KHÔNG XÁC Đ NH (WHILE. . .DO; REPEAT…UNTIL) ậ ả L p trình gi i các bài toán sau: ầ ố ố ớ 20 Tính g n đúng v i sai s 10^6 (1/1000000): s Pi; sinx; cosx; e^x. ầ ố a) Tính g n đúng s PI. Program tinhgandung_So_Pi;
Uses Crt;
Const ss=1E6
Var sp: Real; n, dau: integer;
Begin clrscr;
n:=0;
sp:=0;
While (1/(2*n+1))>=ss do
Begin
If n MOD 2 = 0 then dau:=1
Else dau:=1;
sp:=sp+dau*(1/(2*n+1));
n:=n+1;
End;
Write(‘Gia tri gan dung cua so Pi=’,4*sp:8:4);
Readln;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 15 3 Ố Ạ Ầ
Ứ Ọ Ồ Ở
b) TÍNH G N ĐÚNG SINX B I
CÔNG TH C TRUY H I RÚT G N CÒN 1 S H NG (cid:0) x sin n x
n
*( +
1) ờ ừ ể ầ ầ ở ọ ơ ị đây c n hi u ng m có đ n v đo là Radian (Trong m i Program ắ
ố ố
ể ớ ộ ố Ơ Ờ L i nh c không th a:
+ Đ i s x trong các hàm sin, cos
ư ộ ư ố
đ nó nh m t h s ).
Ắ
+ và có L I NH C QUAN TR NG H N: Hãy test program v i b s sau:
ặ
x=0 ho c x=3.1416 (= Ọ
(cid:0) ) sinx=0; x=1.5708 (=(cid:0) /2) sinx=1; x=4.7124 (=3(cid:0) /2) sinx=1 ầ ả ơ ị
và trong đ u luôn có hình nh Vòng Tròn Đ n V :
Uses Crt;
Const ss=1E6;
Var x,S,T: Real; n: Integer; hd:char; Begin Clrscr;
Repeat
Write(‘Nhap vao cung x (Radian)cua ham Sin:’);
Readln(x);
S:=x; T:=x; n:=0;
While ABS(T)>=ss Do
Begin
n:=n+2;
T:=T*SQR(x)/(n*(n+1));
S:=S+T;
End;
Write(‘Sin(x)=’,S:0:6);
Writeln;
Write(‘More (y/n)? Come on > Press y; Stop > Press n:’);
Readln(hd);
Until hd In [‘n’,’N’];
End. 2 Ạ ƯƠ HAI HÀM CÒN L I LÀM T Ự Ể
NG T ! Đ Ý: x (cid:0) - x cos 1 + x
n
n
( *( 1) + (cid:0) e 1 x
n 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 16 nhiên ra các ừ ố 21 Phân tích m t s t
th a s nguyên t ộ ố ự
ố
. ồ Program Thua_so_nguyen_to; {Repeat và While l ng nhau}
Uses crt;
Var n,i:longint;
Begin clrscr;
Write(‘n=’);Readln(n);
Writeln(‘Cac thua so nguyen to cua ‘,n,’ la:’);
Repeat
i:=2;
While (n Mod i<>0) AND (i ả ử ố s dân s Vi ố
bình quân tăng dân s hàng năm là 3/1000. ỷ ệ
t Nam năm 2017 là 96 tri u dân và t
l
ạ ệ
Ấ ế Ớ ệ ệ
22 Gi
ố ướ
Tính xem S M NH T đ n năm nào thì dân s n c ta đ t 110 tri u dân. Uses Crt;
Const tyle=0.003;
Var ds:Real; nam: Integer;
Begin clrscr;
Write(‘Nhap dan so hien tai:’); Readln(ds);
nam:=2017;
While (ds<=110*1E+6) Do
Begin
Inc(nam);
ds:=ds*(1+tyle);
End;
Write(‘Som nhat den nam ‘,nam,’ dan so nuoc ta dat 110 trieu dan.’);
Readln;
End. ươ ố ữ ố ủ ố ữ ố ế ủ ề ổ ơ c s nguyên d ng n có nhi u h n 1 ch s . Đ m s ch s c a s đó và tính t ng c a ướ ố
ạ
ẳ 23 Cho tr
chúng. Ch ng h n, vào: 9876543, ra: 7 và 42 Uses crt;
Var n,dem,tong:Longint; Begin clrscr;
Write(‘Nhap so nguyen duong nhieu hon 1 chu so:’);
Readln(n);
tong:=0; dem:=0;
While n>0 Do
Begin
Inc(dem);
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 17 tong:=tong+n MOD 10;
n:=n DIV 10;
End;
Writeln(‘Tong cac chu so cua so vua nhap:’,tong);
Writeln(‘So cac chu so cua so vua nhap=’,dem);
Readln;
End. ự ệ ằ ừ
24 Th c hi n phép chia b ng phép tr . Program Chia_la_tru;
Uses crt;
Var Sobichia, Sochia,Thuong, du:Longint; hoi:char;
Begin clrscr;
REPEAT
Write(‘Nhap Sobichia:’) ; Readln(Sobichia);
Write(‘Nhap Sochia<=Sobichia:’) ; Readln(Sochia);
Thuong:=0;
While (Sochia<=Sobichia) Do
Begin
Sobichia:=Sobichiasochia;
thuong:=thuong+1;
End;
du:=Sobichia;
Writeln(‘Thuong=’,Thuong);
Writeln(‘So du=’,du);
Writeln;
Write(‘Another Test (y/n)?:’); Readln(hoi);
UNTIL hoi In [‘n’,’N’];
End. ậ ả ượ ộ ố ươ Ệ ướ ữ ố ề ơ c m t s nguyên d ng (PHI Đ QUY) cho tr ụ
c có nhi u h n 1 ch s . Ví d 25 L p trình đ o ng
vào 2017, ra: 7102. ố ế ượ t ng c} USES CRT;
Var sovng, n, dv:longint;
Begin clrscr;
Write(‘n=’); Readln(n);
sovng:=0;
While (n>0) do
Begin
dv:=n MOD 10;
sovng:=10*sovng+dv; {sovng=s vi
n:=n DIV 10;
End;
Write(‘So viet nguoc lai la:’,sovng);
Readln; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 18 End. ố ớ ươ ướ ậ ờ ướ ố ấ ủ
c s chung l n nh t c a hai s nguyên d ng cho tr c nh thu t toán Euclide: 26 Tìm
26.1) Dùng phép trừ
26.2) Dùng phép chia ĐÁP: 26.1)
Uses crt;
Var a,b,d:integer;
Begin clrscr;
Write(‘Nhap 2 so nguyen duong:’); Readln(a,b);
While (ab<>0) Do
Begin
if a>b then a:=ab
else b:=ba;
End;
Write(‘Uscmax=’,b);
Readln;
End. 26.2)
Uses crt;
Var a,b,du:integer;
Begin clrscr;
Write(‘Nhap 2 so nguyen duong:’); Readln(a,b);
While (b<>0) Do
Begin
du:=a Mod b;
a:=b;
b:=du;
End;
Write(‘Uoc so chg max=’,a);
Readln;
End. ươ ọ ừ ữ ố ớ ố ừ ậ ấ ị
ng N (N>1). Tìm ch s l n nh t trong s v a nh p và v ố ừ ộ ố
ệ bàn phím vào m t s nguyên d
ả ế *27 Đ c t
ậ
ủ
trí c a nó trong s v a nh p. Hi n k t qu lên màn.
Program Tim_Chuso_Max;
uses crt;
Var so,i,max,temp,vitri:longint; BEGIN Clrscr;
write(‘Nhap so :’); readln(so);
writeln(‘Trong so ‘,so,’ vua nhap ‘);
max:=0; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 19 i:=1;
while (so<>0) do
Begin
temp:=so mod 10;
if temp>max then
Begin
max:=temp;
vitri:=i;
End;
i:=i+1;
so := so div 10;
End;
Write(‘ thi chu so ‘, max,’ la chu so lon nhat va nam o vi tri thu ‘,vitri);
Write(‘ ke tu ben phai sang.’);
readln;
END. ệ ụ sinh đôi mà ướ ố ự
c s t nhiên N (ví d 100). Tìm & hi n lên màn t ặ ố
ấ ả
t c các c p s nguyên t
ố ơ ơ ố ố ố
ị
sinh đôi là hai s h n kém nhau 2 đ n v ) *28 Cho tr
ị ủ
giá tr c a chúng không quá N. ( Hai s nguyên t
Uses crt;
Var so1, so2, so3, so4, n, dem: longint;
kt1, kt2: boolean; {kt=kiem tra}
Begin clrscr;
Write(‘Nhap so tu nhien n:’); Readln(n);
Writeln(‘Cac cap so sinh doi < n:’);
For so1:=2 to n2 do
Begin
so4:=2;
While (so4<=sqrt(so1)) And (so1 MOD so4<>0) do
Inc(so4);
If so4>sqrt(so1) then
Begin
so2:=so1;
so3:=so2+2;
so4:=2;
While (so4<=sqrt(so3)) And (so3 Mod so4<>0) do Inc(so4);
If so4>sqrt(so3) then
Begin
Inc(dem);
Writeln(dem,’:’,’(‘,so2,’,’,so3,’)’);
End;
End;
End;
Readln;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 20 ỏ ơ ớ ả ố ố ỏ ố ủ ỉ ố
ơ ể ườ ườ
i
ỗ ố
ậ ư ộ *29 Trên bàn có 26 viên s i. Ng
ỗ ầ
ch i v i máy tính. M i l n, m i đ i th ch b c không h n 4 viên. Đ i th nào ph i b c viên s i cu i
ế
i đi tr
cùng là thua. Tìm m t chi n thu t ch i đ ng ủ
ơ
ướ
c nh ng luôn luôn thua máy tính. PROGRAM BOCSOI;
uses crt;
VAR
TONG_SOI,I,SOI_CON,N:INTEGER;ch:char;
BEGIN
REPEAT
clrscr;
I:=1;
TONG_SOI:=26;
REPEAT
WRITELN(‘LAN BOC THU ‘,I,’:’);
WRITE(‘ BAN BOC MAY VIEN (khong qua 4 vien): ‘);READLN(N);
WRITELN(‘ MAY BOC: ‘,5N);{WRITELN(5N);}
WRITELN(‘ SO SOI CON LAI:= ‘,TONG_SOI(5*i)); {WRITELN(TONG_SOI(5*i));} SOI_CON:=TONG_SOI(5*i);
I:=I+1;
UNTIL SOI_CON =1;
WRITELN(‘BAN PHAI BOC VIEN CUOI CUNG. BAN THUA ROI!’);
writeln;
write(‘ Tiep khong (c/k):’);readln(ch);
UNTIL (ch=’k’) OR (ch=’K’);
END. ấ ả ệ ị ủ
t c các c p s thân thi n mà giá tr c a chúng không quá 10000. (Hai s đ ặ ố
ƯỚ Ủ Ố Ớ Ằ ặ ố Ố ụ ố ượ
c
Ỏ
C C A S L N B NG S NH : ví d 48 và 75 là c p s thân ệ ổ ướ *30 Tìm và in lên màn t
ế Ổ
ệ
ọ
g i là thân thi n n u T NG CÁC
ớ ủ
thi n vì các u c c a 75 là: 3 5 15 25 và t ng các ằ
c này b ng 48!) Uses Crt;
Var n1,n2,t,k: Integer; tt:Byte; Begin Clrscr;
Repeat
Writeln(#32:20,’Cac cap so Than Thien <10000:’);
Writeln(#32:20,’= = = = = = = = = = = = = =’);
For n1:=1 to 10000 do
Begin
t:=0;
k:=2;
While (k<=(n1 DIV 2)) And (t<=10000) do
Begin
If (N1 mod k=0) Then t:=t+k;
inc(k); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 21 End;
If (t>0) and (t<=10000) Then
Begin
n2:=t; t:=0;
k:=2;
While (k<=(n2 Div 2)) And (t<=n1) do
Begin
If (n2 mod k=0) then t:=t+k;
Inc(k);
End;
If t=n1 then Writeln(#32:30,’(‘,n1,’,’,n2,’)’);
End;
End;
Writeln(‘DONE!’);
Write(‘More?(1/0),Continue > 1, Stop > 0:’); Readln(tt);
Until tt=0;
End. k
*31 (LU TH A NHANH. INFORMATIC OLYMPIC MOSCOW 1980). Nh p c s a và mũ k. Tính a
ượ
ế
ớ ạ
v i h n ch : Không đ
c dùng liên ti p k phép nhân ( vì
ầ
k c c l n và m c tiêu đ u bài là tính NHANH!) Ỹ Ừ ậ ơ ố
ế ượ ừ ứ c dùng công th c tính lũy th a, cũng không đ ự ớ ụ PROGRAM NANGNHANH_LUYTHUA; Uses Crt;
VAR
a, b : Real;
k, n : integer; hoi: char;
BEGIN Clrscr;
Repeat
Write('a,k= '); Readln(a,k);
Write(a,' mu ',k,' = ');
b:=1;
While k>0 do
Begin
n:=k div 2;
If (n+n 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 22 Ả ệ ơ ố ượ ế ế ố t trong h c s 2 theo tr t t ệ ậ
t trong h th p phân c vi c l ậ ượ
ớ c vi
ị ủ ậ ự ượ ạ
i. S nh n đ
ng
ạ
ẳ
ị
c coi là giá tr c a hàm B(m). Hãy tính giá tr hàm B(m) ch ng h n v i m=512 ; 513; 514;…; 1024. *32 (Đ O BIT. INFORMATIC
OLYMPIC MOSCOW 1983)
ố
S nguyên m đ
ượ
đ PROGRAM DaoBit; {chay voi m=513}
VAR
m, b, k: integer;
BEGIN
k:=513;
m:=1;
Writeln(m);
While m<1024 do
begin
while m>=k do
begin
m:=mk;
k:=k div 2;
end;
m:=m+k;
k:=513;
Writeln(m);
end;
Readln;
END. ứ ấ ả ố ự ỏ ơ ướ ố ự
c s t nhiên n. Hàm Eul(n) ch a t t c các s t nhiên nh h n n và ớ cùng nhau v i n. Tính hàm Eul(n). 33. (Hàm Euler Eul(n)). Cho tr
ố
nguyên t
Uses Crt;
Var n, ham_Eul,i,a,b,r: integer;
Begin clrscr;
Write('Nhap n:'); Readln(n);
ham_Eul:=0;
For i:=1 to (n1) do
Begin
a:=i;
b:=n;
While b<>0 do
Begin
r:= a MOD b;
a:=b;
b:=r;
End;
If a=1 then Inc(ham_Eul);
End;
Write('Gia tri ham Euler=:',ham_Eul); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 23 Readln;
End. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ể ậ ơ ủ ụ ể
Trong Pascal có hai Modul đ ta l p trình Đ n Th . Âý là:
* Procedure (Th T c).
* (và) FUNCTION (Hàm) ủ ậ ệ ắ ấ ầ ệ ả t các em c n chú ý và n m th t v ng b n ch t 3 khái ni m sau c a l p trình Modul: ậ ữ
ế ụ ộ ụ
ệ ề ậ
ng cách truy n data trong l p trình Modul c a Pascal: ươ
ề
ề ề
ị
ế ặ
Đ c bi
ế
aBi n toàn c c (Global Var.) và bi n c c b (Locate Var.)
ế
bCác khái ni m v tham chi u
ủ
cHai ph
c1. Truy n theo Tham Tr (Transfer By Value Parameters)
c2. Truy n theo Tham Bi n (Transfer By Variable Parameters) ị ạ ướ ế Ể Ị Ế c h t các b n hãy “khai v ” 3 “món” sau ( 3 MÓN “KHAI V ” NÀY KI M TRA XEM CÁC B N
Ệ Ạ
ể Ọ Ồ ỉ Ể
ấ Ậ
ệ ể ạ ự ạ ả ủ ỉ ế ả ấ ỉ ỉ i thích t m k t qu ! ƯỢ Ớ Ễ Ị Tr
CÓ HI U Đ N T N NG N NGU N CÁC KHÁI NI M a); b) ; c); d) nêu trên không. Vì ch khi hi u rõ
ơ
ậ
ớ
th c ch t 4 khái ni m đó, b n m i hòng l p trình đ n th th o):
ế
Không RUN program, ch dùng bút ghi k t qu c a 3 program sau đây lên gi y + gi
BA BÀI “KHAI V ” NÀY KHÔNG D ĐÂU! NH : KHÔNG Đ ả
C RUN PROGRAM NHÉ!!! 1. Program Transf_By_Val;
Uses Crt;
Var so1, so2:integer;
Procedure Transf_Val(x, y:integer);
Begin
Writeln(' Ben trong thu tuc:');
x:=x+15;
y:=y+15;
Writeln('X=',x);
Write('Y=',y);
End;
Begin {Main Prog.)
Writeln('Co che truyen data theo THAM TRI:');
Write('Nhap so thu nhat so1='); Readln(so1);
Write('Nhap so thu hai so2='); Readln(so2);
Transf_Val(so1, so2);
Writeln;
Writeln('Ben ngoai thu tuc(tuc la sau truyen Data):');
Writeln('Bay gio so thu 1 so1=',so1);
Writeln('Bay gio so thu 2 so2=',so2); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 24 Writeln('Go ENTER de stop!');
Readln;
End. 2. Program Transf_By_Vari_Para;
Uses Crt;
Var so1, so2:integer; Procedure Transf_By_Vari_Para(Var x, y:integer);
Begin
Writeln('Trong than thu tuc:');
x:=x+15;
y:=y+15;
Writeln(' Tham so X=', x);
Writeln(' Tham so Y=', y);
End;
BEGIN {Main Prog.}
Writeln('Co che truyen Data theo THAM BIEN:');
Write('Nhap so thu nhat so1='); Readln(so1);
Write('Nhap so thu hai so2='); Readln(so2);
Writeln('Sau khi truyen Data (tucla ben ngoai thu tuc):');
Writeln('Bay gio so1=',so1);
Writeln('Bay gio so2=',so2);
Writeln;
Write(' Go ENTER de Stop!');
Readln;
END. 3. Program Obser_Transf_Data;
Uses Crt;
Var a, b: integer;
Procedure Obser(Var x, y:Integer);
Begin
Write(x:3, y:3);
x:=2;
x:=x+1;
y:=2*x;
End;
BEGIN {Main Prog.}
Clrscr;
a:=4; b:=5;
Write('Cac gia tri a, b:', a,'; ',b);
Writeln;
Obser(a,b);
Writeln('Cac gia tri a, b:',a,'; ',b);
Obser(b,a); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 25 Writeln('Cac gia tri b, a:',b,'; ',a);
Readln;
END. ạ ể Ự Ệ ƯỚ Ạ
ợ ự ệ Ủ
ơ ả
I.) th c thi 3 phép tính c b n (H p, Hi u, Giao) c a hai ế ả Ạ Ể Ế Ở Ạ Ế ệ
Ư
Ở
Ề
2 MODUL: CÁCH THAM CHI U KHÁC NHAU (T I SAO?); CÁCH DÙNG CÁC Ậ ơ
ọ
ậ
4. L p trình đ n th (B n ch n FUNCTION hay PROCEDURE LÀ VI C C A B N. HÃY T SUY
ủ
ƯỚ
C LÚC XEM ĐÁP ÁN BÊN D
NGHĨ TR
ướ
ợ
ậ
t p h p cho tr
c. Hi n k t qu lên màn.
Ắ
BÀI NÀY NG N, NH NG KHÁ HAY VÌ NÓ CHO B N NHI U HI U BI T: 1. CÁCH KHAI BÁO
Ầ
Đ U PROGRAM;
Ệ Ở
L NH MODUL NH P VÀ MODUL INRA… Uses Crt;
Type Kytu='!'..'}';
Tapkytu=Set of Kytu;
Var A,B,C,D,E: Tapkytu; Procedure Nhap(Var x:Tapkytu);
Var kt: Char;
Begin
Read(kt);
While kt<>#13 Do
Begin
x:=x+[kt];
Read(kt);
End;
End; Procedure Inra(Y: Tapkytu);
Var kt: Char;
Begin
For kt:='!' to '}' Do
If kt In Y then Write(kt:3);
End; {main Prog.}
Begin clrscr;
A:=[]; B:=[]; C:=[]; D:=[]; E:=[];
Write('Nhap cac phan tu cua tap A (Ngung, go ENTER:'); Nhap(A);
Write('Nhap cac phan tu cua tap B (Ngung, go ENTER:'); Nhap(B);
C:=A+B;
D:=A*B;
E:=AB;
Write('Hop cua 2 tap vua nhap C=A+B='); Inra(C); Writeln;
Write('Giao cua 2 tap vua nhap D=A*B='); Inra(D); Writeln;
Write('Hieu cua 2 tap vua nhap E=AB='); Inra(E); Writeln;
Readln;
End. ọ ừ ế ố ấ ể ố ươ ng ươ
ủ ố ự ươ ố *5. Đ c t
ố ằ
không (S b ng bình ph ố
bàn phím vào s nguyên d
ươ
ng c a s t ộ
ng n. Vi
ọ
nhiên khác g i là s chính ph t m t hàm ki m tra xem s y có là s chính ph
ng). 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 26 Uses Crt;
Var n:longint; tt:byte; Function chphuong_check(var k:longint):boolean;
Begin
If Sqrt(k)=Trunc(Sqrt(k)) then chphuong_check:=true
Else chphuong_check:=false;
End; Begin clrscr;
Repeat
Write('Nhap so nguyen n:'); Readln(n);
If chphuong_check(n) then Write(n,' la so chinh phuong.')
Else Write(n,' khong phai la so chin phuong.');
Writeln;
Write('More (1/0)?, Continue > press 1, Stop > press 0:');
Readln(tt);
Until tt=0;
End. ố ế ể ố ố ấ
t m t hàm ki m tra xem s y có là s hoàn h o không ướ ủ ươ
ể ả ơ ng n. Vi
ị ọ ộ
ố ả ẳ ạ ả ố ả
c c a nó k c đ n v , g i là s hoàn h o,. Ch ng h n 28 là s hoàn h o vì ọ ừ
bàn phím vào s nguyên d
*6. Đ c t
ổ
ố ằ
(s b ng t ng các
28= 1 + 2 + 4 + 7 + 14).
Uses Crt;
Var n:longint; Function Hhao_Check(var k:longint):Boolean;
Var i,sum:longint;
Begin
sum:=0;
For i:=1 to k DIV 2 do
If n MOD i=0 then sum:=sum+i;
If sum=n then Hhao_Check:=true
Else Hhao_Check:=false;
End; Begin clrscr;
Write('n='); Readln(n);
If Hhao_Check(n) then Write(n,' la so hoan hao.')
Else Write(n,' khong la so hoan hao.');
Readln;
End. Ể Ể Ạ Ặ ụ ế ự ự ờ ọ Ế ả ở Ố Ự Ự ƯỢ ƯỢ Ộ Ế C Ứ ố
Ể
CÓ TH B N KHÔNG Đ Ý HO C KHÔNG HI U: Trong 2 bài 28 & 29, bi n Toàn c c và Tham s
Ặ
Ụ
Main Program luôn luôn ph i dùng BI N TOÀN C C HO C
Th c s là trùng nhau (n). L i g i hàm
Ụ
C DÙNG BI N C C B OR KHÔNG Đ
THAM S TH C S (NGHĨA LÀ: KHÔNG Đ
Ố
DÙNG THAM S HÌNH TH C). 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 27 ố bàn phím vào s nguyên ố ấ ể ộ ố ố ế t m t hàm ki m tra xem s y có là s nguyên t không. ọ ừ
7. Đ c t
ươ
ng n. Vi
d
USES CRT;
Var n ,d,i: Integer; Function ktnt:Boolean;
Begin
d:=0;
For i:=2 to n1 do
If n mod i=0 then d:=d+1;
If(d=0) and (n>1) then ktnt:=True
Else ktnt:=False;
End; BEGIN CLRSCR;
Write(#32:5,'Nhap n = '); Readln(n);
If ktnt then
Writeln(#32:9,n,' la so nguyen to.')
Else Writeln (#32:9,n,' khong phai la so nguyen to.');
Readln;
END. Ể Ể Ể Ế Ử Ớ Ể ƯỜ Ạ Ặ Ể Ủ
Ả
NG) HO C LÀ CHAR (ĐÃ CÓ LÚC NHÀO B N TH V I KI U Ư Ứ Ữ Ể Ấ
(CÁC HÀM KI M TRA TRÊN ĐÂY, KHÔNG NH T THI T PH I CÓ KI U BOOLEAN. KI U C A
NÓ CÓ TH LÀ BYTE (TH
CHAR CHO NH NG HÀM CÓ CH C NĂNG KI M TRA CH A?) ọ ừ ộ ố ươ ể ộ ố ọ ố ấ ố ứ
ng, ki m tra xem s y có đ i x ng không. M t s đ c xuôi, ụ ư ượ ề 8. Đ c t
ọ
đ c ng bàn phím vào m t s nguyên d
ố ố ứ
c đ u nh nhau là s đ i x ng. Ví d 123454321. ƯỚ Ắ Ơ Ấ Ắ Ể CODE D I ĐÂY LÀ NG N NH T, KHÔNG TH NG N H N. Uses crt;
var n,m,tam:longint; tt:byte;
Begin clrscr;
Repeat
Write('Nhap n:'); Readln(n);
m:=0; tam:=n;
While (tam>0) Do
Begin
m:=m*10+tam MOD 10;
tam:=tam DIV 10;
End;
If m=n then Write('So vua nhap la so Doi xung.')
Else Write('So vua nhap Khong la so Doi xung.');
Writeln;
Write('Another Test (1/0)?. Come on>Press 1; Stop> Press 0:');
Readln(tt);
Until tt=0;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 28 ậ ễ ể ộ ố ầ ổ ố ự nhiên LIÊN TI P khác. Yêu c u xu t: ng b ng t ng c a n s t ố ự ế ằ
ạ Ế
ễ ượ ằ ể ổ
c b ng t ng 2 s t ấ
nhiên liên ti p. ố ự ổ ễ ượ ằ ể ố c b ng t ng c a 8 s t ế
nhiên liên ti p. ế ễ ượ ằ ố ự ủ ể ổ nhiên liên ti p. **9. L p trình bi u di n m t s nguyên
ủ
ươ
d
ẳ
Ch ng h n: Vào 4, ra: 4 không bi u di n đ
Vào 100, ra: 100=9+10+11+12+13+14+15+16
ủ
S 100 bi u di n đ
Vào 5, ra: 5=2+3
ố
S 5 bi u di n đ c b ng t ng c a 2 s t Ả Ố Ớ
BÀI NÀY KHÁ KHÓ Đ I V I HS VÀ C SINH VIÊN! uses crt;
Const max=10000;
Var n,i,dem:Longint; a:array[1..max] of Longint; Function Check(m:Longint):boolean;
Var stop,kt:Boolean; kd,bd,t:Longint; Begin
stop:=False;
kt:=False;
kd:=0;
While Not Stop do
Begin
bd:=kd;dem:=0;
t:=0;
If bd>=(m+1) DIV 2 then stop:=true
Else
Begin
While t Var tt:Byte;
Begin clrscr;
Repeat
Repeat
Write('Nhap so duong n='); Readln(n);
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 29 If n<0 then Writeln(' Nhap lai
n>=0');
Until n>=0;
If Check(n) then
Begin
Write(n,'=');
For i:=1 to dem1 do Write(a[i],'+');
Writeln(a[dem]);
Write('So ',n,' bieu dien duoc thanh');
Write(' tong cua ',dem,' so tu nhien lien tiep!');
End
Else
Begin
Write('So ',n,' khong bieu dien duoc thanh');
Write(' tong cua >=2 so tu nhien lien tiep!');
End;
Writeln; Writeln;
Write('More (1/0)? Tiep: go 1; Ngung: go 0:');
Readln(tt);
Until tt=0;
End. ấ ỳ ố ố ể ượ Ủ ổ
nhiên b t k thành t ng các s nguyên t đ thu đ c TÍCH C A ộ ố ự
Ấ ậ
Ố Ạ Ớ **10. L p trình phân tích m t s t
CÁC S H NG LÀ L N NH T. ạ ố ạ ạ ố ạ
Test1 vào: 8; ra: 3 3 2, tích các s h ng đ t max=18
Test2: Vào 23; ra: 3 3 3 3 3 3 3 2, tích các s h ng này đ t max=4374 Uses crt;
Const m=65;
Var pa_opt:Array[0..m] of Byte;
tic:Array[0..m] of longint;
j,s,p,k:longint; tt:Byte; Procedure Innit;
Var k:longint;
Begin
For k:=0 to p do
Begin
tic[k]:=0; pa_opt[k]:=0;
End;
tic[0]:=1;
End; Procedure Process;
Var j,k,s,ticmax:longint;
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 30 For j:=1 to p do
Begin
For k:=0 to pj do
If (k=0) or (pa_opt[k]>0) then
Begin
s:=k+j;
ticmax:=tic[k]*j;
If ((pa_opt[s]=0) or (pa_opt[s]>0)) and (ticmax>tic[s]) then
Begin
tic[s]:=ticmax; pa_opt[s]:=j;
End;
End;
End;
End; Begin clrscr;
Repeat
Write('Nhap so nguyen duong p<100:'); Readln(p);
Innit;
Process;
s:=p;
Write('Phuong an phan tich so ',p,' thanh tong cac so ng_to de co tich max la:'); While s>0 Do
Begin
Write(pa_opt[s]:3); s:=spa_opt[s];
End;
Writeln;
Write('Ung voi ptich toi uu tren day, ta duoc tich max=',tic[p]:2);
Writeln; Writeln;
Writeln('* * * * * * * * * * * * * * ');
Write('Continue(1/0)?. Go 1>Tiep; go 0>ngung:');
Readln(tt);
Until tt=0;
End. ệ Ố ấ ả ố ượ ố ng các s TAM TAM đã li t kê. t c các s Tam Tam và đ m s l
ố ả ệ
ạ ố ẳ ế
ượ ủ
c c a nó nguyên t ố
ố ớ
v i nó. Ch ng h n s 974 ố ữ ố
cùng 479 là hai s TAM TAM) **11. (S TAM TAM) Li
t kê t
ố
ữ
ố
(Các s Tam Tam là nh ng s có 3 ch s mà s đ o ng
ố
nguyên t
Uses crt;
Var dem, i:integer; Function uscln(a,b:integer):integer;
var r:integer;
Begin
While b>0 do
Begin
r:=a MOd b; a:=b; b:=r;
End;
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 31 uscln:=a;
End; Function daoso(x:integer):integer;
Var y:integer;
Begin
y:=0;
While x>0 do
Begin
y:=10*y+(x MOD 10);
x:=x DIV 10;
End;
daoso:=y;
End; Procedure Tim;
Begin
dem:=0; writeln; Writeln;
Writeln(#32:18,'Cac so Tam tam thoa man d/kien dau bai:');
Writeln; Writeln(#32:18,' ');
For i:=101 to 999 do
if uscln(i,daoso(i))=1 Then
Begin
Inc(dem);
Write(i:4);
End;
Writeln; Writeln;
Write(#32:20,'Bang tren day co tong cong ',dem,' so Tam tam.');
End; Begin clrscr;
Tim;
Readln;
End. ấ ả ặ ố ớ ạ ố ượ ế t c các c p s Lucasa. (Gi i h n: 1 ấ ả ệ
**12. Li
t kê t
ệ
ặ
t kê.
c p đã li
ậ
ụ
Ví d Vào c n trên: 1000, Ra: (1,1); (5, 25); (6, 36); (25, 625). Có t ặ
t c 4 c p Lucasa. ƯỚ Ấ Ắ CODE D I ĐÂY LÀ NG N NH T! Uses crt;
Var n, i:longint; s1, s2:string; d: byte; hd:char;
Begin clrscr;
Repeat
d:=0;
Writeln(' Tim cac cap lucasa_number:');
Repeat
Write('Nhap can tren cua gioi han:'); Readln(n);
Until (n>1) and (n<2147483647); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 32 Writeln('Cac cap Lucasa number
<=',n,': ');
n:=Trunc(Sqrt(n));
For i:=1 to n do
If (i MOD 10 in [1, 5, 6]) then
Begin
Str(i,s1);
Str(i*i,s2);
If Copy(s2,Length(s2)Length(s1)+1, Length(s1))=s1 Then
Begin
Inc(d);
Writeln('(',s1,',',s2,')');
End;
End;
Writeln('Tong cong co ',d,' cap LucasaNumbers.');
Write('Go ESc de tro lai chuong trinh!');
Until Readkey = #27;
End. ữ ố ố ố ệ ấ ả ạ ẫ ẳ ạ ầ ố ố Ố
ơ
t c các s SIÊU NGUYÊN T có không h n 8 ch s . (Các s SIÊU NGUYÊN T dài
. Ch ng h n: ố
i v n là s nguyên t ố Ố
ả ủ
ặ ặ ố t kê t
**13. Li
ố
ữ
L là nh ng s mà xóa đi k (k Function NT(n:longint):boolean;
Var
i:longint;
Begin
If (n=0) or (n=1) then
NT:=False
Else
Begin
i:=2;
While (n mod i<>0) and (i<=sqrt(n)) do
i:=i+1;
If i> sqrt(n) then NT:=True
Else NT:=False;
End;
End; BEGIN CLrscr;
Write('Nhap so chu so n (n<=8):');
Readln(n);
dem:=1;
a[dem]:=0; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 33 For i:=1 to n do
Begin
kb:=0;
For k:=1 to dem do
For cs:=0 to 9 do
If NT(a[k]*10+cs) then
Begin
kb:=kb+1;
b[kb]:=a[k]*10+cs;
End;
dem:=kb;
For k:=1 to dem do
a[k]:=b[k];
End;
For k:=1 to dem do
Write(a[k]:10);
Writeln;
Writeln('Co tat ca ',dem,' so sieu nguyen to co ',n,' chu so.');
Readln;
END. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Ả Ậ Ả Ề
II_1) M NG 1_CHI U. L P TRÌNH GI I CÁC BÀI TOÁN SAU: ấ (Bài khó: *; Bài r t khó: **) ố ọ ừ ủ ố ự bàn phím vào dãy n s t nhiên. Tìm và in lên màn hình các ướ ộ
ố 1 Cho tr
ố
s nguyên t c đ dài n c a dãy s . Đ c t
cùng nhau trong dãy. Program songuyento_trongday;
uses crt;
var a:array[1..100] of integer;
i,n,j,dem:integer; Begin
clrscr;
write(‘Nhap do dai cua day so: ‘); readln(n);
writeln(‘Nhap cac phan tu cua mang:’);
for i:=1 to n do
Begin
write(‘a[‘,i,’]=’);readln(A[i]); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 34 End; write(‘Day vua nhap la:’);
For i:=1 to n do write(‘ ‘,a[i]);
writeln;
writeln(‘= = = = = = = = = = = = = = = = =’);
write(‘Cac so nguyen to co trong mang la:’);
For i:=1 to n do
Begin
dem:=0;
for j:=2 to a[i]1 do
Begin
If a[i] mod j=0 then dem:=dem+1;
End;
If dem=0 then write(‘ ‘,a[i]);
End;
readln;
End. ố ọ ừ ố 2 Cho tr bàn phím vào dãy n s nguyên. Tìm và in lên màn dãy con ng. ướ ộ
ấ ồ
ạ ẳ ủ
c đ dài n c a dãy s . Đ c t
ố ươ
dài nh t g m toàn s d
Ch ng h n, Vào: 12 4 6 3 21 19 5 7 21 9 2
Ra: 19 5 7 21 Program DayconDuongDainhat;
Uses crt;
Var a:Array[1..1000] of Integer;
n,i,j,k,kmax,id:byte;
Begin
clrscr;
{ Randomize;}
write(‘Nhap do dai n (2<=n<=1000) cua day so: ‘); readln(n);
writeln(‘Nhap cac phan tu cua mang:’);
for i:=1 to n do
Begin
write(‘a[‘,i,’]=’);
readln(a[i]);
{a[i]:=Random(100);}
End;
clrscr;
writeln(‘Day vua nhap la:’);
For i:=1 to n do write(‘ ‘,a[i]);
writeln;
writeln(‘= = = = = = = = = = = = = = = = = = = = = = = = = =’);
kmax:=0;
For i:=1 to n do
Begin
j:=i+1; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 35 While ((a[i]>0) and (a[j]>0)) Do
Inc(j);
k:=ji;
if k>kmax then
Begin
kmax:=k;
id:=i;
End;
End;
Writeln(‘Day con gom cac so duong lien tiep dai nhat:’);
For i:=id to id+kmax1 do Write(a[i]:4);
Readln;
End. ướ Ệ ầ 3 Hai bài d Ậ
i đây yêu c u dùng THU T TOÁN PHI Đ QUY: Ề ệ ố ủ ị ứ ứ ể ố a/ In lên màn hình tam giác Đ U Pascal.
b/ In lên màn hình tam giác VUÔNG Pascal.
ả
(Tam giác Pascal là b ng s có hình tam giác ch a các h s c a khai tri n nh th c Newton)
3.a)
Program Tg_vuong_Pascal;
uses crt;
Var a:array[1..16] of byte; i,j:byte; Begin clrscr;
Writeln(‘Tam giac vuong Pascal co 16 dong:’);
Writeln;
For i:=1 to 16 do
Begin
For j:=i Downto 1 Do If (j=i) or (j=1) then a[j]:=1
Else a[j]:=a[j]+a[j1]; For j:=1 to i do
Write(a[j]:4);
Writeln;
End;
Readln
End. 3.b)
Program InTamGiacPascal;
uses crt;
var hs:array[0..12] of integer; i,j:integer; Begin ClrScr;
Write(‘Tam giac Pascal deu co 13 dong:’);
For i:=0 to 12 do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 36 Begin For j:=i DownTo 0 do
If (j=i) or (j=0) then hs[j]:=1
Else hs[j]:=hs[j]+hs[j1];
Gotoxy((705*i) DIV 2,i+6);
For j:=0 to i do Write(hs[j]:5);
End;
Readln;
End. ấ ả ộ ố ự ễ ằ ể
t c các cách bi u di n m t s t nhiên b ng ố ự *4 (INFORMATIC OLYMPIC MOSCOW 1985). Tìm t
ổ
t ng c a các s t nhiên khác. ụ ễ ể ố ủ
Ví d . Vào: 5
ứ
Ra : Cách th 1: 5=4+1
ứ
Cách th 2: 5=2+3
ứ
Cách th 3: 5=3+1+1
ứ
Cách th 4: 5=2+2+1
ứ
Cách th 5: 5=2+1+1+1
ứ
Cách th 6: 5=1+1+1+1+1+1
S cách bi u di n = 6 Program ptich_thanh_tong;
Uses crt;
Var n,d,l,i,sum:Integer; dem:longint; tt:char;
s,r:array[1..100] of integer;
Begin clrscr;
Repeat
Write(‘ Nhap n:’); Readln(n);
Writeln(‘Cac phuong an bieu dien tong:’); Writeln;
dem:=0;
s[1]:=n; r[1]:=1; d:=1;
While s[1]>1 do
Begin
inc(dem); sum:=0;
If s[d]=1 Then
Begin
sum:=sum+r[d];
Dec(d);
end;
sum:=sum+s[d]; r[d]:=r[d]1; L:=s[d]1;
If r[d]<>0 then Inc(d);
s[d]:=L; r[d]:=sum DIV L; L:=Sum MOD L;
If L<>0 then
Begin
Inc(d); s[d]:=L; r[d]:=1;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 37 Write(‘ Cach thu ‘,dem,’:’,n,’=’);
For i:=1 to d Do
For L:=1 to r[i] Do Write(s[i],’+’);
Writeln; Writeln;
End;
Writeln(#32:5,’So cach bieu dien=’,dem); Writeln;
Write(‘Continue (y/n) ?, Go y>de tiep; go n hoac N de thoat:’);
Readln(tt); Writeln; Writeln;
Until tt IN [‘n’,’N’];
End. Ậ Ử Ộ *5 INFORMATIC OLYMPIC MOSCOW 1987 (T P N A B IHALF MULTI SET).
ư ậ ị nhiên đ nh nghĩa nh sau: ầ ử ầ ủ ậ T p A các s t
a 1 (cid:0)
b K (cid:0) A. Tìm và in lên màn n ph n t A và 3K+1 (cid:0) đ u tiên c a t p A ậ ầ ử ầ ủ ậ ạ ẳ ớ ố ự
A
A thì 2K+1 (cid:0)
ọ
ị
(n<1000). T p đ nh nghĩa trên đây g i là HALF MULTI SET.
đ u tiên c a t p A là:
Ch ng h n v i n=9 thì các ph n t
1 3 4 7 9 10 13 15 19 Program half_multi_Set;
Uses Crt;
Const max=100;
Var i,k2,k3,a2,a3,n: Integer; a:array[1..100] of integer;
Begin Clrscr;
Write(‘Nhap n:’); Readln(n);
k2:=1; k3:=1; a[1]:=1;
Write(1);
For i:=2 to n do
Begin
a2:=2*a[k2]+1; a3:=3*a[k3]+1;
If a2<=a3 Then
Begin
a[i]:=a2;
k2:=k2+1;
End;
If a3<=a2 then
Begin
a[i]:=a3;
k3:=k3+1;
End;
Write(a[i]:4);
End;
Readln;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 38 ố ộ c dãy s nguyên có đ dài ề ấ ằ ổ **6 Cho tr
ọ ừ
n (n đ c t ướ
bàn phím vào). Tìm cách chia dãy y thành nhi u dãy con có t ng b ng nhau. { Go ESC de ve Program}
Uses Crt;
const mn=60;
Var a,c:Array[1..mn] of word; Procedure View(n:word);
Var i: word;
Begin
for i:=1 to n do
Write(a[i]:4);
Writeln;
End; Function Min(a,b: word):word;
Begin
if a
Procedure RandomGene(t, n:word); {Tao sinh data ngau nhien}
var i,s: word;
Begin
s:=t;
For i:=1 to n do
Begin
a[i]:=min(Random(t),s);
s:=sa[i];
if s=0 then s:=t;
End;
End; Function Check(tt, n, k: word):boolean;
Var t,s,i,m:word;
Begin
check:=False;
t:=tt Div k ;
If t*k <> tt then exit;
m:=1;
c[m]:=0;
s:=0;
For i:=1 to n do
Begin
s:=s+a[i];
If s>t then exit; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 39 If s=t then
Begin
m:=m+1;c[m]:=i;
s:=0;
End;
End;
c[m]:=n;
check:=True;
End; Procedure Result(tt, n, k:word);
Var s,i:word;
Begin
Writeln;
Write(‘Day a[1..’,n,’] co the chia thanh ‘,k,’ doan’);
Writeln(‘ co tong nhu nhau la=’,tt Div k);
s:=0;
If k=1 Then
Begin
For i:=1 to n do
s:=s+a[i];
Write(‘a[1..’,n,’]=’,s);
Exit;
End;
Writeln;
For i:=1 to k do
Begin
Writeln(‘Doan thu ‘,i,’: a[‘,c[i]+1,’..’,c[i+1],’]’);
If (i Mod 15 =0) then
If readkey=#27 then Exit;
End;
End; Procedure Partion(n:word);
Var tt, k:word;
Begin
tt:=0;
For k:=1 to n do tt:=tt+a[k];
For k:=n Downto 1 do
If check (tt,n,k) then
Begin
Result(tt,n,k);
Exit;
End;
End; Procedure Test; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 40 var n:word;
Begin
randomize;
Repeat
clrscr;
n:=random(mn)+1;
RandomGene(n Div (random(5)+1),n);
View(n);
Partion(n);
Until readkey=#27;
End; ế ở ấ ứ ặ ạ ấ ứ
làng i đ t tr m c p c u, thì xe c p c u đi ọ ầ ờ ấ ứ ố ệ ừ ớ ẽ ấ ề ờ ấ ờ i làng xa nh t (v th i gian) s m t th i gian ầ ử ấ ả ướ 7 IFORMATIC OLYMPIC MOSCOW 1986. Có k làng. N u
ệ
ế
đ n làng j theo tín hi u g i c n th i gian:
A[i,i] + A[i,j] ( 1<=i, j<=k, i = j )
ể ặ ạ
Tìm s hi u làng i đ đ t tr m c p c u sao cho t
đó đi t
ít nh t.ấ
ả
M ng A[1..k,1..k] cho tr c, trong đó t t c ph n t ể
A[i,j]>0 và có th A[i,j] <>A[j,i]. Uses Crt;
Const kk=20;
Var i,j,k,i1:integer;
s, t: real;
a:Array[1..kk,1..kk] of real; Begin clrscr;
Write(‘Nhap so lang:’); Readln(k);
For i:=1 to k do
For j:=1 to k do
Begin
Write(‘a[‘,i,’,’,j,’]=’); Readln(a[i,j]);
End;
For i:=1 to k do
Begin
s:=0;
for j:=1 to k do
If(i<>j) And (s
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 41 End. ộ ố ậ ổ ị 8 Đ i m t s th p phân sang nh phân dài 8 bits. Program Thap_nhi_phan;
Uses crt;
Const ktuhe2:Array[0..1] Of Char='01';
Var so:Word;i:Byte; sohe2:string[8];hd:Char;
Begin ClrScr;
Repeat
Write('Vao mot so nguyen kieu Word:');Readln(so);
sohe2[0]:=#8;
For i:=8 Downto 0 Do
If (so AND (1 SHL i))=(1 SHL i) Then
sohe2[8i]:=ktuhe2[1]
Else
sohe2[8i]:=ktuhe2[0];
Delete(sohe2,9,80);
Writeln(so,' O he THAP PHAN, doi sang he 2 la :',sohe2);
Write('Ban co thu tiep khong (c/k)?');Readln(hd);
Until (hd='k') OR (hd='K');
End. ƯỢ Ủ ộ ố ụ ậ ổ ị C C A BÀI 8) Đ i m t s nh phân sang th p phân. Ví d Vào là 1101 thì Ra là 9 (BÀI TOÁN NG
13
Program Nhi_Thapphan;
uses crt;
var A: array [1..100] of integer;
n: string;
i, j, loi, S, b, len: integer; dap:char; Begin clrscr;
Repeat
Write('Nhap n o he nhi phan: '); Readln(n);
len:= length(n); s:=0;
for i:=1 to len do
begin
val(n[i], A[i], loi);
if A[i]=1 then
begin
b:=1;
for j:=1 to leni do b:=b*2;
s:=S+b;
end;
end;
Write('Doi sang thap phan la: ',S);
Writeln; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 42 Write('More(y/n)?'); Readln(dap);
Until dap In['n', 'N'];
End. ấ ữ ầ ử ố ộ thu c dãy s nguyên đã cho. ỏ
ả
10 Tìm kho ng cách nh nh t gi a các ph n t
Program Khoangcachmin;
uses crt;
var a:array[2..1000] of integer;
i,n,dmin:integer; hoi:byte; Ậ Ả Ề III_2) M NG HAI CHI U (TÊN KHÁC: MA TR N) Begin clrscr;
Repeat
Randomize;
write('Nhap do dai n (n<=1000) cua day so: '); readln(n);
writeln('Nhap cac phan tu cua mang:');
For i:=2 to n do
a[i]:=Random(100);
clrscr;
writeln('Day vua nhap la:');
For i:=2 to n do write(' ',a[i]);
writeln;
writeln('= = = = = = = = = = = = = = = = = = = = = = = = = =');
dmin:=abs(a[3]a[2]);
For i:=4 to n do
If (dmin>abs(a[i]a[i1])) then dmin:=abs(a[i]a[i1]);
Writeln('Khoang cach nho nhat giua cac phan tu trong day la:',dmin);
Write('Another Test (1/0)?. Continue>Press 1; Stop>Press 0:');
Writeln;
Readln(hoi);
Until hoi=0;
End. Ộ Ớ Ủ Ề Ạ Ặ Ậ Ề Ị (CH Đ NÀY KHÁ NHI U BÀI T P THÚ V HO C ÍT QUEN THU C V I CÁC B N) ề ạ ọ Các b n h c sinh hãy chú ý đi u sau: ế
Khuy n cáo: Ủ ạ ọ Ố
Ậ ễ ớ Ở Ế ạ Ế
THU T TOÁN TÌM KI M HAY TÍNH TOÁN (nh ng thu t toán này quá d v i các b n)
ế
Ậ ở ậ Ệ THU T TOÁN DUY T THEO CÁC INDEX (CÁC CH S ) C A MA TR N. B i v y khuy n
Ệ ố ớ
ữ
ậ
Ỉ Ố Ủ
ở Ớ Ỹ Ẫ ạ Ừ
CÁI KHÓ C T LÕI C A CÁC BÀI TOÁN T 7 Đ N 11 đ i v i các b n h c sinh hay sinh viên
KHÔNG
Ở
MÀ
cáo các b n nên XEM+NG M+NH K CÁCH DUY T INDEX Ậ
các bài toán đó. ậ ướ ậ ướ i & ma tr n tam giác trên. ộ ườ *11 Cho tr
c
d Xem các ph n t ấ
c ma tr n vuông c p n. L p trình làm
ậ
In lên màn ma tr n tam giác d
ầ ử
thu c đ ậ
ng chéo chính.
8 h 54 m 28/7/2017 Th y Tr n Thông Qu ầ ử ở e Xem các ph n t 43
PHÍA ườ TRÊN đ ng chéo chính.
ầ ử ở Ổ ườ f T NG các ph n t PHÍA TRÊN đ ng chéo chính. Program Bt_7;
Uses crt;
Var i,j,m,n,d,s,s1,s2,t:integer;
a:array[1..50,1..50] of integer; Begin clrscr;
Randomize;
Write(‘Nhap so hang cot n cua ma tran vuong:’); Readln(n);
for i:=1 to n do
Begin
for j:=1 to n do a[i,j]:=Random(10);
End; Writeln(‘Ma tran vua nhap:’);
For i:=1 to n do
Begin
For j:=1 to n do
Write(a[i,j]:3);
Writeln;
End; Writeln(‘An ENTER de tiep..’); Readln;
clrscr; Writeln(‘* * * * * * * * * * * * * * * * *’); Writeln(‘Ma tran tam giac duoi:’);
For i:=1 to n do
Begin
For j:=1 to i do
write(a[i,j]:3);
writeln;
End; Writeln(‘* * * * * * * * * * * * * * * * *’);
Writeln(‘An ENTER de tiep..’); Readln;
clrscr; Writeln(‘Ma tran tam giac tren:’);
For i:=1 to n do
Begin
For j:=i to n do
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 44 Gotoxy(4*(j+1),3+i);
Write(a[i,j],’ ‘);
end;
Writeln;
end; Writeln(‘An ENTER de tiep..’); Readln;
clrscr;
Writeln(‘ Cac phan tu thuoc duong cheo chinh:’);
for i:=1 to n do
Write(a[i,i]:4);
writeln; Writeln(‘An ENTER de tiep..’); Readln;
clrscr;
Writeln(‘* * * * * * * * * * * * * * * * *’); Writeln(‘ Cac phan tu nam PHIA tren duong cheo chinh:’);
for i:=1 to n do
Begin
for j:=i+1 to n do
Begin
Gotoxy(4*(j+1),3+i);
write(a[i,j],’ ‘);
writeln;
End;
End;
Writeln(‘An ENTER de tiep..’); Readln;
clrscr; Writeln(‘* * * * * * * * * * * * * * * * *’);
t:=0;
for i:=1 to n do
Begin
For j:=i+1 to n do
t:=t+a[i,j];
End;
Write(‘Tong cac phan tu o PHIA tren duong cheo chinh:’,t);
Readln
End. ấ ướ ệ ng chéo chính. ậ
ậ
ầ ử
ầ ử ng chéo chính SÁT NGAY PHÍA TRÊN. thu c đ
thu c đ
ầ ử ườ **12 Cho tr
a/ In lên màn ma tr n tam giác d
ộ ườ
b/ Xem các ph n t
ộ ườ
c/ Xem các ph n t
ổ
d/ Tính t ng các ph n t ậ
c ma tr n vuông c p n. L p trình làm các vi c sau:
ướ ườ
i đ
ng chéo chính.
ườ
ng // đ
ộ ườ
ng // đ thu c đ ng chéo chính SÁT NGAY PHÍA TRÊN. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 45 ầ ử e/ Xem các ph n t ộ
thu c I. ng // đ ng chéo chính SÁT NGAY PHÍA D
ườ ộ ườ ầ ử ƯỚ ng // đ ƯỚ
ng chéo chính SÁT NGAY PHÍA D I. thu c đ ườ
ườ
đ
ổ
f/ Tính t ng các ph n t
TEST. Vào:
49 20 25 12
5 37 19 19
5 43 25 15
3 13 48 8 ậ ướ i: Ra:
a/ Ma tr n tam giác d
49
5 37
5 43 25
3 13 48 8 ầ ử
ầ ử ộ ườ
ộ ườ thu c đ
thu c đ
ầ ử ng chéo chính: 49 37 25 8
ng // đ
ộ ườ ườ ng chéo chính sát ngay phía trên: 20 19 15
ng chéo chính SÁT NGAY PHÍA TRÊN: ườ
ng // đ thu c đ ầ ử ộ ườ ườ ƯỚ thu c đ ng // đ ng chéo chính SÁT NGAY PHÍA D I: ổ ầ ử ộ ườ ườ ƯỚ thu c đ ng // đ ng chéo chính SÁT NGAY PHÍA D I: b/ Các ph n t
c/ Các ph n t
ổ
d/ T ng các ph n t
54
e/ Các ph n t
5 43 48
f/ T ng các ph n t
96 Program Bt_8;
Uses crt;
Var i,j,n,d,s,s1,s2,ln:integer;
a:array[1..20,1..20] of integer; Begin clrscr;
Randomize;
s:=0;
Write('Nhap kich co ma tran vuong n='); Readln(n);
for i:=1 to n do
Begin
for j:=1 to n do a[i,j]:=Random(50);
End;
Writeln('Ma tra vua nhap:');
For i:=1 to n do
Begin
For j:=1 to n do
Write(a[i,j]:4);
Writeln;
End;
{ * * * * * * * * * * * * * * * *} 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 46 Writeln('Ma tran tam giac duoi:'); For i:=1 to n do
Begin
For j:=1 to i do
write(a[i,j]:4);
writeln;
End;
Writeln('* * * * * * * * * * * * * * * * *'); Writeln(' Cac phan tu thuoc duong cheo chinh:');
for i:=1 to n do Write(a[i,i]:4); writeln; Writeln('* * * * * * * * * * * * * * * * *'); s1:=0;
Writeln(' Cac phan tu thuoc duong // sat ngay PHIA TREN duong cheo chinh:');
For i:=1 to n1 do
Write(#32:2,a[i,i+1]); Writeln; Write('Tong cac phan tu thuoc duong // sat ngay PHIA TREN duong cheo chinh:');
For i:=1 to n1 do
s1:=s1+a[i,i+1];
Write(s1:4); Writeln;
Writeln('* * * * * * * * * * * * * * * * *');
s2:=0;
Writeln(' Cac phan tu nam tren duong // sat ngay PHIA DUOI duong cheo chinh:');
For i:=2 to n do
Write(#32:2,a[i,i1]); Writeln;
Write('Tong cac phan tu nam tren duong // sat ngay PHIA DUOI duong cheo chinh:');
For i:=2 to n do
s2:=s2+a[i,i1];
Write(s2:4); Writeln;
Readln;
End. **13 Cho ma tr n vuông c p n (n đ c t bàn phím vào). Tìm: ố ẻ ớ a/ S l ậ
l n nh t D ọ ộ ủ ấ ọ ừ
ấ
Ụ
ấ ƯỚ ƯỜ
NG CHÉO PH .
I Đ
ỉ
ơ ố ẻ ớ
ậ ớ
ộ ố
l n nh t y+ch ra t a đ c a nó.
b/ Tìm ít nh t m t s trong ma tr n l n h n s l
ấ ơ ố ẻ ớ ố ượ ấ ố ấ ấ
l n nh t đã tìm th y trên đây. ố ớ
ng các s l n h n s l c/ Th ng kê s l
TEST. Vào: 10 12 47 7
5 45 11 39
19 33 29 20
16 19 20 23 ụ
ở ộ ố Ẻ
Ra: + S L Max d
ồ ạ
i ph n t ướ ườ
ng chéo ph =39
i đ
ơ ố
ầ ử ớ
l n h n s max + T n t hàng 1, c t 3 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 47 ầ ử ở ơ i ph n t
ộ
ầ ử ớ ố l n h n max là: 2 ồ ạ
+ T n t
ơ ố
ớ
l n h n s max
hàng 2, c t 2
+ S ph n t
Program Bt_9;
Uses Crt;
Type mt=array[1..50,1..50] of integer;
Var a:mt; n,i,j,max:byte; Procedure Input(Var a:mt; n:byte);
Var i,j:byte;
Begin
randomize;
For i:=1 to n do
For j:=1 to n do a[i,j]:=random(50);
{ Begin
Write('a[',i,',',j,']=');
readln(a[i,j]);
End; }
End; Procedure View(a:mt; n:byte);
Var i,j:byte;
Begin
For i:=1 to n do
Begin
For j:=1 to n do
Write(a[i,j]:4);
Writeln;
End;
End; Function Timmax(a:mt; n:byte):byte;
Var i,j,m:Byte;
Begin
max:=0;
For i:=1 to n do
For j:=1 to n do
If ((i+j)>(n+1)) And ((a[i,j] Mod 2)=1) then max:=a[i,j];
If max=0 then
Writeln('Khong co so le nao lon nhat duoi duong cheo phu.')
Else
Begin
For i:=1 to n do
For j:=1 to n do
If ((i+j)>(n+1)) And ((a[i,j] Mod 2)=1) And (max
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 48 End;
Timmax:=max;
End; Procedure Maxindex(a:mt; n,max:byte);
Var i,j,dem:byte;
Begin
dem:=0;
For i:=1 to n do
For j:=1 to n do
if ((i+j)<=n) And (a[i,j]>max) then
Begin
Inc(dem);
Writeln('Ton tai phan tu lon hon max o hang ',i,' cot ',j);
End;
If dem=0 Then write('Khong co phan tu nao > max.')
Else Write('So phan tu lon hon max la:',dem);
End; Begin clrscr;
Write('Nhap kich co ma tran VUONG:'); Readln(n);
Input(a,n);
View(a,n);
max:=Timmax(a,n);
Maxindex(a,n,max);
Readln;
End. ọ ừ bàn phím vào). Tìm: i đ ầ ử ỏ
ậ ầ ử ằ ớ ườ ụ ồ ng song song v i đ ng chéo ph , r i tính ườ ổ ng chéo chính.
ườ
n m trên đ
ứ ể ậ
ấ
*14Cho ma tr n vuông c p n (n đ c t
ấ ướ ườ
nh nh t d
+ Ph n t
ọ ộ ủ
+ Nh p vào t a đ c a ph n t
ầ ử
t ng các ph n t trên đ ng // này và ch a đi m đó. ế ả ng chéo chính=16 ộ ượ ổ ầ ử ườ ứ ầ c t ng các ph n t trên đ ng ch a ph n TEST. Dùng matrix trên đây, ta có k t qu sau:
ướ ườ
i đ
+ Min d
ọ ộ
+ Đ c vào t a đ hàng 1, c t 2 ta đ
ớ ụ ọ
ử ấ
y và // v i chéo ph là 17 (=5+12) t Program Bt_10;
Uses Crt;
Type mt=array[1..50,1..50] of byte;
Var a:mt; n,i,j,k,l,row,col,ans:byte;
min,s:integer; Procedure Input(Var matrix:mt; ten:char; soh,soc:byte);
Var i,j:byte;
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 49 Randomize;
For i:=1 to soh do
For j:=1 to soc do {matrix[i,j]:=Random(10);}
Begin
Write(ten,'[',i,',',j,']='); Readln(a[i,j]); End;
End; Procedure View(matrix:mt; soh,soc:byte);
Var i,j:byte;
Begin
For i:=1 to soh do
Begin
For j:=1 to soc do
Write(matrix[i,j]:3);
Writeln;
End;
End; Begin Clrscr;
Repeat
Write('Nhap kich co n cua ma tran vuong:'); Readln(n);
Input(a,'a',n,n);
Writeln('Matrix vua nhap:');
Writeln;
View(a,n,n);
Writeln;
min:=a[2,1];
row:=2; col:=1;
For i:=1 to n do
For j:=1 to n do
If(i>j) And (min>a[i,j]) Then
Begin
Min:=a[i,j];
row:=i; col:=j;
End;
Writeln('Phan tu min o duoi duong cheo chinh:',min);
Write('Nhap chi so hang, cot can xu ly:'); Readln(k,l);
s:=0;
For i:=1 to n do
For j:=1 to n do
If (i+j=k+l) then S:=S+a[i,j];
Writeln('Tong cac phan tu tren duong // voi duong cheo phu va ');
Write('chua phan tu tren hang ',k,' cot ',l,' la:',S);
Writeln; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 50 Write('Another Test (1/0)? More >
Press 1, Stop > Press 0:');
Readln(Ans);
Until ans=0;
End. ậ ậ ắ ố ư ế ệ ả ạ
*15 L p trình t o ma tr n xo n c. L u k t qu vào t p Xoanoc.txt.
Program Mt_xoan;
Uses Crt;
var a:array[1..150,1..150]of word;
i,j,n,k:word;
f:text; Procedure View;
Begin
For j:=1 to n do
Begin
For i:=1 to n do
Write(f,a[i,j]:6);
Writeln(f);
End;
End; Procedure Datso;
Begin
inc(k);
a[i,j]:=k;
End; Begin clrscr;
Write('Nhap kich co ma tran n='); Readln(n);
Assign(f,'Xoanoc.txt'); Rewrite(f);
j:=1;
while k 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 51 ậ c ma tr n vuông c p n. ậ ậ ấ ả ề ộ t c các c t, hàng đ u là hoán ướ
ể
ố ọ ậ ấ
*16 Cho tr
ả
ậ
L p trình ki m tra xem nó có ph i là ma tr n La Tinh không. Ma tr n mà t
ị ủ
v c a n s g i là ma tr n LaTinh. { Test1: Test2: 1 2 3 8 7 9
2 3 1 5 4 6
3 1 2 2 3 1 } Program Check_Mtran_LaTinh;
Uses Crt;
type a=Array[1..30,1..30] of Integer;
Var mt:a; i,j,n,d:Integer; Function ktrahang(i:integer):Boolean;
Var j,k:integer; check:boolean;
Begin
ktrahang:=false;
For k:=1 to n do
Begin
check:=false;
For j:=1 to n do
if k=mt[i,j] then check:=true;
If Not check then exit;
End;
ktrahang:=true;
End; Function ktracot(j:integer):boolean; var i,k:integer; check:boolean;
Begin
ktracot:=false;
For k:=1 to n do
Begin
check:=false;
For i:=1 to n do
If k=mt[i,j] then check:=true;
If Not check then Exit;
End;
ktracot:=true;
End; Begin Clrscr;
Write('Nhap kich co ma tran vuong n='); Readln(n);
For i:=1 to n Do
For j:=1 to n Do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 52 Begin
write('mt[',i,',',j,']=');readln(mt[i,j]);
End;
writeln('Ma tran vua nhap:');
For i:=1 to n do
Begin
For j:= 1 to n do
write(mt[i,j]:3);
writeln;
End;
writeln;
writeln('= = = = = = = = = = = = = = = = =');
d:=0;
For i:=1 to n Do
If (Not ktrahang(i)) Or (Not ktracot(i)) then
inc(d);
If d=0 then Write('La ma tran Latinh.')
Else Write('khong la ma tran Latinh.');
Readln;
End. ướ ố ứ ể ậ ả ậ ấ ậ 17 Cho tr c ma tr n vuông c p n. . L p trình ki m tra xem nó có ph i là ma tr n đ i x ng không. ể ma tr n chuy n v ằ
A b ng chính
ố ứ ộ ậ
ườ ầ ử ượ ủ
ị c a nó.
ế
ậ
ng chéo. Do v y, n u các ph n t đ c ố ứ là ma tr n vuông
ậ
ớ ậ
M tộ ma tr n đ i x ng
ỗ
ầ ử ủ
M i ph n t
ế ướ ạ A=a[i,j] thì v i m i
i d ng
t d
vi ậ
ố ứ
c a m t ma tr n đ i x ng thì đ i x ng qua đ
ọ i, j ta có: a[i, j]=a[j,i]. {Test1: 1 2 3 Test2: 9 5 7
2 4 5 3 1 6
3 5 6 8 4 2 }
Program Check_Symetr_ Matrix;
Uses Crt;
Type a=Array[1..30,1..30] of integer;
Var mt:a;i,j,n,d:integer; tt:byte;
Begin clrscr;
Repeat
Write(' Nhap kich thuoc ma tran vuong n:'); Readln(n);
for i:=1 to n do
for j:= 1 to n do
begin
write(' Nhap phan tu mt[',i,',',j,']=');
Readln(mt[i,j]);
end;
Writeln;
writeln('Ma tran vua nhap:');
Writeln;
for i:=1 to n do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 53 begin
for j:= 1 to n do
write(mt[i,j]:3);
writeln;
end;
writeln;
d:=0;
for i:=1 to n do
for j:= 1 to n do
If mt[i,j]<>mt[j,i] Then Inc(d);
If d>0 Then Write('Ma tra vua nhap Khong Doi Xung.')
Else Write('Ma tran vua nhap Doi Xung.');
Writeln;
Write('More (1/0)?. More > Press 1, Stop > Press 0:');
Readln(tt);
Until tt=0;
End. ươ ậ ẻ ậ ổ ọ ỳ ệ
ng (g i khác: ma tr n k di umagic matrix) b c l ộ ằ ằ ổ ỉ ứ ố
ớ ượ ậ
ạ
ố
**18 T o ma ph
. Đó là ma tr n mà t ng các s
ườ
ằ
ng chéo b ng
trên các hàng b ng nhau = t ng các s trên các c t b ng nhau = t ng các s trên hai đ
Ẻ
ậ
ươ
Ở ứ ổ
ng b c L .
nhau . ọ
m c t ng quát, toán h c m i ch ch ng minh đ ổ
ỉ ạ ượ
c: ch t o đ ổ
c ma ph {Nhap xong data nho go ENTER de xem ket qua chay Program} Program Magic_Matrix;
Uses crt, addcrt;
Const lim=11;
Type mt=array[1..lim,1..lim] of integer;
mtktr=array[1..lim,1..lim] of boolean;
Var matr:mt; mtcheck:mtktr; ok:boolean;
n,i,j,k:integer;
ch:char; Procedure chinhtoado(Var i,j:integer; n:integer);
Begin
If i<1 then i:=n;
If i>n then i:=1;
If j<1 then j:=n;
If j>n then j:=1;
End; Procedure datso(var matr:mt; Var mtcheck:mtktr; Var k:integer; i,j:integer);
Begin
matr[i,j]:=k;
mtcheck[i,j]:=false;
Inc(k);
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 54 Procedure DrawTab(matr:mt; n:integer);
Var i,j:integer;
Begin
textbackground(lightred);
clrscr;
textcolor(lightcyan);
For j:=1 to 25 do
Begin
If(j<(13n+1)) Or (j>(13+n+1)) then
For i:=1 to 80 do
Begin
gotoxy(i,j); write('$');
End
Else
For i:=1 to 80 do
If (i<(40(5*n) Div 21)) or (i>(40+(5*n) Div 2+2)) then
Begin gotoxy(i,j); write('$'); End;
End;
FONT(40(5*n) Div 22,13n1,40+(5*n) Div 2+3,13+n+1,14,1);
textcolor(white);
for i:=13n+1 to 13+n1 do
if (i Mod 2)=(13n) Mod 2 then
Begin
for j:=40(5*n) Div 2 to 40+(5*n) div 2+1 do
if j Mod 5=(40(5*n) Div 2) Mod 5 then
Begin
gotoxy(j,i); write('!');
End
Else
Begin
gotoxy(j,i); write('=');
End;
End
Else Begin
for j:=40(5*n) Div 2 to 40+(5*n) Div 2+1 do
if j Mod 5=(40(5*n) Div 2) Mod 5 then
Begin
gotoxy(j,i); write('!');
End;
End;
for j:=40(5*n) Div 2 to 40+(5*n) Div 2+1 do
if j Mod 5=(40(5*n) Div 2) Mod 5 then
Begin
gotoxy(j,13n); write('=');
gotoxy(j,13+n); write('=');
End 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 55 else
Begin
gotoxy(j,13n); write('=');
gotoxy(j,13+n); write('=');
End;
textcolor(yellow);
for i:=1 to n do
for j:=1 to n do
Begin
gotoxy((40(5*n) Div 2+1)+5*(j1),(13n+1)+2*(i1));
write(matr[i,j]:3);
End;
End; Begin {Main}
clrscr;
ch:='t';
While ch In ['t','T'] Do
Begin
Khungkep(20,4,61,16,14);
gotoxy(31,5); write(' HINH VUONG KY AO.');
WINDOW(21,6,60,15);
writeln(#32:7,'');
writeln(#32:5,'Day la bai toan tao hinh vuong va');
writeln(#32:5,' cac con so dat trong no thoa:');
writeln(#32:5,' Tong cac so tren cac hang,');
writeln(#32:5,' tren cac cot va tren duong cheo');
writeln(#32:5,' deu bang nhau. Den nay bai toan');
writeln(#32:5,' chi giai duoc voi cac hinh vuong ' );
writeln(#32:5,' co do dai canh la so le');
writeln;
write('Cho do dai canh:(n=3, 5, 7, 9, 11 ...):');
read(n);
setwin;
If (n Mod 2=0) or (n<3) or (n>lim) then n:=5;
for i:=1 to n do
for j:=1 to n do
mtcheck[i,j]:=true;
i:=1;
j:=n Div 2+1;
k:=1;
Repeat
datso(matr,mtcheck,k,i,j);
i:=i1;
j:=j+1;
chinhtoado(i,j,n);
If mtcheck[i,j]=true then ok:=true 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 56 Else Begin
j:=j1;
i:=i+1;
chinhtoado(i,j,n);
Inc(i);
if mtcheck[i,j]=true then ok:=true
else ok:=false;
End;
Until ok=false;
Drawtab(matr,n);
gotoxy(18, 25);
write('Go phom bat ky de thoat hay t, T de tiep tuc!');
Repeat Until Keypressed;
ch:=Readkey;
clrscr;
end;
End. Ẻ ể ậ ấ ộ ươ **19 Ki m tra xem m t ma tr n vuông c p n ( n L ) có là ma ph ng không? { Test 1: 3 7 1 Test 2: 8 1 6
3 5 7 5 2 9
8 4 5 4 9 2 } Program Maphuong_Check;
Uses Crt;
Type mt=Array[1..30,1..30] of Integer;
var a:mt; i,j,n,s,s1,s2:integer; Function shang(i:integer):integer;
var j,s:integer;
Begin
S:=0;
For j:=1 to n do
s:=s+a[i,j];
shang:=s;
End; Function Scot(j:integer):integer;
Var i,s:Integer; Begin
s:=0;
For i:=1 to n do
s:=s+a[i,j];
scot:=s;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 57 Begin clrscr;
write(' Nhap kich thuoc n cua ma tran vuong:'); Readln(n);
for i:=1 to n do
for j:= 1 to n do
begin
write(' Nhap phan tu a[',i,',',j,']=');
Readln(a[i,j]);
end;
clrscr; writeln('Ma tran vua nhap:');
for i:=1 to n do
begin
for j:= 1 to n do
write(a[i,j]:3);
writeln;
end; s:=shang(1);
s1:=0; s2:=0;
For i:=1 to n Do
Begin
If (shang(i)<>s) Or (scot(i)<>s) Then
Begin
Write('Ma tra vua nhap khong phai ma phuong');
Readln;
Exit;
End;
s1:=s1+a[i,i];
s2:=s2+a[i,n+1i];
End;
If (s<>s1) Or (s<>s2) Then
Write('Ma tra vua nhap khong phai ma phuong')
Else Write('Ma tran vua nhap la ma phuong.');
Readln
End. ầ ử ạ ố ổ ộ ư **20 Cho dãy các s nguyên có đ dài N. Tìm cách chia dãy đã cho thành các đo n có t ng các ph n t
nh nhau. Thoat} {Go ESC (cid:0)
Uses Crt;
const mn=60;
Var a,c:Array[1..mn] of word; Procedure View(n:word);
Var i: word; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 58 Begin
for i:=1 to n do
Write(a[i]:4);
Writeln;
End; Function Min(a,b: word):word;
Begin
if a
Procedure RandomGene(t, n:word); {Tao sinh data ngau nhien}
var i,s: word;
Begin
s:=t;
For i:=1 to n do
Begin
a[i]:=min(Random(t),s);
s:=sa[i];
if s=0 then s:=t;
End;
End; Function Check(tt, n, k: word):boolean;
Var t,s,i,m:word;
Begin
check:=False;
t:=tt Div k ;
If t*k <> tt then exit;
m:=1;
c[m]:=0;
s:=0;
For i:=1 to n do
Begin
s:=s+a[i];
If s>t then exit;
If s=t then
Begin
m:=m+1;c[m]:=i;
s:=0;
End;
End;
c[m]:=n;
check:=True;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 59 Procedure Result(tt, n, k:word);
Var s,i:word;
Begin
Writeln;
Write('Day a[1..',n,'] co the chia thanh ',k,' doan');
Writeln(' co tong nhu nhau la=',tt Div k);
s:=0;
If k=1 Then
Begin
For i:=1 to n do
s:=s+a[i];
Write('a[1..',n,']=',s);
Exit;
End;
Writeln;
For i:=1 to k do
Begin
Writeln('Doan thu ',i,': a[',c[i]+1,'..',c[i+1],']');
If (i Mod 15 =0) then
If Readkey=#27 then Exit;
End;
End; Procedure Partion(n:word);
Var tt, k:word;
Begin
tt:=0;
For k:=1 to n do tt:=tt+a[k];
For k:=n Downto 1 do
If check (tt,n,k) then
Begin
Result(tt,n,k);
Exit;
End;
End; Procedure Test;
var n:word;
Begin
randomize;
Repeat
clrscr;
n:=random(mn)+1;
RandomGene(n Div (random(5)+1),n);
View(n);
Partion(n);
Until readkey=#27; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 60 End; Begin Clrscr;
Test;
End. Ọ Ố Ở Ỗ Ỗ Ộ ướ ỗ ố ở ỗ ậ ấ ọ c ma tr n vuông c p n. Hãy ch n m i s m i hàng ỗ ộ ấ ổ ớ M I HÀNG M I C T) Cho tr
21(CH N S
ủ
(khác nhau), m i c t (khac nhau) sao cho t ng c a chúng l n nh t. { Test1: Test2: Test3:
3 4 4
7 9 6 4 3 4 5 241 164 180 20
3 5 8 6 7 8 9 162 81 102 96
8 6 9 1 9 7 4 169 197 80 153
1 3 5 7 11 26 214 223 }
Uses Crt;
Var a:Array[1..20, 1..20] of word;
b:Array[1..20] of Boolean;
x,ng:Array[1..20] of Byte;
r,n,i,dem:Byte;
max,sum:integer;
fi,fo:Text; Procedure Doc;
Var i,j:word;
Begin
Assign(fi,'mang.in'); Reset(fi);
Readln(fi,n);
For i:=1 to n do
For j:=1 to n do
read(fi,a[i,j]);
Close(fi);
End; Procedure Ghi;
Var i,j:word;
Begin
Assign(fo,'mang.ou'); Rewrite(fo);
For i:=1 to n do
Begin
For j:=1 to n do
Write(fo,a[i,j]:4);
Writeln(fo);
End;
End; Procedure Xuly; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 61 Var i: Word;
Begin
If sum>max Then
Begin
max:=sum;
ng:=x;
End;
End; Procedure Xuat;
var i:Word;
Begin
Writeln(fo,' Tong max cua cac phan tu da chon=',max);
Writeln(fo,'Va cac phan tu ay la:');
For i:=1 to n do
Write(fo,a[i,ng[i]]:4,'(',i,',',ng[i],')');
End; Procedure Chon(i:word);
Var j:Word;
Begin
For j:=1 to n do
If b[j] Then
Begin
x[i]:=j;
sum:=sum+a[i,j];
b[j]:=false;
if i=n Then xuly else chon(i+1);
b[j]:=true;
sum:=suma[i,j];
End;
End; Begin clrscr;
Doc;
Ghi;
max:=0; sum:=0;
For i:=1 to n Do
b[i]:=true;
chon(1);
Xuat;
Close(fo);
Writeln('Done! Go ENTER > ve Program; Go F3 > Go MANG.OU: Xem kqua.');
Readln;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 62 ộ ự ữ c a xâu có ứ
ữ ấ ừ ủ
Ấ Ẩ
ơ ề ướ
ừ
(Word). Gi a các t
c m t xâu (dài < 256 ký t ) ch a các t
ỉ Ữ Ạ Ộ
ừ
ự ố
, ch GI
tr ng). Hãy kh các d u cách gi a các t L I M T D U ọ ư ậ ử
ẩ ượ ế ở ấ ộ ứ ấ c k t thúc b i d u cách SPACE, 1/(CHU N HÓA XÂU). Cho tr
ộ ấ
nhi u h n m t d u cách (ký t
ữ
CÁCH gi a chúng. Xâu nh v y g i là xâu chu n.
ừ
ộ
(T là m t xâu con không ch a d u cách thu c xâu đã cho mà nó đ
ặ ấ
ho c d u TAB.)
CODE.
ses crt;
var i:Byte; s:string;
Begin Clrscr;
Write('Nhap vao xau s co vai dau trong o giua cac tu:'); Readln(s);
While s=#32 do Delete(s,1,1);
While s[length(s)]=#32 do
Delete(s,length(s),1);
i:=1;
Repeat
If (s[i]=#32) and (s[i+1]=#32) then Delete(s,i,1)
Else Inc(i);
Until i>Length(s); {da xet het cac pt cua xau}
Write('Xau da khu trong ồ ướ ừ ầ ủ ỗ ừ ữ c m t xâu g m các t mà ch cái đ u c a m i t ữ
là ch ườ ỗ ừ ự ầ ủ Ủ Ừ
đ u c a m i t Ế
ử
ng. Hãy s a các ký t ộ
ữ
thành ch HOA. Ự Ầ
2/(VI T HOA KÝ T Đ U C A T ) Cho tr
th
Vào: ton nu nguyet anh Ra: Ton Nu Nguyet Anh
CODE.
Uses Crt;
Const chuthg =['a'..'z']; {Khai bao hang xau}
Var xau:string; i,d:Byte;
Begin Clrscr;
Write(' Nhap xau:'); Readln(xau);
d:=length(xau);
If xau[1] In chuthg Then xau[1]:=Upcase(xau[1]);
For i:=2 to d do
If (xau[i1]=#32) and (xau[i] In chuthg) Then
xau[i]:=Upcase(xau[i]);
Write('Chu cai dau moi tu sua thanh chu hoa:',xau);
Readln; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 63 End. ướ ủ ộ Ủ c hai xâu s1 và s2. Tính đ dài max c a xâu con Ộ
3/ (Đ DÀI MAX C A XÂU CON CHUNG). Cho tr
chung.
Vào: s1=xabcxxabcdxd; s2=aybcyabcdydy
Ra do dai max doan chung 2 xau=4 Uses Crt;
Var s1, s2:string;
Function lonnhat(a,b:integer):integer;
Begin
If (a>b) then lonnhat:=a
Else lonnhat:=b;
End;
Function DodaiMaxXauchung(Var x,y:string):integer;
Var m,n,i,j,v,t,kmax: integer;
a:array[1..255] of integer;
Begin
m:=length(x); n:=length(y);
kmax:=0;
Fillchar(a,sizeof(a),0);
For i:=1 to m do
Begin
v:=0;
For j:=1 to n do
Begin
t:=a[j];
If x[i]=y[j] then a[j]:=v+1
Else a[j]:=0;
kmax:=lonnhat(kmax,a[j]);
v:=t;
End;
End;
DodaiMaxXauchung:=kmax;
End; Begin clrscr;
Write('xau s1='); Readln(s1);
Write('Xau s2='); Readln(s2);
Write('Do dai max cua doan chung thuoc 2 xau=',DodaiMaxXauchung(s1,s2));
Readln;
End. Ầ Ữ Ủ Ấ Ả Ạ
Ị Ặ
Ế Ệ (cid:0) ề ấ ố ỏ ị ệ
ằ ự ạ ồ ớ Ọ Ậ
*4/ (ĐO N L P (Đ U BÀI L Y TRONG “NH NG VIÊN NG C L P TRÌNH” C A JON BENTLEY
Ố
ộ
Ệ
B N D CH TI NG VI T: GIA VI T & MINH TRUNG. NXB TH NG KÊ,11/2002)) Cho xâu s có đ
i < j (cid:0)
ố ớ
dài n. Xác đ nh 2 s i, j th a mãn đi u ki n 1
n và k là s l n nh t sao cho s[i] = s[j], s[i+1] =
s[j+1], . . ., s[i+k1] = s[j+k1]. Hai đo n b ng nhau trong s g m k ký t là s[i..i+k1] và s[j..j+k1] v i i 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 64 ộ ủ ạ ặ
ọ
và k g i là đ dài max c a đo n l p
trong s.
Vào s=xabababayyy Ra i, j, k=2, 4, 5 Uses Crt;
Var i,j,k:integer; Procedure Doanlap(s:string; var imax, jmax, kmax:integer);
Var n,i,j,v,t:integer;
a:array[1..255] of integer;
Begin
n:=length(s); kmax:=0;
FillChar(a,sizeof(a),0);
For i:=1 to n do
Begin
v:=0;
For j:=i+1 to n do
Begin
t:=a[j];
if s[i]=s[j] Then a[j]:=v+1
else a[j]:=0;
If kmax
Begin clrscr;
Doanlap('xabababayyy',i,j,k);
Write('Cac chi so i, j, k cua doan lap:',i:2,j:2,k:2);
Readln;
End. Ể Ủ Ọ ể ứ ớ ế ạ
t d ng khai tri n ng v i xâu thu g n
ố ể ứ ọ
ư ấ ấ ố ể
ồ ữ ế ậ t theo lu t sau: ấ
ệ
ọ ủ
ồ ọ
**5/ (KHAI TRI N C A XÂU G N) Cho xâu thu g n S. Hãy vi
ọ
đó. Trong xâu thu g n có th ch a các d u tr ng nh ng các d u tr ng này xem là vô nghĩa nên chúng
không xu t hi n trong xâu khai tri n.
ể
Xâu thu g n c a xâu khai tri n g m các ch cái HOA vi
Xm: g m m ch cái X; ế ế ạ ầ
ế ầ ụ ữ
ọ
ầ
(s)m: m l n vi
t xâu con g n trong S;
ỏ
m=0 thì b qua đo n c n vi
t;
m=1 thì không c n vi
t m;
Ví d . Vào: (AB3(C2D)2(C5D)0)2A3 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 65 Ủ Ả Ế Ra:
ABBBCCDCCDABBBCCDCCDAAA
B NG DÒ V T C A PROGRAM: ầ ừ ướ
ầ ừ ướ ặ
ặ ế ướ
ế ướ t. L p 2 l n t
t. L p 2 l n t b
b c 3 đ n b
c 1 đ n b c 5
c 6 ế Ả
n c m t GI
I THÍCH
ầ
ế
1 A 1 Vi
t A 1 l n
ầ
ế
t B 2 l n
2 B 2 Vi
ầ
ế
t C 2 l n
3 C 2 Vi
ầ
ế
t D 1 l n
4 D 1 Vi
ự ể ế
đ vi
5 # 2 3 Không có ký t
ự ể ế
đ vi
6 # 2 1 Không có ký t
ầ
t A 3 l n.
7 A 3 Vi CODE.
Uses Crt;
Const max=500;
chuso=['0'..'9']; chucai=['A'..'Z'];
Type mi1=Array[0..max] of integer;
mc1=Array[0..max] of char;
Var M,T,R,st: mi1; {M:so lan lap; T: tu;R: luu; st:Stack}
c:mc1; p:integer; {dinh stack} s:string;
v:integer; {index cua stack}
n: integer; Procedure Incre_Index;
Begin
While (s[v]=#32) do
Inc(v);
End; Function Napso:integer;
var so:integer;
Begin
so:=0;
Incre_Index;
If Not (s[v] in Chuso) then
Begin
Napso:=1;
Exit;
End; While (s[v] In Chuso) do
Begin
so:=so*10+(Ord(s[v])Ord('0'));
Inc(v);
End;
Napso:=so; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 66 End; Procedure GanCnvaMn(ch:char);
Var so:integer;
Begin
Inc(v); so:=Napso;
If so=0 then Exit;
Inc(n);
C[n]:=ch; M[n]:=so;
End; Procedure Chenngoac;
Begin
Inc(v);
Inc(p);
st[p]:=n+1;
End; Procedure RutphantukhoiStack;
var tu, so: integer;
Begin
Inc(v); tu:=st[p];
Dec(p);
so:=Napso;
If (so=0) Then n:=tu1;
If (so<2) Then Exit;
Inc(n);
C[n]:='#'; M[n]:=so; T[n]:=tu; R[n]:=so;
End; Procedure Xulytiep;
Var i,j: integer;
Begin
Writeln('CAC BUOC KHAI TRIEN VA XAU KHAI TRIEN CUA XAU THU GON:');
For i:=1 to n do
Begin
Write(#13#10,i,'. ',C[i],#32,M[i],#32);
If C[i]='#' Then Write(T[i]);
Writeln;
End;
i:=1;
While (i<=n) Do
Begin
If (C[i]='#') Then
Begin
Dec(R[i]);
If (R[i]=0) Then 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 67 Begin
R[i]:=M[i];
Inc(i);
End
Else i:=T[i];
End
Else
Begin
For j:=1 to M[i] Do
Write(C[i]);
Inc(i);
End;
End;
End; Procedure Khaitrien(Var s:string);
Var i:integer;
Begin
s:=s+'#'; v:=1; p:=0;
While (s[v]<>'#') Do
Begin
If(s[v] In Chucai) Then GanCnvaMn(s[v])
Else If (s[v]='(') Then ChenNgoac
Else If (s[v]=')') Then RutphantukhoiStack
Else Inc(v);
End;
Writeln(s,':');
Xulytiep;
End; Begin clrscr;
s:='(AB3(C2D)2(C5D)0)2A3';
Khaitrien(s);
Readln;
End. Ừ ị ừ ủ ừ ộ ố ượ 1 đ n M. Đ dài c a t là s l ng các lo i M là dãy các ch s có giá tr t
ừ ữ ố
ẩ ượ ọ ế
ứ ề ề ế ạ c g i là t chu n n u nó không ch a hai đo n con k li n trong nó ướ ố ấ ả ừ ẩ c s nguyên N, tìm và ghi lên text file TUCHUAN.OU t t c các t ạ
chu n lo i 3 dài N ộ ừ ạ
Ẩ
*6/)(T CHU N) M t t
ữ ố
ừ ạ
ch s trong dãy. T lo i M đ
ố
gi ng nhau.
Cho tr
(1<=N<=40000)
CODE.
Uses Crt;
Const mn=40;mn1=40000;
fo='tuchuan.ou';
Var v:Array[0..mn1] of byte;
n:integer; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 68 f:text; Function Bang(i,k:integer):Boolean;
Var j:integer;
Begin
Bang:=false;
For j:=0 to k1 do
If (v[ij]<>v[ikj]) Then Exit;
Bang:=true;
End; Function Chuan(i:integer):Boolean;
Var k:integer;
Begin
chuan:=false;
For k:=1 to (i DIV 2) do
If Bang(i,k) then Exit;
Chuan:=true;
End; Function Tim(i:integer):Boolean;
Begin
Tim:=true;
While (v[i]<3) do
Begin
Inc(v[i]);
If chuan(i) then Exit;
End;
Tim:=False;
End; Procedure Ketqua(d:integer);
Var i:integer;
Begin
If d=0 then Write(f,'Vo nghiem')
Else
Begin
Write(f,'Ngiem thu ',d,':');
For i:=1 to n Do
Write(f,v[i]);
Writeln(f);
End;
End; Procedure Timtu(len:integer);
Var i:integer;
d:longint; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 69 Begin
If(len<1) Or (len>mn) then Exit;
n:=len;
For i:=1 to n do v[i]:=0;
Assign(f,fo); Rewrite(f);
i:=1;
d:=0;
Repeat
If(i>n) then
Begin
Inc(d);
Ketqua(d);
i:=n;
End;
If (i<1) then
Begin
If d=0 then Ketqua(0);
close(f);
Write('Done.');
Readln;
Exit;
End;
If Tim(i) Then Inc(i)
Else
Begin
v[i]:=0;
Dec(i);
End;
Until False; End; Procedure Test;
Begin
Clrscr;
Timtu(7);
End; Begin {Main}
Test;
End. ủ ữ ị ế ầ ủ ậ ỗ ộ ầ
ủ ế ằ
t r ng không có mã nào là khúc đ u c a mã khác, và đ dài max c a m i mã là 10. L p
ộ ướ ạ c. 7/ (DECODING BINARYCODE) Cho mã nh phân (Binarycode) c a n ch cái đ u tiên trong Alphabet
ti ng Anh. Bi
ả
trình gi
i mã m t đo n cho tr
Vào
5 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 70 0000
0001
0010
0011
110
0000000100010000 Ra
5
0000
0001
0010
0011
110 14 E
16 A
17 B
18 C
19 D CODE.
Uses crt;
Const fi='code.in'; fo='code.ou';
mn=2050;
Var a:Array[0..mn] of char; {mang tao Heap:cay ma} Procedure giaima;
Var i,j,v,n:integer;
ch:char;
f,g:text;
x:string;
Begin
ch:='A';
Assign(f,fi); Reset(f);
Assign(g,fo); Rewrite(g);
Readln(f,n); Writeln(n,#13#10);
Fillchar(a,sizeof(a),0);
For i:=1 to n do
Begin
Readln(f,x); Writeln(x);
v:=1;
For j:=1 to length(x) do
If x[j]='0' Then v:=v*2
Else v:=v*2+1;
a[v]:=ch;
inc(ch); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 71 End;
Writeln(#13#10);
For i:=1 to mn do
If(a[i]<>#0) then Writeln(i,#32,a[i]);
{Decoding}
While Not Eof(f) Do
Begin
Read(f,ch);
If (ch='0') or (ch='1') Then
Begin
v:=2*v;
If ch='1' Then v:=v+1;
If (a[v]<>#0) then
Begin
Write(g,a[v]);
v:=1;
End;
End;
End;
Close(f); close(g);
End; Begin clrscr;
giaima;
Writeln('DONE!');
Readln;
End. ọ ộ ị ọ m t mã Caesar ơ ả ậ ấ ữ ậ
ậ ủ ỗ ế ậ
ệ
ả ượ ộ ể ạ ụ ế
ế ộ ị
ươ ằ
ế ng pháp đ ệ ứ ế ế
ằ C và c th đ n h t. Ph
c thay b ng
ng xuyên trong công vi c. ả ư
ậ ữ
ữ ậ
ể
8/ (CEASAR CODE) Trong m t mã h c,
, còn g i là m t mã d ch chuy n, là m t trong
ậ
ầ
ổ
ộ ạ
nh ng m t mã đ n gi n và c nh t (nên hi n nay h u không dùng). M t mã này là m t d ng c a m t
ộ
ạ
ự
ế ằ
ự
cách nó m t đo n trong
c thay th b ng m t ký t
mã thay th , trong đó m i ký t
trong văn b n đ
ẽ ượ
ọ
ữ
ả
ả
b ng ch cái đ t o thành b n mã. Vĩ d , n u đ d ch là 3 (3 g i là khóa mã),
c thay b ng
A s đ
ử
ị
ượ ặ
ẽ ượ
c đ t tên theo Caesar, v hoàng đ đã s
D, Ă s đ
ườ
ụ
d ng nó th
Ví d :ụ
ả
B n ch cái ch a mã hóa (b n rõ): ABCDEFGHIJKLMNOPQRSTUVWXYZ
ả
B n ch cái m t mã: DEFGHIJKLMNOPQRSTUVWXYZABC ộ ọ ự ứ ượ ậ
ọ ổ
ự ứ
th I trong Alphabet đ ố
th (I + K) MOD 27 v i ở
c mã b i ký t Sau Ceasar, các nhà m t mã h c, t ng quát mã này lên m t chút: ch n K (s nguyên)
ớ
làm khóa mã và ký t
0 <=I<=26. ủ ừ ộ ừ c t khác nhau t ng đôi m t và không t ỗ
nào r ng, ứ ướ ừ ể
ừ
ồ
đi n g m các t
ở
ượ
ả
c mã hóa b i mã Ceasar.
ả ấ ế ả ứ ị Bài toán c a chúng ta là: Cho tr
ộ
ữ
ch a các ch cái hoa. M t văn b n S đ
ể ả
Hãy xác đ nh khóa K đ gi i mã văn b n y (t c là cho bi t b n rõ). 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 72 ư ữ ệ ế ứ ấ ộ ừ ể ừ ủ ừ
c a t đi n (N<=100); N dòng ti p theo ghi các t ố N thu c t
ộ ở ậ ể ả
ụ ả ả ữ
có đ dài <= 20 và ghi trên m t dòng. Dòng cu i cùng ghi văn b n S có không quá 250 ch
ọ
c mã hóa b i mã Ceasar nói trên. L p trình ch n khóa K đ khôi ph c b n rõ sao cho b n rõ đi n. ế ả ầ ị ả D li u vào l u trên text file tên là
ố ừ
CEASAR.IN, dòng th nh t ghi s t
ộ
ỗ ừ
ể
đi n, m i t
ượ
cái đã đ
ề ừ ấ ủ ừ ể
ứ
ch a nhi u t
nh t c a t
ư
ữ ệ
D li u ra l u trên text file có tên CEASAR.OU mà dòng đ u ghi giá tr khóa K, dòng ti p theo ghi b n rõ
ả
ủ
c a văn b n mã hóa S. Xem:
Vào. CEASAR.IN
7
HANOI
YES
PEDAGOGICAL
HELLO
UNIVERSITY
ITEM
HERO
IBOPJAQFEBHPHJDBMAVOJWFSTJUZAJJ b n mã CEASAR.OU
1
HANOI PEDAGOGICAL UNIVERSITY II CODE.
Uses crt;
Const max=250; fi='Ceasar.In'; fo='Ceasar.Ou';
Type st21=String[21];
tudien=Array[1..max] Of st21;
Var td:tudien; ma,vb,kt,gm:string;
km,sl,slm:Byte; f:Text; n,k:Byte; Procedure Init;
Var i:Byte;
begin
kt:=' ';
For i:=Ord('A') to Ord('Z') Do
kt:=kt+Char(i);
kt:=kt+kt;
Assign(f,'Ceasar.In'); Reset(f); Readln(f,n);
For i:=1 to n Do
Begin
Readln(f,td[i]); td[i]:=td[i]+' ';
End;
Readln(f,ma);
Close(f);
End; Function Before(c:Char; k:Byte): Char; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 73 Begin
Before:=kt[pos(c,kt)+27k];
End; Procedure Key_Find;
Var i,j:Byte;
Begin
km:=0; slm:=0;
For k:=1 to Length(ma) Do
Begin
vb[0]:=Succ(ma[0]);
For j:=1 to Length(ma) Do
vb[j]:=Before(ma[j],k); sl:=0;
For j:=1 to n Do
If pos(td[j],vb)>0 Then sl:=sl+1;
If sl>slm Then
Begin
slm:=sl; gm:=vb; km:=k;
End;
End;
End; Procedure Result;
Begin
Assign(f,'Ceasar.Ou'); Rewrite(f);
Writeln(f,km); Writeln(f,gm);
Close(f);
End; Procedure Proccess;
Begin
Key_Find;
Result;
End; Begin clrscr;
Init;
Proccess;
Write('Done!');
Readln;
End. Ề Ơ Ả Ọ Ố Ắ ượ ử ụ ể ả ươ ả ấ ế ậ ơ ạ ố ế ộ ớ ọ ng pháp mã hoá thông tin đ
vòng s lo i thi tin h c Qu c t ộ
ả
c s d ng r ng rãi đ đ m b o tính ch t an toàn, b o m t
ề
, có bài toán v mã BW đ c p t
ấ ậ
ề ậ ớ
i m t cách ti p c n m i
ầ
ậ ươ ụ ề ả **9/ (BURROWSWHEELER CODE, T T: BWCODE, Đ S KH O OLYMPIC TIN H C QU C
T ). Ế
ề
Có nhi u ph
ữ ệ Ở
d li u.
ậ
ỹ
trong k thu t mã hóa và gi ư
ng pháp m t mã nh sau: ví d ta c n i mã. Burrows Wheeler đ xu t ph 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 74 ừ ướ BANANA, các b ế
c ti n mã hoá t
hành là: ượ ị ể ậ ộ ự ạ
c d ch chuy n vòng tròn và t o thành m t ma tr n L*L ký t , trong đó L là ủ ừ . Ta có: ừ ầ
ướ
B c 1: T c n mã hoá đ
ộ
đ dài c a t
BANANA
ANANAB
NANABA
ANABAN
NABANA
ABANAN ế ạ ướ ắ ủ ậ B c 2: S p x p l i các dòng c a ma tr n theo th t ứ ự ừ ể
t đi n: ABANANANABANANANABBANANANABANANANABA ể ướ t t g c là t
ủ ừ ố ự
ế ừ ố
ị
m i dòng, hi n th xâu này và cho bi
ầ ạ ặ
c 2 (t c là c n t o c p (st,d): stxâu đã mã, 4: index c a t ừ ứ ấ
th m y
g c trong xâu ướ ừ mã BURROWS WHEELER. D i đây là CODE. Ố ở ỗ
ộ
ừ
CU I
các ký t
ậ ượ ở ướ
ứ
b
c
đi n. Ta có (NNBAAA,4) là t ạ
B c 3: T o m t xâu t
ậ
trong ma tr n nh n đ
ắ ừ ể
đã s p t
Program BW_code;
Uses Crt;
Var n:integer;
id:Array[0..256] of integer; Procedure Doichoid(i,j:integer);
Var t:integer;
Begin
t:=id[i];
id[i]:=id[j];
id[j]:=t;
End; Function So(Var s:string; i,j:integer):integer;
Var k: integer;
Begin
For k:=1 to n do
Begin
If (s[i]<>s[j]) Then
Begin
If s[i] i:=(i MOD n)+1; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 75 j:=(j MOD n)+1;
End;
So:=0;
End; Procedure NoibotXep(Var s: string);
Var i,j:integer;
Begin
For i:=1 to n do id[i]:=i;
For i:=1 to n1 do
For j:=n downto i+1 do
If So(s,id[j],id[j1]) < 0 then Doichoid(j,j1);
End; Procedure BW_CREATE(Var s:string; Var u: string; Var d:integer);
Var i:integer;
Begin
N:=length(s);
NoibotXep(s);
u:=' ';
For i:=1 to n do
Begin
u:=u+s[(id[i]1+n1) MOD n+1];
If id[i]=1 then d:=i;
End; End; Procedure Bs(var u:string);
Var i,j:integer;
Begin
For i:=1 to n do id[i]:=i;
For i:=1 to n1 do
For j:=n downto i+1 do
If u[id[j]]
Procedure DECODE(Var u:string; d:integer; Var s:string);
Var i:integer;
Begin
n:=length(u);
BS(u);
s:=' '; d:=id[d];
For i:=1 to n do
Begin
s:=s+u[d]; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 76 d:=id[d];
End;
End; ộ ẳ ầ ả ể ứ ứ ườ ộ ằ ể ư ự ấ ằ
ộ ữ ậ ớ
ứ ộ ấ ể ễ ộ
ượ ấ
ấ ồ
ằ ư ề
ộ ả
ữ ộ ộ ấ ỗ
ư ấ
ể
ượ
ữ ậ ớ ỉ ệ ở
ủ ọ ộ ứ
ữ
ở
c mã hóa b i các ch
ể
ứ
ở ỉ ướ ả ủ
i cùng ph i c a hcn đó. ấ ộ ộ
ữ
ộ ỗ
ộ ể ộ
i ta c n tìm m t m nh đ t hình ch nh t l n nh t b ng ph ng (t c là ch a các đi m có đ
**10/ Ng
ể
cao b ng nhau) thu c m t vùng đ t g gh (ch a các đi m có đ cao không nh nhau) đ xây d ng sân
ộ ả
ồ
bay. Vùng đ t đó đ
c bi u di n b ng m t b n đ là m t b ng vuông c p m.n ch a các dòng có đ dài
ộ
ủ
ườ
nh nhau và m i dòng có không quá 70 ch cái th
ng. Đ cao c a các đi m đ
ượ
ữ
cái. Đ cao nh nhau đ
c mã hóa b i cùng m t ch cái. Hãy tìm hình ch nh t l n nh t ch a các đi m
ữ ậ
ằ
ộ
có đ cao b ng nhau: in ra di n tích c a hình ch nh t này, t a đ các đ nh góc trên cùng trái và đ nh
góc d
Test.
Vào: Data c t trên file CNMAX.IN có n i dung sau:
20 s các ch cái (mã) thu c m i dòng
ố
bcccddddeabcvvvvvvvb mã hóa đ cao các đi m thu c vùng
bbbbbccccccccccbbbbb
vvvvvcccccccccccccbb
vvcccccccccccccbbbbb
pppppccccccccccabbbb
pppppcccccccccczzzzz
ssccccccccccccczzzzz
sssssccccccccccccczz
hhhhhcccccccccczzzzz
uuuuuuuuczzzzzzzzzzz Ra CNMAX.OU
80
2
9 6
15 CODE.
Uses Crt;
Const fi='CNMAX.IN'; fo='CNMAX.OU';
mn=80; {Do dai toi dai cua xau ky tu}
Var f,g:Text;
ten:string[12];
m:Byte; {Chieu rong manh dat}
d:Longint; { Dem so dong}
x,y:String; {Theo thu tu: dong tren va dong duoi}
h:Array[0..mn] of Longint; { chieu cao ca cot}
dtmax:Longint; { Dien tich max}
axmax, cxmax:Longint; aymax, cymax:Byte; {Toa do diem a,c} Procedure Ghi;
Begin
Assign(g,fo); Rewrite(g); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 77 Writeln(g,dtmax);
Writeln(g,axmax,#32,aymax);
Writeln(g,cxmax,#32,cymax);
close(g);
end; Function Dientich(i:Byte; Var c1,c2: Byte):Longint;
Begin
c1:=i;
While (y[c11]=y[i]) And (h[c11]>=h[i]) Do
Dec(c1);
c2:=i;
While (y[c2+1]=y[i]) And (h[c2+1]>=h[i]) Do
Inc(c2);
Dientich:=h[i]*(c2+1c1);
End; Procedure Run;
Var i,c1,c2:Byte; dt:Longint;
Begin
Write('Cho biet ten tep chua data vao:'); Readln(ten);
Assign(f,ten); Reset(f); Readln(f,m);
d:=0;
x:=#32;
For i:=1 to m Do x:=x+#32;
FillChar(h, sizeof(h),0);
While Not Eof(f) Do
Begin
Readln(f,y);
Inc(d);
For i:=1 to m Do
If y[i]=x[i] then Inc(h[i]) Else h[i]:=1;
For i:=1 to m Do
Begin
dt:=Dientich(i,c1,c2);
If dt>dtmax Then
Begin
dtmax:=dt;
axmax:=dh[i]+1; aymax:=c1;
cxmax:=d; cymax:=c2;
End;
End;
x:=y;
End;
Close(f);
Ghi;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 78 Procedure Xem;
Var g:Text; Line:String;
Begin
Writeln('KET QUA CHAY CHUONG TRINH:');
Writeln('* * * * * * * * * * * * *');
Writeln;
Assign(g,'CnMax.Ou'); Reset(g);
While Not SeekEof(g) Do
Begin
Readln(g,Line);
Writeln(#32:7,Line);
End;
Close(g);
End; Begin clrscr;
Run;
Xem;
Readln
End. Ọ Ạ Ắ Ủ Ấ Ự Ể Ạ Ủ
ọ ượ ướ ọ ộ ư
c nó đ u nh nhau. Cho tr ườ ế
ệ
ng (có phân bi t) và các ch s . Cho bi ạ ủ ả ử ự ộ ọ
ữ ố
i c a s cũng là m t PALINDROM. Gi ấ
t c n xóa đi ít nh t bao nhiêu ký t
ự ộ
còn l ề
ế ầ
s sau xóa các ký t c s đ dài n g m
ự
đ ng xích l ồ
trong s
ạ
i i c a s t Ả Ả Ề Ề Ẹ Ố Ế
**11/ OLYMPIC TIN H C QU C T NĂM 2000 T I B C KINH (H Y ĐI ÍT NH T CÁC KÝ T Đ
Ẫ
Ầ
PH N CÒN L I C A XÂU V N LÀ PALINDROM)
ự
Dãy ký t
s g i là PALINDROM n u đ c xuôi, đ c ng
ữ
các ch cái hoa, th
ạ ủ
ầ
ể
đ ph n còn l
ầ
g n nhau.
Ộ
Ầ
YÊU C U: Dùng 3 cách: Đ QUY; M T M NG 1CHI U; 2 M NG 1CHI U ộ Test Vào: Palindr.vao
9 đ dài xâu s
baeadbadb ự ầ ố ấ c n xóa Ra: Palindr.ra
4 s ít nh t các ký t
CODE.
Uses Crt;
Const mn=51;
fi='Palindro.in';
Type mi1=Array[0..mn] of Integer;
mi2=Array[0..mn] of mi1;
mc1=Array[0..mn] of Char;
Var n:integer;
f:Text;
s:mc1;
d,v:mi1; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 79 c:mi2; Procedure Doc;
Var i:integer;
Begin
Assign(f,fi); Reset(f);
Read(f,n);
For i:=1 to n do Read(f,s[i]);
End; Function max(a,b:Integer):Integer;
Begin
If (a>b) Then max:=a
Else max:=b;
End; Function Dequy(i,j:integer):integer;
Begin
if (i>j) then Dequy:=0
Else If i=j Then dequy:=1
Else
If s[i]=s[j] Then Dequy:=Dequy(i+1,j1)+2
Else
Dequy:=Max(Dequy(i,j1), Dequy(i+1,j));
End; Procedure Qhd2; {DunG 2 mang 1chieu v va d}
Var i,j: Integer;
Begin
Fillchar(v,sizeof(v),0);
For j:=1 to n do
Begin
d[j]:=1;
For i:=j1 Downto 1 do
Begin
If s[i]=s[j] Then d[i]:=v[i+1]+2
Else d[i]:=Max(v[i],d[i+1])
End;
v:=d;
End;
Writeln(nd[1])
End; Procedure Qhd1; {Dung 1 mang 1chieu}
Var i,j,t,tr:Integer;
Begin
For j:=1 to n do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 80 Begin
Tr:=0;
d[j]:=1;
For i:=j1 downto 1 do
Begin
t:=d[i];
If s[i]=s[j] then d[i]:=tr+2
else d[i]:=Max(d[i],d[i+1]);
tr:=t;
End;
End;
Write(nd[1]);
End; Procedure Test;
Begin
Doc;
Writeln('Dung Dequy: so it nhat cac ky tu can xoa=', nDequy(1,n));
Write('Dung 2 Mang 1 chieu:so it nhat ca ky tu can xoa=');
Qhd2;
Write('Dung 1 Mang mot chieu:so it nhat cac ky tu can xoa=');
Qhd1;
End; Begin Clrscr;
Test;
Readln;
End. ừ ề ấ ượ i đa là 50 và đ ộ
c xâu s có đ dài không quá 200 ký t Ừ Ể
ế
c vi ồ
ừ ể
ộ
t trên m t dòng. Cho tr
ự ể ỗ ừ
khác nhau đôi m t. M i t
. Hãy
ừ ể ế ỏ ộ đi n ướ
ộ
ạ ạ
i t o thành m t dãy liên ti p các t
ượ ư ự
trong t
ạ ừ
ế ủ ệ ể ầ
đ ph n còn l
ừ ể
có th xu t hi n nhi u l n. T đi n Dic đ c l u trên text file Dic.in và k t q a ch y ư ướ ộ 12/ (OLYMPIC MOCKBA T ĐI N) T đi n Dic g m nhi u nh t 100 t
ố
ộ
có đ dài t
ế ầ
t c n xóa kh i s bao nhiêu ký t
cho bi
ề ầ
ấ
ỗ ừ
Dic, m i t
ấ
ư
program l u tren text file Dic.ou có c u trúc và n i dung nh d i đây: Dic.in Dic.ou
6 5
abba
not
is
astra
saint
panama
saintpavnamtranasnotsaintabba Dic.ou
5 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 81 i thích ữ ạ vnamtranaisnotsaintabba ừ ạ ả
Gi
ố
*S ký t
*Các ký t
*Các t ự ầ
c n xóa=5
ự
đã xóa là: v, t, r, n, a (các ch g ch chân): saintpa
i là: 5,6,3,2,5,1: saintpanamaisnotsaintabba
ghép l CODE.
Uses Crt;
const fi='dictio.in'; fo='dictio.ou';
Type st=string[60];
Var f,g:Text;
s:string[200];
w:Array[1..110] of st;
d:Array[0..205] of integer;
n, kq:integer; Procedure Doc;
Var i:integer;
Begin
Assign(f,fi); Reset(f);
Readln(f,n);
For i:=1 to n do Readln(f,w[i]);
Readln(f,s);
Close(f);
End; Procedure Ghi(v:integer);
Begin
Assign(g,fo); Rewrite(g);
Writeln(g,v);
Close(g);
End; Function So(var w:st; i:integer):integer;
Var j:integer;
Begin
so:=0;
j:=Length(w);
If j>i Then Exit;
If w[j]<>s[i] then Exit;
For I:=i Downto 1 do
If(s[i]=w[j]) Then
Begin
Dec(j);
If j=0 Then
Begin
So:=i; exit;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 82 End;
End; Function min(a,b:integer):integer;
Begin
If(a
Procedure tinh(i:integer);
Var j, v:Integer;
Begin
d[i]:=d[i1]+1;
For j:=1 to n do
Begin
v:=so(w[j],i);
If v>0 then d[i]:=min(d[i],d[v1]+iv+1length(w[j])); End;
End; Function Xuly:Integer;
var m,i:integer;
Begin
d[0]:=0;
m:=length(s);
For i:=1 to m do Tinh(i);
Xuly:=d[m];
End; Begin Clrscr;
Doc;
kq:=Xuly;
Ghi(kq);
Writeln('So min cac chu cai can xoa de phan con lai la day lien tiep cac tu thuoc Tu dien=',kq ');
Readln;
End. Ủ Ụ Ặ Ế Ệ Ả VI T CÁC HÀM HO C TH T C Đ QUY GI I CÁC BÀI TOÁN SAU: 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 83 ớ ấ ể ụ ướ ố
ố ủ ố ọ ừ bàn phím vào. 1/ Tìm
c s chung l n nh t (USCLN)
ủ
c a 2 s . Áp d ng đ tìm USCLN c a n s đ c t
CODE:
Program uscln;
Uses crt;
Var i,n,uc,tt:Integer;
a:array[1..1000] of integer; Function uscmax(x,y:integer):integer;
Begin
If (y=0) Then uscmax:=x
Else uscmax:=uscmax(y,x MOD y)
End; Begin clrscr;
Randomize;
Repeat
Write('Ban can bao nhieu so?:'); Readln(n);
For i:=1 to n do a[i]:=Random(100);
{Begin
Writeln('So thu ',i,':');
Readln(a[i]);
End;}
Writeln('Day so vua nhap:');
For i:=1 to n do Write(a[i]:3);
i:=1;
Repeat
uc:=uscmax(uc,a[i]);
Inc(i);
Until i=n+1;
Writeln;
Write('Uoc so chung lon nhat cua ',n,' so vua nhap=',uc);
Writeln;
Write('More (1/0)?. More>go 1; Stop>go 0:'); Readln(tt);
Until tt=0;
End. Ả ố ọ ừ ủ ẻ C DÙNG M NG). Tìm USCLN c a 5 s đ c t ơ
bàn phím vào. (Bài này có v khó h n ớ ƯỢ
ộ ố ọ 2/ (KHÔNG Đ
bài trên v i m t s h c sinh!)
CODE:
Program uso;
Uses crt;
Var a,b,c,d,e,uc1,uc2,uc3,uc1a,uc1b:integer;
Function ucln(x,y:longint):longint;
Begin
if y=0 then ucln:=x
Else ucln:=ucln(y,x MOD y); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 84 End;
Begin clrscr;
Write('Nhap 5 so a,b,c,d,e:'); Readln(a,b,c,d,e);
uc1:=ucln(a,b);
uc2:=ucln(c,d);
uc3:=ucln(e,uc2);
uc1a:=ucln(uc1,uc2);
uc1b:=ucln(uc1a,uc3);
Write('Usc lon nhat cua 5 so vua nhap:',ucln(a,b));
Readln;
End. (cid:0) ộ ố ươ ọ ừ ồ ụ c m t s nguyên d ữ ố
ng g m n ch s (n>=2) đ c t bàn phím vào. Ví d 2017 đ o ả ả
ượ
3/ Đ o ng
ượ
ng
c thành 7102
CODE:
Program Dao_so;
Uses crt;
Var n:longint; Procedure Daoso(so:longint);
Var csdv,caccscl:integer;
Begin
If (so<10) then Write(so)
Else Begin
csdv:=so MOD 10; {xac dinh chu so hang don vi}
caccscl:=so DIV 10; {xac dinh cac chu so con lai}
Write(csdv);
Daoso(caccscl);
End;
End;
Begin clrscr;
Writeln;
Write('Nhap vao mot so nguyen duong:'); Readln(n);
Write('So ',n,' viet nguoc lai la:');
Daoso(n);
Readln;
End. ị ề ứ Ổ Ế
ố 4/ (DÃY FIBONACCI N I TI NG). Hai bài thú v v dãy này:
4.1 Tìm và in lên màn s Fibonacci th k.
CODE:
Program So_Fibonacci_thu_K;
USES CRT;
Var K:Longint; tt:Byte;
FUNCTION Fibo(m:Longint):Longint;
Begin
If ((m=1) Or (m=2)) Then 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 85 Fibo:=1
Else
Fibo:=Fibo(m1) + Fibo(m2);
End;
BEGIN CLRSCR;
Repeat
Writeln('TIM SO FIBONACI THU K');
Writeln('');
Write('Nhap so K= '); Readln(K);
Writeln('So Fibonacci thu ',k,' = ',Fibo(K));
Writeln;
Write('More (1/0)?. Come on > Press 1; Stop > Press 0:');
Readln(tt);
Until tt=0;
END. ướ ộ ộ ướ c đ dài n. Tìm và in lên màn dãy Fibonacci có đ dài n cho tr c. 4.2 Cho tr
CODE:
Program Fibo;
Uses crt;
Var i,n: longint;
Function Fibona(i: longint): longint;
Begin
if (i<3) then fibona:=1
Else Fibona:=Fibona(i1)+Fibona(i2);
End; Begin clrscr;
Write('n='); Readln(n);
Write('Day Fibonaci can tim ung voi do dai cho truoc ',n,' la:');
For i:= 1 to n do
Write(Fibona(i):6);
Readln
End. ọ ừ ể ấ ị gi a (n đ c t bàn ỗ ở ữ
ậ
ể ơ ể
ượ ọ c c a cách y chuy n n đĩa có l
c dùng c c trung gian 3 trong quá trình chuy n. Lu t ch i: (cid:0) (cid:0) ấ ứ ặ ằ ế ề ặ ượ ặ c đ t đĩa trên b t c m t b ng nào (m t bàn, gh , n n nhà . . .). ướ ủ
Ệ
5/ Dùng Đ QUY, tìm cách và hi n th các b
ừ ọ
ọ
c c 1 sang c c 2 đ
phím vào) t
(cid:0) M i l n ch đ
ỉ ượ
ể
ỗ ầ
c chuy n 1 đĩa,
ớ
ỏ ở
trên đĩa l n,
Đĩa nh
ể
Khi chuy n không đ CODE:
Uses Crt;
var n, count:integer; hoi:char; Procedure Move(n,c1,c2,c3: integer);
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 86 If n=1 Then
Begin
Writeln('Chuyen dia tu coc ',C1,' sang coc ',C2);
Inc(count);
End
Else
Begin
Move(n1,C1,C3,C2);
Move(1,C1,C2,C3);
Move(n1,C2,C1,C3);
End;
End; Begin clrscr;
Repeat
Write('Nhap so dia can chuyen:'); Readln(n);
count:=0;
Move(n,1,2,3);
Write('So lan chuyen dia=',count);
Writeln;
Writeln('= = = = = = = = = = = = = = ');
Write('Thu nua chu (c/k)? Tiep=>go c, ngung=> go k:');
Readln(hoi);
Until hoi IN ['k', 'K'];
End. Ổ Ụ Ớ ị ố Ớ Ớ
ọ ủ ạ ả ạ ủ ờ ờ ế ươ ấ ầ ớ ổ ng trình (v i Ớ Ố
CHÚ Ý B ÍCH: KHI TEST, CH CÓ TEST V I S ĐĨA L N, VÍ D V I N=64. Dùng tr s này,
ồ
có ch ng ch t 100 l n tu i th c a b n cũng không đ th i gian ch k t qu ch y ch
N=64) ! ệ ố ọ ừ ế ổ ị ấ ầ ố t t ng s các hoán v y. Yêu c u: M i ị ủ
t kê các hoán v c a N s đ c t
ỉ ệ ị ằ ế ế ả ố ổ ỗ
bàn phím vào và cho bi
6/ Li
ụ
ầ
l n ch hi n lên màn 20 k t qu , xem ti p gõ ENTER. Ví d vào N=6 thì t ng s hoán v b ng 720. Program HoanVinhodequy;
Uses crt;
Type chuoi=Array[1..20] of Integer;
Var a:chuoi; m,n,i,dem:integer; Procedure Init;
Var i:Integer;
Begin
for i:=1 to n do a[i]:=i;
End; Procedure Doicho(var x,y:integer);
var tg:integer;
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 87 tg:=x; x:=y;y:=tg;
End; Procedure Inra;
var i:integer;
Begin
Writeln; Inc(dem);
For i:=1 to n do
Write(a[i]:4);
If (dem MOD 20)=0 then Readln;
End; Procedure Hoanvi(i:integer);
var j:integer;
Begin
If i=1 then Inra
Else
For j:=i downto 1 do
Begin
Doicho(a[i],a[j]);
Hoanvi(i1);
Doicho(a[i],a[j]);
End;
End;
{Main Program}
Begin clrscr;
dem:=0;
Write('Nhap so luong so n can hoan vi:');readln(n);
Writeln(' Cac hoan vi cua ',n,' so: ');
Init;
Hoanvi(n);
Writeln; Writeln;
If dem<>0 then Write('Tong cong co ',dem,' hoan vi cua ',n,' so.');
Readln;
End. ộ ế ộ ế ủ ỉ ế
ữ ủ ạ ế ẽ
ể
Ế ư ọ ồ ọ ỏ ở ạ ở
i đây (cũng nh m i Code đ h a khác), đòi h i ch y
ậ ứ
ỗ ợ
VERSION 7 tr lên không h tr FULL CREEN. Nói v y t c ỉ ạ ượ ạ 7/V liên ti p các hình vuông n i ti p trong hình vuông đã cho, sao cho các đ nh c a hình vuông n i ti p
ủ
ạ
là đi m gi a c a các c nh c a hinh vuông ngo i ti p nó.
KHU N CÁO ĐÁNG NGHE: Code đ h a d
MODE FULL CREEN, mà các Windows t
là b n ch ch y đ ồ ọ ướ
ừ
c các GRAPHIC PROGRAM trong WinXp. ả ạ ề CODE (Ph i ch y trên n n WinXp)
uses crt, graph;
const w=400;
Var gd,gm:integer; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 88 procedure hv(x1,y1,x2,y2,x3,y3,x4,y4,
sb:integer);
Begin
setcolor(sb mod 15+1);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
line(x4,y4,x1,y1);
If sb>0 then
hv((x1+x2) DIV 2, (y1+y2) DIV 2,(x2+x3) DIV 2,(y2+y3) DIV 2,
(x3+x4) DIV 2,(y3+y4) DIV 2,(x4+x1) DIV 2,(y4+y1)DIV 2,sb1);
End;
Begin clrscr;
gd:=detect;
Initgraph(gd,gm,' ');
hv((getmaxXw) DIV 2,(getmaxYw) DIV 2,(getmaxXw) DIV 2,
(getmaxY+w) DIV 2,
(getmaxX+w) DIV 2,(getmaxY+w) DIV 2,(getmaxX+w) DIV 2,
(getmaxYw) DIV 2,16);
Readln;
closeGraph;
End. ế ệ ổ 8/ Vi t các hàm đ quy tính các t ng S sau: k+1k!! (k<1000) ể 8.1 Tính N!! . Sau đó dùng hàm đó đ tính: S=1!!2!!+…+(1) n i 1 -+
n 8.2 S=1+22+33+44. . .+nn n 3 8.3 S= n n - + +
1 ... + +
i
... 2 +
8.4 S= 1 n 2 3 ấ có n d u căn. +
nn n - + +
1 ... +
2 1 + + *8.5 S(n)= ố ự
trong đó x là s th c x + +
... x
n x
2! x
3! ! ế ư ở ể ệ ấ ậ ứ ế ổ bi u th c đã cho, thì hãy bi n đ i toán ể ấ c đ quy. ượ ệ
ạ ệ
ẻ ư ế ạ ổ ệ ứ ạ
Ợ
G I Ý: N u nh tho t nhìn, không th y quy lu t dùng đ quy
ứ
ọ
h c nó sao cho xu t hi n bi u th c dùng đ
ẳ
ấ ớ
Ch ng h n bài 8.5 có v khó nh t v i các b n. Ta bi n đ i nó nh sau:
a) Nhìn vào h th c (8.5) ta suy ra: n n 2 3 2 1 - - + + + x + +
... S(n1) = - - x
n x
n x
2! x
3! ( ( 2)! 1)! 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 89 n n 2 3 3 2 - - + + + x + +
... S(n2) = - - x
n x
n x
2! x
3! ( ( 3)! 2)! nx
n
! n ệ ượ b) Tính hi u S(n) – S(n1) ta đ c S(n) = S(n1) + (*) ( ) - - - ệ ượ c) Tính hi u S(n1) – S(n2) ta đ c (**) S n
( 1) S n
( =
2) x
n x
n ! ậ ể ế ế ế ệ Th (**) vào (*) ta có ngay quy lu t đ thi t k đ quy tính S(n): ) - ậ ệ ệ S n
( - +
1) S n
( 2) S(n) = S(n1) + quy lu t đ quy đã hi n rõ! (cid:0) x
n ệ ạ ế ệ ễ ố ớ ạ Vi c còn l i (vi t code tính S(n)) là vi c d đ i v i các b n! ệ ấ ả ọ ừ ị 9 Li t kê t t c các dãy nh phân dài n (n đ c t bàn phím vào). Uses Crt;
Var i,n:integer;
b:Array[1..100] of 0..1; tt:byte; Procedure Result;
Var i: Integer;
Begin
For i:=1 to n Do Write(b[i]:2); Writeln;
End; Procedure Try(i:Integer);
Var j:Integer;
Begin
For j:=0 to 1 do
Begin
b[i]:=j;
If i=n Then Result Else Try(i+1);
End;
End; Begin clrscr;
Repeat
Write('Nhap n:'); Readln(n);
Try(1);
Writeln; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 90
Write('Another Test (1/0)?. Come on > Press 1, Stop > Press 0:');
Readln(tt);
Until tt=0;
End. ề ứ ố ọ ể ố ọ ể ấ ộ ị *10 Đi n các d u “(“, “)” và 4 phép tính s h c vào m t bi u th c s h c đ tính đúng gía tr n cho
tr c.ướ Program Dien_dau_phep_tinh;
Uses crt;
Var p,a:array[1..100] of char;
i,j,k,h,d:longint; n:real;hoi:char; Procedure Inra;
Begin
Write('(((((');
For i:=1 to 6 do
Begin
If i=1 then Write(i,a[i]);
If i>1 then Write(i,')',a[i]);
End;
Writeln;
d:=d+1;
End; Procedure Test(k:integer);
Var j,i1:integer; t:real;
Begin
For j:=1 to 4 do
Begin
a[k]:=p[j];
If k=5 then
Begin
t:=1;
For i1:=2 to 6 do
Begin
If a[i11]='' then t:=ti1;
If a[i11]='+' then t:=t+i1;
If a[i11]='*' then t:=t*i1;
If a[i11]='/' then t:=t/i1;
End;
If t=n then Inra;
End
Else Test(k+1);
End;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 91 Begin clrscr;
Repeat
Writeln;
Write('Nhap gia tri n can co='); Readln(n);
d:=0;
p[1]:='';
p[2]:='+';
p[3]:='*';
p[4]:='/';
Test(1);
Writeln;
Writeln(' Co ',d,' cach dien cac phep tinh de bieu thuc da cho co gia tri bang so ',n:9:2);
Write('Another Test (y/n)?'); Readln(hoi);
Until hoi In ['n','N'];
End. ệ ấ ả ậ ố ừ ộ ố ướ ộ ố t kê t t c các s dài n l p nên t b s đã cho. c b s 1, 2, 3, 4. Li 11 Cho tr
CODE.
Uses Crt;
Var n:Byte;
a:Array[1..20] of Byte; Ans:Char; Procedure Result_Print;
Var i:Byte;
Begin
For i:=1 to n Do
Write(a[i]);
End;
Procedure For_Recur(i:integer);
Var j:Byte;
Begin
For j:=1 to 4 do
Begin
a[i]:=j;
If i Begin clrscr;
Repeat
Write('Nhap n:'); Readln(n);
For_Recur(1);
Write('More(c/k)?. Come on> Press c; Stop.Press k or K.');
Readln(Ans);
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 92 Until Ans In ['k', 'K'];
End. ướ ố ướ ạ c (n cho tr c). Phân ho ch dãy này thành các dãy con. Tìm
ế ố ậ
ớ ả ầ ử
ộ
**12 Nh p vào m t dãy s có n ph n t
ỗ
ộ
ấ ủ
ố
s chung l n nh t c a các s thu c m i dãy con. In k t qu lên màn.
Program PhanHoach_Tap;
uses crt;
Type m=array[1..100] of integer;
Var c,a:m;
p:array[1..100] of Boolean;
z,i,n,dem:integer; Function uscln(a,b:integer):integer;
Begin
while a<>b do
begin
if a>b then a:=ab
Else b:=ba;
end;
uscln:=b;
end; Procedure thu(k:integer);
var j,i1,us1,i,j1:integer;
Begin
for j:=z to n do
if p[j] then
Begin
c[k]:=a[j]; p[j]:=False;
If k>1 then
Begin
dem:=dem+1;
Writeln('* Tap con thu ',dem,' la:');
For i1:=1 to k do
write(c[i1]:4);Writeln;
us1:=c[1];
For j1:=2 to k do us1:=uscln(us1,c[j1]);
Write('Uoc so chung lon nhat cua ');
Writeln(' tap con thu ',dem,' la:',us1);
End;
If k<>n then
Begin
z:=j+1; Thu(k+1);
End;
p[j]:=true; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 93 z:=j1;
End;
End; ư Begin clrscr;
Write('Vao n='); Readln(n);
For i:=1 to n do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
dem:=0; z:=1;
For i:=1 to n do p[i]:=true;
Thu(1);
Writeln;
Writeln('Voi so n=',n,' vua nhap vao, so tap con =',dem);
Readln { không có “;” cũng nh có “;” }
End. ạ ậ ộ ừ ừ ữ ế ấ có t 2 đ n 4 ch cái (trong đó có ít nh t ữ
ộ ộ ế ủ ư *13Cho b 9 ch cái a, b, c, d, e, f, g, h, i. L p trình t o các t
1 nguyên âm) thu c b trên. K t q a l u lên text file cactu.ou Uses Crt;
Const chucai=['a','e','i'];
fo='cactu.ou';
Var c:ArrAy[1..5] Of Char;
yes:Boolean;
dem, n:longint;
f:text; Procedure WriteTo;
Var i:integer;
Begin
{Inc(dem);}
For i:=1 to n Do Write(f,c[i],' ');
Writeln(f);
End; Procedure Tim(i:Integer);
Var ch:char; nho:Boolean;
Begin
Nho:=yes;
For ch:='a' to 'i' do
Begin
c[i]:=ch;
If ch In chucai then yes:=True;
If (i=n) Then
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 94 If yes then WriteTo End
Else
Tim(i+1);
yes:=nho;
End;
End; Begin clrscr; {Dem:=0;}
Assign(f,fo); Rewrite(f);
For n:=2 to 4 do
Begin
yes:=False;
Tim(1);
End;
{Writeln(f,'So tu da liet ke=',dem);}
Close(f);
Write('Done!');
Readln;
End. ờ ướ ế ể ượ ỗ ầ ng 8x8 đ không quân nào ăn đ ầ
c nào. Yêu c u: M i l n ừ ế 14/ Tìm cách x p 8 quân xe lên bàn c t
ả ộ
xem t ng k t qu m t. Xem ti p gõ ENTER; Thoát gõ CTRLECS. ế
Uses Crt;
Const fo='tamxe.ou';
Var f:Text; d:word; line:string;
cx:Array[1..8] Of Boolean;
a:Array[1..8] of Byte; Procedure WriteOnFile;
Var i:Byte;
Begin
Inc(d);
Writeln(f);
Write(f,'cachh thu ',d,':');
For i:=1 to 8 do Write(f,'[',i,',',a[i],']',';');
End; Procedure Try(k:Byte);
Var i:Byte;
Begin
For i:=1 to 8 do
If cx[i] Then
Begin
a[k]:=i; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 95 cx[i]:=False; If k=8 then WriteOnFile Else Try(k+1);
cx[i]:=True;
End;
End; Begin Clrscr;
d:=0;
FillChar(cx,sizeof(cx),True);
Assign(f,fo); Rewrite(f);
Try(1);
Reset(f);
While Not SeekEof(f) Do
Begin
Readln(f,line);
Writeln(#32:7,line);
If (d MOD 20)=0 Then Readln; {De xem tung dap so mot; Go CTRLESC: Thoat}
End;
Close(f);
Readln;
End. = = = = = = = = = = = = = = = = = = ệ ậ L p trình làm các vi c sau: RECORD ệ ố
ự
1/Th c hi n các phép toán trên hai phân s .
Uses Crt;
Type phanso=Record
ts,ms:Integer;
End;
Var ps1,ps2,ps3:phanso; pheptoan,tiep: char;
err: Boolean; Procedure Nhap(Var ps:phanso);
Begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Write('Nhap tu:');Readln(ps.ts);
Write('Nhap mau:');Readln(ps.ms);
End; Procedure Xuat(Var ps:phanso);
Begin
Write('(',ps.ts,'/',ps.ms,')');
End; Procedure Cong(ps1,ps2:phanso; Var tps:phanso);
Begin
tps.ts:=ps1.ts*ps2.ms+ps1.ms*ps2.ts;
tps.ms:=ps1.ms*ps2.ms;
End; Procedure Tru(ps1,ps2:phanso; Var tps:phanso);
Begin tps.ts:=ps1.ts*ps2.msps1.ms*ps2.ts;
tps.ms:=ps1.ms*ps2.ms;
End; Procedure Nhan(ps1,ps2:phanso; Var tic:phanso);
Begin
tic.ts:=ps1.ts*ps2.ts;
tic.ms:=ps1.ms*ps2.ms;
End; Function Uscln(a,b:integer):integer;
Begin
While a<>b do
If a> b then a:=ab
Else b:=ba;
Uscln:=a;
End; Procedure Rutgon(Var ps:phanso);
Var uc:integer;
Begin
uc:=Uscln(ps.ts,ps.ms); 96 8 h 54 m 28/7/2017 Th y Tr n Thông Qu ps.ts:=ps.ts DIV uc;
ps.ms:=ps.ms DIV uc;
End; Procedure Doidau(Var ps:phanso);
Begin
ps.ts:=ps.ts;
End; Procedure Ngichdao(Var ps:phanso);
Var tam:integer;
Begin
tam:=ps.ts;
ps.ts:=ps.ms;
ps.ms:=tam;
End; {Main Prog.} Begin clrscr;
Repeat
Write('Nhap ps thu nhat:'); Writeln;
Nhap(ps1);
Write('Nhap ky hieu phep toan:'); Readln(pheptoan);
err:=false;
If pheptoan In ['+','','*',':'] Then
Begin
Writeln;
Write('Nhap ps thu hai:');
Writeln;
Nhap(ps2);
Write('Ket qua:');
Xuat(ps1);
Write(pheptoan);
xuat(ps2);
Write('='); Case pheptoan of
'+':Begin Cong(ps1,ps2,ps3); Rutgon(ps3); End;
'':Begin 97 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Tru(ps1,ps2,ps3);
Doidau(ps2);
cong(ps1,ps2,ps3);
Rutgon(ps3);
End;
'*':Begin nhan(ps1,ps2,ps3);Rutgon(ps3); End; ':':If ps2.ts<>0 then
Begin
Ngichdao(ps2);
Nhan(ps1,ps2,ps3);
Rutgon(ps3);
End
Else err:=true;
End;
If Not err Then
Begin
Xuat(ps3);
Writeln;
Write('Go phim bat ky de tiep tuc cong viec!'); Readln;
Clrscr;
End
Else Write('Loi: khong chia duoc cho Zero!');
Writeln;
End
Else Writeln('Program chua lam duoc phep toan nay!'); Write('More(y/n)?, tiep > go y, ngung > go n:');
Readln(tiep);
Until tiep='n';
End. ự ệ ứ
2/ Th c hi n các phép toán trên hai đa th c Uses Crt;
Const max=20;
Type dathuc=record
bac:integer;
hso:Array[0..max] of real;
End; 98 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Var a,b,c:dathuc; i:integer;
Procedure Nhap(kh:String; var p:dathuc);
Begin
Writeln; Writeln;
With p do
Begin
Repeat
Write('Nhap vao lan luot bac ',Chr(Ord(kh[1])+7),
' va cac he so cua da thuc ',kh,'=');
Readln(bac);
If bac>max Then
Write('Bac cua da thuc phai <=max)',max);
Until (Bac>=1) And (Bac<=max);
For i:=bac downto 0 Do
Begin Write(#32:3,'a[',i,']='); Readln(hso[i]); End;
End;
End; Procedure PolyDisp(kyhieu:string; p:dathuc);
Begin
Write(kyhieu,'=');
With p do
Begin
For i:=bac downto 1 Do
Begin
If hso[i]<>0 Then
Begin
If Frac(hso[i])=0 Then
Write(hso[i]:0:0,'.x')
Else Write(hso[i]:0:2,'.x');
If i>1 then Write('^',i);
End;
If hso[i1]>0 Then Write('+');
End;
If hso[0]<>0 Then
If Frac(hso[0])=0 Then Write(hso[0]:0:0)
Else Write(hso[0]:0:2);
End;
Writeln; 99 8 h 54 m 28/7/2017 Th y Tr n Thông Qu End; Procedure PolyAdd(p,q:dathuc; Var sum:dathuc); {cong da thuc}
Var i,j:integer;
Begin
If p.bac>q.bac Then sum.bac:=p.bac
Else sum.bac:=q.bac;
For i:=sum.bac downto 0 Do
sum.hso[i]:=p.hso[i]+q.hso[i];
Write('Tong cua 2 d/thuc f(x) va g(x) la:');
Polydisp('S(x)',sum);
End; Procedure PolySubt(p,q:dathuc; Var h:dathuc); {tru da thuc}
Var i,j:integer;
Begin
If p.bac>q.bac Then h.bac:=p.bac
Else h.bac:=q.bac;
For i:=h.bac downto 0 Do
h.hso[i]:=p.hso[i]q.hso[i];
Write('Hieu cua 2 d/thuc f(x) va g(x) la:');
Polydisp('H(x)',h);
End; Procedure PolyFact(p,q:dathuc; Var tic:dathuc); {nhan da thuc}
Var i,j:integer;
Begin
tic.bac:=p.bac+q.bac;
For i:=0 to tic.bac do tic.hso[i]:=0;
For i:=p.bac downto 0 Do
For j:=q.bac downto 0 Do
tic.hso[i+j]:=tic.hso[i+j]+p.hso[i]*q.hso[j];
Write('Tich cua 2 dthuc f(x) va g(x) la:');
Polydisp('T(x)',tic);
End; Procedure PolyDivi(p,q:dathuc; Var thg:dathuc); {chia da thuc}
Var i,j,m:integer; du:dathuc;
Begin
m:=p.bacq.bac; 100 8 h 54 m 28/7/2017 Th y Tr n Thông Qu If m<0 Then
Begin
Write('Khong chia duoc!');
Readln;
Exit;
End;
For i:=0 to m Do thg.hso[i]:=0;
thg.bac:=m;
For i:=m Downto 0 Do
Begin
thg.hso[i]:=p.hso[p.bac]/q.hso[q.bac];
For j:=q.bac downto 0 Do
p.hso[p.bacq.bac+j]:=p.hso[p.bacq.bac+j]thg.hso[i]*q.hso[j];
p.bac:=p.bac1;
End;
du:=p;
While (du.hso[du.bac]=0) and (du.bac>0) Do
du.bac:=du.bac1;
Write('Thuong cua 2 dthuc f(x) va g(x) la:');
PolyDisp('Th(x)',thg);
If (du.bac=0) then Write('2 dthuc da cho chia het nhau!')
Else Polydisp('Da thuc du',du);
End;
{Main Prog}
Begin clrscr;
Nhap('f(x)',a);
Nhap('g(x)',b);
Writeln('Cac da thuc vua nhap:');
PolyDisp('f(x)',a);
PolyDisp('g(x)',b);
Writeln;
PolyAdd(a,b,c);
Writeln;
PolySubt(a,b,c);
Writeln;
PolyFact(a,b,c);
Writeln;
PolyDivi(a,b,c);
Readln;
End. 101 8 h 54 m 28/7/2017 Th y Tr n Thông Qu ự ố ứ ề ớ ọ ứ ấ ố
ệ
3/Th c hi n các phép toán trên hai s ph c. (V i nhi u h c sinh, phép tính chia hai s
ph c là khó nh t!) Uses Crt;
Type complex=Record
thuc,ao:Real;
End; Var a,b,c: complex; Procedure Input(kt: Char; Var x: complex);
Begin
Writeln('Nhap so phuc ',kt,':');
Write('Phan thuc:'); Readln(x.thuc);
Write('Phan ao:'); Readln(x.ao);
End; Procedure WriteCompl(x:complex);
Begin
Write('(');
If Frac(x.thuc)=0 then Write(x.thuc:0:0)
Else Write(x.thuc:0:2); Write(';');
If Frac(x.ao)=0 then Write(x.ao:0:0)
Else Write(x.ao:0:2); Write(')');
End; Procedure Add(x,y:complex; Var z:complex);
Begin
z.thuc:=x.thuc+y.thuc;
z.ao:=x.ao+y.ao;
End; Procedure Sub(x,y:complex; Var z:complex);
Begin
z.thuc:=x.thucy.thuc;
z.ao:=x.aoy.ao;
End; Procedure Multip(x,y:complex; Var z:complex); 102 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Begin
z.thuc:=x.thuc*y.thucx.ao*y.ao;
z.ao:=x.thuc*y.ao+x.ao*y.thuc;
End; Procedure Divi(x,y:complex; Var z:complex);
Begin
z.thuc:=(x.thuc*y.thuc+x.ao*y.ao)/(sqr(y.thuc)+sqr(y.ao));
z.ao:=(x.ao*y.thucx.thuc*y.ao)/(sqr(y.thuc)+sqr(y.ao));
End; Begin clrscr;
Input('A',a);
Input('B',b);
clrscr;
Writeln('Hai so phuc vua nhap la:');
Writeln;
Write('So phuc A:'); WriteCompl(a); Writeln;
Write('So phuc b:'); WriteCompl(b); Writeln;
Add(a,b,c);
Write('Tong 2 so phuc vua nhap='); WriteCompl(c); Writeln;
sub(a,b,c);
Write('Hieu 2 so phuc vua nhap='); WriteCompl(c); Writeln;
Multip(a,b,c);
Write('Tich 2 so phuc vua nhap='); WriteCompl(c); Writeln;
Divi(a,b,c);
Write('Thuong cua 2 so phuc vua nhap='); WriteCompl(c);
Readln;
End. FILES ộ ạ ủ ượ ư i sân bay N i Bài đ c l u trong text file tên là ế ố ấ
ồ ủ ừ ữ ệ ủ ồ ỗ ộ ng c a t ng đ xách tay (túi, h p, balô …) c a m i khách. D li u ra g m hai ượ ủ ỗ ồ ọ ng các đ xách tay c a m i khách bay; ế ọ 103 ị ủ
Ặ ố ồ ế ổ
ơ ườ ề ồ ư ậ ộ 4/ Các thông tin Check In c a khách t
ầ
KHACHBAY.VAO có c u trúc sau: Dòng đ u ghi s khách bay, các dòng ti p theo ghi
ượ
ọ
tr ng l
text file:
ổ
file TRONGLUONG.RA ghi t ng tr ng l
ố ứ ự ủ
ữ
c a nh ng khách bay b h y chuy n bay n u t ng tr ng
file HUYBAY.RA ghi s th t
ủ
ượ
l
20 KG HO C s đ xách tay nhi u h n 5.
i này
ng các đ xách tay c a ng
ụ ề
ướ
D i đây là m t ví d v 3 files nh v y: (cid:0) 8 h 54 m 28/7/2017 Th y Tr n Thông Qu ấ ỗ ộ ố ự ố tr ng) KHACHBAY.VAO
5
19.5
2.5 1.5 2 3.25 1 3 (Trên m i dòng các s cách nhau ít nh t m t ký t
6.25 2.5 7
12 6.5 4 10 7.5
2 6 8 TRONGLUONG.RA
19.50
13.25
15.75
40.00
16.00 HUYBAY.RA
→ ố ồ khách này có s đ xách tay >5 104 Uses Crt;
Var tepvao,tepra,tephuy: Text;
sum,w: Real; n,i,k:Byte;
Begin Clrscr;
Assign(tepvao,'khachbay.vao'); Reset(tepvao);
Readln(tepvao,n);
Assign(tepra,'trgluong.ra'); Rewrite(tepra);
Assign(tephuy,'huybay.ra'); Rewrite(tephuy);
For i:=1 to n do
Begin
sum:=0; k:=0;
While Not(SeekEoln(tepvao)) Do
Begin
Read(tepvao,w);
sum:=sum+w;
k:=k+1;
End;
Writeln(tepra,sum);
If (sum>20) Or (k>7) Then Writeln(tephuy,i);
Readln(tepvao); 2
4 8 h 54 m 28/7/2017 Th y Tr n Thông Qu End;
Close(tepvao);
Close(tepra);
Close(tephuy); Assign(tepra,'trgluong.ra'); Reset(tepra);
Writeln('Noi dung cua file trgluong.ra ghi tong trongluong');
Writeln(' cac kien hang cua tung khach hang:');
Writeln;
While Not(SeekEof(tepra)) do
Begin
Readln(tepra,sum);
Writeln(sum:0:2);
End;
Close(tepra);
Writeln;
Assign(tephuy,'huybay.ra'); Reset(tephuy);
Writeln('Noi dung tep huybay.ra ghi so thu tu cac khach bi huy bay:');
Writeln;
While Not(SeekEof(tephuy)) do
Begin
Readln(tephuy,i);
Writeln(i);
End;
Close(tephuy);
Readln;
End. ồ ả ố ươ ẫ ố ượ ư ng l n s âm) đ c l u trên text file ấ ị ộ ể ấ ố ng lên file POSI.DAT, c t các s âm lên fie NEGA.DAT. Hi n th n i ố
5/ Các s nguyên (g m c s d
SONGUYEN.DAT,
ố ươ
Hãy c t các s d
dung hai file này lên màn hình. Program PosiNegaFile;
Uses Crt;
Var f1,f2,f3: file Of Integer;
i,n,x:integer;
Begin clrscr;
{$I} Assign(f1,'Songuyen.dat'); Rewrite(f1); {$I+}
Write('Cho so luong cac so nguyen:'); Readln(n); 105 8 h 54 m 28/7/2017 Th y Tr n Thông Qu For i:=1 to n do
Begin
Write('So thu ',i,':');
Readln(x);
Write(f1,x);
End;
Close(f1);
Write(#10#13,'Da nhap xong ',n,' so nguyen len file songuyen.dat');
Writeln('Press Any Key to Continue...');
Repeat Until KeyPressed;
Readkey;
Clrscr;
{$I} Assign(f1,'Songuyen.dat');
Assign(f2,'Posi.dat');
Assign(f3,'Nega.dat');
Reset(f1);
Rewrite(f2);
Rewrite(f3);
{$I+}
{Ghi cac so Duong len File f2, ghi cac so am len file f3}
While Not EOF(f1) Do
Begin
Read(f1,x);
If (x>=0) Then Write(f2,x)
Else Write(f3,x);
End;
Close(f1); Close(f2); Close(f3);
{Doc Data cua file f2}
Assign(f2,'Posi.dat'); Reset(f2);
Writeln('Data tren file Posi.dat:');
While Not EOF(f2) Do
Begin
Read(f2,x);
Write(x:3);
End;
Close(f2);
Writeln;
{ Doc Data tren file f3}
Assign(f3,'Nega.dat'); Reset(f3);
Writeln('Data tren file Nega.dat:'); 106 8 h 54 m 28/7/2017 Th y Tr n Thông Qu While Not EOF(f3) Do
Begin
Read(f3,x);
Write(x:3);
End;
Close(f3);
Write(#10#13,' Press Any Key to continue...');
Repeat until KeyPressed;
End. ứ ộ ố ố ứ ặ ở ả ố ư ặ ố c hai file trên và ệ ộ ố ố
6/Text file Num1.txt ch a m t s s nguyên; text file Num2.txt cũng ch a m t s s
nguyên.
Hai files này có vài s nh nhau. Tìm và “nh t” các s có m t
ộ
ư
l u chúng lên file Ketqua.txt. Hi n n i dung file Ketqua.txt lên màn hình. Uses Crt;
Var f1,f2,f3: Text;
m,n,i,j,x:Integer;
a1,a2:Array[1..100] of Integer;
Begin clrscr;
{$I}
Assign(f1,'Num1.txt');
Assign(f2,'Num2.txt');
Rewrite(f1);
Rewrite(f2);
{$I+}
Write('Cho so cac so trong file Num1.txt:'); Readln(m);
Writeln(f1,m);
For i:=1 to m do
Begin
Write('So thu ',i,':');
Readln(x);
Writeln(f1,x:3);
End;
Close(f1);
Write('Cho so cac so trong file Num2.txt:'); Readln(n);
Writeln(f2,n);
For i:=1 to n do
Begin
Write('So thu ',i,':'); 107 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Readln(x);
Writeln(f2,x:3);
End;
Close(f2);
{$I}
Assign(f1,'Num1.txt');
Assign(f2,'Num2.txt');
Assign(f3,'Ketqua.txt');
Reset(f1);
Reset(f2);
Rewrite(f3);
{$I+}
{Doc Data tren file f1 vao mang a1 (tuc vao Ram)}
Readln(f1,m);
For i:=1 to m do
Readln(f1,a1[i]);
{Doc Data tren file f2 vao mang a2 (tuc vao Ram)}
Readln(f2,n);
For j:=1 to n do
Readln(f2,a2[j]);
Writeln;
Writeln('CAC SO CO MAT O CA 2 FILE:');
Writeln;
For i:=1 to m do
For j:=1 to n do
Begin
If a1[i]=a2[j] Then
Begin
Writeln(f3,a1[i]:3);
Writeln(a1[i]:3);
End;
End;
Close(f1);
Close(f2);
Close(f3);
Write(#10#13,'GO PHIM BAT KY DE TIEP...');
Repeat Until KeyPressed;
End. 108 8 h 54 m 28/7/2017 Th y Tr n Thông Qu = = = = = = = = = = = = = = = = = = = 109 (Ít nh t cũng có 5 bài khá thú v v i nh ng ng ờ ữ Ả Ấ Ả Ề Ỗ Ợ Ạ Ả Ế Ế Ờ Ặ Ừ L i khuyên h u ích: T T C CÁC BÀI TOÁN GRAPHIC VÀ GRAPH DÙNG GRAPHIC Đ U PH I
CH Y TRONG CÁC PHIÊN B N WINDOW CÓ H TR FULL SCREEN MODE. Đ N CH T
CŨNG Đ NG QUÊN L I D N NÀY!!! ồ ọ ậ ự
L p trình Đ h a th c thi các bài toán sau: ẽ ộ ề 1/ V c t phát sóng và các vòng sóng truy n lan. Uses Crt, Graph;
Var Gd, Gm: Integer; r:word; Begin clrscr;
Gd:=Detect; InitGraph(Gd,Gm,'D:\BP\BGI');
r:=15;
Repeat
SetColor(4);
MoveTo(300,200);
LineTo(320,440);
LineTo(280,440);
LineTo(300,200);
Rectangle(280,440,320,470);
SetColor(15);
Circle(300,200,r);
Delay(100);
If r>GetmaxY/2 then ClearDevice;
If r<=GetmaxY/2 then r:=r+30
Else r:=15;
Until KeyPressed;
CloseGraph;
End. ụ ẽ ồ ổ 2/ V các vòng tròn đ ng tâm đ i màu liên t c. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 110 Uses Crt,Graph;
Var i,j,Gd,Gm,xt,yt,yc:Integer;
r:Word; hoi:char; Begin clrscr;
Gd:=Detect; InitGraph(Gd,Gm,'D:\BP\BGI');
If GraphResult<>0 Then
Begin
Write('Loi do hoa.');
Halt;
End
Else
Begin
xt:=getMaxX Div 2;
yt:=GetMaxY Div 2;
yc:=GetMaxY Div 30;
End;
Repeat
SetBkColor(Black);
SetColor(15);
Rectangle(1,1,200,15);
SetColor(12);
OutTextXY(12,5,'PRESS ANY KEY TO STOP.');
R:=1;
For i:=1 to 15 do
Begin
SetColor(Random(16));
For j:=1 to yc do
Circle(xt,yt,r+j);
Inc(r,yc);
End;
Until KeyPressed;
CloseGraph;
End. ẽ ồ ị ầ ươ ấ ắ ặ
3/ V đ th hàm sinx (ho c cosx: Tùy!).Yêu c u: ch ể
ng trình ng n nh t có th . uses crt,graph;
var mh, mot,maxx,maxy, xtam,ytam:integer;
x, y:real;
Function F(x:real):real;
Begin
F:=sin(x);
End; Begin clrscr; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 111 mh:=Detect;
InitGraph(mh,mot,'..\BGI');
SetBkColor(Cyan);
If GraphResult<>GrOk then Halt
Else
Begin
maxx:=Getmaxx;maxy:=Getmaxy;
xtam:=maxx DIV 2;
ytam:=maxy DIV 2;
Setcolor(White);
Line(0,ytam,maxx5,ytam);
OutTextxy(maxx10,ytam3,'>');
Line(xtam,5,xtam,maxy);
OutTextxy(xtam3,5,'>');
OutTextxy(xtam10,ytam+10,'O');
X:=4*Pi;
Repeat
y:=Round(F(x)*40);
PutPixel(Round(20*x)+xtam,ytamRound(y),Red);
x:=x+0.001;
Until x>4*Pi;
Readln;
closegraph;
End;
End. ị ươ ạ ươ ự ị ờ ườ *4/ In l ch d ng có khuôn d ng t ng t l ch t to treo t ng. PROGRAM InLich;
Uses Crt,Graph,Dos;
Label 1;
Var n,m,y: integer; Function NumDays(m: integer): Integer; {Ham tra ve so ngay trong thang}
Begin
case m of
4,6,9,11:NumDays:=30;
2:if (m mod 4)<>0 then NumDays:=28 else
begin
if (m mod 100)<>0 then NumDays:=29 else
begin
if (m mod 400)<>0 then NumDays:=28 else NumDays:=29
end
end
else Numdays:=31
end; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 112 End; {Ham tra ve so thu tu cua thu trong tuan ung voi ngay mong 1 cua thang}
function FirstDay(m,y:word): word;
var d,y1,m1,d1,dow1,dow: word;
Begin
d:=1;
GetDate(y1,m1,d1,dow1);
setdate(y,m,d);
GetDate(y,m,d,dow);
FirstDay:=dow;
setdate(y1,m1,d1);
End; Procedure In_lich(m,y: integer);
var i,j,k,n,rows,cols,gd,gm: integer;
Begin k:=FirstDay(m,y);
n:=numDays(m);
Cols:=7;
Rows:= (n+k) DIV 7;
if (n+k) MOD 7 <> 0 then Rows:= Rows + 1;
Writeln;
textmode(c80);
textcolor(12); Writeln(#32:16,'LICH THANG ',m,' NAM ',y);
writeln(#32:16,'');
writeln;
textcolor(lightmagenta);
Write('SUN':8);
textcolor(lightgreen);
Write('MON':8,'TUE':8,'WED':8,'THU':8,'FRI':8);
textcolor(lightblue);
Writeln('SAT':8);
Writeln;
For i:=1 to n+k do
Begin
If i<=k then Write(#32:8)
Else
Write(ik:8); textcolor(yellow);
If i MOD 7 = 0 then Writeln;
End;
End; BEGIN 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 113 1:clrscr;
Write('Nhap thang,nam (nam co 4 chu so):');
readln(m,y);
In_lich(m,y);
Writeln(#10#13);
textcolor(lightmagenta);
Write('Nhan phim bat ky de tiep tuc. Nhan "k" de ket thuc...');
if readkey<> 'k' then goto 1;
END. ế ể ỉ ử ậ ữ ệ Ố Ấ ạ ớ ớ Ư
Ớ Ị ả ạ
ứ
ủ ấ ả Ỏ ấ ỳ ể ạ ậ ở ộ ể ế ả ầ Cách ki m tra k t qu ch y program xem có CHÍNH XÁC KHÔNG: G a s nh p d li u là tháng 7 năm
ứ
2017 thì L U Ý: Ra SAT ng v i ngày 8, SUN ng v i ngày 9 là prog. ch y chính xác. T T NH T NÊN
SO V I L CH B TÚI c a nhà xu t b n uy tín.
*5/ T o l p b ng mã ASCII m r ng. Yêu c u: gõ PgDn đ xem ti p. Gõ phím b t k đ thoát. Program AsciiTable;
Uses Crt, Addcrt;
Label 1;
Const Hexa:Array[0..15] of Char='0123456789ABCDEF';
Type St=String[3];
Var i,j,x,m,n,y,e:Integer;
ch:Char; Procedure Box(x1,x2,y1,y2:Byte);
Var i:Byte;
Begin
If (x1<0)Or (y1<0) Or (x2>80) Or (y2>25) Or (x1>x2) Or (y1>y2) Then exit;
Textcolor(0);
GotoXY(x1,y1); Write('I');
GotoXY(x2,y1); Write(';');
GotoXY(x1,y2); Write('H');
GotoXY(x2,y2); Write('<');
For i:=(x1+1) to (x21) Do
Begin
GotoXY(i,y1);
Write('M');
End;
For i:=(x1+1) to (x21) Do
Begin
GotoXY(i,y2);
Write('M');
End;
For i:=(y1+1) to (y21) Do
Begin
GotoXY(x1,i);
Write(':'); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 114 End;
For i:=(y1+1) to (y21) Do
Begin
GotoXY(x2,i);
Write(':');
End;
End; Procedure Color(x1,x2,y1,y2:Byte);
Begin
Tomau(x1,y1,x2,y2,3);
Box(x1+1,y1+1,x21,y21);
Tomau(x1+2,y1+2,x22,y22,3);
End; Function Doi(i1:Byte):St;
Begin
Doi:=Hexa[i1 Shr 4]+Hexa[i1 And $0F];
End; Begin {Main}
TextBackGround(3);
clrscr;
Cursor(1);
Khungdon(2,2,79,24,15);TextC(14,9); Writexy(35,2,' TABLE ASCII ');
TextC(1,15);
WriteXY(50,3,'Wroten By TRAN THONG QUE'); TextC(4,3);
Window(2,4,79,24);
x:=1; y:=1;
While (x<=72) Do
Begin
Khungdon(x+2,y,x+8,y+2,15);
Khungdon(x+2,y+2,x+8,y+19,15);
x:=x+6;
End;
i:=3;
While (i<=79) Do
Begin
GotoXY(i,3); Write(#197);
i:=i+6;
End;
WriteXY(3,3,'C'); WriteXY(75,3,'D');
i:=9;
While (i<=79) Do
Begin
WriteXY(i,1,'B');
i:=i+6; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 115 End;
WriteXY(75,1,'Y');
i:=9;
While (i<=79) Do
Begin
WriteXY(i,20,'A');
i:=i+6;
End;
WriteXY(75,20,'Y');
TextC(1,3); x:=5;
For i:=1 to 4 Do Begin WriteXY(x,2,'Deci'); x:=x+18; End; x:=11;
For i:=1 to 4 Do Begin WriteXY(x,2,'Hexa'); x:=x+18; End; x:=17;
For i:=1 to 4 Do Begin WriteXY(x,2,'Char'); x:=x+18; End;
Repeat
m:=64; n:=16;
Window(4,4,76,24);
y:=2; i:=4; j:=1; e:=4;
Repeat
While (i<=m) And (j<=n) Do
Begin
TextC(e,3); WriteXY(15,10,' ');
WriteXY(15,11,' '); WriteXY(15,13,' ');
WriteXY(15,16,' ');
GotoXY(y,i); Write(j:3);
GotoXY(y+6,i); Write(Doi(j):3);
If (j<>7) Then
Begin
GotoXY(y+12,i); Write(chr(j):3);
End;
i:=i+1; j:=j+1;
End;
y:=y+18; i:=4; n:=n+16; e:=e+2;
Until n=80;
SetWin;
WriteXY(40,24,'PgDn>Continue; Other Key>Quit.');
ch:=Readkey;
If ch=#0 then ch:=Readkey; If ch<>#81 then Goto 1;
m:=128; n:=80;
Window(4,4,76,24);
y:=2;i:=4; j:=65; e:=4;
Repeat
While (i<=m) And(j<=n) Do
Begin
TextC(e,3);
GotoXY(y,i); Write(j:3);
GotoXY(y+6,i); Write(Doi(j):3);
GotoXY(y+12,i); Write(chr(j):3); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 116 i:=i+1; j:=j+1;
End;
y:=y+18; i:=4; n:=n+16; e:=e+2;
Until n=144;
Setwin;
Write(40,24,'PgDn>Continue; Other key>Quit.'); ch:=Readkey;
If ch=#0 then ch:=Readkey; If ch<>#81 then Goto 1;
m:=192; n:=144;
Window(4,4,76,24);
y:=2; i:=4; j:=129; e:=4;
Repeat
While (i<=m) And (j<=n) do
Begin
TextC(e,3);
GotoXY(y,i); Write(j:3);
GotoXY(y+6,i); Write(Doi(j):3);
GotoXY(y+12,i); Write(chr(j):3);
i:=i+1; j:=j+1;
End;
y:=y+18; i:=4; n:=n+16; e:=e+2;
Until n=208;
Setwin;
Write(40,24,'PgDn>Continue; Other key>Quit.'); ch:=Readkey;
If ch=#0 then ch:=Readkey; If ch<>#81 then Goto 1;
m:=256; n:=208;
Window(4,4,76,24);
y:=2; i:=4; j:=193; e:=4;
Repeat
While (i<=m) And (j<=n) Do
Begin
TextC(e,3);
GotoXY(y,i); Write(j:3);
GotoXY(y+6,i); Write(Doi(j):3);
GotoXY(y+12,i); Write(chr(j):3);
i:=i+1; j:=j+1;
End;
y:=y+18; i:=4; n:=n+16; e:=e+2;
Until n=272;
Setwin;
Write(40,24,'PgDn>Continue; Other key>Quit.'); ch:=Readkey;
If ch=#0 then ch:=Readkey; If ch<>#81 then Goto 1;
Until ch=#27;
Setwin;
1:TextC(15,0); Clrscr;
End. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 117 : di chuy n “súng”; Gõ: Esc: ra. ạ (cid:0) ự **6/T o trò ch i b n v t tr i đang bay.
ể
Gõ ký t ơ ắ
ắ
“d” b n; Gõ ị ờ
, (cid:0) ế ụ ấ ỳ ạ ạ ầ **7/ T o “Kính v n hoa”. Yêu c u: Gõ ESC: Thoát; Gõ phím b t k : Ti p t c. PROGRAM VANHOA;
USES crt,graph;
const
dong=1; lim=3;
TYPE
BASEARRAY=ARRAY[1..100] OF real;
Var
ordrePoly,khoang:integer;
number:byte;
f1,f2,f3,f4:integer;
c1,c2,c3,c4:integer;
GraphDriver,graphMode:integer;
xp1,yp1,xp2,yp2:real;
xtl,ytl:real;
MaxX,MaxY:integer;
XgFen,xdFen,YbFen,YhFen:real;
XgClot,XdClot,YbClot,YhClot:integer;
mangX,mangY:basearray;
i:integer;
Sotg,kc,lap:byte;
ch:char;k:integer; PROCEDURE KTDOHOA;
VAR
errorCode:integer;
somau:byte;
Begin
graphDriver:=detect;
initgraph(graphdriver,graphMode,'D:\bp\bgi');
ErrorCode:=graphResult;
If errorCode<> grOK then
begin
writeln('LOI DO HOA ',graphErrorMsg(ErrorCode));
halt(1);
end;
MaxX:=getMaxx;
MaxY:=getMaxY; end; PROCEDURE CUASO(f1,f2,f3,f4:real);
BEGIN 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 118 Xgfen:=f1;
XdFen:=f2;
ybFen:=f3;
yhFen:=f4;
END; PROCEDURE TAMNHIN(C1,C2,C3,C4:INTEGER);
BEGIN
XgClot:=c1;
XdClot:=c2;
YbClot:=c3;
YhClot:=c4;
Xtl:=(XdClotXgClot)/(XdFenXgFen);
Ytl:=(YhClotYbClot)/(YhFenYbFen);
Setviewport(xgClot,maxYYhClot,xdClot,maxYYbClot,ClipOn);
END; PROCEDURE CAT(x1,y1,x2,y2:real);
type
muc=(l,r,low,h);
code=set of muc;
Var
c,c1,c2:code;
x,y:real;
xx1,yy1:integer;
xx2,yy2:integer; PROCEDURE BINARY(X,Y:REAL;VAR C:CODE);
Begin
c:=[];
If x binary(x1,y1,c1);
binary(x2,y2,c2);
WHILE (c1<>[] ) or (c2<>[])do BEGIN
if (c1*c2)<>[] then exit;
if c=[] then c:=c2 else c:=c1;
if l in c then
begin
x:=xgFen; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 119 y:=y1+(y2y1)*(xgFenx1)/(x2x1)
end
else if r in c then
begin
x:=xdFen;
y:=y1+(y2y1)*(xdFenx1)/(x2x1)
end
else if low in c then
begin
y:=ybFen;
x:=x1+(x2x1)*(ybFeny1)/(y2y1)
end
else if h in c then
begin
y:=yhFen;
x:=x1+(x2x1)*(yhFeny1)/(y2y1)
end;
IF c=c1 then
Begin
x1:=x;
y1:=y;
binary(x,y,c1);
END
Else
Begin
x2:=x;
y2:=y;
binary(x,y,c2);
End;
END ;
xx1:=round((x1xgFen)*Xtl);
yy1:=round((yhfeny1)*Ytl);
xx2:=round((x2xgFen)*Xtl);
yy2:=round((yhfeny2)*Ytl);
MoveTo(xx1,yy1);
Lineto(xx2,yy2);
END; PROCEDURE VETOI(x,y:real);
BEGIN
xp2:=x;
yp2:=y;
cat(xp1,yp1,xp2,yp2);
xp1:=xp2;
yp1:=yp2;
END; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 120 PROCEDURE DATBUT(x,y:real);
BEGIN
xp1:=x;
yp1:=y;
vetoi(x,y);
END; PROCEDURE NHAPSOLIEU;
Begin
TextBackGround(blue);
ClrScr;
Writeln(' KINH VAN HOA ');
Write(' Cho so Tam giac ' );
Textcolor(white);
Write('( An 0 de thoat ) : ');
readln(Sotg);
If sotg<>0 then
Begin
writeln;
write(' Cho so khoang chia : ');
readln(kc);
writeln;
write(' Cho so lan Lap : ');
readln(Lap);
end;
END; PROCEDURE DAGIAC(MANGX,MANGY:BASEARRAY;LIM:INTEGER;MODE:
INTEGER);
Var
i:integer;
Begin
datbut(mangx[1],mangy[1]);
For i:=2 to lim do vetoi(mangx[i],mangy[i]);
If mode=dong then vetoi(mangx[1],mangy[1]);
End; PROCEDURE VEDAGIAC(MANGX,MANGY:BASEARRAY;LIM:INTEGER;MODE:
INTEGER;color:byte);
Begin
setcolor(color);
dagiac(MANGx,mangy,lim,mode);
End; PROCEDURE VE(SoTg,kc,lap:byte);
Var
angle,hs:real; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 121 i,j,sogoc:byte;
tg:byte; Begin
hs:=2*pi/Sotg;
For Sogoc:=1 to sotg do
Begin
mangx[1]:=0;mangy[1]:=0;
angle:=(sogoc1)*hs;
mangx[2]:=cos(angle);
mangy[2]:=sin(angle);
angle:=Sogoc*hs;
mangx[3]:=cos(angle);
mangy[3]:=sin(angle);
mangx[4]:=0;mangy[4]:=0;
For i:=1 to lap do
Begin
Vedagiac(mangx,mangy,lim,dong,white);
If odd(sogoc) then
Begin
For j:=lim+1 downto 2 do
Begin
mangx[j]:=mangx[j]+(mangx[j1]mangx[j])/kc;
mangy[j]:=mangy[j]+(mangy[j1]mangy[j])/kc;
End;
Mangx[1]:= Mangx[lim+1];
Mangy[1]:=Mangy[lim+1];
End
Else
Begin
For j:=1 to lim do
Begin
mangx[j]:=mangx[j]+(mangx[j+1]mangx[j])/kc;
mangy[j]:=mangy[j]+(mangy[j+1]mangy[j])/kc;
End;
Mangx[lim+1]:= Mangx[1];
Mangy[lim+1]:=Mangy[1];
End;
end;{cua lap}
end;{for ngoai cung} End;{cua ve} (**************************************************************) BEGIN
nhapSolieu; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 122 Repeat
ktdohoa;
CuaSo(1,1 ,1,1);
TamNhin(160,maxx160,75,maxy75);
Ve(sotg,kc,lap);
TamNhin(0,maxx,0,maxy);
rectangle(1,1,maxx1,maxy1);
rectangle(5,5,maxx5,maxy5);
setcolor(yellow);
settextjustify(1,1);
settextstyle(1,0,4);
outtextxy(maxx div 2,20,' VE KINH VAN HOA ');
outtextxy(maxx div 2,45,' ************************ ');
settextstyle(1,0,1);
setcolor(lightblue);
outtextxy(maxx div 2,maxy20,' Go ESC de thoat, Go phim BAT KY de tiep tuc !');
settextstyle(2,1,8);
outtextxy(20,maxy div 2,'Thay: TRAN THONG QUE');
outtextxy(maxx24,maxy div 2,'COPYRIGHT (C) 1994');
repeat until KeyPressed;
ch:=readkey;
if ch=#27 then
begin
cleardevice;
closegraph;
halt;
end;
closeGraph;
nhapsolieu;
Until ( Sotg=0);
END. Ả Ề Ặ Ả Ề Ỹ Ậ Ậ Ấ CÁC BÀI 7, 8, 10, 11 R T KHÓ C V M T THU T TOÁN VÀ C V K NĂNG L P TRÌNH!!! ạ ạ ủ ế ắ ồ ồ ị ầ **7/ T o đ ng h có 3 kim+ti ng tích t c kêu theo nh p ch y c a kim giây.
Và thêm các yêu c u sau: ả ấ ỳ ể ổ ề ờ ệ ệ ả ờ ứ ạ ả ồ
ố
ố
và kim phút có d ng hình t ệ
giác. (gi a Dòng trên cùng phía ph i màn hình có dòng chũ: “Gõ phím b t k đ
ồ
đ i màu đ ng h và n n màn hình.
b Dòng cu i cùng phía trái màn hình hi n th i gian hi n hành.
ệ
c Dòng cu i cùng phía ph i màn hình hi n ngày tháng năm hi n th i.
ờ
d Kim gi
hình thoi Quasi Lozenge)
program Draw_Clock;
uses crt,GRAPH,dos;
const
color:array[0..15] of byte=(8,7,3,15,6,14,10,4,2,9,1,12,5,0,13,11);
var
m,co:byte; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 123 col:set of 0..15; r,xt,yt:word;
e:char;
st:string[10];st1,st2,st3:string[4]; {} procedure init;
var gd,gm:integer;
begin
gd:=0;
initgraph(gd,gm,'..\bgi');
if graphresult<>0 then halt;m:=1;e:=#2;
end; {} procedure draw_frame;
const
number:array[1..12] of
string[2]=('1','2','3','4','5','6','7','8','9','10','11','12');
dayofweek:array[0..6]of string[3]=('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
var
i,x,y,year,month,day,day_of_week:word;
begin
xt:=getmaxx div 2;yt:=getmaxy div 2;
r:=yt10;
settextjustify(1,1);
{ve duong vien ngoai cung:}
setcolor(color[13]);
setlinestyle(0,0,3);
rectangle(1,1,getmaxx,getmaxy);
rectangle(3,3,getmaxx2,getmaxy2);
{ve duong tron bao dong ho:}
for i:= 0 to 6 do circle(xt,yt,r+3i);
{to mau nau khoang trong:}
m:=(m mod 2)+1;
if odd(m) then co:=1 else co:=1+(color[13] mod 11);
setfillstyle(co,color[4]);
floodfill(xt+r20,yt+r20,color[13]);
setfillstyle(1,color[3]);
floodfill(xt,yt,color[13]);
setcolor(color[1]);
setlinestyle(0,0,3);
rectangle(1,1,getmaxx,getmaxy);
rectangle(3,3,getmaxx2,getmaxy2);
setfillstyle(1,color[1]); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 124 bar(0,getmaxy 15,getmaxx,getmaxy);
setfillstyle(solidfill,color[13]);
bar(80,getmaxy15,getmaxx80,getmaxy);
{hien ngay thang nam o dong duoi cung phai man hinh:}
setfillstyle(solidfill,color[8]);
bar(8,getmaxy50,170,getmaxy20);
bar(getmaxx170,getmaxy50,getmaxx8,getmaxy20);
setfillstyle(1,color[11]);
bar(getmaxx150,60,getmaxx10,70);
getdate(year,month,day,day_of_week);
str(day,st1);
str(month,st2);
str(year,st3);
if day<10 then st1:='0'+st1;
if month<10 then st2:='0'+st2;
{settextstyle(4,0,6);
setcolor(color[5]);
outtextxy(getmaxx80,25,st3);
settextstyle(4,0,4);
setcolor(color[6]);
outtextxy(120,20,' Happy New Year !'); }
settextstyle(0,0,2);
setcolor(color[7]);
for i:=0 to 1 do outtextxy(40+30*i,60,chr(i+3));
setcolor(color[15]);
for i:=2 to 3 do outtextxy(40+30*i,60,chr(i+3));
st:=' ';st:=dayofweek[day_of_week]+','+st1+'.'+st2;
settextstyle(0,0,2);
setcolor(color[9]);
outtextxy(getmaxx90,getmaxy35,st);
settextstyle(2,0,1);
setusercharsize(2,3,1,1);
setcolor(color[10]);
outtextxy(getmaxx80,63,' * Press any key to change color...');
{trang tri ben trong dong ho:}
settextstyle(0,0,1);
setcolor(color[11]);
for i:=1 to 60 do
begin
x:=xt+round((r20)*sin(i*pi/30));
y:=ytround((r20)*cos(i*pi/30));
if(i mod 5)<>0 then outtextxy(x,y,chr(1))
end;
settextstyle(0,0,2);
for i:=1 to 12 do
begin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 125
x:=xt+round((r50)*sin(i*pi/6)); y:=ytround((r50)*cos(i*pi/6));
setcolor(color[12]);
outtextxy(x,y,number[i]);
x:=xt+round((r20)*sin(i*pi/6));
y:=ytround((r20)*cos(i*pi/6));
setcolor(color[10]);
outtextxy(x,y,chr(2)); {chr(2)=""}
end;
{setcolor(color[14]); outtextxy(xt,yt+100,' CHA DE PASCAL! ');
outtextxy(xt,yt100,'');
outtextxy(xt,yt105,' NIKLAUS WIRTH '); }
setcolor(color[2]);
settextstyle(0,0,3);
outtextxy(xt,yt,chr(3)); {chr(3):hinh trai tim}
end; {} procedure draw_index(r:word;goc:real;color:byte);
var
x,y,a,b,c:real;
d:array[1..5]of pointtype; {toa do 4 dinh tu giac}
begin
{if goc>=2*pi then goc:=goc2*pi;}
x:=xt+r*sin(goc);
y:=ytr*cos(goc);
setcolor(color);
if r>yt35 then
begin {kim giay}
setlinestyle(0,0,2);
line( xt,yt,round(x),round(y));
setlinestyle(0,0,3);
line(xt,yt,round(xtr/5*sin(goc)),round(yt+r/5*cos(goc)));
end
else
begin
{ve kim gio hoac kim phut duoi dang hinh tu giac co 4 dinh
toa do 4 dinh chua trong mang d:}
d[1].x:=xt;d[1].y:=yt;
a:=(4*xt+x)/5;b:=(4*yt+y)/5;c:=(xxt)/(yty+0.000001);
d[2].x:=round(asqrt((100+(r mod (yt40)))/(1+sqr(c))));
d[2].y:=round(b+c*((asqrt((100+(r mod (yt40)))/(1+sqr(c))))a));
d[3].x:=round(x);
d[3].y:=round(y); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 126 d[4].x:=round(a+sqrt((100+(r mod (yt40)))/(1+sqr(c))));
d[4].y:=round(b+c*((a+sqrt((100+(r mod (yt40)))/(1+sqr(c))))a));
d[5].x:=xt;
d[5].y:=yt;
drawpoly(5,d); {ve hinh tu giac}
end;
end;
{}
procedure run;
const
a:array[1..2] of string=('SEE YOU GAIN','!');
var
h,m,s,se,ok:word;
goch,gocm,gocs,g:real;
i,j,k:integer;
nb:boolean;
{}
procedure tinhgoc;
begin
goch:=pi*((h mod 12)/6+m/360+s/4320);
gocm:=pi*(m/30+s/1800);
gocs:=pi*s/30;
if (s=59)and odd(m) then e:='a';
ok:=s;
end;
{}
procedure draw;
begin
draw_index(r80,goch,color[11]);
draw_index(r30,gocm,color[12]);
draw_index(r20,gocs,color[14]);
end;
{phan phu}
{}
procedure change;
begin
i:=(i mod k)+1;if i=1 then j:=(j mod 4)+1;
case j of
1:k:=179;
2:k:=186;
3:k:=191;
4:k:=196
end;
end; {het phan phu}
Begin
setwritemode(xorput); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 127 gettime(h,m,s,se); tinhgoc;
draw;
{hien gio o dong duoi cung ben trai man hinh:}
str(h,st1);
str(m,st2);
str(s,st3);st:=' ';
if m<10 then st2:='0'+st2;
if s<10 then st3:='0'+st3;
st:=' ';
st:=st1+':'+st2+':'+st3;
settextstyle(0,0,2);
setcolor(color[9]);
outtextxy(90,getmaxy35,st);
i:=0;
j:=0;
k:=179;
nb:=false;
repeat
gettime(h,m,s,se);
if ok<>s then
begin
if((m=59)and(s>(58h)))or((m=29)and(s=59))then nb:=true;
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
settextstyle(0,0,2);
setcolor(color[8]);
outtextxy(90,getmaxy35,st);
draw;tinhgoc;
{phan phu:co the bo di:}
if (s mod 5)=0 then
begin
if gocs>=2*pi then gocs:=gocs2*pi;setfillstyle(solidfill,color[2]);
floodfill(round(xt+(r20)*sin(gocs)),round(yt(r20)*cos(gocs)),color[10]);
end;
if ((s1) mod 5)=0 then
begin
g:=pi*(s1)/30;
if g>=2*pi then g:=g2*pi;setfillstyle(solidfill,color[3]);
floodfill(round(xt+(r20)*sin(g)),round(yt(r20)*cos(g)),color[10]);
end;
{het phan phu}
draw;
str(h,st1);str(m,st2);str(s,st3);st:=' ';
if m<10 then st2:='0'+st2;if s<10 then st3:='0'+st3;
st:=' '; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 128 st:=st1+':'+st2+':'+st3; settextstyle(0,0,2);
setcolor(color[9]);
outtextxy(90,getmaxy35,st);
settextstyle(0,0,1);
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
setcolor(color[3]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
if nb then
begin
sound(2700);
delay(1000);
nosound;
delay(1000);
sound(2700);
delay(1000);
nosound;
end
else Begin sound(2700);
delay(750);
nosound;
delay(750);
End;
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
setcolor(color[3]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
if nb then
Begin delay(750);
sound(2700);
delay(100);
nosound;
delay(750);
End
else
delay(1000);
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
setcolor(color[3]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
if nb then 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 129 Begin nosound;
delay(80); sound(2700);delay(120);
End
else Begin sound(2700); delay(1000);
nosound;
delay(1000); End;
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
setcolor(color[3]);
Outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
delay(200);
setcolor(color[13]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
change;
setcolor(color[3]);
outtextxy(getmaxx div 2,getmaxy7,copy(a[j],i,60));
delay(150);nb:=false;
end; while keypressed do e:=readkey;
until e<>#2;
if e<>#27 then e:=#2;
End;
{}
procedure set_color;
var i:byte;
begin
randomize;
col:=[];
for i:=0 to 15 do
begin
repeat
color[i]:=random(16);
if (i>=11) and (i<=14) then
if (color[i]=0) and not(0 in col) then color[i]:=color[i1];
until not(color[i] in col);
col:=col+[color[i]]
end;
end;
{}
procedure maker;
begin
clrscr; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 130 gotoxy(30,17); TEXTCOLOR(YELLOW);
write('Press any key to continue...');
window(20,10,60,15);
textbackground(lightgray);
clrscr;
textcolor(blue);
writeln;
writeln(' THAY TRANTHONGQUE ');
writeln;
writeln(' * * * * * * * * * ');
textcolor(lightgray);
e:=readkey;
end;
begin
maker;
init;
repeat
graphdefaults;
cleardevice;
draw_frame;
run;
set_color;
until e=#27;
closegraph;
end. ể ớ ộ ỉ ượ ậ ơ ọ **8/ Đ h a hóa bài toán Tháp Hà N i (Hanoi Tower Problem): Chuy n n đĩa (ch nên test v i n=3 or
ọ
n=4) có l c dùng c c trung gian. Lu t ch i: c c 1 sang c c 2 đ ượ ặ ấ ứ ỗ ế ặ ỉ ể c đ t đĩa (ngh ) trên b t c ch nào (m t bàn, gh , sàn nhà…), ồ ọ
ỗ ở ữ ừ ọ
gi a t
ể
ỉ
ỗ ầ
a M i l n ch chuy n 1 đĩa,
b Trong lúc chuy n không đ
ằ
c Đĩa to n m trên đĩa bé. Uses Crt,Graph;
Type coc=1..3;
Const n=3; yorg=20;xorg:Array[coc] of integer=(13,40,67);
time=5000; time2=4000;
Var dk:Array[1..n,coc] of Integer;
docao:Array[coc] of integer;
i:integer; Procedure tre(T:integer);
Begin
GotoXY(43,4);
Delay(T);
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 131 Procedure MoveUp(c1,c2:Integer);
Var i,j,x:Integer;
Begin
For j:=1 to 4 Do
Begin
X:=xorg[c1]dk[docao[c1],c1];
GotoXY(X,YORGnj1);
For i:=1 to 2*dk[docao[c1],c1]+1 do Write(#219);
tre(time);
GotoXY(X,Yorgnj1);
For i:=1 to 2*dk[docao[c1],c1]+1 do Write(#32);
tre(time);
End;
End; Procedure MoveDown(c1,c2:integer);
Var i,j,x:Integer;
Begin
For j:=4 Downto 1 Do
Begin
x:=XORG[c2]DK[docao[c1],c1];
GotoXY(X,YORGnj1);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#219);
tre(time);
GotoXY(X,YORGnj1);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#32);
tre(time);
End;
End; Procedure MoveRight(c1,c2:integer);
Var i,j,x,xx:integer;
Begin
x:=XORG[c1];
While x<=XORG[c2] Do
Begin
xx:=XORG[c1]DK[docao[c1],c1]+xXORG[c1];
GotoXY(XX,YORGn5);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#219);
tre(time2);
GotoXY(XX,YORGn5);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#32);
tre(time2);
X:=X+2;
End;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 132 Procedure MoveLeft(c1,c2:Integer);
Var i,j,x,xx:integer;
Begin
x:=XORG[c1];
While x>=XORG[c2] Do
Begin
xx:=XORG[c1]DK[docao[c1],c1]+xXORG[c1];
GotoXY(XX,YORGn5);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#219);
tre(time2);
GotoXY(XX,YORGn5);
For i:=1 to 2*DK[docao[c1],c1]+1 Do Write(#32);
tre(time2);
X:=X2;
End;
End;
Procedure Move(n,c1,c2,c3:integer);
Var x:integer;
Begin
If n=1 Then
Begin
x:=XORG[c1]Dk[docao[c1],c1];
GotoXY(x,YORGdocao[c1]+1);
For i:=1 to 2*DK[docao[c1],c1]+1 do
Begin
If docao[c1]=1 Then
Begin
Write('');
If i=DK[docao[c1],c1] Then Write(#193);
End
Else Write(#32);
End;
GotoXY(XORG[c1],YORG docao[c1]+1);
Write(#179); tre(time);
MoveUp(c1,c2);
If c2>c1 then MoveRight(c1,c2)
Else MoveLeft(c1,c2);
MoveDown(c1,c2);
docao[c2]:=docao[c2]+1;
DK[docao[c2],c2]:=DK[docao[c1],c1];
Dk[docao[c1],c1]:=0;
docao[c1]:=docao[c1]1;
x:=XORG[c2]DK[docao[c2],c2];
GotoXY(x,YORGdocao[c2]+1);
For i:=1 to 2*DK[docao[c2],c2]+1 do Write(#219); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 133 Delay(200);
End
Else
Begin
Move(n1,c1,c3,c2);
Move(1,c1,c2,c3);
Move(n1,c3,c2,c1);
End;
End;
{Main prog.}
Begin Clrscr;
GotoXY(35,4); Write('BAI TOAN THAP HA NOI.');
GotoXY(4,YORGn+4);
GotoXY(XORG[1],YORGn); Write(#179);
GotoXY(XORG[1]1,YORGn+1); Write(#219#219#219);
GotoXY(XORG[1]2,YORGn+2); Write(#219#219#219#219#219);
GotoXY(XORG[1]3,YORGn+3); Write(#219#219#219#219#219#219#219);
GotoXY(XORG[1]4,YORGn+4); Write(#219#219#219#219#219#219#219#219#219);
For i:=0 to n Do
Begin
GotoXY(XORG[2],YORGn+I);
Write(#179);
End;
For I:=0 to n do
Begin
GotoXY(XORG[3],YORGn+I);
Write(#179);
End;
docao[1]:=n; docao[2]:=0; docao[3]:=0;
For I:=1 to n do DK[I,1]:=nI+1;
For I:=1 to n do DK[I,2]:=0;
For I:=1 to n do DK[I,3]:=0;
GotoXY(22,24); Write('Press Ctrl_C to Stop.');
GotoXY(43,4);
Repeat
Delay(500); Move(n,1,2,3);
Delay(500); Move(n,2,3,1);
Delay(500); Move(n,3,1,2);
Until KeyPressed;
End. Ả B NG TEST Ọ Ọ Ủ Ề ườ ươ ữ ệ ầ ị Ố
ng tròn. Xét các v trí t ở
ớ ạ
i h n b i
ệ ặ
ế ủ ế ể ặ ớ ở ị Ộ
*9/ (M T TRONG S CÁC Đ OLYMPIC TIN H C C A H C SINH THCS 4/1994)
ẳ
ẽ
V hai đ
ườ
2 đ ng quan gi a chúng. Và tính di n tích ph n m t ph ng gi
trong nhau ho c ti p súc trong v i nhau. Hi n th các k t q a tính di n tích. ng tròn khi chúng 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 134 ươ ữ CÁC TEST ị
V trí t ng quan gi a hai vòng tròn ọ ộ
T a đ tâm & bán kính vòng tròn
Y
X R ờ Hai vòng tròn r i nhau Vòng tròn 1
Vòng tròn 2 200
50 200
50 100
30 ắ Hai vòng tròn c t nhau Vòng tròn 1
Vòng tròn 2 200
270 200
130 100
40 ế Hai vòng tròn ti p xúc ngoài Vòng tròn 1
Vòng tròn 2 200
350 200
200 100
50 Hai vòng tròn trùng khít nhau Vòng tròn 1
Vòng tròn 2 200
200 200
200 100
100 ằ
ạ ủ ọ
i c a vòng to=2016 tròn to. Dt còn l Vòng tròn 1
Vòng tròn 2 200
220 200
220 100 Vòng tròn tròn bé n m tr n trong vòng
60 ồ ớ ạ ủ i c a vòng to=11310 Dt còn l Vòng tròn 1
Vòng tròn 2 200
200 200
200 100 Vòng tròn bé đ ng tâm v i vòng tròn to
80 ạ ả ớ
i . . . =23562 vòng tròn to. Dt còn l Vòng tròn 1
Vòng tròn 2 200
250 200
200 ế
100 Vòng tròn bé ti p xúc trong ph i v i
50 ế ạ Vòng tròn to. Dt còn l i . . .=16022 Vòng tròn 1
Vòng tròn 2 200
200 200
170 ớ
100 Vòng tròn bé ti p xúc trong phía trên v i
70 Uses Crt, graph;
Const maxx=639; maxy=449;
Var x1,x2,y1,y2,r1,r2:Integer; Procedure Khung(x1,x2,y1,y2:Integer);
Var i,j: Integer;
Begin
TextBackGround(Blue); TextColor(LightGray);
Gotoxy(x1,y1); Write(#218);
For i:=x1+1 to x21 do Write(#196);
Write(#191);
For j:=y1+1 to y21 do
Begin
Gotoxy(x1,j); Write(#179);
For i:=x1+1 to x21 do Write(' ');
Write(#179);
End;
Gotoxy(x1,y2); Write(#192); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 135 For i:=x1+1 to x21 do Write(#196);
Write(#217);
End; Function Doc(min,max:Integer):Integer;
Var n:Integer; {min Function Min( a,b:Integer):Integer;
Begin
If a
Procedure Init;
Begin Clrscr;
Khung(10,1,70,13); Window(11,2,69,12); TextColor(Yellow);
Writeln('OLYMPIC QUOC GIA TINHOC THCS 1994.'); TextColor(LightRed);
Writeln('To chuc tai HA NOI.');
Writeln('Nha to chuc: HOI TINHOC VN.');
Writeln;
TextColor(LightGray);
Write('Nhap toa do x cua tam vong tron 1:'); x1:=Doc(1,maxx1);
Write('Nhap toa do y cua tam vong tron 1:'); y1:=Doc(1,maxy1);
Write('Nhap ban kinh vong tron 1:');
r1:=Doc(0,min(min(x1,maxxx1),min(y1,maxyy1)));
Write('Nhap toa do x cua tam vong tron 2:'); x2:=Doc(1,maxx1);
Write('Nhap toa do y cua tam vong tron 1:'); y2:=Doc(1,maxy1);
Write('Nhap ban kinh vong tron 2:');
r2:=Doc(0,min(min(x2,maxxx2),min(y2,maxyy2)));
Sound(800);
Delay(100); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 136 Nosound;
Writeln('WELCOME TO INFOMATIC OLYMPIC.');
Window(1,1,80,25);
End; Function Run:Boolean;
Var Gd, Gm:Integer;
i:Real; s:String;
ch:char;
Begin
GD:=DETECT;
INITGRAPH(GD,GM,'..\BGI');
If GraphResult<>GrOk then
Begin
Gotoxy(11,11);
Sound(1200); Delay(100); Nosound;
Writeln('Khong khoi dong duoc do hoa.');
Run:=False; Exit;
End;
SetBkColor(Blue); SetColor(LightRed);
SetFillStyle(1,LightGray);
Bar(1,1,maxx1,maxy1);
Rectangle(0,0,maxx,maxy);
SetColor(Yellow);
Circle(x1,y1,r1); Circle(x2,y2,r2);
i:=Sqrt((Longint(x1)x2)*(x1x2)+(Longint(y1)y2)*(y1y2));
If (x1=y1) And (x2=y2) And (r1=r2) Then
Begin
SetColor(White);
OutTextxy(10,450,'Hai vong tron trung khit nhau.')
End
Else If(r1>=r2+i) Then
Begin
SetColor(White);
OutTextxy(10,450,'Vong tron 2 nam trong vong tron 1.');
Str(Pi*(Longint(r1)*r1Longint(r2)*r2):0:2,s);
OutTextxy(10,460,'Dien tich phan trong la:');
SetColor(LightRed); OutTextxy(10+26*8,460,s);
SetFillStyle(3,LightGray);
If x2+r2=x1+r1 Then FloodFill(x1,y1r1+1,Yellow)
Else FloodFill(x1,y1+r11,Yellow)
End
Else If(r2>=r1+i) Then
Begin
SetColor(White);
OutTextxy(10,450,'Vong tron 1 nam trong vong tron 2.');
Str(Pi*(Longint(r2)*r2Longint(r1)*r1):0:2,s); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 137 OutTextxy(10,460,'Dien tich
phan trong la:');
SetColor(LightRed); OutTextxy(10+26*8,460,s);
SetFillStyle(3,LightGray);
If y1+r1=y2+r2 Then FloodFill(x2,y2r2+1,Yellow)
Else FloodFill(x2,y2+r21,Yellow);
End;
SetColor(LightGray);
OutTextxy(10,470,'Nhan Rnter > Stop.');
Sound(1500); Delay(100); Nosound;
Repeat ch:=Readkey Until ch=#13;
CloseGraph;
Run:=True;
End; Function Done:Boolean;
Var ch:char;
Begin
Khung(20,15,60,17); Window(21,16,59,16);
TextColor(LightGray);
Write('More (y/n)?');
Repeat ch:=Readkey Until ch In ['y','Y','n','N'];
TextColor(LightRed);
Write(ch);
Window(1,1,80,25);
If ch In ['n','N'] Then Done:=true
Else Done:=False;
End; Begin
Repeat
Init;
If not Run then Halt;
Until Done;
End. Ậ Ộ ệ I CHO BÀI TOÁN 8 H U TRÊN BÀN C VUA 8X8). Tìm M T nghi m cho Ờ Ả
ậ ờ ượ Ờ
**10 (TÌM 1 L I GI
ặ
bài toán: Đ t 8 h u trên bàn c vua 8x8 sao cho không con nào ăn đ c con nào. Program Tim_Mot_Loi_Giai_Cho_Bai_8_Hau;
Uses crt,graph;
Const dl=200;
Var
p:pointer;
found:boolean;
a:array[1..8] of boolean;
b:array[2..16] of boolean; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 138 c:array[7..7]of boolean;
h:array[1..8] of Integer; Procedure Initgr;
Var gd,gm:integer;
Begin
gd:=detect;
initgraph(gd,gm,'..\bgi');
if graphresult<>grok then
begin
write('Loi Do Hoa ! Go Enter Ket Thuc');
readln;
halt(1)
end
End; Procedure Demo;
Begin
settextstyle(1,0,3);
setbkcolor(green);
setcolor(blue);
outtextxy(425,30,'Tim Mot Loi Giai');
settextstyle(1,0,4);
setcolor(white);
outtextxy(425,90,'Cho Bai Toan');
setcolor(red);
settextstyle(4,0,7);
outtextxy(440,160,'8 Hau');
setcolor(blue);
settextstyle(1,0,3);
outtextxy(440,410,'Ha Noi 2005');
setcolor(white);
settextstyle(3,0,1);
outtextxy(425,440,' Thay TranHongQue');
End; Procedure Draw(i,j:integer);
Begin
if (i+j)mod 2=0 then
begin
setfillstyle(1,7);
bar((i1)*50+10,(j1)*50+10,(i1)*50+50+10,(j1)*50+50+10);
end
else
begin
setfillstyle(1,white);
bar((i1)*50+10,(j1)*50+10,(i1)*50+50+10,(j1)*50+50+10); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 139 end;
End; Procedure Draw_Queen(i,j:integer);
Var size:integer;
Begin
setfillstyle(1,3);
setcolor(red);
bar(i,j,i+50,j+55);
ellipse(i+25,j+35,0,360,10,5);
line(i+2510,j+35,i+2520,j+3520);
line(i+25+10,j+35,i+25+20,j+3520);
line(i+251010,j+3520,i+25+20,j+3520);
circle(i+251010+5,j+35203,3);
circle(i+251010+5+10,j+35203,3);
circle(i+251010+5+20,j+35203,3);
circle(i+251010+5+30,j+35203,3);
setfillstyle(1,4);
floodfill(i+25,j+3510,4);
setfillstyle(1,8);
floodfill(i+251010+5,j+35203,4);
floodfill(i+251010+5+10,j+35203,4);
floodfill(i+251010+5+10+10,j+35203,4);
floodfill(i+251010+5+10+10+10,j+35203,4);
size:=Imagesize(i+1,j+1,i+51,j+51);
getmem(p,size);
getimage(i+2,j+2,i+502,j+502,p^);
End; Procedure Put_Queen(i,j:integer);
Begin
Putimage(i+2,j+2,P^,Xorput);
End; Procedure Table;
Var m,n:integer;
Begin
setviewport(0,0,getmaxx,getmaxy,false);
for m:=1 to 8 do
for n:=1 to 8 do
Draw(m,n);
Demo;
Draw_Queen(10,getmaxy65);Put_Queen(10,getmaxy65);
setfillstyle(1,blue);
bar(7,410,413,470);
setcolor(red);
rectangle(8,8,412,411); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 140 rectangle(7,7,413,412);
End; Procedure Result;
Var s:string[2];
i:integer;
Begin
setfillstyle(1,blue);
bar(7,410,413,470);
setcolor(red);
rectangle(8,8,412,411);
rectangle(7,7,413,412);
settextstyle(1,0,3);
setcolor(white);
for i:=1 to 8 do
begin
str(h[i],s);
outtextxy(28+(i1)*50,getmaxy50,s);
end;
End; Procedure Try(i:integer;Var q:boolean);
Var j:integer;
Begin
j:=0;
repeat
q:=false; inc(j);
if a[j] and b[i+j] and c[ij] then
begin
h[i]:=j;
Put_Queen((i1)*50+10,(j1)*50+10);
sound(150);delay(dl);nosound;
a[j]:=false;b[i+j]:=false;c[ij]:=false;
if i<8 then
begin
Try(i+1,q);
if not q then
begin
a[j]:=True;b[i+j]:=true;c[ij]:=true;
Put_Queen((i1)*50+10,(j1)*50+10);
sound(350);delay(dl);nosound;
end;
end
else q:=true;
end;
until q or(j=8);
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 141 Procedure Search;
Var i:integer;ch:char;
Begin
for i:=1 to 8 do a[i]:=true;
for i:=2 to 16 do b[i]:=true;
for i:=7 to 7 do c[i]:=true;
Try(1,found);
if found then Result;
setcolor(white);
settextstyle(2,0,7);
outtextxy(430,300,'Go Esc Ket Thuc !');
repeat ch:=readkey until ch=#27;
End; BEGIN
Initgr;
Table;
Search;
Closegraph;
END. Ấ Ả Ờ Ậ Ặ Ệ Ể Ả Ệ ể ậ ặ ờ ấ ỳ ể ầ ượ ậ
ừ ượ ệ ộ c con nào. Gõ l n l Ủ
**11 (TÌM T T C CÁC NGHI M CÓ TH CÓ C A BÀI TOÁN Đ T 8 H U TRÊN BÀN C VUA
Ấ
8X8). Tìm T T C CÁC NGHI M có th cho bài toán “H u”: Tìm cách đ t 8 h u trên bàn c vua 8x8
ể
sao cho không con nào ăn đ
t m t phím b t k đ xem t ng nghi m. Gõ ESC đ
ra. Program Tim_Tat_Ca_Loi_Giai_Xep_8_Hau;
Uses crt,graph;
Const Mc:Array [1..210,1..2] of Word =
((1046,24),(1046,12),(1174,12),(1244,24),
(1046,24),(1244,24),(1046,24),(1244,24), (1174,24),(934,24),(934,12),(1046,12),
(1174,24),(934,24),(1174,24),(934,24),
(1174,24),(1046,24),(880,24),(880,12),
(934,12),(1046,24),(880,24),(1046,24),
(934,24),(880,24),(934,24),(784,96),
(1046,24),(1046,12),(1174,12),(1244,24),
(1046,24),(1244,24),(1046,24),(1244,24),
(1174,24),(934,24),(934,12),(1046,12),
(1174,24),(934,24),(1174,24),(934,24),
(1174,24),(1046,24),(880,24),(880,12),
(934,12),(1046,24),(1244,24),(1174,24),
(742,24),(784,24),(36000,24),(36000,48),
(36000,24),(1174,24),(1174,48),(1046,24),
(1174,24),(784,72),(784,24),(1174,48), 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 142 (1398,24),(1244,24),(1174,72),
(1046,24),
(1174,48),(934,24),(784,24),(880,72),
(880,24),(934,48),(784,24),(880,24),
(588,72),(1174,24),(1174,48),(1046,24),
(1174,24),(784,72),(588,24),(588,48),
(784,24),(934,24),(880,72),(880,24),
(934,48),(742,24),(880,24),(588,72),
(588,24),(1046,48),(1046,24),(934,24),
(934,96),(36000,48),(36000,24),(1174,24),
(1174,48),(1046,24),(1174,24),(784,72),
(784,24),(1174,48),(1398,24),(1244,24),
(1174,72),(1046,24),(1174,48),(934,24),
(784,24),(880,72),(880,24),(934,48),
(784,24),(880,24),(588,72),(1174,24),
(1174,48),(1046,24),(1174,24),(784,72),
(588,24),(588,48),(784,24),(934,24),
(880,72),(880,24),(934,48),(742,24),
(784,24),(880,72),(1046,24),(1046,24),
(1174,24),(742,24),(880,24),(784,96),
(784,48),(880,72),(784,24),(880,48),
(588,24),(588,24),(522,72),(934,24),
(880,48),(588,24),(784,24),(880,72),
(880,24),(1046,48),(1174,24),(1244,24),
(1174,96),(36000,48),(1398,24),(1244,24),
(1174,72),(934,24),(934,48),(1046,24),
(1174,24),(1174,72),(880,24),(934,48),
(784,24),(880,24),(588,48),(36000,48),
(1046,32),(934,32),(880,32),(784,48),
(36000,24),(36000,48),(36000,24),(1174,24),
(1174,48),(1046,24),(1174,24),(784,72),
(784,24),(1174,48),(1398,24),(1244,24),
(1174,72),(1046,24),(1174,48),(934,24),
(784,24),(880,72),(880,24),(934,48),
(784,24),(880,24),(588,72),(1174,24),
(1174,48),(1046,24),(1174,24),(784,72),
(588,24),(588,48),(784,24),(934,24),
(880,72),(880,24));
Var
p:pointer;
t,g:integer;
ch:char;
stop:boolean;
a:array[1..8] of boolean;
b:array[2..16] of boolean;
c:array[7..7]of boolean;
h:array[1..8] of Integer; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 143 Procedure Initgr;
Var gd,gm:integer;
Begin
gd:=detect;
initgraph(gd,gm,'..\bgi');
if graphresult<>grok then
begin
write('Loi Do Hoa ! Go Enter Ket Thuc');
readln;
halt(1)
end
End; Procedure Demo;
Begin
settextstyle(1,0,2);
setbkcolor(green);
setcolor(blue);
outtextxy(425,30,'Tim Tat Ca Loi Giai');
settextstyle(1,0,4);
setcolor(white);
outtextxy(425,60,'Cho Bai Toan');
setcolor(red);
settextstyle(4,0,7);
outtextxy(440,100,'8 Hau');
setcolor(Blue);
settextstyle(1,0,3);
outtextxy(440,370,'Ha Noi 2002');
setcolor(Magenta);
settextstyle(3,0,1);
outtextxy(425,410,' Thay TranhongQue');
setcolor(red);
outtextxy(425,440,' Hoi Tin hoc Viet nam');
End; Procedure Draw(i,j:integer);
Begin
if (i+j)mod 2=0 then
begin
setfillstyle(1,7);
bar((i1)*50+10,(j1)*50+10,(i1)*50+50+10,(j1)*50+50+10);
end
else
begin
setfillstyle(1,white);
bar((i1)*50+10,(j1)*50+10,(i1)*50+50+10,(j1)*50+50+10); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 144 end;
End; Procedure Draw_Queen(i,j:integer);
Var size:integer;
Begin
setfillstyle(1,3);
setcolor(red);
bar(i,j,i+50,j+55);
ellipse(i+25,j+35,0,360,10,5);
line(i+2510,j+35,i+2520,j+3520);
line(i+25+10,j+35,i+25+20,j+3520);
line(i+251010,j+3520,i+25+20,j+3520);
circle(i+251010+5,j+35203,3);
circle(i+251010+5+10,j+35203,3);
circle(i+251010+5+20,j+35203,3);
circle(i+251010+5+30,j+35203,3);
setfillstyle(1,4);
floodfill(i+25,j+3510,4);
setfillstyle(1,8);
floodfill(i+251010+5,j+35203,4);
floodfill(i+251010+5+10,j+35203,4);
floodfill(i+251010+5+10+10,j+35203,4);
floodfill(i+251010+5+10+10+10,j+35203,4);
size:=Imagesize(i+1,j+1,i+51,j+51);
getmem(p,size);
getimage(i+2,j+2,i+502,j+502,p^);
End; Procedure Put_Queen(i,j:integer);
Begin
Putimage(i+2,j+2,P^,Xorput);
End;
{===============================}
Procedure Table;
Var m,n:integer;
Begin
setviewport(0,0,getmaxx,getmaxy,false);
for m:=1 to 8 do
for n:=1 to 8 do
Draw(m,n);
Demo;
Draw_Queen(10,getmaxy65);Put_Queen(10,getmaxy65);
setfillstyle(1,blue);
bar(7,410,413,470);
setcolor(red);
rectangle(8,8,412,411); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 145 rectangle(7,7,413,412);
End; Procedure Result;
Var s:string[2];
i:integer;
Begin
setfillstyle(1,blue);
bar(7,410,413,470);
setcolor(red);
rectangle(8,8,412,411);
rectangle(7,7,413,412);
settextstyle(1,0,3);
setcolor(white);
for i:=1 to 8 do
begin
str(h[i],s);
outtextxy(28+(i1)*50,getmaxy50,s);
end;
End; Procedure Wait;
Begin
inc(t);
Result;
setcolor(yellow);
settextstyle(2,0,6);
outtextxy(430,200,'Go Phim Esc De Ngung !');
setcolor(white);
settextstyle(2,0,5);
outtextxy(420,230,'Go Phim Bat Ky De Tiep Tuc...');
while keypressed do ch:=readkey;
repeat until keypressed;
ch:=readkey;
if ch=#27 then stop:=true;
End; Procedure Music;
Begin
sound(Mc[g][1]);
delay(mc[g][2]*8);{ delay(20000);}
nosound;
if g=210 then g:=1 else inc(g)
End; Procedure Try(i:integer);
Var j:integer; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 146 Begin
j:=0;
repeat
inc(j);
if a[j] and b[i+j] and c[ij] then
begin
h[i]:=j;
Put_Queen((i1)*50+10,(j1)*50+10);
Music;
a[j]:=false;b[i+j]:=false;c[ij]:=false;
if i<8 then Try(i+1)
else Wait;
a[j]:=True;b[i+j]:=true;c[ij]:=true;
Put_Queen((i1)*50+10,(j1)*50+10);
Music;
end;
until (j=8) or stop;
End; Procedure Search;
Var i:integer;
s:string[30];
Begin
t:=0;g:=1;
stop:=false;
for i:=1 to 8 do a[i]:=true;
for i:=2 to 16 do b[i]:=true;
for i:=7 to 7 do c[i]:=true;
Try(1);
str(t,s);
if stop then
s:='Da Tim Duoc '+s+' Loi Giai'
else
s:='Tong So Co '+s+' Loi Giai';
setcolor(red);
settextstyle(2,0,6);
outtextxy(418,280,s);
setcolor(white);
settextstyle(2,0,7);
outtextxy(430,310,'Go Esc Ket Thuc !');
repeat ch:=readkey until ch=#27;
End; BEGIN
Initgr;
Table;
Search; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 147 Closegraph;
END. = = = = = = = = = = = = = = = = = = = = = = ế ơ ơ ề ộ ấ ề ề ấ ạ
m v lý thuy t m t v n đ nào đó, các b n nên đ n th vi n – đ m t ít ti n nh t ế
ầ Ồ Ụ ể ả Ị ế
(N u quên OR l
xem quy n: LÝ THUYÊT Đ TH , nxb GIÁO D C 2012. Tác gi ư ệ
ể ấ
ế
: Tr n Thông Qu ) ậ Ư Ả ể ừ ể ậ ầ thu t toán DFS sang BFS và ng ượ ạ
c l i, ể CODE: PROGRAM DFS_BFS_SEARCH;
USES CRT,GRAPH;
CONST R=15;DL=500;N=8;VC=100; {KHONG CO DUONG DI THI DAT VO CUC VC=100}
C:ARRAY[1..8] OF INTEGER=(150,330,450,450,330,150,30,30);
D:ARRAY[1..8] OF INTEGER=(30,30,150,330,450,450,330,150);
CL:ARRAY[0..3] OF WORD=(BLUE,YELLOW,WHITE,WHITE);
NL:ARRAY[0..3] OF WORD=(YELLOW,BLUE,RED,BLACK);
TYPE CSD=0..VC;
AR=ARRAY[CSD] OF CSD;
QUEUE=RECORD
REAR:CSD;
ELEMENT:AR;
END;
VAR G:ARRAY[CSD,CSD] OF BOOLEAN;
I,J,K,U:CSD;
P:AR;
(**)
PROCEDURE INITGR; { KHOI TAO DO HOA}
VAR GD,GM:INTEGER;
BEGIN
GD:=DETECT; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 148 INITGRAPH(GD,GM,'..\BGI');
IF (GRAPHRESULT<> GROK) THEN
BEGIN
WRITELN('LOI KHOI TAO DO HOA, GO ENTER KET THUC !');
READLN;
HALT(1)
END
END;
(**)
PROCEDURE ADD(X:CSD;VAR Q:QUEUE); {THEM PHAN TU TU DUOI HANG DOI}
BEGIN
WITH Q DO
BEGIN
REAR:=REAR+1;
ELEMENT[REAR]:=X
END;
END;
(**)
PROCEDURE DELETE(VAR Q:QUEUE;VAR X:CSD); {BOT PHAN TU KHOI HANG DOI}
VAR K:CSD;
BEGIN
WITH Q DO
BEGIN
X:=ELEMENT[1];
FOR K:=1 TO REAR1 DO ELEMENT[K]:=ELEMENT[K+1];
REAR:=REAR1
END;
END;
(**)
PROCEDURE VENUT(U:CSD;M1,M2:WORD); {VE CAC DINH DO THI}
VAR ST:STRING[3];
BEGIN
SETFILLSTYLE(1,M2);
SETCOLOR(M1);
FILLELLIPSE(C[U],D[U],R,R);
STR(U,ST);
OUTTEXTXY(C[U]2,D[U]2,ST);
END;
(**)
PROCEDURE LINK(X,Y:CSD;M:WORD);
BEGIN
SETCOLOR(M);
LINE(C[X],D[X],C[Y],D[Y]);
END;
(**)
PROCEDURE DATA_AUTO_CREA; {TU DONG TAO DU LIEU NGAU NHIEN CHO PROG.}
BEGIN 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 149 RANDOMIZE;
FOR I:=1 TO N DO
BEGIN
G[I,I]:=FALSE;
FOR J:=I+1 TO N DO
BEGIN
G[I,J]:=RANDOM(3)=1;
G[J,I]:=G[I,J]
END;
END;
FOR I:=1 TO N DO
BEGIN
J:=0;
REPEAT
J:=J+1
UNTIL G[I,J] OR (J=N);
IF (J=N) AND (NOT G[I,N]) THEN
BEGIN
J:=1+RANDOM(N);
IF J=I THEN IF I 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 150 (**)
PROCEDURE VE_GR_BFS(U:CSD); {HIEN THI DO THI DE DUYET THEO BE RONG}
VAR Q:QUEUE;
BEGIN
VENUT(U,CL[K],NL[K]);
P[U]:=0;
Q.REAR:=0;
ADD(U,Q);
WHILE Q.REAR<>0 DO
BEGIN
DELETE(Q,I);
FOR J:=1 TO N DO
IF G[I,J] THEN
IF P[J]=VC THEN
BEGIN
P[J]:=I;
LINK(I,J,NL[K]);
VENUT(J,CL[K],NL[K]);
VENUT(I,CL[K],NL[K]);
ADD(J,Q);
DELAY(DL);
END;
END;
END; (**)
PROCEDURE BFS; {DUYET THEO CHIEU RONG}
BEGIN
FOR U:=1 TO N DO P[U]:=VC;
K:=0;
FOR U:=1 TO N DO IF P[U]=VC THEN
BEGIN
K:=(K+1) MOD 4;
VE_GR_BFS(U);DELAY(DL)
END;
END;
(**)
PROCEDURE VE_DT_DFS(U:CSD); {HIEN THI DO THI DE DUYET THEO CHIEU SAU}
VAR T:CSD;
BEGIN
I:=I+1;
P[U]:=I;
FOR T:=1 TO N DO
IF G[U,T] THEN
IF P[T]=0 THEN
BEGIN
LINK(U,T,NL[K]); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 151 VENUT(U,CL[K],NL[K]);
VENUT(T,CL[K],NL[K]);
DELAY(DL);
VE_DT_DFS(T);
END;
END;
(**)
PROCEDURE DFS; {DUYET THEO CHIEU SAU}
BEGIN
FOR I:=1 TO N DO P[I]:=0;
I:=0;
FOR U:=1 TO N DO IF P[U]=0 THEN
BEGIN
K:=(K+1) MOD 4;
VENUT(U,CL[K],NL[K]);
VE_DT_DFS(U);DELAY(DL)
END;
END;
(**)
PROCEDURE PROC_CALL_PROC; {THU TUC GOI CAC THU TUC DUYET}
VAR KT:CHAR;
BEGIN
IF KEYPRESSED THEN
REPEAT KT:=READKEY UNTIL NOT KEYPRESSED;
REPEAT
DATA_AUTO_CREA;
PRINT_GRAPH;
DEMO('Theo Be Rong');
KT:=READKEY;
IF KT=#27 THEN EXIT;
BFS;
KT:=READKEY;
IF KT=#27 THEN EXIT;
PRINT_GRAPH;
DEMO('Theo Do Sau');
KT:=READKEY;
IF KT=#27 THEN EXIT;
DFS;
KT:=READKEY;
UNTIL (KT=#27);
END;
(**)
BEGIN (* CHUONG TRINH CHINH *)
CLRSCR;
INITGR;
PROC_CALL_PROC; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 152 CLOSEGRAPH;
END. ử ộ ấ ở ứ Ơ Ả ệ ố ậ Ọ ự ế ươ
ỳ ệ ẳ ạ ọ ư ề
Th m t bài duy nh t
m c TRÊN C B N v duy t theo BFS:
Ố Ế
ỳ ệ
ng k di u,
2(IOI1996: THI OLYMPIC TIN H C QU C T 1996) Ti p theo thành t u kh i l p ph
ộ
ố
ủ
ông Rubik phát minh d ng c i biên ph ng c a kh i này và ông g i đó là các ô vuông k di u. Đó là m t
ượ
ả
b ng 8 ô vuông có kích th
c tô màu khác nhau. ả
ướ
c nh nhau đ 1 2 3 4 8 7 6 5 ố ở ươ ượ ề c ký hi u b i 8 s nguyên d ng đàu tiên (xem hình ngay trên) vi t theo chi u ế ầ ượ
t l n l ở ế ướ i cùng trái. ầ ô góc d
ệ ổ ơ ả ự ế ệ ấ ấ
ủ ả ộ
ỗ
ệ ổ
ự ả ả ổ ơ ả ủ ề ế ộ c tác đ ng b i 3 phép bi n đ i c b n nói trên. Và tác đ ng c a 3 phép ƯỚ Ố
I ĐÂY CÁC S TRÊN CÙNG M I B DATA D ở ữ
gi a
ở
Ở Ỗ Ộ
i đây: (
Ả
Ủ ị
ồ
ể ượ
ả ở
Ị ệ
Các màu tô đ
ồ ắ ầ ừ
ồ
kim đ ng h , b t đ u t
ô góc trên cùng trái và k t thúc
ộ ấ
ọ
ư
M t c u hình nh trên g i là c u hình ban đ u. Ta th c hi n 3 phép bi n đ i c b n ký hi u là ‘A’, ‘B’,
ể
‘C’ đ tác đ ng lên c u hình c a b ng, trong đó:
ướ
• ‘A’: Đ i ch dòng trên và dòng d
i
ề
• ‘B’: Th c hi n phép hoán v theo chi u sang ph i vòng quanh b ng.
ồ
ề
• ‘C’: Quay theo chi u kim đ ng h 4 ô
ọ ấ
M i c u hình đ u có th đ
ổ ơ ả ấ
ế
bi n đ i c b n y mô t
ƯỚ
VÀ D ộ
ướ
b i hình d
I CÙNG LÀ V TRÍ CÁC Ô C A B NG) (cid:0) Ả ủ B NG 1 1 2 3 4 INDEX c a các ô 1 2 3 4 8 7 6 5 ủ INDEX c a các ô 8 7 6 5 (cid:0) Ả B NG 2 4 1 2 3 5 8 7 6 Ả B NG 3 1 7 2 4 8 6 3 5 ứ ố ở ị ộ ỉ ị ả
ổ ươ ứ ủ ả
ị ể ế ị ố
Các s ghi
làm phép bi n đ i t ở
ngoài b ng ch v trí các ô c a b ng. N u m t ô
ế
ế
ng ng, ô vuông mà v trí tr ế
v trí p ch a s i thì có nghĩa là sau khi
ẽ ượ
ổ ủ
ướ
c lúc bi n đ i c a nó là i s đ c chuy n đ n v trí 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 153 ế ề ộ ấ ướ ầ t program tìm dãy các phép bi n đ i đ đ a c u hình ban đ u v m t c u hình đích cho tr c. ể ế ố ổ ủ ạ ổ ể ư ấ
ế
c thêm 2 đi m n u s phép bi n đ i c a b n không quá 300
ấ ồ ả ấ ứ ấ ố c u hình đích. ả
ầ ổ ủ ạ Ự ế ệ ế ổ ạ
ự p.
ế
a) Hãy vi
ạ ẽ ượ
b) B n s đ
ữ ệ
* D li u vào c t trên text file Data.in g m:
ộ
M t dòng duy nh t ch a 8 s nguyên mô t
ế
* K t qu ghi lên text file Data.ou:
ế
ố
Dòng đ u tiên ghi s các phép bi n đ i L
T i L dòng ti p theo ghi ký hi u các phép bi n đ i đã nói trên theo TRÌNH T mà program c a b n đã
ệ
th c hi n Ụ Ụ Ể Ủ ƯỚ I ĐÂY Ộ
M T VÍ D C TH C A BÀI TOÁN NÀY CHO D
Data.In
2 6 8 4 5 7 3 1 Data.Ou
7
B
C
A
B
C
C
B Program MagicSquare; {BAI NAY DUYET DO THI THEO BFS)
Uses crt;
Const kt=8; m=40320; fi='Data.In'; fo='Data.Ou';
Type Bd=array[1..kt] of 1..kt; Ht=array[1..kt] of 1..kt;
Const thuan:Array['A'..'C'] Of Bd=((8,7,6,5,4,3,2,1),(4,1,2,3,6,7,8,5),
(1,7,2,4,5,3,6,8)); {Cac b_doi co ban}
nguoc:Array['A'..'C'] of Bd=((8,7,6,5,4,3,2,1),(2,3,4,1,8,5,6,7),
(1,3,6,4,5,7,2,8)); {Nguoc cua b_doi}
dau:Ht=(1,2,3,4,5,6,7,8); {Trang thai ban dau}
Var dic:Ht; {Bien luu trang thai dich}
s:String; {Day cac b_doi dua tr_thai dau den tr_thai dich}
fact:Array[0..kt] of Longint; {mang luu tu 0! den 8!}
last:Array[0..m] of Char; {last[sh(dic)] la ky tu cuoi cung cua day cac}
{b_doi dua trang thai dau ve trang thai dich}
{Neu last[sh(dic)]=' ' thi dich cung rong (tuc dich khong duoc sinh}
Procedure Nhap;
Var tepvao:text; i:word;
Begin
Assign(tepvao,fi); Reset(tepvao);
For i:=1 to kt Do Read(tepvao,dic[i]);
Close(tepvao);
End; {Het nhap lieu} Procedure Facto; {Tinh giai thua}
Var i:word;
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 154 Begin
fact[1]:=1; fact[0]:=1;
For i:=2 to kt Do
fact[i]:=i*fact[i1];
End; ỏ ơ ố ị ủ ầ ủ
đ u tiên c a p thì có Function sh(p:Ht):Word; {ham sh de tinh so hieu cua mot hoan vi bat ky}
Var res, L, i,j:Word;
Begin
res:=0;
For i:=1 to kt Do
Begin
L:=0; {L so cac phan tu cua p o cac vi tri tu 1>i1 nh h n p[i]}
For j:=1 to i1 Do
If p[j] dic[i] then
Begin
bang:=false;
exit;
End;
End;
Procedure sinh; {Tao day cac b_doi tu tr_thai dau de dat tr_thai dich}
{last[sh(dic)] la phep b_doi cuoi cung cua day}
Const qs=700; {kich thuoc danh sach}
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 155 Var hdoi:Array[0..qs1] of ht; {Khai bao
hang doi chua cac b_doi}
notfound:Boolean;
head, tail, i, rankq:Word;
r, s:Ht; x:Char;
Begin
For i:=0 to m Do last[i]:=' '; {khoi tri}
last[0]:='.';
head:=0; tail:=1;
hdoi[0]:=dau;
notfound:=true;
While notfound Do
Begin
r:=hdoi[head]; Inc(head);
If head=qs Then head:=0;
For x:='A' to 'C' Do
Begin
App(r, x, s);
rankq:=sh(s);
If last[rankq]=' ' Then
Begin
last[rankq]:=x;
If bang(dic,s) Then
Begin
notfound:=false;
break;
End;
hdoi[tail]:=s;
Inc(tail);
If tail=qs Then tail:=0;
End;
End;
End;
End; {ket thuc thu tuc sinh}
Procedure tim; {kien tao cac phep bien doi}
Var rankq:Word; x:Char; p,q:Ht;
Begin
q:=dic; rankq:=sh(q); s:=' ';
While rankq<>0 do
Begin
x:=last[rankq];
s:=x+s;
bd_nguoc(q,x,p);
q:=p;
rankq:=sh(q);
End;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 156 ƯỚ Ề Ị NG
ộ ồ ị
ư ế ằ ặ t r ng t kê các thành ph n (mi n) liên thông c a m t đ th vô h
ượ ướ
ng. Bi
ư ướ ể ệ ễ ầ
ở
c bi u di n b i danh sách li t kê c nh nh sau (Ds này l u trên Text ệ
ng đ Procedure Xuat;
Var tepra:text; L,i:word;
Begin
Assign(tepra,fo); rewrite(tepra);
L:=length(s);
Writeln(tepra, L1);
For i:=1 to L do Writeln(tepra, s[i]);
Close(tepra);
End;
Begin {Main Prog.}
clrscr;
Nhap;
Facto;
Sinh;
Tim;
Xuat;
Writeln('Done!');
readln;
End.
Ồ Ị
B/ CÁC THU T TOÁN TÌM CÁC MI N LIÊN THÔNG TRÊN Đ TH
B.1) TÌM MI N LIÊN THÔNG TRÊN Đ TH VÔ H
ủ
ậ
3 Cài đ t thu t toán tìm & li
ạ
ủ ồ ị
ấ
c u trúc c a đ th vô h
File LTHG.IN): 13 10
1 2
1 3
2 3
4 5
4 7
5 6
8 9
10 12
11 12
12 13 ả ư ế K t qu l u trên file Xuat.kq ể ạ ượ ệ ồ ị ệ ụ ề CODE: Đ đ t đ c m c tiêu đ bài ta duy t đ th Đ quy theo DFS Program Dem_so_thp_lthong;
uses crt;
const max=50;
fi='lthg.in'; fo='xuat.kq'; {Du lieu vao la Ds liet ke canh!}
type m1=Array[0..max] of integer;
m2=Array[1..max,1..max] of byte;
var a:m2; {ma tran danh sach liet ke canh} 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 157 n:integer;
v:m1;
sm:integer; {so mien lien thong} Procedure Nhap;
var f:text; i,j:integer;
Begin
Assign(f,fi); Reset(f);
Read(f,n);
FillChar(a,sizeof(a),0); {khoi tri cho mang a}
While not seekeof(f) do {tao ma tran luu dinh dau va cuoi cua moi canh}
Begin
Read(f,i);
While not seekeoln(f) do
Begin
Read(f,j);
a[i,j]:=1;
a[j,i]:=1;
End;
Readln(f);
End;
Close(f);
End; Procedure DFS(i:integer);
Var j:integer;
Begin
For j:=1 to n do
If v[j]=0 then {neu j chua thuoc mien lien thong nao thi}
If a[i,j]=1 then {neu j ke voi i thi }
Begin
v[j]:=sm; {ghi nho dinh j cung mien lth sm voi i}
DFS(j); {duyet tiep do thi theo chieu sau tu dinh j}
End;
End; Procedure Xuly;
Var s:integer;
Begin
FillChar(v,sizeof(v),0);
sm:=0;
For s:=1 to n do
If v[s]=0 then
Begin
Inc(sm); {danh so cho mien lth moi}
v[s]:=sm; {s la dinh dau tien phat hien thuoc mien lth moi}
DFS(s); {Duyet dthi tim tat ca cac dinh lth voi s}
End;
End; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 158 Procedure ghikq;
var f:text; i,j:integer;
Begin
Assign(f,fo); Rewrite(f);
Writeln(f,'So mien lien thong la:',sm);
For i:=1 to sm do
Begin
For j:=1 to n do
If v[j]=i then
Write(f,j,' ');
Writeln(f,'< Day la cac dinh o mien Lt thu ',i);
End;
close(f);
End; Ề Ạ Ồ ƯỚ Ự Ị NG (TH C Ặ Ậ Ấ Procedure Inkq;
var f:text; line:string[50];
Begin
Assign(f,fo); Reset(f);
While not seekeof(f) Do
Begin
Readln(f,line);
Writeln(line);
End;
Close(f);
End;
Begin clrscr;
Nhap;
Xuly;
Ghikq;
Inkq;
Writeln;
Write('Go ENTER de thoat!');
Readln;
End. B.2) TÌM MI N LIÊN THÔNG M NH TRÊN Đ TH CÓ H
CH T LÀ CÀI Đ T THU T TOÁN TARJAN)
ậ
4/ Cài đ t thu t toán tìm & li
ồ ị
ế ằ
TARJAN). Bi
LTH_MANH.IN):
11 15
1 2
8 h 54 m 28/7/2017 ặ ủ ồ ị ướ Ạ ệ ề t kê các mi n liên thông M NH c a đ th có h ậ
ng (thu t toán ượ ướ ư ễ ể ở c bi u di n b i ds cung sau đây (và ds này l u trên text file t r ng đ th có h ng này đ Th y Tr n Thông Qu 159 1 8
2 3
3 4
4 2
4 5
5 6
6 7
7 5
8 9
9 4
9 10
10 8
10 11
11 9 ả ư ế K t qu l u trên file LTH_MAMH.OU ệ ồ ị ề
CODE: (V duy t đ th , bài này cũng dùng DFS)
Program Tarjan_Alg;
Uses crt;
Const fi='LTH_MANH.IN'; fo='LTH_MANH.OU';
Type lk=^nut;
nut=record
s:word;
next:lk;
End;
cay=array[0..200] of lk;
m1=array[0..200] of word;
Var sv,id,m,n,top:word; {m:so dinh; n:so canh}
Num,Low,p,s:m1; dsk:cay;
f:Text; Procedure Nhap;
Var i,u,v: word; t:lk;
Begin
Assign(f,fi); Reset(f);
Readln(f,m,n); {doc so dinh m, so canh n tu tep vao cac bien nho m,n}
For i:=1 to n Do
Begin
Readln(f,u,v);
New(t);
t^.s:=v;
t^.next:=dsk[u];
dsk[u]:=t;
End;
Close(f);
End; Function min(u,v:word):word;
Begin
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 160 If u Procedure DFS(i:word);
Var j:word; t:lk;
Begin
Inc(id);
Num[i]:=id;
Low[i]:=Num[i];
t:=dsk[i];
Inc(top);
s[top]:=i;
While Not (t=Nil) Do
Begin
j:=t^.s;
If p[j]=0 then
If Num[j]=0 then
Begin
DFS(j);
Low[i]:=min(Low[i], Low[j]);
End
Else Low[i]:=min(Low[i], Num[j]);
t:=t^.next;
End;
If Low[i]=Num[i] then
Begin
Inc(sv);
Repeat
j:=s[top]; {lay 1 phan tu ra khoi Stack tai dinh, luu vao j}
dec(top); {Khi do so phan tu o Stack giam di mot}
p[j]:=sv;
Until i=j;
End;
End; Procedure Visit;
var i:word;
Begin
For i:=1 to m do
If Num[i]=0 then DFS(i);
End; Procedure Xuat;
Var i,j:word;
Begin
Assign(f,fo); Rewrite(f);
Writeln;Writeln;
Writeln(f,'So mien lien thong la:',sv);
For i:=1 to sv Do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 161 Begin
For j:=1 to m Do
If p[j]=i then write(f,j,' ');
Writeln(f,'> Cac dinh thuoc mien lien thong thu ',i,'.');
End;
Close(f);
end; Procedure Inkq;
Var f:Text;line:String;
Begin
Assign(f,fo); Reset(f);
While Not SeekEof(f) Do
Begin
Readln(f,line);
Writeln(line);
End;
Close(f);
End; { Main Program }
Begin clrscr;
Nhap;
Visit;
Xuat;
Inkq;
Readln;
End. ả ượ ỉ ỉ Ấ ồ ị Ỳ Ề c ấ ể Ị
B.3) BÀI TOÁN TÔ MÀU Đ THỒ
ố
5 Hãy dùng s màu ít nh t đ tô màu đ th có N đ nh, sao cho hai đ nh B T K K NHAU ph i đ
ằ
tô b ng màu KHÁC NHAU.
Yêu c u:ầ
ồ ọ
1Đ h a hóa Code
ấ
2C u trúc đ th t
CODE:
PROGRAM COLOR_GRAPH;
USES CRT,GRAPH;
CONST R=15;DL=500;VC=100;N=8;
C:ARRAY[1..8] OF INTEGER=(150,330,450,450,330,150,30,30);
D:ARRAY[1..8] OF INTEGER=(30,30,150,330,450,450,330,150);
CL:ARRAY[0..4] OF WORD=(WHITE,RED,YELLOW,BLUE,GREEN);
TYPE CSD=0..VC;
VAR G:ARRAY[CSD,CSD] OF BOOLEAN;
V,V0,V1:SET OF CSD;
I,J,K:CSD;
(**) ờ ổ ấ ồ ị ự ộ ể ấ đ ng thay đ i nh nh n phím ENTER; nh n ESC đ thoát. 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 162 PROCEDURE INITGR;
VAR GD,GM:INTEGER;
BEGIN
GD:=DETECT;
INITGRAPH(GD,GM,'..\BGI');
IF (GRAPHRESULT<> GROK) THEN
BEGIN
WRITELN('LOI KHOI TAO DO HOA, GO ENTER KET THUC !');
READLN;
HALT(1)
END
END;
(**)
PROCEDURE VENUT(U:CSD;M:WORD);
BEGIN
SETFILLSTYLE(1,M);SETCOLOR(M);
FILLELLIPSE(C[U],D[U],R,R);
END;
(**)
PROCEDURE LINK(X,Y:CSD;M:WORD);
BEGIN
SETCOLOR(M);
LINE(C[X],D[X],C[Y],D[Y]);
END;
(**)
PROCEDURE INIT_GRAPH;
BEGIN
RANDOMIZE;
FOR I:=1 TO N DO
BEGIN
G[I,I]:=FALSE;
FOR J:=I+1 TO N DO
BEGIN
G[I,J]:=RANDOM(3)=1;
G[J,I]:=G[I,J]
END;
END;
FOR I:=1 TO N DO
BEGIN
J:=0;
REPEAT
J:=J+1
UNTIL G[I,J] OR (J=N);
IF (J=N) AND (NOT G[I,N]) THEN
BEGIN
J:=RANDOM(N)+1;
IF J=I THEN IF I 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 163 G[I,J]:=TRUE;G[J,I]:=TRUE
END;
END;
END;
(**)
PROCEDURE MENU_PRINT;
BEGIN
SETCOLOR(WHITE);
OUTTEXTXY(500,30,'Son Do Thi');
SETCOLOR(YELLOW);
OUTTEXTXY(490,90,'Go Enter Tiep Tuc ...');
SETCOLOR(RED);
OUTTEXTXY(490,150,'Go Esc Ket Thuc !');
END;
(**)
PROCEDURE PRINT_GRAPH;
BEGIN
SETBKCOLOR(BLUE);CLEARDEVICE;
SETFILLSTYLE(1,DARKGRAY);
BAR(0,0,GETMAXY,GETMAXY);
FOR I:=1 TO N DO
FOR J:=1 TO N DO IF G[I,J] THEN LINK(I,J,CL[0]);
LINE(C[I],D[I],C[J],D[J]);
FOR I:=1 TO N DO VENUT(I,CL[0]);
END;
(**)
PROCEDURE COLORING; {To mau do thi}
VAR CHECK:BOOLEAN;
BEGIN
V0:=V;K:=0;
WHILE V0<>[] DO
BEGIN
K:=K+1; I:=0;
REPEAT I:=I+1 UNTIL I IN V0;
VENUT(I,CL[K]); DELAY(DL);
V1:=[I];
FOR I:=1 TO N DO
IF I IN V0 THEN
BEGIN
J:=0;
REPEAT
J:=J+1;
CHECK:=G[I,J] AND (J IN V1);
UNTIL CHECK OR (J=N);
IF NOT CHECK THEN
BEGIN
VENUT(I,CL[K]); DELAY(DL); 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 164 V1:=V1+[I];
END;
END;
V0:=V0V1;
END;
END;
(**)
PROCEDURE PROC_CALL_PROC; {THU TUC GOI CAC THU TUC}
VAR KT:CHAR;
BEGIN
IF KEYPRESSED THEN
REPEAT KT:=READKEY UNTIL NOT KEYPRESSED;
REPEAT
INIT_GRAPH;
PRINT_GRAPH;
MENU_PRINT;
COLORING;
KT:=READKEY;
UNTIL (KT=#27);
END;
(**)
BEGIN (* CHUONG TRINH CHINH *)
CLRSCR;
INITGR;
V:=[];
FOR I:=1 TO N DO V:=V+[I];
PROC_CALL_PROC;
CLOSEGRAPH;
END. ể ễ ệ ườ ướ ượ ồ ị ề ướ ậ ng đ ng đi Euler trên đ th vô h ở
c bi u di n b i ma tr n k d i đây: Ị
Ồ
A) Đ TH EULER
6 Li
t kê các đ
9 (cid:0)
ố ỉ
0 1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0
1 1 0 1 0 1 0 0 0
0 0 1 0 1 0 0 0 0
0 0 0 1 0 1 0 1 1
0 0 1 0 1 0 1 1 0
0 0 0 0 0 1 0 1 0
8 h 54 m 28/7/2017 ộ ắ ả ủ ồ ị ữ ệ S đ nh c a đ th (B t bu c ph i có d li u này!) Th y Tr n Thông Qu 165 0 0 0 0 1 1 1 0 1
0 0 0 0 1 0 0 1 0 CODE:
Program Duongdi_Euler;
uses crt;
Label L1;
Const max=30;
Type mg1=array[1..max,1..max] of byte;
mg2=array[1..max] of boolean;
mg3=array[1..max] of integer;
Var c:mg1; check:mg2; i,j,u,n,dem1,dem:integer;
f:text; tf:string[12]; Function l_thg(u,v:integer; ktra:mg2):integer;
var i,j,d,k,l:integer; p:mg3;
Begin
c[u,v]:=0; c[v,u]:=0;
For i:=1 to n do p[i]:=0;
d:=0;
For i:=1 to n do
Begin
If (p[i]=0) and ktra[i] then
Begin
Inc(d); p[i]:=d;
for j:=1 to n do
for L:=1 to n do
If (p[j]=0) and ktra[j] and (p[L]=d) and (c[L,j]=1) then
p[j]:=d;
End;
End;
c[u,v]:=1; c[v,u]:=1;
L_thg:=d;
End; {Main Prog.}
Begin clrscr;
Write('Nhap ten tep du lieu:'); readln(tf);
Assign(f,tf); Reset(f);
Readln(f,n);
For i:=1 to n do
For j:=1 to n do Read(f,c[i,j]);
Close(f);
Write('Cho biet dinh xuat phat:'); Readln(u);
Writeln('Duong di Euler tim duoc:'); Writeln;
dem:=0;
For j:=1 to n do check[j]:=true;
L1:dem1:=0;
For j:=1 to n do 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 166 If c[u,j]=1 then Inc(dem1);
dem:=dem+1;
If dem1=1 then
Begin
For j:=1 to n do If c[u,j]=1 then
Begin
check[u]:=false;
c[u,j]:=0; c[j,u]:=0;
Writeln('Di qua canh thu ',dem,' dung 1 lan la tu:',u,'>',j);
u:=j;
Goto L1;
End;
End
Else
Begin
For j:=1 to n do
If c[u,j]=1 then
Begin
If L_thg(u,j,check)=1 then
Begin
c[u,j]:=0; c[j,u]:=0;
Writeln('Di qua canh thu ',dem,' dung 1 lan la tu:',u,'>',j);
u:=j;
Goto L1;
End
End
End;
Readln;
End. ở ạ ầ ể ả ồ ị ướ ệ
ướ ễ
ướ ị
ạ ượ ả ớ ồ ị t kê c nh. Yêu c u: Program
ng: gõ
ng: gõ 0; đ th có h ồ ị
ng (đ th vô h c c v i đ th vô h ồ ị ể
ồ ị
ng và đ th có h ỉ ộ ắ ả ạ 7 Tìm và hi n th chu trình EULER trên đ th bi u di n b i danh sách li
ướ
ph i ch y đ
1).
Test1: Dùng file vào DTEUL.IN
4 5 > 4 đ nh; 5 c nh (B t bu c ph i có hai data này!)
1 2
1 4
2 3
2 4
3 4
Test 2: Dùng file vào EU1.IN
5 6
1 2
1 5
2 5
3 4
3 5
4 5
8 h 54 m 28/7/2017 Th y Tr n Thông Qu Ị Ồ 167 B) Đ TH HAMILTON
8 Tìm và hi n th đ
Test1: Dùng file vào DTEUL.IN
4 5
1 2
1 4
2 3
2 4
3 4
Test 2: Dùng file vào EU1.IN
5 6
1 2
1 5
2 5
3 4
3 5
4 5 ồ ị ướ ượ ể ễ ệ ể ị ườ ng đi Hamilton trên đ th vô h ng đ ở
c bi u di n b i danh sách li ạ
t kê c nh. ề ủ ồ ị ử ệ ồ ị ượ t kê chu trình Hamilton trên đ th đ c ể ễ ậ ớ
ạ
9/ (Bài này b n th test v i ma tr n k c a đ th ) Tìm và li
ề ướ
ở
bi u di n b i ma tr n k d ậ
i đây. 8
0 1 1 1 0 0 0 0
1 0 0 0 1 0 0 0
1 0 0 1 1 0 0 0
1 0 1 0 0 1 1 0
0 1 1 0 0 1 0 1
0 0 0 1 1 0 1 0
0 0 0 1 0 1 0 1
0 0 0 0 1 0 1 0 CODE:
Program Chutrinh_Hamilton;
Uses crt;
Var i,j,n:Integer;
c:Array[1..20,1..20] of byte;
p:Array[1..20] of byte;
b:array[1..20] of boolean;
d:Word; f1,f2:Text; Procedure Xuly;
Label l1;
Var t:integer; ktra:boolean;
Begin
ktra:=true;
For t:=1 to n1 Do
If c[p[t],p[t+1]]=0 then
Begin
8 h 54 m 28/7/2017 Th y Tr n Thông Qu 168 ktra:=False;
goto L1;
End;
If c[p[n],p[1]]=0 then ktra:=False;
L1:If ktra then
Begin
d:=d+1;
Write(f2,'Chu trinh Hamilton thu ',d,' la:');
For t:=1 to n Do Write(f2,p[t]:3);
Writeln(f2);
End;
End; Procedure test(k:integer);
Var i1,j:integer;
Begin
For j:=1 to n do
If b[j] then
Begin
p[k]:=j; b[j]:=False;
If k=n then xuly Else test(k+1);
b[j]:=True;
End;
End;
{Main Prog.}
Begin clrscr;
Assign(f1,'CtHamil.Inp'); Reset(f1);
Assign(f2,'CtHamil.Out'); Rewrite(f2);
Readln(f1,n);
For i:=1 to n do
For j:=1 to n do Read(f1,c[i,j]);
Close(f1);
For i:=1 to n do b[i]:=True; d:=0;
Test(1);
Close(f2);
Writeln('DONE!');
Writeln('Go Enter de quay ve chuong trinh!');
Writeln('De xem ket qua, go phim F3, go CtHamil.Out, roi ENTER.');
Readln;
End. Ọ Ồ Ể Ị ổ ế
ả ề ả ưở ế ộ Ố
ng đ n n i dung và cách gi i bài toán, ta ƯỜ Ị 10/ CHU TRÌNH HAMILTON TRÊN Đ TH CÓ TR NG S : Bài toán KINH ĐI N n i ti ng:
TRAVELLING SALESMAN PROBLEM. Không h nh h
ọ
g i bài toán này là bài toán NG I DU L CH. ị ố ừ ượ ườ ữ ể ế ị ể
c có N đ a đi m du l ch đ 1 đ n N. Gi a hai đ a đi m b t k có th có đ c đánh s t ng đi ữ ể ằ ạ ị ể
ữ
ể ấ ố ố ấ ả ỗ ị ị
ề ể ể ầ ộ ị ấ ỳ
ị
ộ ướ
M t n
ị
ẳ
ặ
ườ
ng đi thì giá đi (b ng ô tô ch ng h n) du l ch gi a chúng là
ho c không. Gi a hai đ a di m i, j có đ
ừ ị
ữ
nh ng s nguyên C(i,j)>0. Nói chung C(i, j) khác C(j, i). Khách du l ch xu t phát t
đ a đi m k ,mu n
ậ
ồ
t c các đ a đi m, m i đ a đi m đúng 1 l n, r i quay v k (k 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 169 ụ ụ ể ể ị
ữ ệ ề ễ ậ ấ ộ ở ả ạ ư ị ỏ
ớ ổ
trình du l ch v i t ng chi phí C nh
nh t. D li u vào cho m t ví d c th bi u di n b i ma tr n k mô t m ng du l ch nói trên nh sau: 6
0 3 0 4 0 0
3 0 4 0 2 0
0 4 0 0 1 1
4 0 0 0 1 5
0 2 1 1 0 5
0 0 1 5 5 0
1 6 CODE: Program Nguoi_Dulich; { chu trinh Hamilton tren do thi co trong so}
Uses crt;
Const sd=10;
fi='HMT.VAO'; fo='HMT.RA';
Type m1=Array[1..sd,1..sd] of Integer;
m2=Array[1..sd] of Integer;
m3=Array[1..sd] of Boolean;
Var c:m1;
a,x:m2;
d:m3;
n,cmin,sum,maxsum,dem:Integer; Procedure Nhap;
Var f:text; x,i,j:Integer;
Begin
Assign(f,fi); Reset(f);
Readln(f,n);
cmin:=maxint;
For i:=1 to n do
Begin
For j:=1 to n do
Begin
Read(f,c[i,j]);
If c[i,j]>0 then
If (c[i,j] Procedure Tim_Chiphi_Min;
Begin
If sum+c[a[n],a[1]] 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 170 maxsum:=sum+c[a[n],a[1]];
x:=a;
Inc(dem);
End;
End;
Procedure Try(i:integer);
var j:Integer;
Begin
If i>n Then
Begin
If c[a[n],a[1]]>0 Then Tim_Chiphi_Min;
End
Else
For j:=1 to n Do
If d[j] Then
If c[a[i1],j]>0 then
Begin
a[i]:=j;
d[j]:=False;
sum:=sum+c[a[i1],j];
If sum+(ni+1)*cmin 8 h 54 m 28/7/2017 Th y Tr n Thông Qu 171 dem:=0;
End;
Begin clrscr;
Nhap;
Init;
Assign(g,fo); Rewrite(g);
Try(2);
Xuat; Writeln;
Writeln(#32:7,'XONG! GO ENTER>GO PHIM F3>GO HMT.RA>ENTER: DE XEM KET QUA.');
Readln;
Close(g);
End. ườ ấ ừ ộ ể ế ắ
ng ng n nh t t m t đi m đ n các ể ạ Ậ
VIII3.1) THU T TOÁN DIJKSTRA:
ồ ị
i trên đ th .
đi m còn l ướ Ố ượ ể ệ ạ
t kê c nh ấ ậ ễ
Ọ
ng CÓ TR NG S đ
i đây (L u trên text file DATA.VAO có c u trúc d
ướ ấ ỳ ế ở
c bi u di n b i danh sách li
ướ
i đây). L p trình tìm và
ỉ ấ ừ ỉ ọ ư
ắ
ị ườ
ng ng n nh t t ồ
c b t k đ n đ nh đích tùy ch n trên đ đ nh cho tr ộ ồ ị
1 M t đ th vô h
ướ
d
ể
hi n th đ
ị ấ
th y. ả ộ ỉ ở ắ
5 đ nh, 9 cung: b t bu c ph i ghi đây 5 9 (cid:0)
1 2 1
1 5 9
2 3 2
2 4 5
3 4 1
3 5 2
4 3 7
5 2 8
5 4 10 CODE: {Chuong trinh nay Test tren tep DATA.VAO} Program Min_Path; 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Uses crt; Const max=50;
Type contro=^ct;
ct=record
bd:byte; {Dinh bat dau}
lk:contro;
End;
Var n,m,xp,dich:integer;
tt:boolean;
v,dau,cuoi,len:Array[1..max] of integer;
FileName:String; Procedure Data_Inp(Filename:String);
Var i:byte; f:Text;
Begin
Assign(f,FileName); Reset(f);
Readln(f,n,m);
For i:=1 to m do Readln(f,dau[i],cuoi[i],len[i]);
Close(f);
Writeln('Do thi dang xet co ',n,' dinh va ',m,' cung');
For i:=1 to m do
Writeln('Canh ',dau[i],'>',cuoi[i],' co trong so=',len[i]);
End; Function MemCheck(x:byte):contro;
Var p:contro;
Begin
New(p);
If p=Nil Then
Begin
Writeln('Thieu bo nho!'); Halt;
Readln;
End;
p^.bd:=x;
MemCheck:=p;
End; Procedure PathMin_Find;
Var ds,p:contro; i,d,x:byte;
Begin 172 8 h 54 m 28/7/2017 Th y Tr n Thông Qu x:=dich; ds:=Nil; d:=v[x]; While (x<>xp) Do
For i:=1 to m do
If cuoi[i]=x Then
If (v[dau[i]]<>1) and (v[dau[i]]+len[i]=v[x]) Then
Begin
v[x]:=1;
x:=dau[i];
p:=MemCheck(x);
p^.lk:=ds; ds:=p;
Break;
End;
p:=ds;
While p<>Nil Do
Begin
Write(p^.bd,'>'); p:=p^.Lk;
End;
Writeln(dich,' voi do dai min=',d);
End; Procedure Init;
Var i:Byte;
Begin
For i:=1 to n do v[i]:=1;
End; Procedure LastProces;
Var tt:boolean; j,x,y:byte;
Begin
tt:=True;
While tt Do
Begin
tt:=False;
For j:=1 to m do
Begin
x:=dau[j]; y:=cuoi[j];
If v[x]<>1 Then
Begin
If (v[y]=1) Or (v[x]+len[j] 173 8 h 54 m 28/7/2017 Th y Tr n Thông Qu tt:=True; v[y]:=v[x]+len[j];
End;
End;
End;
End;
If (v[dich]=1) Then Writeln('Khong co duong di tu ',xp,' den ',dich)
Else Begin
Write('Duong di ngan nhat tu ',xp,' den ',dich,' qua cac dinh:');
PathMin_Find;
End;
End; {Chuong trinh me}
Begin clrscr;
Write('Nhap ten tep du lieu:'); Readln(FileName); {hay nhap DATA.VAO}
Data_Inp(FileName);
Repeat
Init;
Write('Cho biet dinh xuat phat:'); Readln(xp);
v[xp]:=0;
Write('Cho biet dinh den:'); Readln(dich);
v[dich]:=1;
LastProces;
Writeln;
Writeln('Tiep go ENTER, ngung go ESC.');
Until Readkey=#27;
End. ậ ế ạ ữ ệ ử ộ ư
t m t code cho bài toán trên, nh ng x lý trên file d li u vào ỏ
Bài t p nh cho b n: Vi
Ề ủ ồ ị
Ậ
là MA TR N K c a đ th . ườ ữ ắ ọ Ậ Tìm đ ấ
ng ng n nh t gi a m i Ặ ỉ ồ ị VIII3.2) THU T TOÁN FORDBELLMAN:
C P đ nh tùy ý trên đ th KHÔNG CÓ CHU TRÌNH ÂM. ố ồ ạ ậ ự ẽ ị Ặ
ổ ứ ư ệ
Ề
Ậ ộ ồ ị
ậ ớ ể ồ ị ạ ả 2CÀI Đ T FORDBELLMAN ALGORITHM
ạ
ọ
v b a ra m t đ th có tr ng s , r i b n l p MA
(T ch c d li u VÀO: B n hãy t
ủ ạ ẽ
TR N K CHO nó. Code c a b n s Test trên ma tr n đó. Khi t o đ th nh ki m tra
ả
b o đ m nó không có chu trình ÂM) CODE: 174 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Program Ford_Bell_Algo; Uses Crt;
Const fi='sl.vao'; fo='sl.ra'; max=100;
vocuc=100*50*maxint; {=163835000}
Type m1=array[1..max,1..max] of longint;
m2=array[1..max] of longint;
m3=array[1..max] of byte;
Var a:m1;v:m2; t:m3;
m:integer; n,x,y:byte; Procedure Input;
Var f:Text; k,w:integer;
i,j:byte;
Begin
assign(f,fi); reset(f);
Fillchar(a,sizeof(a),0); Readln(f,n,m,x,y);
For k:=1 to m do
Begin
Readln(f,i,j,w);
a[i,j]:=w; a[j,i]:=w;
End;
close(f);
End; Procedure init;
var i,j:byte;
Begin
For i:=1 to n do
For j:=1 to n do
If a[i,j]=0 then a[i,j]:=vocuc;
For i:=1 to n do v[i]:=a[x,i]; v[x]:=0;
FillChar(t,sizeof(t),0);
End; Procedure Ford_Bellman;
Var i,j,k:byte; stop:boolean;
Begin
for k:=1 to n1 do
Begin
stop:=true; 175 8 h 54 m 28/7/2017 Th y Tr n Thông Qu For i:=1 to n do For j:=1 to n do
If j<>x then
If v[j]>v[i]+a[i,j] then
Begin
v[j]:=v[i]+a[i,j];
t[j]:=i;
stop:=false;
End;
If stop then break;
End;
End; Procedure Xuat;
var f:text; kq:m3; i,j:byte;
Begin
Assign(f,fo); Rewrite(f);
If v[y]=vocuc then
Begin
Writeln(f,1);
close(f);
halt;
End;
Writeln(f,v[y]);
i:=y;
j:=0;
Repeat
Inc(j);
kq[j]:=i;
i:=t[i];
Until i=0;
Assign(f,fo); Reset(f);
While Not SeekEof(f) Do
For i:=j Downto 1 do Writeln(f,kq[i]);
close(f);
End; Begin clrscr;
input;
init; 176 8 h 54 m 28/7/2017 Th y Tr n Thông Qu Ford_Bellman; xuat;
Write('DONE!');
readln
End. ữ ắ ọ Ậ : Tìm đ ấ
ng ng n nh t gi a m i ườ
ọ ồ ị ỉ VIII.3.3) THU T TOÁN FLOYDWARSHALL
ố
ỉ
ặ
c p đ nh thông qua các đ nh TRUNG GIAN trên đ th có tr ng s . Ồ Ọ ầ 3Đ H A HÓA code cho thu t toán trên. Yêu c u: ậ
ổ ấ ể ồ ị
a) Gõ ENTER đ thay đ i c u trúc đ th ,
b) Gõ SPCE: tìm ti p,ế
c) Gõ ESC: Thoát. CODE:
Program Floyd_Warshall_Alg;
uses crt,graph;
const r=15;dl=500;n=5;vc=200;vocuc=10000;
c:array[1..5]of integer =(240,460,350,130,20);
d:array[1..5] of integer=(20,240,460,460,240);
ec:array[1..10] of integer =(350,276,204,130,405,295,240,240,185,75);
ed:array[1..10] of integer=(130,166,166,130,360,360,240,460,360,360);
var g,p,a:array[1..n,1..n] of integer;
dau,cuoi:integer; Procedure initgr;
var gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'..\bgi');
if (graphresult<>grok) then
begin
writeln('Loi khoi tao do hoa,go enter ket thuc!');
readln;
halt(1);
end
end; Procedure venut(u,m1,m2:integer);
var st:string[3]; 177 8 h 54 m 28/7/2017 Th y Tr n Thông Qu begin
setfillstyle(1,m2);
setcolor(m1);
fillellipse(c[u],d[u],r,r);
str(u,st);
outtextxy(c[u]2,d[u]2,st);
end; Procedure link(x,y,m1,m2:integer);
var t:integer;st:string[3];
begin
setcolor(m2);
line(c[x],d[x],c[y],d[y]);
t:=yx +((x1)*(2*nx)) div 2;
str(g[x,y],st);
setcolor(m1);
outtextxy(ec[t],ed[t],st);
end;ấ
(Các bài khó: *; Các bài r t khó: **)
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ậ
PH N IIẦ
. L P TRÌNH THEO MODUL
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
Ả
PH N III
M NG (ARRAY)
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
PH N IV.
XÂU KÝ TỰ
ễ ớ ọ
ừ
(STRING)
(Tr bài 1, không có bài nào d v i h c sinh, sinh viên)
ậ
ả
L p trình gi
i các bài toán sau:
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
Ệ
Đ QUY & QUAY LUI
PH N V.
(RECURSION & BACKTRACKING)
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
(
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
Ả
Ệ
PH N VI.
B N GHI & T P (RECORD and FILES)
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
Ồ Ọ
PH N VII.
Đ H A (GRAPHIC)
ị ớ
ữ
ấ
ườ
ậ
i mê l p trình:
ị
ồ
ệ
ạ
Ấ Ả
ẽ ồ
ặ ậ
Ệ
ể
ặ ậ
ủ
Ộ
đó là các bài: In l ch; V đ ng h ; Kính v n hoa; Tìm M T nghi m c a
bài toán Đ t H u; Tìm T T C NGHI M có th
cho bài toán Đ t H u)
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ầ
PH N VIII.
GRAPH THEORY & APPLICATIONS
Ồ
Ồ
Ệ
Ị
Ế
Ồ
Ủ
Ề
Ị
Ị
VIII.1TÌM KI M TRÊN Đ TH (tên khác: DUY T Đ TH ); TÔ
MÀU Đ TH ; TÌM MI N LIÊN THÔNG C A ĐT.
Ậ
Ế
Ệ
Ồ Ị
A/ CÁC THU T TOÁN TÌM KI M (DUY T) TRÊN Đ TH .
ồ ọ
Ơ
ộ ả
ặ ự
1Hãy cài đ t tr c quan (đ h a hóa code) hai thu t toán DBF và BFS trên cùng m t b n Code (BÀI C
Ễ
B N NH NG KHÔNG D !).
Yêu c u: * Gõ ENTER đ chuy n t
* Gõ ESC đ thoát
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ậ
Ề
Ồ
ề
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
Ồ
Ồ
Ị
Ị
VIII2/ Đ TH EULER & Đ TH HAMILTON
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
= = = = = = = = = = = = = = = =
Ậ
VIII3/ CÁC THU T TOÁN TÌM Đ
NG ĐI
Ồ
Ấ
Ắ
ƯỜ
Ị
NG N NH T TRÊN Đ TH .
Tìm đ
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế
ầ
ầ
ế

