BÀI 7: CÂU LỆNH LẶP
(lặp với số lần biết trước)
GIÁO ÁN ĐIỆN TỬ TIN HỌC 8
BÀI 7) CÂU LỆNH LẶP
Câu lệnh lặp – một lệnh thay cho nhiều lệnh
Câu lệnh lặp for … do
Tính tổng và tích bằng câu lệnh lặp
Tổng kết
1) Câu lệnh lặp, một lệnh thay cho nhiều lệnh:
Hãy kể tên các hoạt động thường ngày em làm với số lần biết trước ?
Đánh răng 2 lần một ngày.
Kim giây quay 60 vòng trong 1 giờ.
Bài toán viết CT in ra màn hình các số từ 1 đến 10 (10 lệnh in). ……
Ví dụ
a) In ra một chữ 0

Program in1;
Uses crt;
Begin
Writeln(`O`);
Readln
End.


O


b) In ra 4 chữ 0
Program in4;
Uses crt;
Begin
Writeln(`O`);
Writeln(`O`);
Writeln(`O`);
Writeln(`O`); readln
End.


O
O
O
O
Chương trình quá dài, viết mất nhiều thời gian, tốn bộ nhớ chương trình
1) Câu lệnh lặp, một lệnh thay cho nhiều lệnh:
? Mọi ngôn ngữ lập trình đều có câu lệnh giúp thực hiện nhiều câu lệnh lặp đi lặp lại bằng một câu lệnh. Đó là các câu lệnh lặp.
Nếu có CT đề nghị in ra màn hình 100 chữ O thì sao đây nhỉ ?
2) Câu lệnh lặp for … do
Cú pháp câu lệnh lặp với số lần biết trước (dạng tiến) trong Pascal:
For := to do ;
Trong đó:
- Biến có kiểu số nguyên (integer).
- Giá trị cuối phải lớn hơn giá trị đầu và là kiểu số nguyên.
- Câu lệnh có thể là câu lệnh đơn (một lệnh) hay lệnh ghép (nhiều lệnh).
Ví dụ:
For i := 1 to 10 do write (‘Toi la Pascal’) ;
Tìm hiểu “Câu lệnh ghép”
Số lần lặp (dạng tiến) được tính theo công thức:
giá trị cuối – giá trị đầu + 1
Giá trị đầu
Biến điều khiển
<= giá trị cuối
Công việc
Tăng biến điều khiển lên 1
true
false
2) Câu lệnh lặp for … do
Ví dụ:
For i := 1 to 10 do write (‘Toi la Pascal’) ;
Số lần lặp của câu lệnh trong ví dụ trên đây là bao nhiêu lần ?
Số lần lặp = giá trị cuối – giá trị đầu + 1  10 – 1 + 1 = 10 (lần)
Có được cú pháp của câu lệnh lặp thì tốt rồi. Bây giờ hãy dùng câu lệnh lặp để in ra màn hình bốn chữ O nhé !
2) Câu lệnh lặp for … do
In ra 4 chữ số 0
Program in4;
Uses crt;
Begin
Writeln(`O`);
Writeln(`O`);
Writeln(`O`);
Writeln(`O`); readln
End.
Program in4;
Uses crt;
Begin

For i:=1 to 4 do Writeln(`O`);
Readln
End.
2) Câu lệnh lặp for … do
? Ban đầu biến đếm (i=1<4) lệnh in được thực hiện ? In ra mh chữ O đầu tiên
? Biến đếm i tăng 1 đơn vị (i=2<4) lệnh in được thực hiện ? in ra mh chữ O thứ hai
Hoạt động của lệnh For..to..do
Program in4;
Begin


For i:=1 to 4 do Writeln(`O`);
Readln
End.
Program in4;
Begin
Writeln(`O`);
Writeln(`O`);
Writeln(`O`);
Writeln(`O`); readln
End.
? Tương tự như vậy cho đến khi biến đếm i bằng giá trị cuối (i=4) thì lệnh được thực hiện lần cuối và kết thúc ? trên màn hình có 4 chữ O.
In 100 chữ O thì sao nhỉ !!! ?
ĐƠN GiẢN QUÁ !
2) Câu lệnh lặp for … do
Program in100;
Uses crt;
Var i: integer;
Begin

For i:=1 to 100 do Write(‘0`);
Readln
End.
Đây nè !!
2) Câu lệnh lặp for … do
3) Tính tổng và tích bằng câu lệnh lặp:
Ví dụ : Tính tổng của 100 số tự nhiên đầu tiên liên tiếp
S = 1 + 2 + 3 + 4 + ... + 100
Nhận xét:
S = 0
S = S + 1
S = S + 2
S = S + 3


.....
S = S + 100
Việc tính S được lặp đi lặp lại 100 lần theo quy luật
Ssau = Strước+ i <=> S := S + i ;
với i tăng lần lượt từ 1 đến100
. . . . . . . . . . . . . . . . . . . .
Bước 1: Bắt đầu
Bước 2: S  0 ; i  1
Bước 3: i := i + 1
S := S + i
Bước 4: Nếu i <100 thì quay lại bước 3.
Bước 5: Nếu i = 100 thì kết thúc
Diễn tả thuật toán:
Program Tinh_tong ;
Var S, i : integer ;
Begin
S := 0;
For i := 1 to 100 do S := S + i ;
Readln
End.
Chương trình:
Hãy diễn tả thuật toán ?
Thế còn viết chương trình ?
3) Tính tổng và tích bằng câu lệnh lặp:
Uses crt;
Var i,N : Integer; S : real;
BEGIN
Readln;
END.
S:=0;
FOR i:=1 to N do S := S+1/i;
Writeln(‘ Tong S =’,S:8:3);
Write(‘ Nhap vao gia tri cua N :’);readln(N);
Program Tinh_tong2;
Lập chương trình tính tổng sau:
Ví dụ 2:
Dựa vào đề bài hãy xác định:
Giá trị khởi tạo của S
Giá trị đầu, cuối của biến đếm i
Câu lệnh sẽ được lặp
S:=0;
For i:=1 to N do
S:= S + 1/i;
1! = 1
2! = 1 . 2
3! = 1 . 2 . 3
4! = 1. 2 . 3 . 4
Ví dụ 3: Tính N! (Tích N số tự nhiên đầu tiên)
N! = 1.2.3.4...N
GT = 1
GT = GT . 2
GT = GT . 3
GT = GT . 4
Hãy xác định:
Giá trị khởi tạo của GT
Giá trị đầu, cuối của biến đếm i
Câu lệnh sẽ được lặp
GT:=1;
For i:=1 to N do
GT:= GT*i;
Em hãy khai báo biến cho bài toán trên?
Em hãy viết câu lệnh nhập vào N?
Begin
Clrscr;
Write(`Nhap N= `); Readln(N);
Khởi tạo GT bằng bao nhiêu?
GT:=1;
Hãy viết câu lệnh lặp với các giá trị của biến đếm và câu lệnh được lặp.
For i:=1 to N do GT:=GT*i;
In ra kết quả?
Writeln(`Tich cua N so tu nhien =`,GT);
Readln;
End.

N:integer;
GT:longint;
4) Tổng kết:
- Cấu trúc lặp trong thuật toán dùng để mô tả việc thực hiện lặp đi lặp lại nhiều lần một hoặc một nhóm các hoạt động.
Nhớ được cú pháp của câu lệnh lặp dạng tiến:
For := to do ;
Câu lệnh thành phần của câu lệnh lặp for .. do có thể là: một câu lệnh đơn (như lệnh gán, lệnh tính toán, lệnh điều kiện, lệnh lặp, lệnh writeln, lệnh readln, …) và một câu lệnh ghép begin .. end.
BÀI HỌC ĐẾN ĐÂY LÀ KẾT THÚC
HẸN GẶP CÁC EM LẦN SAU
Lệnh ghép là gì ?
* Theo cú pháp, sau một số từ khóa (như then hoặc else) phải là một câu lệnh. Nhưng trong nhiều trường hợp, các thao tác sau những tên dành riêng đó khá phức tạp, đòi hỏi không chỉ một mà là nhiều câu lệnh để mô tả. Trong các trường hợp như vậy, NNLT cho phép gộp một dãy câu lệnh thành một câu lệnh ghép (hay câu lệnh hợp thành). Chẳng hạn, câu lệnh ghép của Pascal có dạng:
Begin
;
End ;
Nhấn vô đây để quay lại