Cách 2: truyền bằng đối dạng tham biến giá trị.. Cách 3: truyền bằng đối dạng tham số biến.. Sai vì thủ tục TINH sử dụng tham số biến X, Y còn lời gọi thủ tục TINH bên trong chương trình
Trang 1§5 BIEN CUC BO, BIEN TONG THE
TRUYEN THAM BIEN CHO THU TUC / HAM
Cách 2: truyền bằng đối dạng tham biến giá trị
Cách 3: truyền bằng đối dạng tham số biến
4 Sai vì thủ tục TINH sử dụng tham số biến X, Y còn lời
gọi thủ tục TINH bên trong chương trình chính lại không sử
\
dụng tham số biến để truyền giá trị
5 Được
6 Giải thích;
a Cả 2 tham số x và y của thủ tục VD_ thamso đều là
tham trị cho nên khi gọi thủ tục VD_fhamso (a, b) với a=1; b=4 thì x=2; y=5 và trên màn hình in ra:
Kết thúc thủ tục này biến a và b không bị thay đổi giá trị
vì vậy lệnh Witein (a:5 b:5); in ra
Trang 2122 Tee fee Lip Drink Pascal
7 Được vi trong Turbo Pascal có từ khóa Forward giúp
cho ta làm được điều này
Ví dụ: chương trình tính tổng của 10 số tự nhiên liên tiếp
Trang 3If i< 10 then Begin inc(i);
S:=Sti;
P2; {gọi.thủ tục P2) End;
End;
8 Được (đây chính là thủ tục hoặc hàm đệ quy)
Trang 4124 Tu hoe bap Drink Pascal
Trang 5
slop:=false;
Repeat y:=c1*a1;
Trang 6126 Ie hoe Lg Lash Pascal
Trang 7Function ki(ch: char; st: string): boolean;
{Kiểm tra xem kí tự ch cô trong xâu s† hay không Nếu có
thì hàm trả về giá trị True Nếu không thì hàm trả về giả
Trang 8
128 Tee Kae Ly Prtok Pascal
Begin {Than cua thu tuc compare}
kq=", — {Xâurỗng}
For i:=1 to length(s1) do
If (not kt(s1i],kq)}and(kt(s1[i].s2)) then kq:=concat(kq,s1[i);
compare(xau1, xau2, xau);
lfxau<>" then Writeln(Xâu chung là: ,xau)
Else Writeln('Không có kí tự nào có trong cả hai
12 Program P4512
Uses Crt;
Const M=100;
Var S: array[1 M] of string;
max, min, i, j, n: byte;
Trang 9S, luu: string;
Begin
luu:=";{Xâu rỗng}
For id:=1 to length(U) do
If (pos(Ufid}, V)=0)and(pos{Ufid],luu)=0) then
luu:=concat(uu,U[id]);
For id:=1 to length(V).do
lf (pos(V[id].U)=0)and(pos(V[id]luu)=0) then luu:= concat(luu, V[id]);
Until n>=2;
Writeln(Nhập ',n, xâu kí tự);
For Ì:=1 to n do
Begin Write('S'i,"="); Readin(Sii]):
End:
Begin { Main Program }
Trang 10130 Tue hoe big tink Paseal
If max<d(S[i],S[j}) then max:=d(S[i], Sf);
If min>d(S[i],S[j]) then min:=d(S[],S[]); End;
Write(Max(d(Si,Sj)=';max,' Min(d(Si,Sj)=', min); Readin;
If Sobonghoa<=1 then Write(#7, Nhập lại.)
Trang 11If Mayhai then Begin
If (Sobonghoa mod (Motlanhai+1))=0 then Dahai:=1
Else Dahai:=(Sobonghoa mod (Motlanhai+1));
Writeln(-Máy hai’ Dahai,"béng hea’);
End Else Begin Repeat Write(- Bạn hái bao nhiéu béng hoa:’); Readln(Dahai);
Trang 12132 Tue hac Lip think Pascal
if (Dahai<=0)or(Dahai>Motlanhai) then Writeln(#7,Bạn đã sai luật); Until (0<Dahaijand(Dahai<=Motlanhai): End;
Mayhai:=not Mayhai;
Dec(Sobonghoa,Dahal);
Writeln( Còn lại ,Sobonghoa, bông hoa);
End;
lf Mayhai then Writeln(Bạn đã thắng ')
Else Writeln( Bạn đã thua.), Write(Tiếp tục chơi (C#J?-), - Repeal
Trang 13max1, max2, max3: Real:
lf m1<alij] then m1:=ali,j]:
lfm2<a{n-i+1,n-j+1] hen m2.=a[n-i+1,n-jJ+ 1];
Trang 14134 7 hoe Lif Pais Pager
Procedure Max_cde(Var mc, md, me: real);
If md<a[n-i+1,n-j+1] then md:=a[n-i+4 ,n-j+1]};
If me<alfj,n-i+1] then me:=alj,n-i+1];
inc(j);
Until j>kt:
inc(bd);
dec(kt) End;
Trang 15Function nguyento(Ns: longint}: boolean;
{Trả về giá trị True néu Ns là s6 nguyén t6, ngược lại trả
về giá trị False }
Trang 16
136 7 hoe Lig Brink Payeal
Trang 17
U:=2;
While (u<=(LN div 2))and(u<=NS) do Begin
lf (NS mod uz0)and nguyento(u) then
{u là ước số nguyên tố của NS}
1:lf dl>1 then kq:=0 Else (Dem>=2 }
If dem mod 2=0 then kq:=1 Else kq:=-1;
Trang 19b Ta chứng minh công thức:
C(n+r+ 1,r)= Ð`Cín+ jÿ
j=0
bằng qui nạp toán học theo r: Với r=0,1 công thức hiển nhiên
đúng Giả sử công thức đúng cho r>=1 ta chứng minh nó cũng đúng cho r+†1, ta có:
Function check: boolean;
{ check= TRUE nếu a.,a;, ,8, là 1 hoán vị không cân
bằng, ngược lại check=FAL SE}
Var kt: boolean;
id: khoang;
Begin
Trang 20
140 Tu hae lig Drink Pascal
kt:=true;
id:=1;
While kt and (id<=N} do
If alid]=id then kt:=false Else inc(id);
check:=kt;
End;
Procedure doicho(Var so1, so2: knoang);
{Đổi giá trị của hai biến so1 và so2 cho nhau}
Trang 21
lfN<2 then Write(#7,'Nhập lại( N>=2 ):);
Until (=N)or{not dk);
If check=true then Begin inc{Dn); print;
End;
stop:=(dk)and(i=N):
Until stop=true;
Trang 22142 7 hae hip Laisk Pascal
Writeln( Có ',n,' hoán vị không cân bằng của ˆ,N,
- Khả năng thứ nhất a,,,<>i Khi đó nếu bỏ a/=n+1 đi và thay vào đó bằng a„., thì ta được một hoán vị không cân bằng của n phần tử Nói cách khác, hoản vị không cân bằng của n+1 phần tử có thể nhận được từ hoán vị không cân bằng của n phần tử bằng cách xếp n+1 vào vị trí thứ ¡ và đổi
a ra vị trí cuối cùng Vì ¡ có thể chọn từ 1 đến n nên số các
hoán vị như vậy là nD,
- Khả năng thứ hai: a.,,=ì Khi đó nếu bỏ cả a, và a„„; đi
thì ta được một hoán vị không cân bằng của (n-1) phần tử Vi 1<i<n nên ta có tất cả nD, các hoán vị như vậy
Vậy số các hoán vị không cân bằng của n+1 phần tử là:
D,„;=nD„+nD, = n(D„+Ð,.,) - điều phải chứng minh
20 Ta chứng mình: D„=nD, ;+(-1)" (2) bằng qui nạp theo n
Với n=2: (2) có dạng 1=1.0+(-1)* - đúng
Trang 23Điều phải chứng minh
§6 LAM VIEC VOI FILE TRONG PASCAL
Readln(fm,n), — {đọc mội dòng vào hai biến m, n}
Writeln(m, ‘‘, n);
Readln;
End.
Trang 24144 Vue hae Lif, Brink pascal
Readin(f,m); (đọc dòng đầu vào biến mì
Readin(f,n); {đọc dòng sau vào biến n} close(f);
Readin(f,n); {doc déng déu vao bién n}
For i:=1 to n do Readin(f,a{ij); — {đọc n dòng sau
vào các biến a[ï])
Trang 26146 Tu hee lip trink Pascal
{hàm SeekEof báo cho ta biết đã hết file)
Wile not SeekEoF(f) do
Begin Readin(f,afi});
Trang 27assign(fdata.tt’),
reset(f);
i:=0;
(hàm SeekEoLn(f) báo cho ta biết đã hết dòng}
Whiie not SeekEoLn(f) do
Readin(f);
End:
close(f);
Trang 28148 ?z fac Lip rind Pageal
For i:=1 ton do
Begin For j:=1 to m do Write(ali,j}:8);
Readin (f, hei) ti, x! [i]) ;
close(f); {Kiém tra}
For i:=1 to n do Writeln(ht{i), t[i]:4,xl{i}: 3);
Readln,
End
Trang 29Readin(f,ht{ij, [i], xi[i]); inc(i);
End;
n:=i-1;
close(f); {kiểm tra}
For ¿=1 to n do Writeln(hf[]| 1I]:4,xI[Ì]3);
Trang 30150 Tue hae bhp tink Pascal
Begin
Cirscr;
m:=10;
n:=4,
assign(f, 'son.inf); .{hai thủ tục mở file}
reWrite(f); (SON.INF dé ghi}
Writeln(f, m,"’,n); {ghi giá trị các biểu thức m,
n vào một dòng của file}
close(f); {dong file}
assign(f, 'son.inf); {đọc lại để kiểm tra}
Trang 31assign(f, ‘sod inf);
End;
assign(f, đata.txf)
rewrite();
Writeln(fn); — {ghi n vào dòng đầu của file}
For i:=1 to n do Writein(f,alij);
{ghi afi] vào các dòng sau của file}
close(f);
Trang 32152 Tuc bee bi tein Pascal
Trang 33reWnite();
L=1;
Repeat Write(ắi:2,]= , Readln(a[i;
Trang 34154 lee hee hig Brink Pascal
reset(f);
While not(seekeoln(f)) do
Begin Readin(f,afi}); Writeln(afi});
Write(‘Tén file cần doc: ); Readln(fn);
Write{(Số lượng học sinh: ); Readin(n);
Trang 35l:=length(ht[i);
lf (I<20) then For j;=l+1 to 20 do hi{i}:=htfi]+' ':
Write(‘Nhap tuổi: `); ReadIn(f[i]);
\:=length(f[i]);
lf (I<3) then For j:=l+1 to 3 do t[i):=' +I];
Write(Nhập xếp loại: }; Readin(xI]]);
Writeln(ht[ij, t[i}:4, xifij:3);
Trang 36156 Tec hac Lip Lrinh Pagal
Trang 37Var tfin, tfou: string;
fin, fou: text;
n, |, J: integer;
Trang 38158 Tự đa Lig, Drink pageal
Trang 40460 Iie bee big trink Pascal
For i:=1 ton do
lf (copy(a[[,21,3)= Nam) then snam:=snam+† Else snu:=snu+1;
Writeln(Số nam: ',snam,' Số nữ : ',snu,.;
Fori:=1tondo {Tìm người chung họ)
Trang 41If (ho(a[i])=ho(a[il))and(i<>i) then t:=true: inc(j);
Var - tfin, tfou: string;
fin, fou: text;
Trang 42162 Tu hac Lig trink Pasenl
While (hvf[i]<>' ) do
Begin ten[j]:=hwvt[i]:
End;
n:=i-1;
Trang 44
164 Tuc hoe by Drink Pascal
If ((st[fF 1}and(stf-1]E0)}or((s{[1}Ƒ 1)and(st[2]0)) then
Writeln('Không thể biến đổi được!)
Else
Begin assign(fou, oufput.txf);
rewrite(fou);
Trang 45
Writeln(fou,st);
If (st{]='1')and(st{l-1]='1') then ghi1(I-1);
Repeat _ ( bién d6t x4u con '11'}
Trang 46166 le foe Lip Drink Pasect
Trang 48168 Tye hoe kit bà-£ Dxsez£
st1:=st1+’ '+st:
Repeat i:=length:stt);
p:=pos(';’, st);
lf (p<>0) then Begin st:=copy(sf†, 1, p);
Trang 49While not(seekeof(fou)) do
Begin Readin{fou, st); Writeln(st);
Var fin, fou, fhuy: text;
sum, can: real;
Trang 50170 Tee đạc Lif Prink Pascal
Begin
Read(fin,can):
sum:=sum+cany, k:=k+1;
End;
close(fhuy);
Readin;
End
Trang 51§7 ÔN LUYỆN
1 Program P4701;
Uses Crt;
Const —— Pi: rea) =3.14;
Var r,a, ht, h2: real;
Trang 52
172 Tec hae big trek Pascal
Begin {Main Program}
Clrscr;
Writeln(‘Nhap ban kinh hinh trdn:'); Readin(r):
Writeln(Nhập cạnh hình vuông:); Readln(a);
Writeln( Nhập đường chéo hình thoi: h1, h2);
Readin(h1, h2);
Writeln(Bạn muốn tính diện tích hình gi:);
Writeln{'1 - Tính diện tích hình tròn );
Writeln(2 - Tính diện tích hình vuông );
Writeln(3 - Tính diện tích hình thoi.);
Writeln( Chọn 1, 2 hoặc 3: ); Readln(chon);
Procedure Giai_PT_bac_hai {a, b, c: real};
Var Delta, x1, x2: real;
Trang 53
If delta=0 then Delta_khong;:
lf delta>0 then Delta_ duong;
lf delta<0 then Write (Phương trình vô nghiệm); End
3 Program P4703;
Uses Crt;
Trang 54174 Tw loc ⁄% Drink Pascal
Trang 55While (i<=sqrt(m)) and (n Mad i >0) do inc(i);
If j>sqrt(n) then ngto:=true
Else ngto:=False;
End;
Function dx(n: integer): boolean;
Var A: array{1 16] of integer;
Al]:=n mod 2;
n:=n div 2;
End;
jt;
While (j<=i div 2} and (AljJ=A[i-+7]) do inc();
If j=(t div 2) + 1 then dx:=true
Trang 56
176 Tue hac Ly Link Pascal
If j>(L div 2) then Wrfteln( Đây là từ đối xứng)
Etse Writein(’Tir không đối xứng);
Readin;
End
6 Để ý rằng nếu 2" =3"+‡ và n<=10 thì ta phải có am= 2" - 1<2!% =1024 < 3” suy ra m<=6
Program P4706;
Uses Crt;
Trang 57If hai_mu(n)=ba_ma(m)+1 then Writeln(n:2, m:2); End;
Readln;
End
Trang 58
178 ue hac big trink Pascal
B[2*i-1]:= gt Mod 3;
B[2"ï]:= gt Div 3;
End;
Writein(Bidu diễn của số trong hệ cơ số 3 là:);
For ¡ =2*Ì downfo 1 do Write (B[i)):
Var N: Jongint;
A: array [1 16] of char;
i, j: byte;
Trang 59Writeln (biểu diễn của n trong hệ Hexa là: ');
For j:=i downto 1 do Write(Alj)):
lí (M[I)>= 0) and (Mfil)<="9'} then Ali]: =ord(M[i}}-48
Etse A [i]:= ord (M[i]) - 55;
GTM:=0,
Trang 60
180 Tee hoe bf Dried Pascal
For i=1 to Length (M) do GTM:=16*GTM + Aji}:
End;
Begin {Chuang trinh chinh}
Write (‘cho mét sé tu nhién N:’}; Readin (N);
Wriet(‘cho mdt sé tu nhién M trong hé dém Hexa:’); Readin(M);
Trang 61Function F(x: integer): integer;
{tính giá trị hàm f(x)=vế trái tại điểm x}
Var id, S: integer;
lf a[0]=0 then
Trang 62182 - Tec hee big, think Pascal
Begin ine{sn); ng{sn]:=0; End;
For i:=1 to sb do Writeln(‘X’, i, ‘=’, ng[i]):
End
Else Writeln(Phương trình vô nghiệm );
Write(‘Nhan Enter dé thoat ");
Trang 63Procedure nhap(tenx: string;Var x: np);
Var n, i, x0, code: integer;
Write(ch);
inc(n);
If (n>O) then For i:=n downto 1 do x{i):=x{i-1];
Trang 64184 Tue haz Lif brink Pascal
Trang 65
Repeat
Repeat ch:=readkey;
Unfil (ch in[0,'1.#13]):
lf not(ch=#13) then Begin
For i:=maxnp downto 0 do
If (i>=k) then y{i}:=x[i-k]
Trang 66186 Tuc hae big triph Pascal
For i:=0 to maxnp do
Begin f:=(x[*y[i+e) div 2;
For i:=0 to maxnp do p{i]:=0;
For i:=0 to maxnp do
Begin
If bfi]=1 then left(a,i,c) Else For j:=0 to maxnp do cfj]:=0;
con§(p,c,p), End;
13 Program P4713;
Uses Crt;
Type np=array [0 1000) of byte;
Var a, b, c, a0, a1, b0, b1, p, p0, pt: np;
Trang 67maxnp, i, j, na, nb, n: integer;
Trang 68488 ye bee lip think Pascal
Var i: integer,
Begin
For i:=maxnp downto 1 do
If (i>k) then y[i}:=x[i4d Else y[i]:=0;
End;
Procedure cong(x, y: np; var z: np); {x,y>=0}
End;
Procedure tru(X, y: np; var z: np), {x>=y>z0}
Var i, nho: integer;
Begin
nho:=0;
For i:=1 to maxnp do
Begin Z[Ï:=(2+x{il-y[il-nho) mod 2;
if (x[i}-y[i}-nho>=0) then nho:=0 Else nho:=1;
End;
Trang 69
End;
Function daucong(var x, y: np): byte;
{xét dấu của tổng x+y sắp xếp theo trị tuyệt đối
Var u, í, đ; integer; |
Begin
I:=maxnp;
While (x[i]=y[i]} and (i>0) do dec(i):
If (>=1) and (x{i]<yfi]) then
Begin daucong:=yj0];
For i:=0 to maxnp do Begin
u=l x[]=yf], y[]=zu;
End;
End Else daucong:=x{0};
End Else
Begin 2[0]:=daucong(x, y); tru(x, y, z);
Trang 70
190 Tue hae hip Brink Pascal
If (x{O]=y[0]) then z{0]=1 else z{0]:=0;
For i:=1 to maxnp do 2{i]:=0;
For i:=1 to maxnp do
Trang 71End Else Begin
Trang 72192 Te koe Lig tink Papen
left(a1, n, b1);
cong(b†, p0, p):
Write{a"b = },
While p[maxnp]=0 do dec(maxnp),
For Ì:Zmaxnp downfto 1 do Write(pji));
Readln;
End
14 Ta chứng minh F,F„ạ + F,.;Fa:¿= Fax.y (1) đúng với
mọi k, n bằng quy nạp theo k:
Với k=1: (1) có dạng 1.Fn+1.Fn.¡ = Fas - đúng với mọi n
Giả sử (1) đúng đến k, nghĩa là F„F„ + Fu.,F„.,= Fass;
với mọi n, mọi ki<=k; ta phải chứng minh (1) đúng đến k+1,
nghĩa là:
FkutFa + FvaFnsi Fnx+2 (2)
Thực vậy, vế trái của (2) = (F¿ + Fi)Fn + (Fv.ị + F2)Fn~
= FyFn + FgaFn + FvejFn+i + FuF ni
= (FiFn + Fu.iFmxg) + (Pin + FvFn+)
= F.„ ;¡ + F, (theo giả thiết quy nạp)
= Fs.v„¿ = Vẽ phải của (2)
Vậy (1) đúng đến k+1, nghĩa là (1) đúng với mọi k, mọi n
15, a Ta ching minh F,? + F,? + F,2= F,F,.1 (1) bang quy
nap theo n:
Vdi n=1: (1) c6 dang 1? = 1.1 - đúng
Giả sử (1) đúng đến n Ta sẽ chứng minh (1) đúng đến
n+†, nghĩa là:
Trang 73FytF gt Fong + Foes = Fost (2)
Thực vậy: vế trái của (2) = (F,+Fa+ Fan ¡) + Fa„
= F„, +Fz„„¡ (theo giá thiết quy nạp)
= Fi.) = vẽ phải của (2)
Vậy 1 đúng đến (n+1) Do đó (1) đúng với mọi n
Trang 74194 Tec hae Li, brink Pascal
Fast + Finsyys 2 Lenape (2)
Thue vay: vé trai cua (2) =F.) + Farag
=F A+ Fay + Fpeg + Fass
= (FitF pez) + (Fat + Fras)
= Lạ +L, (theo gia thiết quy nạp)
= Liss = vế phải của (2)
Vậy (1) đúng đến n+1 suy ra (1) đúng với mọi n
Lott bye Ly? +L? + LE, = La¿jLạ„2+2 (2)
Thực vậy: vế trái của (2) = (Lạ?+ L,2+ Lạ? + L„2) + LỆ,