You are on page 1of 27

Hng dn n tp Lp trnh Pascal c bn

CC THUT TON V S THUT TON KIM TRA S NGUYN T Thut ton ca ta da trn tng: nu n >1 khng chia ht cho s nguyn no trong tt c cc s t 2 n n th n l s nguyn t. Do ta s kim tra tt c cc s nguyn t 2 n c round(sqrt(n)), nu n khng chia ht cho s no trong th n l s nguyn t. Nu thy biu thc round(sqrt(n)) kh vit th ta c th kim tra t 2 n n div 2. Hm kim tra nguyn t nhn vo mt s nguyn n v tr li kt qu l true (ng) nu n l nguyn t v tr li false nu n khng l s nguyn t. function ngto(n:integer):boolean; var i:integer; begin ngto:=false; if n<2 then exit; for i:=2 to trunc(sqrt(n)) do if n mod i=0 then exit; {nu n chia ht cho i th n khng l nguyn t => thot lun} ngto:=true; end; Ch : Da trn hm kim tra nguyn t, ta c th tm cc s nguyn t t 1 n n bng cch cho i chy t 1 n n v gi hm kim tra nguyn t vi tng gi tr i. THUT TON TNH TNG CC CH S CA MT S NGUYN tng l ta chia s cho 10 ly d (mod) th c ch s hng n v, v ly s div 10 th s c phn cn li. Do s chia lin tc cho n khi khng chia c na (s bng 0), mi ln chia th c mt ch s v ta cng dn ch s vo tng. Hm tnh tng ch s nhn vo 1 s nguyn n v tr li kt qu l tng cc ch s ca n: function tongcs(n:integer): integer; var s : integer; begin s := 0; while n <> 0 do begin s := s + n mod 10; n := n div 10;

Hng dn n tp Lp trnh Pascal c bn

end; tongcs := s; end; Ch : Tnh tch cc ch s cng tng t, ch cn ch ban u gn s l 1 v thc hin php nhn s vi n mod 10. THUT TON EUCLIDE TNH UCLN tng ca thut ton Euclide l UCLN ca 2 s a,b cng l UCLN ca 2 s b v a mod b, vy ta s i a l b, b l a mod b cho n khi b bng 0. Khi UCLN l a. Hm UCLN nhn vo 2 s nguyn a,b v tr li kt qu l UCLN ca 2 s . function UCLN(a,b: integer): integer; var r : integer; begin while b<>0 do begin r := a mod b; a := b; b := r; end; UCLN := a; end; Ch : Da trn thut ton tnh UCLN ta c th kim tra c 2 s nguyn t cng nhau hay khng. Ngoi ra cng c th dng ti gin phn s bng cch chia c t v mu cho UCLN. THUT TON TNH TNG CC C S CA MT S NGUYN tnh tng cc c s ca s n, ta cho i chy t 1 n n div 2, nu n chia ht cho s no th ta cng s vo tng. (Ch cch tnh ny cha xt n cng l c s ca n). function tongus(n : integer): integer; var i,s : integer; begin s := 0; for i := 1 to n div 2 do if n mod i = 0 then s := s + i; tongus := s; end; Ch : Da trn thut ton tnh tng c s, ta c th kim tra c 1 s nguyn c l s hon thin khng: s nguyn gi l s hon thin nu n bng tng cc c s ca n.
2

Hng dn n tp Lp trnh Pascal c bn

CC THUT TON V VNG LP THUT TON TNH GIAI THA MT S NGUYN Giai tha n! l tch cc s t 1 n n. Vy hm giai tha vit nh sau: function giaithua(n : integer) : longint; var i : integer; s : longint; begin s := 1; for i := 2 to n do s := s * i; giaithua := s; end; THUT TON TNH HM M Trong Pascal ta c th tnh ab bng cng thc exp(b*ln(a)). Tuy nhin nu a khng phi l s dng th khng th p dng c. Ta c th tnh hm m an bng cng thc lp nh sau: function hammu(a : real; n : integer): real; var s : real; i : integer; begin s := 1; for i := 1 to n do s := s * a; hammu := s; end; THUT TON TNH CNG THC CHUI Thut ton tnh hm ex:
ex = 1+ x + x 2 x3 xn + + ... + 2! 3! n!

t:

sn = 1 + x +

x 2 x3 xn + + ... + 2! 3! n!

v rn =

xn n!

, ta c cng thc truy hi:

s 0 = 1, r0 = 1 ri-1.x ri = i si = si-1 + ri

Khi , ta c th tnh cng thc chui trn nh sau: function expn(x: real; n : integer): real; var s,r : real; i : integer; begin s := 1; r := 1;
3

Hng dn n tp Lp trnh Pascal c bn

for i := 1 to n do begin r := r * x / i; s := s + r; end; expn := s; end; CC BI TP V MNG 1 CHIU V 2 CHIU BI TP 1 Nhp vo mt s n (5<=n<=10) v n phn t ca dy a, 1<ai<100 (c kim tra d liu khi nhp). a) In ra cc phn t l s nguyn t ca dy. b) Tnh c chung ln nht ca tt c cc phn t ca dy. c) Tnh biu thc sau:
1 2 n S = a1 + a2 + ....a n

d)

Sp xp dy tng dn v in ra dy sau sp xp.

HNG DN Ta nn chia chng trnh thnh cc chng trnh con, mi chng trnh thc hin mt yu cu. Ngoi ra ta cng vit thm cc hm kim tra nguyn t, hm m, hm UCLN thc hin cc yu cu . Chng trnh nh sau: Khai bo d liu: uses crt; var n : integer; a : array[1..10] of integer; {n<=10 nn mng c ti a 10 phn t}

Th tc nhp d liu, c kim tra khi nhp. procedure nhap; var i : integer; begin clrscr; write('NHAP VAO SO PHAN TU N = '); repeat readln(n);
4

Hng dn n tp Lp trnh Pascal c bn

if (5<=n) and (n<=10) then break; {nu tho mn th dng vng lp} writeln('Khong hop le (5<=n<=10). Nhap lai!!!'); {ngc li th bo li} until false; writeln('NHAP VAO N PHAN TU (1<ai<100)'); for i := 1 to n do begin write('a',i,'='); repeat readln(a[i]); if (1<a[i]) and (a[i]<100) then break; writeln('Khong hop le. Nhap lai!!!'); until false; end; end; function ngto(n : integer): boolean; {hm kim tra nguyn t, xem gii thch phn trn} var i : integer; begin ngto := false; if n < 2 then exit; for i := 2 to round(sqrt(n)) do if n mod i = 0 then exit; ngto := true; end; Th tc in cc s nguyn t ca mt mng procedure inngto; var i :integer; begin writeln('CAC PHAN TU NGUYEN TO TRONG DAY:'); for i := 1 to n do {duyt qua mi phn t t 1 n n} if ngto(a[i]) then writeln(a[i]); {nu ai l nguyn t th in ra} end; function UCLN(a,b: integer): integer; var r : integer; begin

Hng dn n tp Lp trnh Pascal c bn

while b<>0 do begin r := a mod b; a := b; b := r; end; UCLN := a; end; Th tc tnh UCLN ca cc phn t ca mt mng procedure TinhUC; var i,u : integer; begin u := a[1]; {u l UCLN ca cc phn t t 1 n i} for i := 2 to n do u := UCLN(u,a[i]); {l UCLN ca cc phn t t 1 n i-1 v ai} writeln('UCLN cua ca day la:',u); end; function hammu(a : real; n : integer): real; {hm m tnh an} var s : real; i : integer; begin s := 1; for i := 1 to n do s := s * a; hammu := s; end; Th tc tnh tng cc phn t c ly m: procedure tong; var s : real; i : integer; {s phi khai bo l s thc trnh trn s} begin s := 0; for i := 1 to n do s := s + hammu(a[i],i); {s := s + (ai)i} writeln('Tong can tinh:',s:10:0); end; Th tc sp xp tng dn cc phn t ca mt mng: procedure sxep; var i,j,tg : integer; begin for i := 1 to n-1 do

Hng dn n tp Lp trnh Pascal c bn

for j := i + 1 to n do if a[i] > a[j] then begin tg := a[i]; a[i] := a[j]; a[j] := tg; end; writeln('DAY SAU KHI SAP XEP TANG DAN:'); for i := 1 to n do writeln(a[i]); end; Chng trnh chnh: ln lt gi tng th tc BEGIN nhap; inngto; tinhuc; tong; sxep; END.

BI TP 2 Tm phn t nh nht, ln nht ca mt mng (cn ch ra c v tr ca phn t). HNG DN Gi s phn t min cn tm l phn t k. Ban u ta cho k=1. Sau cho i chy t 2 n n, nu a[k] > a[i] th r rng a[i] b hn, ta gn k bng i. Sau khi duyt ton b dy th k s l ch s ca phn t min. (Cch tm min ny n gin v t v tr ta cng suy ra c gi tr). procedure timmin; var i, k : integer; begin k := 1; for i := 2 to n do if a[k] > a[i] then k := i; writeln('Phan tu nho nhat la a[',k,']=',a[k]); end; Tm max cng tng t, ch thay du so snh. procedure timmax; var i, k : integer; begin
7

Hng dn n tp Lp trnh Pascal c bn

k := 1; for i := 2 to n do if a[k] < a[i] then k := i; writeln('Phan tu lon nhat la a[',k,']=',a[k]); end; Ch : 1. Nu p dng vi mng 2 chiu th cng tng t, ch khc l duyt qua mi phn t ca mng 2 chiu th ta phi dng 2 vng for. V v tr mt phn t cng gm c dng v ct. V d 1. Tm phn t nh nht v ln nht ca mng 2 chiu v i ch chng cho nhau: procedure exchange; var i,j,i1,j1,i2,j2,tg : integer; begin i1 := 1; j1 := 1; {i1,j1 l v tr phn t min} i2 := 1; j2 := 1; {i2,j2 l v tr phn t max} for i := 1 to m do for j := 1 to n do begin if a[i1,j1] > a[i,j] then begin {so snh tm min} i1 := i; j1 := j; {ghi nhn v tr min mi} end; if a[i2,j2] < a[i,j] then begin {so snh tm max} i2 := i; j2 := j; {ghi nhn v tr max mi} end; end; tg := a[i1,j1]; a[i1,j1] := a[i2,j2]; a[i2,j2] := tg; {i ch} end; 2. Nu cn tm phn t ln nht / nh nht hoc sp xp 1 dng (1 ct) ca mng 2 chiu th ta cng coi dng (ct) nh 1 mng 1 chiu. Chng hn tt c cc phn t trn dng k u c dng ch s l a[k,i] vi i chy t 1 n n (n l s ct). V d 2. Tm phn t ln nht ca dng k v i ch n v phn t u dng. procedure timmax(k : integer); var i, vt, tg : integer; begin vt := 1; {vt l v tr ca phn t min dng k} for i := 1 to n do

Hng dn n tp Lp trnh Pascal c bn

if a[k,i] > a[k,vt] then vt := i; {cc phn t dng k c dng a[k,i]} tg := a[k,1]; a[k,1] := a[k,vt]; a[k,vt] := tg; end; V d 3. Sp xp gim dn ct th k. procedure sapxep(k: integer); var i,j,tg : integer; begin for i := 1 to m-1 do {mi ct c m phn t, v bng c m dng} for j := i+1 to m do if a[i,k] > a[j,k] then begin {cc phn t ct k c dng a[i,k]} tg := a[i,k]; a[i,k] := a[j,k]; a[j,k] := tg; end; end; BI TP 3 Tm cc phn t tho mn 1 tnh cht g . HNG DN Nu tnh cht cn tho mn l cn kim tra phc tp (chng hn: nguyn t, hon thin, c tng ch s bng 1 gi tr cho trc) th ta nn vit mt hm kim tra 1 phn t c tnh cht khng. Cn tnh cht cn kim tra n gin (chn / l, dng / m, chia ht, chnh phng) th khng cn. Sau ta duyt qua cc phn t t u n cui, phn t no tho mn tnh cht th in ra. V d 1. In ra cc s chnh phng ca mt mng: kim tra n c chnh phng khng, ta ly cn n, lm trn ri bnh phng v so snh vi n. Nu biu thc sqr(round(sqrt(n))) = n l true th n l chnh phng. Vy in cc phn t chnh phng ta vit: for i := 1 to n do begin if sqr(round(sqrt(a[i]))) = a[i] then writeln(a[i]); V d 2. In ra cc s hon thin t 1 n n: kim tra s c hon thin ta dng hm tng c ( c phn u). for i := 1 to n do begin if tongus(i) = i then writeln(i); V d 3. In ra cc phn t ca mng chia 3 d 1, chia 7 d 2:
9

Hng dn n tp Lp trnh Pascal c bn

for i := 1 to n do begin if (a[i] mod 3=1) and (a[i] mod 7=2) then writeln(a[i]); V d 4. In ra cc s c 3 ch s, tng ch s bng 20, chia 7 d 2. Ta dng hm tng ch s c trn: for i := 100 to 999 do begin {duyt qua mi s c 3 ch s} if (tongcs(i)=20) and (i mod 7=2) then writeln(i); Ch : Nu p dng vi mng 2 chiu th cng tng t, ch khc l duyt qua mi phn t ca mng 2 chiu th ta phi dng 2 vng for. V d, in cc phn t nguyn t ca 1 mng 2 chiu: for i := 1 to m do begin for j := 1 to n do begin if ngto(a[i,j]) then writeln(a[i,j]); BI TP 4 Nhp v in mng 2 chiu dng ma trn (m dng, n ct). HNG DN nhp cc phn t ca mng 2 chiu dng ma trn, ta cn dng cc lnh sau ca unit CRT (nh phi c khai bo user crt u chng trnh). GotoXY(a,b): di chuyn con tr mn hnh n v tr (a,b) trn mn hnh (ct a, dng b). Mn hnh c 80 ct v 25 dng. whereX: hm cho gi tr l v tr ct ca con tr mn hnh. whereY: hm cho gi tr l v tr dng ca con tr mn hnh. Khi nhp 1 phn t ta dng lnh readln nn con tr mn hnh s xung dng, do cn quay li dng ca bng lnh GotoXY(j * 10, whereY -1 ), nu ta mun mi phn t ca ma trn ng vi 10 ct mn hnh. procedure nhap; var i,j : integer; begin clrscr; write('Nhap m,n = '); readln(m,n); for i := 1 to m do begin for j := 1 to n do begin write('A[',i,',',j,']='); readln(a[i,j]); {nhp xong th xung dng} gotoXY(j*10,whereY-1); {di chuyn v dng trc, v tr tip theo} end;
10

Hng dn n tp Lp trnh Pascal c bn

writeln; {nhp xong 1 hng th xung dng} end; end; in bng dng ma trn th n gin hn, vi mi dng ta s in cc phn t trn 1 hng ri xung dng: procedure inbang; var i,j : integer; begin for i := 1 to m do begin {vit cc phn t ca hng i } for j := 1 to n do write(a[i,j]:6); {mi phn t chim 6 cn phi cho thng ct v khng st nhau} writeln; {ht 1 hng th xung dng} end; end; CC BI TP V XU K T BI TP 1 Nhp vo mt xu s khc rng v thc hin chun ho xu, tc l: a) Xo cc du cch tha b) Chuyn nhng k t u t thnh ch hoa, nhng k t khc thnh ch thng. HNG DN Chng trnh nh sau: var s : string; procedure chuanhoa(var s : string); {s l tham bin c th thay i trong chng trnh con} var i : integer; begin while s[1]=' ' do delete(s,1,1); {xo cc k t cch tha u xu} while s[length(s)]=' ' do delete(s,length(s),1); {xo cc k t cch tha cui xu} {xo cc k t cch tha gia cc t: nu s[i-1] l cch th s[i] l du cch l tha. Phi dng vng lp for downto v nu trong qu trnh xo ta lm gim chiu di ca xu, nu for to s khng dng c.} for i := length(s) downto 2 do if (s[i]=' ') and (s[i-1]=' ') then delete(s,i,1); {Chuyn k t u xu thnh ch hoa} s[1] := Upcase(s[1]);
11

Hng dn n tp Lp trnh Pascal c bn

for i := 2 to length(s) do if s[i-1]=' ' then s[i] := Upcase(s[i]) {Chuyn s[i] l k t u t thnh ch hoa.} else if s[i] in ['A'..'Z'] then {s[i] l k t ch hoa khng u mt t} s[i] := chr(ord(s[i]) + 32); {th phi chuyn thnh ch thng} end; BEGIN write('Nhap vao 1 xau s:'); readln(s); chuanhoa(s); writeln('Xau s sau khi chuan hoa:',s); readln; END. BI TP 2 Nhp vo mt xu x khc rng v thng bo xu c phi l xu i xng hay khng? HNG DN Xu i xng nu n bng chnh xu o ca n. Vy cch n gin nht l ta s xy dng xu o ca x v kim tra xem n c bng x khng. xy dng xu o ca x, cch n gin nht l cng cc k t ca x theo th t ngc (t cui v u). Chng trnh: var x : string; (************************************************) function doixung(x : string) : boolean; {hm kim tra xu i xng} var y : string; i : integer; begin y := ''; {xy dng y l xu o ca x, bng cch cng dn cc k t ca x vo y theo th t ngc} for i := length(x) downto 1 do y := y + x[i]; {so snh x v xu o ca n} if x=y then doixung := true else doixung := false; end; BEGIN
12

Hng dn n tp Lp trnh Pascal c bn

write('Nhap vao 1 xau:'); readln(x); if doixung(x) then writeln('Xau doi xung!') else writeln('Xau khong doi xung!'); readln; END. BI TP 3 Nhp vo mt xu s v m xem n c bao nhiu t. T l mt dy cc k t, cch nhau bi du cch? HNG DN Cch m t n gin nht l m du cch: nu s[i] l k t khc cch v s[i1] l k t cch th chng t s[i] l v tr bt u ca mt t. Ch l t u tin ca xu khng c du cch ng trc. Chng trnh: var s : string; {Hm m s t ca mt xu} function sotu(s : string) : integer; var i, dem : integer; begin {cng thm du cch pha trc xu m c t u tin} s := ' ' + s; dem := 0; for i := 2 to length(s) do {s[i] l v tr bt u 1 t} if (s[i-1]=' ') and (s[i]<>' ') then dem := dem + 1; sotu := dem; end; BEGIN write('Nhap vao 1 xau:'); readln(s); writeln('So tu trong xau la:',sotu(s)); readln; END. BI TP 4 Nhp vo mt xu s v in ra cc t ca n (T l mt dy cc k t, cch nhau bi du cch). Xu c bao nhiu t l i xng?

13

Hng dn n tp Lp trnh Pascal c bn

HNG DN C nhiu cch tch mt xu thnh cc t. Cch n gin nht tin hnh nh sau: 1) B qua cc du cch cho n khi gp mt k t khc cch (hoc ht xu). 2) Ghi cc k t tip theo vo xu tm cho n khi gp du cch hoc ht xu, khi ta c 1 t. 3) Nu cha ht xu th quay li bc 1. Mi khi tm c mt t, ta ghi lun n ra mn hnh, nu t l i xng th tng bin m. Ta cng c th lu cc t tch c vo mt mng nu bi tp yu cu dng n nhng t trong cc cu sau. Chng trnh: var s : string; dem : integer; {Hm kim tra t i xng} function doixung(x : string) : boolean; var y : string; i : integer; begin y := ''; for i := length(x) downto 1 do y := y + x[i]; if x=y then doixung := true else doixung := false; end; {Th tc thc hin tch t} procedure tach; var i, len : integer; t : string; begin writeln('Cac tu trong xau:'); i := 1; len := length(s); repeat {B1: b qua cc du cch cho n khi ht xu hoc gp 1 k t khc cch:} while (s[i]=' ') and (i<=len) do inc(i); if i>=len then break; {nu ht xu th dng} t := ''; {t l bin tm lu t ang tch} {B2: ly cc k t khc cch a vo bin tm cho n khi ht xu hoc gp 1 k t cch:} while (s[i]<>' ') and (i<=len) do begin t := t + s[i]; inc(i); end;
14

Hng dn n tp Lp trnh Pascal c bn

{in ra t va tch c v kim tra i xng} writeln(t); if doixung(t) then inc(dem); until i >= len; writeln('So tu doi xung trong xau:',dem); end; (************************************************) BEGIN write('Nhap vao 1 xau:'); readln(s); tach; END. BI TP 5 Mt s nguyn gi l palindrom nu n c t tri sang cng bng c t phi sang. V d 121 l mt s palindrom. Nhp mt dy n phn t nguyn dng t bn phm, 5<= n<=20 v cc phn t c 2 n 4 ch s. In ra cc s l palindrom trong dy. HNG DN Mt s l palindrom th xu tng ng ca n l xu i xng. Ta s xy dng mt hm kim tra mt s c phi l palindrom khng bng cch chuyn s thnh xu v kim tra xu c i xng khng? Chng trnh: uses crt; var n : integer; a : array[1..20] of integer; {Th tc nhp d liu} procedure nhap; var i : integer; begin clrscr; repeat write('n= '); readln(n); if (n<=20) and (n>=5) then break; {nu tho mn th thot khi vng lp} writeln('Yeu cau 5<=n<=20. Nhap lai!'); until false; for i := 1 to n do repeat write('A[',i,']='); readln(a[i]);
15

Hng dn n tp Lp trnh Pascal c bn

if (a[i]<=9999) and (a[i]>=10) then break; {a[i] c 2 n 4 ch s} writeln('Yeu cau cac phan tu co 2 den 4 chu so. Nhap lai!'); until false; end; {Hm kim tra bng cc kim tra xu i xng} function palindrom(k : integer): boolean; var x,y : string; i : integer; begin str(k,x); {chuyn k thnh xu x} y := ''; for i := length(x) downto 1 do y := y + x[i]; {nu x l i xng th k l palindrom} if x=y then palindrom := true else palindrom := false; end; {In kt qu:} procedure palin; var i : integer; begin writeln('Cac so la palindrom trong day:'); for i := 1 to n do if palindrom(a[i]) then writeln(a[i]); readln; end; (* Chng trnh chnh *) BEGIN nhap; palin; END. CC BI TP V TP BI TP 1 Nhp mt mng 2 chiu m dng, n ct t file BANGSO.TXT. Cu trc file nh sau: dng u l 2 s m v n, cch nhau bng du cch, m dng sau, mi dng n s nguyn. a) Hy in ra nhng s l s nguyn t ca mng. b) Tm v tr phn t ln nht trong mng. c) Sp xp mi dng ca mng tng dn v in ra mng dng ma trn.

16

Hng dn n tp Lp trnh Pascal c bn

HNG DN Ta khai bo mt mng 2 chiu v nhp d liu t file vo mng. Qu trnh nhp t file vn bn ging nh nhp t bn phm, khng cn thc hin kim tra d liu. sp xp mng theo yu cu, ta thc hin sp xp tng dng ca mng bng cch vit mt th tc sp xp (kiu i ch cho n gin) coi mi dng ca mng nh 1 mng 1 chiu. Chng trnh: var m,n : integer; a : array[1..100,1..100] of integer; (* Nhp d liu *) procedure nhap; var f : text; i,j : integer; begin assign(f,'BANGSO.TXT'); reset(f); readln(f,m,n); for i := 1 to m do for j := 1 to n do read(f,a[i,j]); close(f); end; function ngto(k : integer): boolean; var i : integer; begin ngto := false; if k < 2 then exit; for i := 2 to round(sqrt(k)) do if k mod i = 0 then exit; ngto := true; end; procedure inngto; var i,j : integer; begin writeln('Cac phan tu nguyen to cua mang:'); for i := 1 to m do for j := 1 to n do if ngto(a[i,j]) then write(a[i,j],' '); writeln; end;

17

Hng dn n tp Lp trnh Pascal c bn

procedure timmax; var max,i,j,im,jm : integer; begin max := a[1,1]; im := 1; jm := 1; {im, jm lu to phn t t max} for i := 1 to m do for j := 1 to n do if max < a[i,j] then begin max := a[i,j]; {mi ln gn max th gn to lun} im := i; jm := j; end; writeln('Phan tu lon nhat bang la A[',im,',',jm,']=',max); end; {Th tc thc hin sp xp tng dn dng th k. Cc phn t dng k c dng a[k,i]} procedure xepdong(k: integer); var i,j, tg : integer; begin for i := 1 to n do for j := i+1 to n do if a[k,i] > a[k,j] then begin tg := a[k,i]; a[k,i] := a[k,j]; a[k,j] := tg; end; end; procedure sapxep; var i,j : integer; begin for i := 1 to m do xepdong(i); {sp xp tng dng} writeln('Mang sau khi sap xep:'); for i := 1 to m do begin {in dng ma trn} for j := 1 to n do write(a[i,j] : 5); {in cc phn t trn 1 dng} writeln; {in ht 1 dng th xung dng} end; end; BEGIN nhap; inngto; timmax; sapxep; END.

18

Hng dn n tp Lp trnh Pascal c bn

BI TP 2 Nhp 2 s m, n t bn phm, sau sinh ngu nhin mn s nguyn ngu nhin c gi tr t 15 n 300 ghi vo file BANG.TXT. Sau thc hin cc yu cu sau:
a)

In mn s sinh dng ma trn m dng, n ct.

b) In ra cc s chnh phng. Yu cu: khng c dng mng 2 chiu lu tr d liu. HNG DN Do yu cu khng c dng mng 2 chiu lu tr d liu nn ta s c file n u, x l n y. - sinh cc s ngu nhin t a n b, ta dng biu thc a + random(ba+1). - kim tra s k c phi l s chnh phng khng, ta ly cn bc 2 ca k, lm trn ri bnh phng. Nu kt qu bng k th k l s chnh phng. Tc l kim tra sqr(round(sqrt(k))) = k. Chng trnh: var m,n : integer; f : text; procedure sinh; var i,j : integer; begin write('Nhap vao 2 so m,n: '); readln(m,n); assign(f,'BANG.TXT'); rewrite(f); writeln(f,m,' ',n); for i := 1 to m do begin for j := 1 to n do write(f,15 + random(300-15+1) : 6); {sinh s ngu nhin t 15 n 300} writeln(f); end; close(f); end; {Hm chnh phng} function cp(k : integer) : boolean; begin if sqr(round(sqrt(k))) = k then cp := true else cp := false; end;
19

Hng dn n tp Lp trnh Pascal c bn

procedure chinhphuong; var i,j,k : integer; begin assign(f,'BANG.TXT'); reset(f); readln(f,m,n); writeln('CAC SO CHINH PHUONG CUA BANG:'); for i := 1 to m do begin for j := 1 to n do begin read(f,k); if cp(k) then write(k,' '); {va c va x l} end; end; close(f); end; procedure inbang; var i,j,k : integer; begin assign(f,'BANG.TXT'); reset(f); {m li in dng ma trn} readln(f,m,n); writeln(#10,'IN BANG DANG MA TRAN:'); for i := 1 to m do begin for j := 1 to n do begin read(f,k); write(k : 6); {c n u in n } end; writeln; end; close(f); end; BEGIN sinh; chinhphuong; inbang; END.

20

Hng dn n tp Lp trnh Pascal c bn

CC BI TP V BN GHI BI TP 1 Vit chng trnh qun l sch. Mi cun sch gm tn sch, tn nh xut bn, nm xut bn, gi tin, s lng: a) a ra danh sch cc cun sch ca nh xut bn Gio dc. b) Tnh tng s tin sch. c) Sp xp danh sch theo nm xut bn gim dn v ghi kt qu ra mn hnh. d) In ra mn hnh cc cun sch c gi tin<=10.000 v xut bn sau nm 2000. HNG DN M t mi cun sch l mt bn ghi, cc thng tin v n (tn sch, tn tc gi,) l cc trng. Danh sch cun sch s l mt mng cc bn ghi. Khai bo kiu d liu m t sch nh sau: type sach = record ten : string[30]; {tn sch} nxb : string[20]; {tn Nh xut bn} namxb : integer; {nm xut bn} soluong : integer; {s lng} gia : real; {gi tin} end; Thng tin ca tt c cc cun sch ta lu trong mt mng cc bn ghi kiu sach: var ds : array[1..100] of sach; n : integer; Nhp d liu: ta nhp tn sch trc. Nu tn sch l xu rng th ng nhp, ngc li ln lt nhp cc thng tin khc: procedure nhap; var t : string; begin ClrScr; writeln('NHAP THONG TIN VE CAC CUON SACH'); writeln('(nhap ten sach la xau rong neu muon dung)'); repeat

21

Hng dn n tp Lp trnh Pascal c bn

write('Ten sach: '); readln(t); if t='' then break; n := n + 1; with ds[n] do begin ten := t; write('NXB: ');readln(nxb); write('Nam xuat ban: ');readln(namxb); write('So luong: ');readln(soluong); write('Gia tien: ');readln(gia); end; until false; end; Cu a: ta s duyt qua ton b danh sch cc cun sch, kim tra nu tn nh xut bn l Gio dc th in ra tt c cc thng tin ca cun sch tng ng: procedure insach; var i : integer; begin Clrscr; writeln('CAC CUON SACH CUA NXB GIAO DUC:'); for i:=1 to n do with ds[i] do if nxb='Giao duc' then begin writeln('Ten:',ten); writeln('Nam xuat ban:',namxb); writeln('So luong:',soluong); writeln('Gia tien:',gia); end; readln; end; Cu b: ta cng duyt qua ton b cc cun sch, nhn s lng v gi tin ri cng dn vo mt bin tng. Sau in ra bin tng : procedure tinh; var i : integer; tong : real; begin tong := 0;
22

Hng dn n tp Lp trnh Pascal c bn

for i := 1 to n do with ds[i] do tong := tong + gia * soluong; writeln('TONG GIA TRI CUA TAT CA CAC CUON SACH:', tong:0:3); end; Cu c: Sp xp danh sch gim dn theo nm xut bn bng phng php ni bt (2 vng for). Ch bin trung gian trong i ch phi c kiu sach th mi gn c. procedure sxep; var i,j : integer; tg : sach; begin for i := 1 to n do for j := i + 1 to n do if ds[i].namxb < ds[j].namxb then begin tg := ds[i]; ds[i] := ds[j]; ds[j] := tg; end; for i:=1 to n do with ds[i] do begin writeln('Ten:',ten); writeln('Nam xuat ban:',namxb); writeln('So luong:',soluong); writeln('Gia tien:',gia); end; readln; end; Cu d: ta lm tng t vic in danh sch cc sch ca NXB Gio dc: procedure inds; var i : integer; begin writeln('CAC CUON SACH GIA RE HON 10000 VA XUAT BAN TU NAM 2000:'); for i := 1 to n do with ds[i] do if (gia <= 10000) and (namxb >= 2000) then writeln(ten); end; Chng trnh chnh: Ln lt gi cc chng trnh con theo th t: BEGIN

23

Hng dn n tp Lp trnh Pascal c bn

nhap; insach; tinh; sxep; inds; readln; END. BI TP 2 Vit chng trnh qun l cn b. Thng tin v cn b gm tn, tui, h s lng, ph cp, thu nhp. a) Nhp thng tin cn b t file vn bn CANBO.TXT. Cc thng tin gm tn, tui, h s lng, ph cp, mi thng tin trn mt dng. Tnh thu nhp = h s lng 350000 + ph cp a ra danh sch cc b tr (tui <= 30), in y cc thng tin c) Sp xp tn cn b theo abc v ghi ln file truy cp trc tip SAPXEP.DAT. d) c danh sch t file SAPXEP.DAT, in ra mn hnh cc cn b c thu nhp t 3 triu tr ln.
b)

HNG DN Lm tng t bi 1, ch l nhp d liu t file ch khng phi t bn phm. Do khng cn ghi cc thng tin yu cu nhp ra mn hnh. Hn na, phi to trc mt file vn bn l CANBO.TXT chng trnh c th chy m khng bo li. Ton vn chng trnh: uses crt; type canbo = record ten : string[20]; tuoi : byte; hsl, phucap, thunhap: real; end; var ds : array[1..100] of canbo; n : integer; (*********************************************)
24

Hng dn n tp Lp trnh Pascal c bn

procedure nhap; var f : text; begin assign(f,'CANBO.TXT'); reset(f); n := 0; while not eof(f) do begin n := n + 1; with ds[n] do begin readln(f,ten); readln(f,tuoi); readln(f,hsl); readln(f,phucap); thunhap := hsl * 350000 + phucap; end; end; close(f); end; (*********************************************) procedure in30; var i : integer; begin writeln('DANH SACH CAC CAN BO TRE:'); for i := 1 to n do with ds[i] do if tuoi <= 30 then begin writeln('Ten:',ten); writeln('Tuoi:',tuoi); writeln('He so luong:',hsl :0 :3); writeln('Phu cap:',phucap :0 :3); writeln('Thu nhap:',thunhap :0 :3); end; end; (*********************************************) procedure sxep; var i,j : integer; tg : canbo; begin for i := 1 to n do for j := i + 1 to n do if ds[i].ten > ds[j].ten then begin tg := ds[i]; ds[i] := ds[j]; ds[j] := tg; end;

25

Hng dn n tp Lp trnh Pascal c bn

end; (*********************************************) procedure ghitep; var f : file of canbo; i : integer; begin assign(f,'SAPXEP.DAT'); rewrite(f); for i := 1 to n do write(f,ds[i]); close(f); end; procedure doctep; var f : file of canbo; i : integer; begin assign(f,'SAPXEP.DAT'); reset(f); i := 0; while not eof(f) do begin i := i + 1; read(f,ds[i]); end; n := i; close(f); end; (*********************************************) procedure in3M; var i : integer; begin writeln('DANH SACH CAC CAN BO CO THU NHAP CAO:'); for i := 1 to n do with ds[i] do if thunhap >= 3000000 then begin writeln('Ten:',ten); writeln('Tuoi:',tuoi); writeln('Thu nhap:',thunhap :0 :3); end; end; (*********************************************) BEGIN nhap; in30; sxep;

26

Hng dn n tp Lp trnh Pascal c bn

in3M; readln; END.

27

You might also like