một số hàm thờng dùng Bài tập
*****************
A-Một số hàm chuẩn của PASCAL I-kiểu nguyên :
1. ABS(x) : cho trị tuyệt đối của x . 2. SQR(x): Cho bình phơng của x
3. SUCC(x) : cho giá trị kế tiếp sau của x ,tức là x+1 4. PRED(x) : cho giá trị kế tiếp trớc x ,tức là x-1 II-Kiểu thực
* Các hàm sau có đối số thực và kết quả thực 1. ABS(x) : cho trị tuyệt đối của x . 2. SQRT(x): căn bậc hai của x 3. SQR (x) :bình phơng
4. INT(x) : cho phần nguyên của số x 5. FRAC(x) cho phần thập phân của số x *Các hàm sau có đối số thực nhng kết quả nguyên
1. TRUNC(x: real) : integer ; làm chòn bằng cách cắt bỏ phần lẻ của x 2. ROUND(x: real): integer : cho số nguyên gần x nhất
VD:
ROUND(3.1)=TRUNC(3.1)=3
ROUND(3.9)=4 trong khi đó TRUNC(3.9)=3
III- Kiểu kí tự (CHAR )
1. ORD(c: char) : integer cho thứ tự của kí tự c trong bảng chữ
2. CHR(i:integer) : char cho cho lí tự có thứ tự là I trong bảng chữ .Nếu I có giá trị cụ thể (ví dụ 65 ) thì chỉ cần viết # 65.
3. PRED (c: char ):char cho kí tự đứng trớc c trong bảng kí tự 4. SUCC(c:char):char cho kí tự đứng ngay sau c trong bảng kí tự 5. UPCASE(c: char ): char cho kí tự tơng ứng với c nhng viết hoa 6. Readkey :Lấy 1 kí tự từ bàn phím
VD: if upcase(readkey)= ‘C’ then begin...end;
IV. Kiểu xâu kí tự (String)
1. Hàm LENGTH (S) Cho độ dài của xâu s 2. Thủ tục Val (St,Num,code);
Biến đổi một xâu kí tự (St)thành một số nguyên lu vào biến (Num) mã lỗi code phải khai báo kiểu Integer khi phép biến dổi thành công thì mã lỗi bằng 0;
3. Thủ tục Str( Num,ST)
Biến đổi số thành một xâu kí tự lu vào xâu St.
4. Hàm Concat(ST1,St2,...,Stn); ghép xâu các xâu (cos thể cộng trực tiếp các xâu St:=St1+St2+...+StN)
5. Hàm Copy
Dùng để tách từ một xâu kí tự ra một xâu con . COPY (St,Pos,Num): string
Pos, Num là giá trị nguyên
Kết quả trả lại là một xâu đợc trích ra từ xâu St có độ dài Num tính từ vị trí Pos 6. Hàm POS (s,St) trả về vị trí đầu của xâu con s trong xâu mẹ St .Nếu s không nằm
trong xâu St thì POS bằng 0.
7. Thủ tục Delete (St,pos,Num) xoá bỏ trong xâu St từ vị trí Pos đi Num kí tự VD: St=’FILENAME’ Delete (St,2,3) khi đó St=’FNAME’
V. Dữ liệu kiểu tệp 1. Thủ tục Read, Readln : Dùng để đọc dữ liệu từ file : READ( F, var1, var2, var3 … );
Gán các giá trị thuộc dòng hiện thời của tệp F vào các biến var1, var2, … Sau khi thực hiện lệnh, con trỏ không chuyển xuống dòng kế tiếp.
READLN( F, var1, var2, var3 … );
Gán các giá trị thuộc dòng hiện thời của tệp F vào các biến var1, var2,… Sau khi thực hiện lệnh, con trỏ chuyển xuống dòng kế tiếp.
VD :
File VD.INP chứa thông tin của mảng : VD.INP
6
1
Ta dùng các lệnh sau để đọc dữ liệu vào mảng A : READLN( F, n );
For i := 1 to n do READ( F, A[i] );
2. Thủ tục Write, Writeln : Dùng để ghi dữ liệu ra file : WRITE( G, var1, var2 );
Ghi ra dòng hiện thời của file giá trị của các biến var1, var2 . Sau khi thực hiện lệnh, con trỏ chuột không xuống dòng.
WRITELN( G, var1, var2 );
Ghi ra dòng hiện thời của file giá trị của các biến var1, var2 . Sau khi thực hiện lệnh, con trỏ chuột xuống dòng.
3. Hàm Eof, Seekeof, Eoln, Seekoeln :
EOF( F ) ; Nhận giá trị True nếu đã đọc hết file và False nếu cha hết file.
SEEKEOF( F ); Tơng tự nh hàm EOF nhng bỏ qua các ký tự trống.(hay lỗi ) EOLN( F ); Nhận giá trị True nếu đã đọc hết dòng và False nếu cha hết dòng.
SEEKEOLN( F ); Tơng tự nh hàm EOLN nhng bỏ qua các ký tự trống.
VD :
Tệp VD.INP chứa một mảng gồm các xâu ký tự :
Nếu đọc theo cách thông thờng READLN( F, S1, S2, S3 ) thì xâu S1 sẽ nhận giá trị ab bc de còn S2 và S3 rỗng. Vì vậy ta phải đọc từng ký tự và kiểm tra đã hết dòng cha.
Var ch : char;
Fillchar( s, sizeof( s ) , ’’);{ gán cho mảng s giá trị ban đầu =’’ } I:=1;
While not eoln( f ) do Begin
Read( f, ch );
If ch <> ‘’ then s[i] := s[i] + ch Else
Begin
While ch = ‘’ do read( f, ch );
If ch <> ‘’ then Begin
Inc( i );
S[i] := ch;
End; End;
End;
……….
Procedure DocTep(tep:string);
Var i:integer; f:text;
Begin i := 1;
While not eoln( f ) do Begin
Read( f, ch );
If ch <> ‘’ then s[i] := s[i] + ch Else
Begin
While ch = ‘’ do read( f, ch );
If ch <> ‘’ then Begin
VD.INP ab bc de
Inc( i );
S[i] := ch;
End; End;
End;
……….
Mở của sổ theo dõi sự thay dổi của các biến khi chạy chơng trình từng bớc một :
ấn F7 vào menu Debug -> Watches ấn Insert ->Nhập tên biến cần theo dõi (có thể nhập nhiều biến ) ấn F7 từng bớc để theo dõi sự thay đổi của các biến trong chơng trình xem đúng hay sai để từ đó có thể phát hiện thuật toán của mình mà sửa chữa.
{Tìm UCLN của hai số a và b}
Function USCLN(a,b:integer): integer;
Var sodu: integer;
Begin
if b=0 then uscln:= a else
begin
While b<>0 do Begin
sodu:= a mod b;
a:=b; b:= sodu;
End;
USCLN:=a;
End;
End;
...
Function USCLN(a,b: longint): longint;
Begin
If b=0 then USCLN:=a
Else USC:=USCLN(b,a mod b);
End;
...
Function USCLN(a,b: longint): longint;
Begin
While a<>b do if a>b then a:=a-b Else b:=b-a;
UCLN:=a;
End;
...
function NT(n:longint):boolean;
var i:longint;
begin NT:=False;
for i:=2 to TRUNC(SQRT(n)) do if n mod i = 0 then exit;
NT:=n>1;
end;
...
function NT(n:longint):boolean; ( Nên dùng ) var i:longint;
begin
NT:=False;
if n mod 2 = 0 then exit;
if n mod 3 = 0 then exit;
if n <25 then exit;
i:=5;j:=2;
While i<=trunc(sqrt(n)) do begin
if n mod i = 0 then exit;
inc(i,j);j:=6-j;
end;
NT:=n>1;
end;
...
function NT(n:longint):boolean;
var i:longint;
begin
if n<2 then nt:=false else begin
i:=2;
while (i<=sqrt(n)) and (n mod i<>0) do inc(i);
NT:=(i>sqrt(n));
end;
end;
...
function MU(a,n:longint):longint;
begin
if n=0 then mu:=1 else MU:=a*MU(a,n-1);
end;
...
function ktChinh_Phuong(a:longint):bolean;
var i:longint;
begin
for i:=1 to a do if i*i= a then
begin ktChinh_Phuong:=True; exit; end;
ktChinh_Phuong:=false;
end;
...
function ktChinh_Phuong(a:longint):bolean;
var i:longint;
begin
ktChinh_Phuong:=frac(sqrt(a))=0;
end;
...
function FIBONACI(n :longint):longint;
begin
if n<3 then fibonaci:=1 else fibonaci:= fibonaci(n-1)+fibonaci(n-2);
end;
...
{Kiem tra mot so co phai fibinaxi khong}
BEGIN
write('Vào số n: ');readln(n);
A:=1;B:=1;t:=2;
write(A,B: 6);
while n>2 do begin
A:=a+b;
t:=t+a;
write(A:6);
b:=a-b;
end;
writeln('Tổng của ',n,' số ****naci đầu tiên là: ',t);
END.
function ktFIBO(n:longint):boolean;
var i:integer;
begin
i:=0;ktfibo:=false;
REPEAT inc(i);
ktfibo:= fibo(i)=n;
until fibo(i)>=n;
end;
...
function DOIXUNG(s:string):boolean;
var s1:string; i,m,n,kt1,kt2:integer;
begin s1:='';
for i:= length(s) downto 1 do s1:=s1+s[i];
DOIXUNG:=(s1=s);
end;
...
function DOIXUNG(n:longint):boolean;
var s1,s:string; i:integer;
begin
str(n,s);
s1:='';
for i:= length(s) downto 1 do s1:=s1+s[i];
DOIXUNG:=(s1=s);
end;
...
function DOINHIPHAN(n:longint):string;
var i:integer;st:string;
Begin st:='';
while n>0 do begin
if n mod 2=0 then st:='0'+st else st:= '1'+st;n:=n div 2;end;
DOINHIPHAN:=st;
end;
...
function DOITHAPPHAN(st:string):longint;
var i,gt,lt:integer;
Begin
lt:=1;gt:=0;
for i:= length(st) downto 1 do
begin if st[i]='1'then gt:=gt+lt;lt:=lt*2;end;
DOITHAPPHAN:=gt;
end;
...
function ktBN:boolean;{kt co hai so duong bang nhau dung canh nhau khong}
var i:integer;
begin
for i:=1 to n-1 do
if (a[i]>0)and (a[i]=a[i+1]) then begin kt:=true;exit; end;
ktbn:=false;
end;
...
function Shang(k:integer):real;{tinh tong hang}
var j:integer; S:real;
begin s:=0;
for j:=1 to n do s:=s+a[k,j];
shang:=s;
end;
...
function ShangMax(k:integer):real;{hang co tong lon nhat}
var j:integer; S:real;
begin
max:=shang(1);
for j:=2 to n do
if max<shang(i) then max:=shang(i);
ShangMax:= max;
end;
...
{ kiem tra xem trong day co hai so nguyen to bang nhau khong}
function ktntBN:booleanvar i,j:integer;
begin
for i:=1 to n-1 do for j:=i+1 to n do
if ktnt(a[i]) and (a[i]=a[j]) then begin kt:=true;exit; end;
ktbn:=false;
end;
...
{KiÓm tra kÝ tù ch cã ph¶i lµ sè hay kh«ng } function ktcs(ch:char):bolean;
begin
ktcs:=('0'<= ch)and(ch<='9');
end;
...
function ucln(n,m:integer):integer;
var i:integer;
begin i:=1 ;
while m<>n do begin
if m>n then m:=m-n else n:=n-m;
inc(i);
end;
ucln:=n end;
...
function kt(w:string):boolean;
var i:integer;
begin kt:=true;
for i:=1 to length(w) do if w[i]='['then exit;
kt:=false;f ktnt(a[i]) and (a[i]=a[j]) then kt:=true;
...
function chuanXau(var w:string):string;{chuan xau ho ten}
var kt:boolean;i,k,n:integer;
begin kt:=true;
while kt do begin
kt:=false;
if w[1]=' 'then begin delete(w,1,1);kt:=true;end;
n:=length(w);
if w[n]=' 'then begin delete(w,n,1);kt:=true;end;
k:=pos(' '+' ',w);
if k>0 then begin delete(w,k,1);kt:=true;end;
end;
w[1]:=upcase(w[1]);
for i:=2 to n-1 do
if w[i]=' 'then w[i+1]:=upcase(w[i+1]);
chuanxau:=w;
end;
...
function sk(n:longint):longint;{ Tim số chữ số 0 của N!}
var tam:longint;
begin tam:=0;
ưhile n>=5 do begin
inc(tam,n div 5);
n:=n div 5;
end;
sk:=tam;
end;
bài tập : ớc số - nguyên tố.
1/ Cho trớc số tự nhiên n. Lập trình phân tích số n thành tích các thừa số nguyên tố.
2/ Cho trớc số tự nhiên n. Tìm số Mersen <=n (số nguyên tốMersen có dạng 2p -1, p là nguyên tố).
3/ Đọc ra các số nguyên tố sinh đôi trong đoạn (m,n) ( số nguyên tố mà khoảng cách giữa chúng =2)
4/ Cho số tự nhiên n . Tìm các số <=n là tích đúng 2 thừa số nguyên tố có thể trùng nhau ( 3 thừa số nguyên tố).
5/ Đọc ra tất cấc số hoàn thiện < n (số bằng tổng các ớc thực sự ).
6/ Đọc ra tất cấc số gần hoàn thiện < n (số gần hoàn thiện là số không phải hoàn thiện nhng sau khi đục bỏ một chữ số bất kỳ nào đó và giữ nguyên vị trí và bỏ đi chữ số 0 ở đầu nếu có thì nó trở thành số hoàn thiện ).
7/ Tìm tất cả các cặp số nguyên tố cùng nhau trong khoảng m,n (UCLN=1) 8/ Cho n tính tổng các ớc số nguyên tố của n .
9/ Đọc ra tất cặp số nguyên tố tơng trong khoảng n,m (hai số đợc gọi là nguyên tố tơng đơng nếu chúng có chung các ớc nguyên tố) .
10/ Tìm số tự nhiên nhỏ nhất <> n và nguyên tố tơng đơng với n . 11/ Tìm số nhỏ nhất <10000 không có ớc nguyên tố nào khác 3,5,7 12/ Tìm số nhỏ nhất >10000 không có ớc nguyên tố nào khác 3,7,11
13/ Đọc ra tất cả các sô gần nguyên tố lớn nhất nhỏ hơn N (n<1000000) (số gần nguyên tố là số không phải nguyên tố nhng sau khi sắp xếp lại các chữ số bỏ đi các chữ số 0 vo nghĩa ở đấu nếu có thì nó trở thành số nguyên tố) .
14/ Đọc ra tất cả các số siêu nguyên tố có m chữ số .Có bao nhiêu số ? Số nà xuất hiện trong tất cả các số siêu nguyên tố đó?
15/ cho Nlà một số nguyờn dương <=2000000000. Hóy tỡm số chữ số 0 của n!
...