Bài
10
(2 tiết)
Giáo án điện tử tin học lớp 11
Các bài toán đặt vấn đề : Tính tổng S, với a là số
nguyên và a>2
Bài toán 1:
1
1
1
1
S
...
a a 1 a 2
a 100
Bài toán 2:
1
1
1
1
S
...
...
a a 1 a 2
aN
cho ®Õn
khi
1
0.0001
aN
Cùng tìm thuật toán
Xuất phát
Lần 1
Lần 2
Lần N
1
1
1
S
a
a 1 a 2
+
1
aN
Mỗi lần thực hiện giá trị tổng S 1 tăng
thêm bao
Sau
lần thực hiện giá trị tổng S tăng thêm
( với i =1;
2; nhiêu?
3 mỗi
; ...;N)
a+i
tìm sự khác biệt
Bài toán 1:
1
1
1
1
S
...
a a 1 a 2
a 100
Bài toán 2:
1
1
1
1
S
...
...
a a 1 a 2
aN
1
0.0001
Cho đến khi
aN
ã Việc tăng giá trị
cho tổng S đợc lặp
đi lặp lại 100 lần.
ã Việc tăng giá trị cho
tổng S đợc lặp đi
lặp lại cho đến khi
1
0.0001
aN
Số lần lặp biết tr
ớc.
Số lần lặp cha biết trớc
CÊu tróc lỈp
I. Lặp với số lần lặp biết trớc
1. Bài toán đặt vấn Lập chơng trình tính tổng sau:
đề
1 1 1
1
S 1 ...
2 3 4
N
- D÷
H·y xác định
INPUT và
liệu
vào (Input)
OUTPUT
của
bài toán trên!
:
Nhập N
- Dữ liệu ra (Output) :
Tæng S
Phân tích bài toán với N = 100
1 1 1
1
S 1 . . .
2 3 4
100
....................
S1 = 1
S2 = S1 + 1/2
S3 = S2 + 1/3
S4 = S3 + 1/4
.....
S100 = S99 + 1/100
NhËn xÐt:
B¾t đầu từ S2 việc tính
S đợc lặp đi lặp lại 99
lần theo quy luật
Ssau = Strớc+ 1/i
với i chạy từ 2 100
Xây dựng thuật toán
B1: Nhập N;
Nhập N
B2: S:=1; i:=2;
S:= 1 ; i:= 2
i>N?
B3: Nếu i > N thì đa ra
giá trị S => Kết
thúc;
Đ
Đa ra S rồi kết
thúc
S
S:= S + 1/i
i:= i+1
B4 : S:= S + 1/i;
B5:
i := i +1 quay l¹i B3.
2. Lặp với số lần lặp biết trớc
a. Dạng 1 (dạng tiến)
FOR <biến đếm> := <giá trị đầu> TO <giá trị cuối> DO <
câu lệnh>;
Ví dụ: S:=1;
FOR i:=2 TO 100 DO
S:=S+1/i;
b. Dạng 2 (dạng lùi)
FOR <biến đếm> := <giá trị cuối> DOWNTO <giá trị đầu> DO
<câu lệnh >;
Ví dụ: S:=1;
FOR i:=100 DOWNTO 2 DO
S:=S+1/i;
Trong đó
Biến đếm là biến kiểu số nguyên hoặc kÝ tù.
For i:=1 to 10 do write(i);
For i:=‘a’ to ‘z’ do write(i);
Giá trị đầu, giá trị cuối là các biểu thức
cùng kiểu với biến đếm, giá trị đầu phải
nhỏ hơn giá trị cuối.
For i:= 100 to 200 do write(i);
Giá trị biến đếm đợc điều chỉnh tự động,
vì vậy câu lệnh sau DO không đợc thay
đổi giá trị biến ®Õm.
Lập chơng trình tính tổng sau:
1
1
1
1
S 1
...
2
3
4
N
Program Tinh_tong;
Uses crt;
HÃy S
áp:dụng
Var i,N : Integer;
real;
câu lệnh lặp
BEGIN
dạng tiến để
viết chơng
S:=1;
trình giải bài
Write( Nhap
toánvao
đặtgia
vấntri cua N :);readln(N);
đề.
FOR i:=2 to N do S := S+1/i;
Writeln(‘ Tong S =’,S:8:3);
Readln;
END.
Mô phỏng thuật toán
Với
Nhập
N =N5
i
Lợt
2
3
4
5
S
1
1.5
1.83
2.08
2.28
S := 1 ; i :=
2;
i6>5
>N
2>5
3>5
4>5
5>5
?
SS
S
S := SS
1 :=
+1/2
+1/ i ;
1.83+1/4
2.08+1/5;
1.5+1/3 ;;
ii :=
:= 2
i +1;
+1;
ii :=
:= 54
3 +1;
+1;
§
Tỉng
In Tỉng S
S=2.28
KT
6
3. Ví dụ
Tính tổng S (với a là số nguyên nhËp vµo tõ bµn
phÝm vµ a>2).
1
1
1
1
S
...
a a 1 a 2
a 100
?
ã HÃy xác định giá trị khởi đầu của S, quy luật thay
đổi giá trị của S và số lần lặp.
ã Viết chơng trình để giải bài toán trên.
- S:=1/a;
- S:= S + 1/(a+i);
- i chạy từ 1 đến 100 => Số lần lặp
là 100 lÇn.
II. Lặp với số lần lặp không biết tr
ớc
1. Bài toán Tính giá trị tổng S, với a là số nguyên và
a>2.
1
1
1
1
S
...
...
a a 1 a 2
aN
Cho đến
khi
1
0.0001 thì dừng lại.
a N
Dữ liệu vào (Input) :
Dữ liệu
Nhập a
HÃy xác định
ra INPUT,
(Output)
: Tổng
OUTPUT
và nêu thuật
toán giải bài
toán trên?
S
thuật toán
Bớc 1: Nhập a.
Bớc 2:
S:=1/a; N:=1;
{Khởi tạo S và
N}
Bớc 3:
NÕu 1/(a+N) < 0.0001
=> Bíc 5
Bíc 4:
S:=S+1/(a+N);
N:=N+1;
=> quay l¹i bíc 3
NhËp a
S:=1/a ; N:=1
S
1/(a+N) >=
0.0001
§
S:= S+1/(a+N);
N:= N+1;
Bíc 5: In S => Kết thúc.
Vòng lặp chỉ dừng khi 1/
(a+N)<0.0001
Đa ra S
=> KÕt
thóc
2. Lặp với số lần lặp không biết trớc
WHILE <Điều kiện> DO
lệnh>;
Trong đó:
Điều kiện: Là biểu thức
quan hệ hoặc
lôgic.
Câu lệnh: Là một câu lệnh
của Pascal.
Điều kiện
S
ai
Đúng
Câu lệnh
Chừng nào điều kiện còn đúng thì câu lệnh còn đợc thực
hiện.
3. Một số ví dụ
a
Bài toán đặt vấn Tính giá trị tổng S, với a là số nguyên và
a>2
đề:
1
1
1
1
S
...
...
a a 1 a 2
aN
Cho đến
khi
1
0.0001thì dừng lại.
a N
Nhận xét:
Chừng nào 1/(a+N)>=0.0001 thì
còn thực hiện:
+ Tăng giá trị của tổng S thêm
1/(a+N).
WHILE 1/(a+N) >=
0.0001 DO
Begin
S:=S+1/(a+N);
+ Tăng N thêm 1 đơn vị.
N:=N+1;
END;
Chơng trình
Program Bai_toan;
Uses Crt;
Var a,N:Integer;
S:Real;
BEGIN
Clrscr;
Write(Nhap gia tri cua a= );Readln(a);
S:=1/a;N:=1;
WHILE 1/(a+N)>=0.0001 DO
BEGIN
S:=S+1/(a+N);
N:=N+1;
END;
Writeln(‘Gia tri cua tong S = ‘,S:8:3);
Readln;
END.
b
Lập chơng trình nhập vào hai số nguyên dơng
M,N. Tìm ƯCLN của hai số đó.
Thuật
toán
B1: Nhập M,N;
B2 : Chừng nào MN
nếu M>N thì
M:=M-N,
ngợc lại thì N:=NM;
B3: Đến khi M=N thì
=> Đa ra
ƯCLN(M,N)=M;
các bớc viết chơng
trình
B1: Nhập M,N
B2 : While M<>N DO
Begin
IF M>N then M:=MN
else N:=NM;
end;
B3: In ¦CLN(M,N)
Tham khảo:
Dạng khác của câu lệnh lặp với số lần lặp không
biết trớc
REPEAT <Câu lệnh> UNTIL <Điều
kiện>;
Câu lệnh
Sai
Điều kiện
Đúng
Bài toán đặt vấn đề:
Program Bai_toan;
Uses Crt;
Var a,N:Integer;
S:Real;
BEGIN
Clrscr;
Write(Nhap gia tri cua a= ‘);Readln(a);
S:=1/a;N:=1;
REPEAT
dau lap}
S:=S+1/(a+N);
N:=N+1
UNTIL 1/(a+N)< 0.0001;
thuc lap}
Writeln(‘Gia tri cua tong S = ‘,S:8:3);
Readln;
END.
{Bat
{Ket
HÃy nhớ!
Câu lệnh rẽ nhánh.
IF <đk> THEN
lệnh>;
IF <đk> THEN
lƯnh 1>
ESLE
2>;
FOR ... TO ... DO ...
…
FOR
... Downto
...
DO ...
While
<đk>
Do
lệnh>;
+ Dạng khuyết.
+ Dạng đầy đủ.
Câu lệnh lặp
+ Lặp với số lần lặp biết
trớc.
+ Lặp với số lần
không biÕt tríc.
lỈp