CÁC VÍ DỤ NÂNG CAO VỀ CÂU LỆNH LẶP - Pdf 14

CÁC VÍ DỤ NÂNG CAO VỀ CÂU LỆNH LẶP
Phần này trình bày cách vận dụng các câu lệnh lặp để giải quyết một số
bài toán tiêu biểu ở mức khó hơn. Thông qua các ví dụ, người học sẽ tìm
thấy những tư liệu có ích để giải các bài tập tương tự, nâng cao thêm một
bước kỹ năng lập trình.
Ví dụ 11.1: Nhập x và n, tính gần đúng Sinx theo công thức:

Ta viết :
S= U
0
- U
1
+ U
2
- U
3
+U
4
- +(-1)
N
U
N
, trong đó :
U
0
= x

.v.v.

Như vậy, U
k

S:=x ; { Gán gía trị ban đầu U
0
cho S ngay}
dau:= -1;
For k:=1 to N do
begin
C:= x*x/ ( 2*k*(2*k+1) );
U:= U*C;
S:=S+ dau*U;
dau:= - dau;
end;
Writeln(‘ Giá trị Sin = ‘, S:8:4);
Readln;
End.
Chạy <VD11_1.EXE >
Chép tập tin nguồn <VD11_1.PAS>
Khi chạy chương trình, nếu nhập N=6 và x=1.5708 (=  /2) thì cho kết
qủa Sinx= 1.0000 ; Nếu nhập N=6 và x=3.1416 (=  ) thì cho kết qủa Sinx =
0.0000.
Ví dụ 11.2: Tính gần đúng số e với sai số cho trước.
Cho công thức :

( vế phải là một tổng vô hạn )
Hãy tính gần đúng e
2
bằng cách lấy tổng ( hữu hạn ) các số hạng ở đầu
chuỗi cho đến khi gặp số hạng đầu tiên có gía trị tuyệt đối nhỏ hơn một số
epsilon (EPS) dương khá bé cho trước, tức là :

với n là số sao cho:

Repeat
Write(‘Nhap sai so > 0 : ‘);
Readln(EPS);
Until EPS >0;
k :=0;
S :=0;
U :=1;
While ABS(U) >= EPS DO
begin
S:=S +U;
k:=k+1;
U:=U* 2/ k;
end;
Writeln(‘ S= ‘ , S:8:4 , ‘ tính đến số hạng k= ‘, k);
Readln;
End.
Chạy < VD11_2.EXE>
Chép tập tin nguồn <VD11_2.PAS>
Khi chạy chương trình, nếu nhập EPS=0.001 thì cho kết qủa S=7.3887 ,
tính đến số hạng k=10.
Ví dụ 11.3:
Nhập số nguyên dương N, in các chữ số của N theo thứ tự đảo ngược. Ví
dụ N= 15742 in ra 24751. Cách làm như sau:
Tách và in hàng đơn vị của N ra bằng hai lệnh:
k:= N mod 10; { được k=2 }
Write(k: 3);
Bỏ đi hàng đơn vị, giữ lại các chữ số từ hàng chục trở lên:
N:= N div 10; { được N=1574 }
Lặp lại qúa trình trên cho đến khi N=0.
Số lần lặp là không biết trước mà tùy thuộc vào việc nhập số N có ít hay

Kiemtra: Boolean ;
Begin
Repeat
Write(‘ Nhập N : ‘);
Readln(N);
Until (N>0);
If N =1 then Kiemtra:= False
else { xét N > 1}
begin
Kiemtra:= True;
k:=1;
Repeat
k:= k+1;
Until N mod k=0 ;
If k<N then Kiemtra:= False;
end;
If Kiemtra=True then Writeln(N, ‘ là số nguyên tố ‘)
else
Writeln(N, ‘ không phải số nguyên tố ‘);
Readln;
End.
Chạy <VD11_4.EXE>
Chép tập tin nguồn <VD11_4.PAS>
Chương trình có một đoạn cần giải thích rõ thêm:
Repeat
k:= k+1;
Until N mod k=0 ;
If k<N then Kiemtra:= False;
Vòng lặp trên kết thúc khi gặp số k đầu tiên (nhỏ nhất) thỏa điều kiện N
mod k=0. Lúc đó, nếu k<N thì có nghĩa N chia hết cho một số k khác N nên


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status