Tiết 12 – 13 - 14
Gi¸o ¸n ®iÖn tö tin häc líp 11
Bài 1
Program kiemtra;
var x,y :integer;
Begin
x :=20 ; y := 10 ;
Hãy cho biết kết quả của
If x > y then x := x – y ;
đoạn
chương
If x=y
then
y := y –trình
x ; sau:
Write( x, ‘ ‘, y) ;
Readln;
End.
10 - 10
GiảI đáp
20 - 10
20
x
>
10
10
10
y
x
x
10
= y
0
y
10
x
Bài 2
Program vidu;
Begin
Writeln( ‘PASCAL ‘) ;
Hãy cho
biết‘PASCAL
kết quả
Writeln(
‘) ; của
đoạn Writeln(
chương
trình‘) ;sau:
‘PASCAL
Writeln( ‘PASCAL ‘) ;
Writeln( ‘PASCAL ‘) ;
Readln;
End.
GiảI đáp
Trên màn hình in ra 5 dòng có từ
PASCAL
Bµi
10
Gi¸o ¸n ®iÖn tö tin häc líp 11
Hiểu được nhu cầu của cấu trúc lặp trong biểu diển
thuật toán.
Hiểu cấu trúc lặp với số lần biết trước, cấu trúc lặp
kiểm tra điều kiện trước.
Biết cách vận dụng đúng đắn từng loại cấu trúc lặp
vào tình huống cụ thể.
Viết đúng các lệnh lặp với số lần lặp biết trước, lệnh
lặp kiểm tra điều kiện trước.
Viết được thuật toán của một số bài toán đơn giản.
Gi¸o ¸n ®iÖn tö tin häc líp 11
Các bài toán đặt vấn đề
Bài toán 1:
Tính tổng S, với a là số nguyên và a>2
1
1
1
1
S= +
+
+ ... +
a a +1 a + 2
a + 100
Đây là bài toán tính tổng liên
tiếpnêu
của 101
Hãy
nhận
phần tử.
xét và hướng
Ta có thể đưa ra hướng giải giải
như của
sau: bài
toán này ?
PHÂN TÍCH BÀI TOÁN
1
1
1
1
1
S= +
+
+
+ ... +
a a +1 a + 2 a + 4
a + 100
......................................
S1 = 1/a
S2 = S1 + 1/(a+1)
S3 = S2 + 1/(a+2)
S4 = S3 + 1/(a+3)
.....
S100 = S99 + 1/(a+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
Bµi to¸n 2:
TÝnh tæng S, víi a lµ sè nguyªn vµ a>2
1
1
1
1
S= +
+
+ ... +
+ ...
a a +1 a + 2
a+N
cho ®Õn khi
1
< 0.0001
a+N
Cùng tìm thuật toán
Xuất phát
Lần 1
Lần 2
1
1
1
+
+
S =
a +1 a + 2
a
Lần N
+
1
+
a+N
1
Mỗi
lần
thực
hiện
giá
trị
tổng
S
tăng
Sau mi ln thc hin giỏ tr tng S tng thờm thêm
( vi ibao
=1; 2;nhiêu?
3 ; ...;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:
S=
1
1
1
1
+
+
+ ... +
+ ...
a a +1 a + 2
a+N
Cho đến khi
Việc tăng giá trị cho
tổng S đợc lặp đi lặp
lại 100 lần.
1
< 0.0001
a+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
a+N
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
Hãy xác định INPUT
và OUTPUT của bài
toán trên!
- Dữ liệu vào (Input) :
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
Câu lệnh for DạNG TIếN
a. Cú pháp
For <bđk> :=<gtđ> to <gtc> do<lệnh>;
Biến
điều khiển
có kiểu nguyên vô h
b.Giá
Thành
phần
trịđợc(
đầu,integer,
giá trịbyte,
cuốichar)
có cùng
ớngđếm
For, to, do: Từ khoá
kiểu
với biến điều
khiển
<bđk>
Biến
điều khiển
Giá trị đầu
<gtđ>
Lệnh
đơn hoặcGiá
lệnh
trị ghép
cuối
<gtc>
<lệnh> Lệnh
Sơ đồ khối
For <bđk> :=<gtđ > to <gtc> do<lệnh>;
Biểu thức điều kiện
Bđk :=Giá trị đầu
B
đk<=cậậnncu
ii
Bđk<=c
cuốố
Bđ:=Bđ+1
T
F
Câu lệnh
Câu lệnh bất kỳ
Lệnh tiếp ngoài vòng For-Do
2. Lặp với số lần lặp biết trớc
Lệnh FOR dạng lùi
a. Cú pháp
For <bđk> :=<gtđ> downto <gtc> do<lệnh>;
Biến
điều khiển
có kiểu nguyên vô h
b. Thành
phần
Giá
trịFor,
đầu,
trị
cuối
có
cùng
ớng
đếm
đợc( giá
integer,
byte,
char)
downto, do: Từ khoá
kiểu
biến điềuBiến
khiển
với
điều khiển
<bđk>
Giá trị đầu
<gtđ>
Lệnh
đơn hoặcGiá
lệnh
trịghép
cuối
<gtc>
<lệnh> Lệnh
2. Nh¾c l¹i:
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;
Var i,N : Integer; S : real;
BEGIN
S:=1;
Hãy áp dụng câu
lệnh lặp dạng
tiến để viết ch
ơng trình giải bài
toán đặt vấn đề.
Write( Nhap vao gia tri cua N :);readln(N);
FOR i:=2 to N do S := S+1/i;
Writeln( Tong S =,S:8:3);
END.
Readln;
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
6
S := 1 ; i := 2;
i >N?
6>5
2>5
3>5
4>5
5>5
SS
S
S
S
SS:=
:=
:=
:=1.83+1/4
2.08+1/5;
1.5+1/3
S
1 +1/2
+1/ i ;;;
i :=ii :=
:=
5 +1;
2i +1;
3
4
+1;
§
Tæng
In Tæng
S=2.28
S
KT
Ví dụ
Nhập từ bàn phím 2 số nguyên dương M và N
(M
cho 3 hoặc 5 trong phạm vi từ M đến N
Program Tong ;
Uses crt;
Var M,N,I:integer; T:Longint;
Begin
Clrscr;
write(‘M=’);readln(M);
write(‘N=’);readln(N);
T:=0;
For I:=M to N do
If (I Mod 3=0)or(I Mod 5=0) then
T:=T+I;
writeln(‘ket qua:’,T); readln;
End.
Mở rộng
Cho vòng FOR lồng nhau.
Giải bài toán sau:
Trăm trâu trăm cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
lụ khụ trâu già
Ba con một bó.
Hỏi số trâu mỗi loại?
Hãy nêu cách
thức dùng vòng
lặp for để giải
bài toán này ?
Chương trình giải bài toán.
Uses crt;
Var dung,nam,gia : byte;
Begin
clrscr;
for dung:=1 to 20 do
for nam:=1 to 33 do
begin
gia:=100-dung-nam;
if gia mod 3 = 0 then
if dung*5+ nam*3+ (gia div 3) = 100 then
write(‘dung:’, dung,’nam:’,nam,’gia:’,gia);
end;
End.