DANH MỤC TÀI LIỆU
Một số thuật toán cơ bản trong Pascal và ứng dụng
Bai_tap_Pascal
Bai tap Pascal
CÁC THUT TOÁN V S
THUT TOÁN KIM TRA S NGUYÊN T
Thut toán ca ta da trên ý tưởng: nếu n >1 không chia hết cho s nguyên nào trong
tt c các s t 2 đến thì n là s nguyên t. Do đó ta sẽ kim tra tt c các s nguyên t 2
đến có round(sqrt(n)), nếu n không chia hết cho s nào trong đó thì n là s nguyên t.
Nếu thy biu thc round(sqrt(n)) khó viết thì ta có th kim tra t 2 đến n div 2.
Hàm kim tra nguyên t nhn vào mt s nguyên n tr li kết qu true (đúng)
nếu n là nguyên t và tr li false nếu n không là s nguyên 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; {nếu n chia hết cho i thì n không là nguyên t => thoát luôn}
ngto:=true;
end;
Chú ý: Da trên hàm kim tra nguyên t, ta có th tìm các s nguyên t t 1 đến n bng
cách cho i chy t 1 đến n và gi hàm kim tra nguyên t vi tng giá tr i.
THUT TOÁN TÍNH TNG CÁC CH S CA MT S
NGUYÊN
Ý tưởng ta chia s đó cho 10 ly dư (mod) thì được ch s hàng đơn v, ly s đó
div 10 thì sẽ được phn còn li. Do đó schia liên tc cho đến khi không chia được na
(s đó bng 0), mi ln chia thì được mt ch s và ta cng dn ch s đó vào tng.
Hàm tính tng ch s nhn vào 1 s nguyên n tr li kết qu tng các 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;
end;
tongcs := s;
end;
Chú ý: Tính tích các ch s cũng tương t, ch cn chú ý ban đu gán s là 1thc hin
phép nhân s vi n mod 10.
THUT TOÁN EUCLIDE TÍNH UCLN
Ý tưởng ca thut toán Euclide là UCLN ca 2 s a,b cũng 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.
Hàm UCLN nhn vào 2 s nguyên a,b và tr li kết 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 trên thut toán tính UCLN ta có th kim tra được 2 s nguyên t cùng nhau
hay không. Ngoài ra cũng có th dùng đ ti gin phân s bng cách chia c t và mu cho
UCLN.
THUT TOÁN TÍNH TNG CÁC ƯỚC S CA MT S
NGUYÊN
Đ nh tng các ước s ca s n, ta cho i chy t 1 đến n div 2, nếu n chia hết cho s
nào thì ta cng s đó vào tng. (Chú ý cách tính này chưa xét n cũng 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 trên thut toán tính tng ước s, ta th kim tra được 1 s nguyên
s hoàn thin không: s nguyên gi là s hoàn thin nếu nó bng tng các ước s ca nó.
CÁC THUT TOÁN V VÒNG LP
THUT TOÁN TÍNH GIAI THA MT S NGUYÊN
Giai tha n! là tích các s t 1 đến n. Vy hàm giai tha viết 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 TOÁN TÍNH HÀM MŨ
Trong Pascal tath tính ab bng công thc exp(b*ln(a)). Tuy nhiên nếu a không phi
là s dương thì không th áp dng được.
Ta có th tính hàm mũ an bng công 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 TOÁN TÍNH CÔNG THC CHUI
Thut toán tính hàm ex:
Đt: và , ta được công thc truy hi:
Khi đó, ta có th tính công thc chui trên như sau:
function expn(x: real; n : integer): real;
var s,r : real; i : integer;
begin
s := 1; r := 1;
for i := 1 to n do begin
r := r * x / i;
s := s + r;
end;
expn := s;
end;
CÁC BÀI TP V MNG 1 CHIU VÀ 2 CHIU
BÀI TP 1
Nhp vào mt s n (5<=n<=10) n phn t ca dãy a, 1<ai<100 (có kim tra d liu
khi nhp).
a) In ra các phn t là s nguyên t ca dãy.
b) Tính ước chung ln nht ca tt c các phn t ca dãy.
c) Tính biu thc sau:
d) Sp xếp dãy tăng dn và in ra dãy sau sp xếp.
HƯỚNG DN
Ta nên chia chương trình thành các chương trình con, mi chương trình thc hin mt
yêu cu. Ngoài ra ta cũng viết thêm các hàm kim tra nguyên t, hàm mũ, hàm UCLN đ
thc hin các yêu cu đó.
Chương trình như sau:
Khai báo d liu:
uses crt;
var n : integer;
a : array[1..10] of integer; {n<=10 nên 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);
if (5<=n) and (n<=10) then break; {nếu thoã mãn thì dng vòng lp}
writeln('Khong hop le (5<=n<=10). Nhap lai!!!'); {ngược li thì báo 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; {hàm kim tra nguyên t, xem gii thích phn
trên}
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ông tin tài liệu
Tài liệu cung cấp các thuật toán cơ bản trong pascal và một số bài tập ứng dụng
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×