You are on page 1of 34

1.

Th t c
Var fi: text; Begin

c d li u t

t p:

PROCEDURE Doc_file;
{Khai bo bi n ki u t p (Text)}

ASSIGN (tn_bi n_t p,

ng d n); {Gn tn t p trong


c}

ng d n cho bi n t p}

RESET(tn_bi n_t p); {M t p CLOSE(tn_bi n_t p); { ng t p} End;

READ(tn_bi n_t p,Danh_sch_bi n) {L n l

t c d li u t t p vo cc bi n t i v tr con tr }

2. Th t c ghi d li u vo t p:
PROCEDURE Ghi_file; Var fo: text; {Khai bo bi n ki u t p (Text)} Begin ASSIGN (tn_bi n_t p, REWRITE(tn_bi n_t p); CLOSE(tn_bi n_t p); End; ng d n); {Gn tn t p trong
{M t p ghi} t ghi gi tr cc bi u th c vo t p t i v tr con tr } ng d n cho bi n t p}

WRITE(tn_bi n_t p,Danh_sch_bi u_th c) {L n l


{ ng t p}

3. Theo di gi tr cc bi n qua t ng b (Dng c a s Watches trong Debug) 4. Cu l nh l p c s l n l p bi t tr c

(For ... to ... do... ho c For ... downto... do...) 5. Cu l nh l p c s l n l p khng bi t tr ( While ... do... ho c Repeat ... Until ) 6. L nh thot kh i vng l p (BREAK) 7. Khai bo h ng m ng CONST ten_mang:Array[<Ch s >] of Ki u_d _li u =(Gi_tr _1,Gi_tr _2,...,Gi_tr _n); c

Vi t hm th c hi n cc cng vi c sau:
+) Tm t ng cc ch s c a m t s nguyn n cho tr +) Tm t ng cc n cho tr c c th c s c

(Khng k chnh n) c a s nguyn c c c

+) Tm UCLN c a hai s nguyn m v n cho tr +) Ki m tra tnh i x ng c a m t xu S cho tr

+) Ki m tra tnh nguyn t c a s nguyn a cho tr +) Ki m tra s nguyn a c hon h o

Vi t th t c th c hi n cc cng vi c sau:
+) S p x p b ng l a ch n +) S p x p b ng tro +) Tm ki m tu n t +) Tm ki m nh phn i +) S p x p nhanh (Quick Short)

+) S p x p b ng l a ch n
N i dung c a ph ng php ny l b c th i (i = 1, 2, 3, ..., n-1 ) ta l a ch n ph n t nh nh t trong d y A[i]..A[n] r i i ch ph n t ny v i ph n t A[i]. Cu i cng ta s c d y A[1]..A[n] c th t . * V d : Ta ph i s p x p d y s : 39 50 7 37 89 13 1 i=1 39 50 7 37 89 13 1 i=2 1 50 7 37 89 13 39 i=3 1 7 50 37 89 13 39 i=4 1 7 13 37 89 50 39 i=5 1 7 13 37 89 50 39 i=6 1 7 13 37 50 50 39 i=7 1 7 13 37 39 50 89 1 7 13 37 39 50 89 procedure SelectionSort; var i, j, jmin: Integer; begin for i := 1 to n - 1 do {Lm n - 1 l t} begin {Ch n trong s cc kho trong o n A[i..n] ra kho A[jmin] nh nh t} jmin := i; for j := i + 1 to n do if A[j] < A[jmin] then jmin := j; if jmin i then < o gi tr c a A[jmin] cho A[i]> end; end;

62 62 62 62 62 62 62 62 62

+) S p x p b ng tro

i
procedure BubbleSort; var i, j: Integer; begin for i := 2 to n do for j := n downto i do {Duy t t cu i dy ln, lm n i kho nh nh t trong o n k[i1, n] v v tr i-1} if k[j] < k[j-1] then < o gi tr k[j] v k[j-1]> end;

N i dung c a ph ng php ny l duy t cc d y A[1], ..., A[n]. N u A[i]> A[i+1] (i = 1, 2, 3, ..., n-1) thi ta i ch A[i] v i ph n t A[i+1]. L p l i qu trinh duy t d y ny cho n khi khng cn vi c i ch c a hai ph n t .

+) S p x p nhanh (Quick Short)


N i dung c a ph ng php ny l ch n ph n t x gi a c a d y lm chu n so snh. Ta phn ho ch d y ny thnh 3 d y con lin ti p nhau: - D y con th nh t g m ph n t c kho nh h n x.key. - D y con th hai g m cc ph n t c kho b ng x.key. - D y con th ba g m cc ph n t c kho l n h n x.key. Sau p d ng gi i thu t phn ho ch ny cho d y con th nh t nh t v d y con th ba, n u cc d y con c nhi u h n m t ph n t ( qui). C th l xt m t o n c a d y t thnh ph n L n thnh ph n th R. - L y gi tr c a thnh ph n th (L+R) Div 2 gn vo bi n X. - Cho i ban u l L. - Cho j ban u l R. - L p l i. * Ch ng no cn A[i] < X th t ng i. * Ch ng no cn A[j] > X th gi m j. * i<=j th + Hon v A[i] v A[j] + T ng i + Gi m j Cho n khi i>j + S p x p o n t A[L] n A[j] + S p x p o n t A[i] n A[R]

procedure QuickSort; procedure Partition(L, H: Integer); {S p x p dy kho k[L..H]} var i, j: Integer; Pivot: TKey; {Bi n l u gi tr kho ch t} begin if L H then Exit; {N u o n ch c 1 kho th khng ph i lm g c } Pivot := k[Random(H - L + 1) + L]; {Ch n m t kho ng u nhin trong o n lm kho ch t} i := L; j := H; {i := v tr u o n; j := v tr cu i o n} repeat while k[i] < Pivot do i := i + 1; {Tm t u o n kho kho ch t} while k[j] > Pivot do j := j - 1; {Tm t cu i o n kho kho ch t} { n y ta tm c hai kho k[i] v k[j] m k[i] key k[j]} if i j then begin if i < j then {N u ch s i ng tr c ch s j th o gi tr hai kho k[i] v k[j]} o gi tr k[i] v k[j] ; {Sau php o ny ta c: k[i] key k[j]} i := i + 1; j := j - 1; end; until i > j; Partition(L, j); Partition(i, H); {S p x p hai o n con m i t o ra} end; begin Partition(1, n); end;

+) Tm ki m tu n t
B t u t b n ghi u tin, l n l t so snh kho tm ki m v i kho t ng ng c a cc b n ghi trong danh sch, cho t i khi tm th y b n ghi mong mu n ho c duy t h t danh sch m ch a th y {Tm ki m tu n t trn dy kho k[1..n]; hm ny th tm xem trong dy c kho no = X khng, n u th y n tr v ch s c a kho y, n u khng th y n tr v 0. C s d ng m t kho ph k[n+1] c gn gi tr = X} Function SequentialSearch(X: TKey): Integer; var i: Integer; begin SequentialSearch := 0; for i:=1 to n do if (k[i] X) then Begin SequentialSearch := i; break end; end;

+) Tm ki m nh phn Php tm ki m nh phn c th p d ng trn dy kho c th t : k[1] k[2] k[n]. Gi s ta c n tm trong o n k[inf...sup] v i kho tm ki m l X, tr c h t ta xt kho n m gi a dy k[median] v i median = (inf + sup) div 2; +) N u k[median] < X th c ngh a l o n t k[inf] t i k[median] ch ch a ton kho < X, ta ti n hnh tm ki m ti p v i o n t k[median+1] t i k[sup]. +) N u k[median] > X th c ngh a l o n t k[median] t i k[sup] ch ch a ton kho >X, ta ti n hnh tm ki m ti p v i o n t k[inf] t i k[median-1]. +) N u k[median] = X th vi c tm ki m thnh cng (k t thc qu trnh tm ki m). Qu trnh tm ki m s th t b i n u n m t b c no , o n tm ki m l r ng (inf >sup).

{Tm ki m nh phn trn dy kho k[1] k[2] k[n]; hm ny th tm xem trong dy c kho no = X khng, n u th y n tr v ch s c a kho y, n u khng th y n tr v 0}

function BinarySearch(X: TKey): Integer; var inf, sup, median: Integer; begin inf := 1; sup := n; while inf sup do begin median := (inf + sup) div 2; if k[median] = X then begin BinarySearch := median; Exit; end; if k[median] < X then inf := median + 1 else sup := median - 1; end; BinarySearch := 0; end;

Bi 38 - Tam gic s Hnh sau m t m t tam gic s c s hng N=5: 8 2 4 5

7 3 1 7 2 4 6 8 0 4 5

it nh (s 7) n y tam gic b ng m t ng g p khc, m i b c ch c it s hng trn xu ng m t trong hai s ng k bn ph i hay bn tri hng d i, v c ng cc s trn ng i l i ta c m t t ng. V d : ng i 7 8 1 4 6 c t ng l S=26, ng i 7 3 1 7 5 c t ng l S=23 Trong hnh trn, t ng Smax=30 theo ng i 7 3 8 7 5 l t ng l n nh t trong t t c cc t ng. Nhi m v c a b n v vi t ch ng trnh nh n d li u vo l m t tam gic s ch a trong text file INPUT.TXT v a ra k t qu l gi tr c a t ng Smax trn mn hnh. File INPUT.TXT c d ng nh sau: Dng th 1: c duy nh t 1 s N l s hng c a tam gic s (0<N<100). N dng ti p theo, t dng th 2 n dng th N+1: dng th i c (i-1) s cch nhau b i d u tr ng (space). V d : v i n i dung c a file INPUT.TXT l 5 7 38 810 2744 45265 th k t qu ch y ch ng trnh s l: Smax=30.

Bi 46 o ch ci B n ph i vi t ch ng trnh a ra t t c cc t c th c pht sinh t m t t p cc ch ci. V d : Cho t abc, ch ng trnh c a b n ph i a ra c cc t "abc", "acb", "bac", "bca", "cab" v "cba" (b ng cch kh o st t t c cc tr ng h p khc nhau c a t h p ba ch ci cho). Input D li u vo c cho trong t p input.txt ch a m t s t . Dng u tin l m t s t nhin cho bi t s t c cho d i. M i dng ti p theo ch a m t t . Trong , m t t c th ch a c ch ci th ng ho c hoa t A n Z. Cc ch th ng v hoa c coi nh l khc nhau. M t ch ci no c th xu t hi n nhi u h n m t l n. Output V i m i t cho trong file Input.txt, k t qu nh n c ra file Output.txt ph i ch a t t c cc t khc nhau c sinh t cc ch ci c a t . Cc t c sinh ra t m t t cho ph i c a ra theo th t t ng d n c a b ng ch ci.

Sample Input 2 abc acba

Sample Output abc acb bac bca cab cba aabc aacb abac abca acab acba baac baca bcaa caab caba cbaa

Bi 51 - Thay th t Hai file INPUT1.TXT v INPUT2.TXT c cho nh sau: File INPUT1.TXT ch a m t o n v n b n b t k. File INPUT2.TXT ch a khng qu 50 dng, m i dng g m hai t : t u l t ch v t sau l t ngu n. Hy tm trong file INPUT1.TXT t t c cc t l t ch v thay th chng b ng cc t ngu n t ng ng. K t qu ghi vo file KQ.OUT (s l m t o n v n b n t ng t nh trong file INPUT1.TXT nh ng c thay th t ch b i t ngu n). Sample INPUT File INPUT1.TXT ch a o n v n b n sau: Nam moi sap den roi, ban co zui khong? Chuc cac ban don mot cai Tet that vui ve va hanh phuc. Chuc ban luon hoc gioi! File INPUT2.TXT ch a cc dng sau: ban em zui vui Sample OUTPUT File KQ.OUT s ch a o n v n b n sau: Nam moi sap den roi, em co vui khong? Chuc cac em don mot cai Tet that vui ve va hanh phuc. Chuc em luon hoc gioi!

Bi 37 - S siu nguyn t S siu nguyn t l s nguyn t m khi b m t s tu cc ch s bn ph i c a n th ph n cn l i v n t o thnh m t s nguyn t . V d 7331 l m t s siu nguyn t c 4 ch s v 733, 73, 7 c ng l cc s nguyn t . Nhi m v c a b n l vi t ch ng trnh nh p d li u vo l m t s nguyn N (0< N <10) v a ra k t qu l m t s siu nguyn t c N ch s cng s l ng c a chng. V d khi ch y ch ng trnh: Nhap so N: 4 Cac so sieu nguyen to c 4 chu so la: 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393 Tat ca co 16 so_

Bi 33 - M ho v n b n (Bi ton sau m t m t thu t ton m ho n gi n ( ti n ta l y v d ti ng Anh, cc b n c th m r ng cho ti ng Vi t): T p h p cc ch ci ti ng Anh bao g m 26 ch ci c nh s th t t 0 n 25 nh sau:

Quy t c m ho m t k t nh sau (l y v d k t X): - Tm s th t t ng ng c a k t ta c 23 - T ng gi tr s ny ln 5 ta c 28 - Tm s d trong php chia s ny cho 26 ta c2 - Tra ng c b ng ch ci ta thu c C. a. S d ng quy t c trn m ho cc dng ch sau: PEACE HEAL THE WORLD I LOVE SPRING b. Hy tm ra quy t c gi i m cc dng ch sau: N FR F XYZIJSY NSKTVRFYNHX MFSTN SFYNTSFQ ZSNBJVXNYD

Bi 34 - M ho v gi i m Theo quy t c m ho bi trn (Bi 33), hy vi t ch ng trnh cho php: - Nh p m t xu k t v in ra xu k t c m ha - Nh p m t xu k t c m ho v in ra su k t c gi i m. V d khi ch y ch ng trnh: Nhap xau ky tu: PEACE Xau ky tu tren duoc ma hoa la: UJFHJ Nhap xau ky tu can giai ma: FR Xau ky tu tren duoc giai ma la: AM_

Bi 35 - Cc phn s cs px p Xt t p F(N) t t c cc s h u t trong o n [0,1] v i m u s khng v N.

t qu

V d t p F(5): 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 Hy vi t ch ng trnh cho php nh p s nguyn N n m trong kho ng t 1 n 100 v xu t ra theo th t t ng d n cc phn s trong t p F(N) cng s l ng cc phn s . V d khi ch y ch ng trnh: Nhap so N: 5 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 Tat ca co 11 phan so_

Bi 95 - Dy con c t ng l n nh t Cho dy g m n s nguyn a1, a2, ..., an. Tm dy con g m m t ho c m t s ph n t lin ti p c a dy cho v i t ng cc ph n t trong dy l l n nh t. D li u: Vo t file v n b n SUBSEQ.INP - Dng u ti n ch a s nguyn d- ng n (n < 106). - Dng th i trong s n dng ti p theo ch a s ai (|ai| 1000). K t qu : Ghi ra file v n b n SUBSEQ.OUT - Dng u tin ghi v tr c a ph n t u tin c a dy con tm c. - Dng th hai ghi v tr c a ph n t cu i cng c a dy con tm c - Dng th ba ghi t ng cc ph n t c a dy con tm c. V d :
SUBSEQ.INP 8 12 -14 1 23 -6 22 -34 13 SUBSEQ.OUT 3 6 40

V D V GI I THU T

QUY

1. Hm tnh giai th a: Function Giai_thua(n: Integer): Integer; {Nh n vo s t nhin n v tr v n!} begin if n = 0 then Giai_thua := 1 {Ph n neo} else Giai_thua := n * Giai_thua (n - 1); {Ph n quy} end; 2. Dy fibonaci: Dy Fibonacci l dy v h n cc s nguyn d nh sau: Hy tnh F[6] ng F[1], F[2], c nh ngh a

function F(i: Integer): Integer; begin if i < 3 then F := 1 else F := F(i - 1) + F(i - 2); end; begin WriteLn(F(6)); end.

THU T TON QUAY LUI

M hnh c a thu t ton quay lui c th m t nh sau: {Th t c ny th cho x[i] nh n l n l t cc gi tr m n c th nh n} procedure Try(i: Integer); begin for m i gi tr V c th gn cho x[i] do begin Th cho x[i] := V ; if x[i] l ph n t cu i cng trong c u hnh then Thng bo c u hnh tm c else begin Ghi nh n vi c cho x[i] nh n gi tr V (n u c n) ; Try(i + 1); {G i quy ch n ti p x[i+1]} N u c n, b ghi nh n vi c th x[i] := V th gi tr khc ; end; end; end; Thu t ton quay lui s b t u b ng l i g i Try(1)

Procedure Thu(S,i,j: integer); Var k,S_new: integer; Begin S_new:=S+a[i,j]; If i=N then begin If S_new>Smax then Smax:=S_new; end else For k:=j to j+1 do Thu(S_new, i+1, k); End; {----------------------------------------}

Ta xt m t v d n gi n: Dy Fibonacci l dy v h n cc s nguyn d nh sau: Hy tnh F[6] Xt hai cch ci Cch 1:

ng F[1], F[2],

nh ngh a

t ch

ng trnh: Cch 2:

program Fibo1; function F(i: Integer): Integer; begin if i < 3 then F := 1 else F := F(i - 1) + F(i - 2); end; begin WriteLn(F(6)); end.

program Fibo2; var F: array[1..6] of Integer; i: Integer; begin F[1] := 1; F[2] := 1; for i := 3 to 6 do F[i] := F[i - 1] + F[i - 2]; WriteLn(F[6]); end.

Uses Crt; Const inp='INPUT.TXT'; Var N,Smax: integer; a: array [1..100,1..100] of integer; {----------------------------------------} Procedure Nhap; Var f: text; i,j: integer; Begin Assign(f,inp); Reset(f); Readln(f,n); For i:=1 to N do begin For j:=1 to i do Read(f,a[i,j]); Readln(f); end; Close(f); End; {----------------------------------------}

Procedure Thu(S,i,j: integer); Var k,S_new: integer; Begin S_new:=S+a[i,j]; If i=N then begin If S_new>Smax then Smax:=S_new; end else For k:=j to j+1 do Thu(S_new, i+1, k); End; {----------------------------------------} BEGIN Nhap; Smax:=0; Thu(0,1,1); Write('Smax = ',Smax); Readln; END.

PH

NG PHP QUY HO CH

NG

Ph ng php quy ho ch ng dng gi i bi ton t i u c b n ch t quy, t c l vi c tm ph ng n t i u cho bi ton c th a v tm ph ng n t i u c a m t s h u h n cc bi ton con. i v i nhi u thu t ton quy chng ta tm hi u, nguyn l chia tr (divide and conquer) th ng ng vai tr ch o trong vi c thi t k thu t ton. gi i quy t m t bi ton l n, ta chia n lm nhi u bi ton con cng d ng v i n c th gi i quy t c l p. Trong ph ng php quy ho ch ng, nguyn l ny cng c th hi n r: Khi khng bi t c n ph i gi i quy t nh ng bi ton con no, ta s i gi i quy t t t c cc bi ton con v l u tr nh ng l i gi i hay p s c a chng v i m c ch s d ng l i theo m t s ph i h p no gi i quy t nh ng bi ton t ng qut h n. chnh l i m khc nhau gi a Quy ho ch ng v php phn gi i quy v c ng l n i dung ph ng php quy ho ch ng: +)Php phn gi i quy b t u t bi ton l n phn r thnh nhi u bi ton con v i gi i t ng bi ton con . Vi c gi i t ng bi ton con l i a v php phn r ti p thnh nhi u bi ton nh h n v l i i gi i ti p bi ton nh h n b t k n c gi i hay ch a. +)Quy ho ch ng b t u t vi c gi i t t c cc bi ton nh nh t ( bi ton c s ) t t ng b c gi i quy t nh ng bi ton l n h n, cho t i khi gi i c bi ton l n nh t (bi ton ban u).

M TS

BI TON QUY HO CH

NG

Cho m t xu S <= 1000 k t ; tm palindrome di nh t l xu con c a S ( Xu con l m t dy cc k t lin ti p ). (Palindrome hay cn g i l xu i x ng, xu i x ng l tn g i c a nh ng xu k t m khi vi t t ph i qua tri hay t tri qua ph i th xu khng thay i. VD: MADAM, IOI,... ) Dng m ng F[i, j] c ngh a: F[i, j] = true/false n u o n g m cc k t t i c a S c/khng l palindrome. Ta c cng th c l: * F[i, i] = True * F[i, j] = F[i+1, j-1]; ( n u s[ i ] = s[ j ] ) * F[i, j] = False; ( n u s[ i ] <> s[j] ) o n ch ng trnh nh sau: FillChar( F, sizeof(F), false ); for i := 1 to n do F[i, i] := True; for k := 1 to (n-1) do for i := 1 to (n-k) do begin j := i + k; F[i, j] := ( F[i+1, j-1] ) and (s[ i ] = s[ j ] ); end; K t qu l : Max(j-i+1) <=j th a F[i,j] = True. nj

M TS

BI TON QUY HO CH

NG

Uses crt; Type mang = array[1..100,1..100] of integer; Var f:text; i,j,n:integer; a,b:mang; Procedure Input; Begin clrscr; Assign(f,'input.txt'); reset(f); readln(f,n); for j:=1 to n do begin for i:=2 to j+1 do read(f,a[j,i]); end; close(f); end; {----------------------------------}

Function Max(m,n:integer):integer; Begin if n>m then Max:=n else Max:=m; end; {----------------------------------} Procedure MakeArrayOfQHD; Begin b[1,2]:=a[1,2]; for j:=1 to n do b[j,1]:=-maxint; for i:=3 to n do b[1,i]:=-maxint; for j:=2 to n do begin for i:=2 to j+1 do b[j,i]:=a[j,i]+max(b[j-1,i],b[j-1,i-1]); end; end; {-----------------------------------}

Procedure FindMax; var max:integer; Begin max:=b[n,1]; for i:=2 to n do if b[n,i]>max then max:=b[n,i]; writeln('Smax:=',max); readln; end; {------------------------------------} BEGIN Input; makearrayofQHD; FindMax; END.

You might also like