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

Bai 8 Lap voi so lan chua biet truoc

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 (164.17 KB, 19 trang )

Kiểm tra bài cũ
Câu 1: Em hãy trình bày cú pháp của câu lệnh lặp với
số lần chưa biết trước?
Trả lời:
Cú pháp: while <điều kiện> do <câu lệnh>;
Trong đó:
- Điều kiện thường là một phép so sánh
- Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh
ghép.


Kiểm tra bài cũ
Câu 2: nêu các bước thực hiện câu lệnh While…
do?
Trả lời:
Bước1:Kiểm tra điều kiện:
Bước2:
• Nếu điều kiện SAI, câu lệnh sẽ bị bỏ qua và thực
hiện lệnh lặp kết thúc.
• Nếu điều kiện ĐÚNG, thực hiện câu lệnh và quay
lại bước (1 )


Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
2. Ví dụ về lệnh lặp với số lần chưa biết trước
Ví dụ 3 (SGK): Chúng ta biết rằng, nếu n(n>0)
càng lớn thì 1/n càng nhỏ, nhưng ln ln lớn
hơn 0.
Với giá trị nào của n thì 1/n < 0.005 hoặc
1/n<0.003?




Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
2. Ví dụ về lệnh lặp với số lần chưa biết trước
Phân tích bài tốn:
n

x=1/n

Điều kiện x>0.003

1

X1=1/1

Đúng

2

X2=1/2

Đúng

………………

…………….

…..
m


Xm=1/m ( Đk 1/m<0.003) Sai, KT quá trình lặp


Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
Chương trình tính số n nhỏ nhất để 1/n nhỏ hơn một
sai số cho trước:


Uses crt;
Var x: Real;
n: Integer;
Const Sai_So=0.003;
Begin
Clrscr;
x:=1; n:=1;
While x >= Sai_So do
Begin
n:=n+1;
x:=1/n;
End;
Write(‘So n nho nhat de 1/n < ‘,Sai_So:6:4, ‘ la ‘,n);
Readln;
End.


Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
2. Ví dụ về lệnh lặp với số lần chưa biết trước

Ví dụ 5: Viết chương trình tính tổng
1 1
1
T 1    ... 
2 3
100
 Bài toán lặp với số lần biết trước
•Tìm input và output của bài tốn:
Input: 1+1/2+1/3+…+1/100
Output: Tổng T


Bài 8: LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
Chương trình sử dụng lệnh
lặp với số lần biết trước:

Program vidu5_1;
Var i: integer;
T: real;
Begin
T:=0;
For i:=1 to 100 do
T:=T+1/i;
Writeln (T);
Readln;
End.
Kết quả hai chương
trình như nhau.

Chương trình sử dụng câu lệnh

lặp với số lần chưa biết trước:

Program vidu5_2;
Var i: integer;
T: real;
Begin
T:=0;
i:=1;
while i<=100 do
begin
T:=T+1/i;
i:=i+1;
end;
Writeln(T);
Readln;
end.


Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
* Lưu ý:
- Chúng ta có thể sử dụng câu lệnh while…do thay
cho câu lệnh for…to…do.
- Tùy trường hợp mà chúng ta sử dụng câu lệnh
while…do… thay cho câu lệnh for…to…do… Vì
lệnh lặp while…do… phù hợp cho bài toán với số
lần lặp chưa biết trước còn câu lệnh for…to…do
phù hợp với bài tốn có số lần lặp biết trước.



Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
3. Lặp vơ hạn lần – lỗi lập trình cần tránh

Var a : Integer;
Begin
a:=5;
While a < 6 do
Writeln(‘A’);
End.
Tại sao chương trình này lại rơi vào vịng lặp
vơ tận?


Bài 8: LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
3. Lặp vơ hạn lần – lỗi lập trình cần tránh

Var a : Integer;
Begin
a:=5;
While a < 6 do
Writeln(‘A’);
End.
Trả lời: giá trị ban đầu của a được gán bằng 5. điều
kiện đặt ra là: nếu a<6 thì thực hiện: in ra màn hình
số a ,điều kiện này ln đúng (5<6) nên câu lệnh
được thực hiện lặp đi lặp lại không ngừng


Bài 8: LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)


Do vậy, khi thực hiện vòng lặp, điều kiện trong câu
lệnh phải được thay đổi để sớm hay muộn giá trị của
điều kiện được chuyển từ đúng sang sai. Chỉ như thế
chương trình mới khơng “rơi” vào những “vịng lặp vơ
tận”


Bài 8: LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
? Vậy với chương trình trên ta thay đổi điều kiện
như thế nào để chương trình khơng là chương trình
với vịng lặp vơ tận nữa?
Chương trình sau khi thay đổi điều kiện:
Var a: integer;
Begin
Var a : Integer;
a:=5;
Begin
While
a:=5; a<6 do
Begin
While a < 6 do
Writeln(‘A’);
Writeln(‘A’);
A:=a+1;
End.
End;
End.



Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
GHI NHỚ
1. Ngoài cấu trúc lặp với số lần lặp biết trước, các ngơn
ngữ lập trình cịn có các câu lệnh lặp với số lần chưa
biết trước.
2. While…do... là câu lệnh lặp với số lần chưa biết trước
trong pascal.


Bài tập
Bài 5 (SGK): hãy chỉ ra lỗi trong các câu lệnh sau:
a, X:=10; while X:=10 do X:=X+5;
Đáp án: điều kiện thường là phép so sánh không thể
là phép gán
b, X:=10;while X=10 do X=X+5;
Đáp án:câu lệnh không thể là phép so sánh mà phải
là phép gán
c, S:=0; n:=0; while S<=10 do n:=n+1; S:=S+n;
Đáp án: câu lệnh ghép phải được đặt trong cặp từ
khoá begin…end;


Bài tập


Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (TT)
Ví dụ 5: Viết chương trình tính tổng


1 1
1
T 1    ... 
2 3
100
a) Sử dụng câu lệnh lặp với số lần biết trước?
b) Sử dụng câu lệnh lặp với số lần chưa biết trước?


Bài tập: Viết chương trình tính tích của 10 số tự
nhiên đầu tiên.
a)Sử dụng câu lệnh lặp với số lần biết trước?
b) Sử dụng câu lệnh lặp với số lần chưa biết trước?


a) Sử dụng lệnh lặp với số
lần biết trước:

Var T, i: integer;
Begin
T:=1;
For i:=1 to 10 do
T:=T*i;
Writeln(‘Tich cua 10 so
Tu nhien dau tien la: ‘,t);
Readln
End.

b) Sử dụng câu lệnh lặp với số
lần chưa biết trước:


Var T, i: integer;
Begin
T:=1; i:=1;
While i<=10 do
Begin
T:=T*i;
i:=i+1;
End;
Writeln(‘Tich cua 10 so
tu nhien dau tien la: ‘,t);
Readln
End.



×