(
Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Lê Hoàng Khải (
trang riêng)
Ngày gửi: 18h:49' 29-08-2017
Dung lượng: 238.5 KB
Số lượt tải: 1
Số lượt thích:
0 người
CÂU LỆNH LẶP FOR
1. Câu lệnh FOR dạng 1:
1.1. Cú pháp , lưu đồ, cách thức hoạt động :
Cú pháp:
FOR biến := m1 TO m2 DO LệnhP;
Yêu cầu:
biến phải thuộc kiểu dữ liệu đơn giản đếm được, thường là kiểu nguyên, ký tự hay lô gic, không thể là kiểu thực hay chuỗi.
m1, m2 là các biểu thức có cùng kiểu dữ liệu với biến,
LệnhP có thể là một lệnh đơn giản, lệnh có cấu trúc, hoặc là một lệnh ghép gồm nhiều lệnh đặt trong khối begin và end.
Hình 9.1 là sơ đồ khối của lệnh For với b là viết tắt của biến.
Cách thức hoạt động của FOR:
Bước 1: Gán giá trị biến := m1;
Bước 2: Nếu biến <= m2 thì làm Lệnh P, rồi sang bước 3;
Nếu biến > m2 thì không làm LệnhP mà chuyển sang lệnh kế tiếp ở phía dưới.
Bước 3 : Tăng gía trị của biến : biến:=Succ(biến);
Quay lại bước 2.
Tóm lại, LệnhP sẽ được làm đi làm lại, bắt đầu khi biến=m1, và kết thúc khi biến =m2+1, cả thảy là m2-m1+1 lần. Vì thế, người ta gọi FOR là vòng lặp có số lần lặp đã biết trước.
1.2. Các ví dụ cơ bản :
Ví dụ 9.1: Bài toán tính tổng :
Hãy tính tổng : S= 12 + 22+ 32+...+ 102
Thuật toán:
Bước 0: gán S:=0; { gán gía trị ban đầ? cho S}
Bước 1: gán S:=S+1*1; { được S=12 }
Bước 2: gán S:=S+2*2; { được S=12+22}
Bước 3: gán S:=S+3*3; { S=12+22+32}
.v.v.
Bước 10: gán S:=S+10*10; { được S=12+22+32+...+102}
Qúa trình từ bước 1 đến bước 10 được gọi là phép cộng dồn vào biến S. Tại bước thứ i, lấy gía trị của biến S cộng với i2, kết qủa lại được gán cho biến S, do đó gía trị của biến S được tăng thêm một lượng bằ?g i2. Khi i thay đổi từ 1 đến 10 thì các số 12, 22, 32, ..., 102 đều được cộng vào S, kết qủa là sau bước thứ 10 gía trị của S đúng bằng tổng 12 + 22 + 32 + ... + 102.
Tóm lại, lệnh: S:=S + i*i; được làm cả thảy 10 lần, ứng với i=1, 2, ..., 10. Qúa trình này được diễn đạt bằng lệnh FOR, như sau:
For i:=1 To 10 DO S:=S+ i*i ;
Một cách tổng quát, để tính tổng :S= 12 + 22+ 32+...+ N2 , trong đó N là một số nguyên dương bất kỳ, ta dùng hai lệnh:
S:=0;
For i:=1 To N DO S:=S+ i*i ;
Dưới đây là chương trình cụ thể :
PROGRAM VIDU91;
{ Tính tổng các bình phương các số tự nhiên <=N}
Var
N, i : Integer;
S : LongInt;
Begin
Write(‘ Nhập N :’); Readln(N);
S:=0;
For i:=1 to N do S:=S+i*i ;
Writeln(‘S= ‘, S);
Readln;
End.
Mở rộng bài toán tính tổng: Tính tổng đan dấu :
S = 12 - 22 + 32 - 42 +...+(-1)N-1 N2
Ta viết:
S = 12 + (- 22 ) + 32 + (- 42 ) + ... +(-1)N-1 N2
Nhận thấy, số hạng thứ i của vế phải có gía trị tuyệt đối bằng i2 , mang dấu cộng nếu i lẻ, mang dấu trừ nếu i chẵn. Nói cách khác, ta sẽ cộng dồn i2 vào S nếu i lẻ, và cộng dồn (- i2 ) vào S nếu i chẵn. Việc xác định i lẻ hay chẵn dựa vào hàm Odd(i) hay kết qủa của phép toán i Mod 2. Vậy, các lệnh sẽ dùng là :
S:=0;
For i:=1 To N DO
if i mod 2 <> 0 then S:=S+ i*i else S:= S- i*i ;
Các bạn hãy viết chương trình để tính tổng đan dấu này.
Các ý kiến mới nhất