Bài 10. Cấu trúc lặp
Chia sẻ bởi Lê Bá Toản |
Ngày 10/05/2019 |
74
Chia sẻ tài liệu: Bài 10. Cấu trúc lặp thuộc Tin học 11
Nội dung tài liệu:
BÀI 10: CẤU TRUÁC LẶP
1. LẶP:
Với a là số nguyên và a > 2, xét hai bài toán sau:
* Bài toán 1: Tính tổng và đưa kết quả ra màn hình tổng:
* Bài toán 2: Tính tổng và đưa kết quả ra màn hình tổng:
Cho đến khi
Để tính tổng S:
+ Xuất phát: S được gán giá trị 1/a;
+ Tiếp theo cộng vào tổng S một giá trị 1/(a+N) với
N = 1,2,3,4,5,... Việc cộng này được lặp lại một số lần.
* Đối với bào toán 1: Số làn lặp là 100 và công việc vào tổng S sẽ dừng lại khi đã thực hiện việc cộng 100 lần.
* Đối với bài toán 2: Số lần lặp chưa biết trước nhưng việc cộng vào tổng S sẽ kết thúc khi điều kiện 1/(a+N)<0.0001 thoả mãn.
=> Qua 2 bài toán trên chúng ta nhận thấy rằng: có hai loại lặp: Lặp với số làn biết trước và lặp với số lần chưa biết trước.
2. Lặp với số lần biết trước và câu lệnh for - do:
Thuật toán Tong_1a:
- Bước 1: S<=1/a; N<=0; {kởi tạo S và N}
- Bước 2: N<=N+1;
- Bước 3: Nếu N > 100 thì chuyển đến bước 5;
- Bước 4: S<=S+1/(1+N) rồi quay lại bước 2;
- Bước 5: Đưa S ra màn hình rồi kết thúc.
Thuật toán Tong_1b:
- Bước 1: S<=1/a; N<=101; {kởi tạo S và N}
- Bước 2: N<=N-1;
- Bước 3: Nếu N < 1 thì chuyển đến bước 5;
- Bước 4: S<=S+1/(a+N) rồi quay lại bước 2;
- Bước 5: Đưa S ra màn hình rồi kết thúc.
Lưu ý: Cả hai thuật toán của bài toán 1 có số lần lặp là biết trước và như nhau (100 lần).
Câu lệnh for - do trong Pascal với hai dạng tiến và lùi
Dạng lặp tiến:
for:= to do ;
Dạng lặp lùi:
for:= downto do ;
Trong đó:
Biến đếm là biến đơn, thường có kiểu nguyên;
Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm và giá trị đầu phải nhỏ hơn hoặc bằng giá trị cuối. Nếu giá trị đầu lớn hơn giá trị cuối thì vòng lặp không được thực hiện.
Hoạt động của lệnh for - do:
Ở dạng lặp tiến: câu lệnh viết sau từ khoá do được thực hiện tuần tự, với biến đếm lần lượt nhận giá trị từ giá trị đầu đến giá trị cuối.
- hoạt động của dạng lặp for - do có thể được diễn giải như sau:
+ Bước 1: Biến điều khiển nhận giá trị đầu.
+ Bước 2: Nếu giá trị biến điều khiển nhỏ hơn giá trị cuối thì chuyển đến bước 4.
+ Bước 3: {giá trị điều khiển bằng giá trị cuối} thực hiện câu lệnh sau dó dừng lặp, chuyển tới câu lệnh tiếp theo vòng lặp.
+ Bước 4: thực hiện câu lệnh sau do và tăng biến điều khiển tới giá trị tiếp theo. Quay lại bước 2
Ở dạng lặp lùi: câu lệnh viết sau từ khoá do được thực hiện tuần tự, với biến đếm lần lượt nhận giá trị từ giá trị cuối đến giá trị đầu.
- Ở dạng lặp lùi này giá trị của biến điều khiển được tự động giảm xuống tiếp theo sau mỗi vòng lặp.
Lưu ý: Trong vòng lặp không được chứa lệnh làm thay đổi giá trị của biến điều khiển vì sẽ gây ra tình trạng khó theo dõi và quản lí vòng lặp for - do.
* Ví dụ 1: Viết chương trình tính Tong_1a và Tong_1b ở trên:
a. Tính Tổng_1a:
Program Tong_1a;
Uses crt;
Var S: real;
a, N: integer;
Begin
clrscr;
write ( `Nhap vao gia tri cua a: `);
readln (a);
S:=1.0/a; {bước 1}
For N:=1 to 100 do {bước 2, bươ3}
S:= S + 1.0/(a+N); {bước 4}
Writeln ( `Tong S la: ` ,S:8:4); {bước 5}
readln
End.
b. Tính Tổng_1b:
Program Tong_1b;
Uses crt;
Var S: real;
a, N: integer;
Begin
clrscr;
Write ( `nhap gia tri cua a: `);
Readln (a);
S:=1.0/a; {bước 1}
For N:=100 downto 1 do {bước 2, bước 3}
S:= S + 1.0/(a+N); {bước 4}
Writeln ( `Tong S la: ` ,S:8:4); {bước 5}
Readln
End.
* Ví dụ 2: Nhập từ bàn phím 2 số nguyên dương M và N (MProgam Vi_du_2;
Uses crt;
Var M, N, I: integer;
T: longint;
Begin
Clrscr;
Writeln ( `nhap vao so M nho hon N` );
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.
3. Lặp với số lần chưa biíet trước và câu lệnh while – do:
Lặp với lần biết trước có 2 dạng:
* Dạng 1: Trong khi điều kiện còn đúng thì tiếp tục thực hiện
* Dạng 2: Thực hiện công việc trong khi điều kiện đúng
Thuật toán giải Tong_2 để giải bài toán 2:
- Bước 1: S <= 1/a; N <= 0; {khởi tạo S và N}
- Bước 2: Nếu 1/(a+N)<0.001 thì chuyển đến bước 5;
- Bước 3: N <= N+1;
- Bước 4: S<= S+1/(a+N); rồi quay lại bước 2;
- Bước 5: Đưa ra màn hình rồi kết thúc.
Trong Pascal lặp với số lần chưa biết trước là dạng while - do
- Câu lệnh while - do chứa một biểu thức điều kiện để điều khiển thực hiện lặp một câu lệnh đơn hoặc kép.
* Cú pháp:
while <điều kiện> do;
- Điều kiện là biểu thức quan hệ hoặc logic;
- Câu lệnh là một câu lệnh của Pascal.
1. LẶP:
Với a là số nguyên và a > 2, xét hai bài toán sau:
* Bài toán 1: Tính tổng và đưa kết quả ra màn hình tổng:
* Bài toán 2: Tính tổng và đưa kết quả ra màn hình tổng:
Cho đến khi
Để tính tổng S:
+ Xuất phát: S được gán giá trị 1/a;
+ Tiếp theo cộng vào tổng S một giá trị 1/(a+N) với
N = 1,2,3,4,5,... Việc cộng này được lặp lại một số lần.
* Đối với bào toán 1: Số làn lặp là 100 và công việc vào tổng S sẽ dừng lại khi đã thực hiện việc cộng 100 lần.
* Đối với bài toán 2: Số lần lặp chưa biết trước nhưng việc cộng vào tổng S sẽ kết thúc khi điều kiện 1/(a+N)<0.0001 thoả mãn.
=> Qua 2 bài toán trên chúng ta nhận thấy rằng: có hai loại lặp: Lặp với số làn biết trước và lặp với số lần chưa biết trước.
2. Lặp với số lần biết trước và câu lệnh for - do:
Thuật toán Tong_1a:
- Bước 1: S<=1/a; N<=0; {kởi tạo S và N}
- Bước 2: N<=N+1;
- Bước 3: Nếu N > 100 thì chuyển đến bước 5;
- Bước 4: S<=S+1/(1+N) rồi quay lại bước 2;
- Bước 5: Đưa S ra màn hình rồi kết thúc.
Thuật toán Tong_1b:
- Bước 1: S<=1/a; N<=101; {kởi tạo S và N}
- Bước 2: N<=N-1;
- Bước 3: Nếu N < 1 thì chuyển đến bước 5;
- Bước 4: S<=S+1/(a+N) rồi quay lại bước 2;
- Bước 5: Đưa S ra màn hình rồi kết thúc.
Lưu ý: Cả hai thuật toán của bài toán 1 có số lần lặp là biết trước và như nhau (100 lần).
Câu lệnh for - do trong Pascal với hai dạng tiến và lùi
Dạng lặp tiến:
for
Dạng lặp lùi:
for
Trong đó:
Biến đếm là biến đơn, thường có kiểu nguyên;
Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm và giá trị đầu phải nhỏ hơn hoặc bằng giá trị cuối. Nếu giá trị đầu lớn hơn giá trị cuối thì vòng lặp không được thực hiện.
Hoạt động của lệnh for - do:
Ở dạng lặp tiến: câu lệnh viết sau từ khoá do được thực hiện tuần tự, với biến đếm lần lượt nhận giá trị từ giá trị đầu đến giá trị cuối.
- hoạt động của dạng lặp for - do có thể được diễn giải như sau:
+ Bước 1: Biến điều khiển nhận giá trị đầu.
+ Bước 2: Nếu giá trị biến điều khiển nhỏ hơn giá trị cuối thì chuyển đến bước 4.
+ Bước 3: {giá trị điều khiển bằng giá trị cuối} thực hiện câu lệnh sau dó dừng lặp, chuyển tới câu lệnh tiếp theo vòng lặp.
+ Bước 4: thực hiện câu lệnh sau do và tăng biến điều khiển tới giá trị tiếp theo. Quay lại bước 2
Ở dạng lặp lùi: câu lệnh viết sau từ khoá do được thực hiện tuần tự, với biến đếm lần lượt nhận giá trị từ giá trị cuối đến giá trị đầu.
- Ở dạng lặp lùi này giá trị của biến điều khiển được tự động giảm xuống tiếp theo sau mỗi vòng lặp.
Lưu ý: Trong vòng lặp không được chứa lệnh làm thay đổi giá trị của biến điều khiển vì sẽ gây ra tình trạng khó theo dõi và quản lí vòng lặp for - do.
* Ví dụ 1: Viết chương trình tính Tong_1a và Tong_1b ở trên:
a. Tính Tổng_1a:
Program Tong_1a;
Uses crt;
Var S: real;
a, N: integer;
Begin
clrscr;
write ( `Nhap vao gia tri cua a: `);
readln (a);
S:=1.0/a; {bước 1}
For N:=1 to 100 do {bước 2, bươ3}
S:= S + 1.0/(a+N); {bước 4}
Writeln ( `Tong S la: ` ,S:8:4); {bước 5}
readln
End.
b. Tính Tổng_1b:
Program Tong_1b;
Uses crt;
Var S: real;
a, N: integer;
Begin
clrscr;
Write ( `nhap gia tri cua a: `);
Readln (a);
S:=1.0/a; {bước 1}
For N:=100 downto 1 do {bước 2, bước 3}
S:= S + 1.0/(a+N); {bước 4}
Writeln ( `Tong S la: ` ,S:8:4); {bước 5}
Readln
End.
* Ví dụ 2: Nhập từ bàn phím 2 số nguyên dương M và N (M
Uses crt;
Var M, N, I: integer;
T: longint;
Begin
Clrscr;
Writeln ( `nhap vao so M nho hon N` );
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.
3. Lặp với số lần chưa biíet trước và câu lệnh while – do:
Lặp với lần biết trước có 2 dạng:
* Dạng 1: Trong khi điều kiện còn đúng thì tiếp tục thực hiện
* Dạng 2: Thực hiện công việc trong khi điều kiện đúng
Thuật toán giải Tong_2 để giải bài toán 2:
- Bước 1: S <= 1/a; N <= 0; {khởi tạo S và N}
- Bước 2: Nếu 1/(a+N)<0.001 thì chuyển đến bước 5;
- Bước 3: N <= N+1;
- Bước 4: S<= S+1/(a+N); rồi quay lại bước 2;
- Bước 5: Đưa ra màn hình rồi kết thúc.
Trong Pascal lặp với số lần chưa biết trước là dạng while - do
- Câu lệnh while - do chứa một biểu thức điều kiện để điều khiển thực hiện lặp một câu lệnh đơn hoặc kép.
* Cú pháp:
while <điều kiện> do
- Điều kiện là biểu thức quan hệ hoặc logic;
- Câu lệnh là một câu lệnh của Pascal.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Lê Bá Toản
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)