LÆp víi sè lÇn lÆp kh«ng biÕt tr íc... LÆp víi sè lÇn lÆp kh«ng biÕt tr íc.[r]
(1)Bài 10
Giáo án điện tử tin häc líp 11
(3 tiÕt)
Ngày soạn: 24/09/2009
(2)Bài toán 1:
Bài to¸n 2:
100 1 2 1 1 1 1 a a a a S 1 2 1 1 1 1 N a a a a S
Các tốn đặt vấn đề : Tính tổng S, với a số nguyên a>2
cho đến 1 0.0001
N
(3)XuÊt ph¸t
a
S 1
1 1
a
LÇn 1
2 1
a LÇn 2
+…
LÇn N
N a
1
Mỗi lần thực giá trị tổng S tăng thêm bao nhiêu? 1 Sau lần thực giá trị tổng S tăng thêm ( với i =1; 2; ; ;N)
a + i
(4)Bài toán 1: Bài toán 2: 100 1 2 1 1 1 1 a a a a
S 1 1 1 1 2 1
N a a a a S
Cho đến khi 1 0.0001
N
a
Số lần lặp biết tr ớc.
ã Việc tăng giá trị cho tổng
S c lp lặp lại cho đến khi 0.0001 N a 1
ã Việc tăng giá trị cho tổng S đ ợc lặp lặp lại 100 lần.
tìm khác biệt
(5)(6)1 Bài toán đặt vấn đề
- D÷ liƯu (Output) : Tỉng S
Lập ch ơng trình tính tổng sau:
- Dữ liệu vào (Input) : Nhập N
Hãy xác định INPUT OUTPUT bi toỏn trờn!
I Lặp với số lần lặp biÕt tr íc
N 1
4 1 3
1 2
1 1
(7)Phân tích toán với N = 100
NhËn xÐt: S1 = 1
S2 = S1 + 1/2 S3 = S2 + 1/3 S4 = S3 + 1/4
S100 = S99 + 1/100
1
S
Bắt đầu từ S2 việc tính S đ ợc lặp lặp lại 99 lần theo quy luật
Ssau = Str íc+ 1/i
víi i ch¹y tõ 100
2 1
3 1
4 1
. 1
(8)§
S NhËp N
S:= ; i:= 2
i > N ?
S:= S + 1/i
§ a S råi kÕt thóc
B1: NhËp N; B2: S:=1; i:=2;
B3: NÕu i > N đ a giá trị S => KÕt thóc;
B4 : S:= S + 1/i;
B5: i := i +1 quay lại B3.
Xây dựng thuật to¸n
(9)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 (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 DO S:=S+1/i;
a D¹ng (d¹ng tiÕn)
(10) Giá trị đầu, giá trị cuối biểu thức kiểu với biến đếm, giá trị đầu phải nhỏ hơn giá trị cuối.
For i:= 100 to 200 write(i);
Giá trị biến đếm đ ợc điều chỉnh tự động, câu lệnh sau DO không đ ợc thay đổi giá trị biến đếm.
Trong đó
Biến đếm biến kiểu số nguyên kí tự.
(11)Uses crt;
Var i,N : Integer; S : real;
BEGIN
Readln; END.
S:=1;
FOR i:=2 to N do S := S+1/i; Writeln(‘ Tong S =’,S:8:3);
Write(‘ Nhap vao gia tri cua N :’);readln(N);
Program Tinh_tong;
Hãy áp dụng câu lệnh lặp dạng tiến để viết ch ơng trình giải
toỏn t .
Lập ch ơng trình tÝnh tæng sau:
N 1
4 1 3
1 2
1 1
(12)S := ; i := 2;
i >N KT
S := S +1/ i ; i := i +1;
2.08 1.83 1.5 1 4 3 2 L ỵt i S 2.28 5 NhËp N
S := ; i := 2;
2>5 ? S
S
S := +1/2 ; i := +1;
3>5 ?
S := 1.5+1/3 ; i := +1;
4>5 ?
S := 1.83+1/4 ; i := +1;
5>5 ?
S := 2.08+1/5; i := +1;
6
S S S
6>5 ? Tỉng S=2.28In Tỉng S Víi N = 5
2.28
§ §
(13)3 VÝ dơ
TÝnh tỉng S (víi a số nguyên nhập vào từ bàn phím a>2).
100 1
2
1 1
1 1
a a
a a
S
? • Hãy xác định giá trị khởi đầu S, quy luật thay đổi giá
trị S số lần lặp
• Viết ch ơng trình để giải tốn trên. - S:=1/a;
- S:= S + 1/(a+i);
(14)1 Bài toán
Dữ liệu (Output) : Tổng S
Dữ liệu vào (Input) : NhËp a
Hãy xác định INPUT, OUTPUT
và nêu thuật toán giải toán trªn?
1 2 1 1 1 1 N a a a a S
Cho đến 0.0001
a N
TÝnh giá trị tổng S, với a số nguyên a>2
thì dừng lại.
(15)B íc 2:
S:=1/a; N:=1; {Khởi tạo S 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
thuật toán
B íc 1: NhËp a.
S:=1/a ; N:=1
§ a S => KÕt thóc
S:= S+1/(a+N); N:= N+1;
Vßng lỈp chØ dõng 1/(a+N)<0.0001
NhËp a
S
§
1/(a+N) >= 0.0001
(16)WHILE <Điều kiện> DO <Câu lệnh>;
Điều kiện
Đúng
Câu lệnh Điều kiện: Là biểu thức
quan hệ lôgic.
Câu lệnh: Là câu lệnh Pascal.
Sai
2 Lặp với số lần lặp tr íc
(17)WHILE 1/(a+N) >= 0.0001 DO
Begin
S:=S+1/(a+N);
N:=N+1;
END;
3 Mét sè vÝ dô
a Bài toán đặt vấn đề:
NhËn xÐt:
Chừng 1/(a+N)>=0.0001 thực hiện:
+ Tăng giá trị tổng S thêm 1/(a+N). + Tăng N thêm đơn vị
1 2 1 1 1 1 N a a a a S 0.0001
aN
Tính giá trị tổng S, với a số nguyên a>2
(18)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;
(19)b Lập ch ơng trình nhập vào hai số nguyên d ơng M,N Tìm ƯCLN hai số đó.
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:=N-M; B3: Đến M=N thì
=> § a ¦CLN(M,N)=M; => KÕt thóc.
B1: NhËp M,N
B2 : While M<>N DO Begin
IF M>N then M:=M-N else N:=N-M; end;
B3: In ¦CLN(M,N)
(20)Tham khảo:
Dạng khác câu lệnh lặp với số lần lặp tr ớc
REPEAT <Câu lƯnh> UNTIL <§iỊu kiƯn>;
§iỊu kiƯn
Sai
C©u lƯnh
(21)Bài tố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 {Bat dau lap}
S:=S+1/(a+N); N:=N+1
UNTIL 1/(a+N)< 0.0001; {Ket thuc lap} Writeln(‘Gia tri cua tong S = ‘,S:8:3);
Readln;
(22)H·y nhí!
C©u lƯnh rẽ nhánh.
Câu lệnh lặp
IF <đk> THEN <c©u lƯnh>;
FOR TO DO …
IF <đk> THEN <câu lệnh 1> ESLE <c©u lƯnh 2>;
FOR Downto DO
While <đk> Do <câu lệnh>;
+ Dng khuyt. + Dạng đầy đủ.