Tải bản đầy đủ (.ppt) (37 trang)

Bài 10 Cấu trúc lập thiết kế hay nhất

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.46 MB, 37 trang )


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ù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
(Mcho 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.



×