Bài 10. Cấu trúc lặp

Chia sẻ bởi Dương Bá Thịnh | Ngày 10/05/2019 | 147

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:

Quý thầy cô
Về dự giờ lớp 11B1
Thứ 3 ngày 28 tháng 10 năm 2008
Giáo viên thực hiện bài dạy: Dương Bá Thịnh
Tổ bộ môn: Toán - Tin
(2 tiết)
Bài 10
Bài toán 1:
Bài toán 2:
Các bài toán đặt vấn đề : Tính tổng S, với a là số nguyên và a>2

cho đến khi
Xuất phát
Lần 1
Lần 2

+…

Lần N

Mỗi lần thực hiện giá trị tổng S tăng thêm bao nhiêu?


1
Sau mỗi lần thực hiện giá trị tổng S tăng thêm ???? ( với i =1; 2; 3 ; ...;N)
a + i

Cùng tìm thuật toán
Bài toán 1:
Bài toán 2:
Cho đến khi
? Số lần lặp biết trước.
Việc tăng giá trị cho tổng S được lặp đi lặp lại cho đến khi
Việc tăng giá trị cho tổng S được lặp đi lặp lại 100 lần.
tìm sự khác biệt
? Số lần lặp chưa biết trước.
Cấu trúc lặp
1. Bài toán đặt vấn đề
- Dữ liệu ra (Output) : Tổng S
Lập chương trình tính tổng sau:


- Dữ liệu vào (Input) : Nhập N
Hãy xác định INPUT và OUTPUT của bài toán trên!
I. Lặp với số lần lặp biết trước
Phân tích bài toán với N = 100

Nhận xét:
S1 = 1
S2 = S1 + 1/2
S3 = S2 + 1/3
S4 = S3 + 1/4


.....
S100 = S99 + 1/100
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
. . . . . . . . . . . . . . . . . . . .
Đ
S
B1: Nhập N;
B2: S:=1; i:=2;
B3: Nếu i > N thì đưa ra giá trị S => Kết thúc;
B4 : S:= S + 1/i;
B5: i := i +1 quay lại B3.
Xây dựng thuật toán
i:= i+1
FOR := TO 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 := DOWNTO DO ;

Ví dụ: S:=1;
FOR i:=100 DOWNTO 2 DO S:=S+1/i;
a. Dạng 1 (dạng tiến)
2. Lặp với số lần lặp biết trước
? 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.

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);

Uses crt;
Var i,N : Integer; S : real;
BEGIN
Readln;
END.
S:=1;
FOR i:=2 to N do S := S+1/i;
Writeln(` Tong S =`,S:8:3);
Write(` Nhap vao gia tri cua N :`);readln(N);
Program Tinh_tong;
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 đề.
Lập chương trình tính tổng sau:


S := 1 ; i := 2;
i >N
KT
S := S +1/ i ;
i := i +1;
2.08
1.83
1.5
1
4
3
2
Lượt
i
S
2.28
5
Nhập N
S := 1 ; i := 2;
2>5 ?
S
S
S := 1 +1/2 ;
i := 2 +1;
3>5 ?
S := 1.5+1/3 ;
i := 3 +1;
4>5 ?
S := 1.83+1/4 ;
i := 4 +1;
5>5 ?
S := 2.08+1/5;
i := 5 +1;
6
S
S
S
6>5 ?
In Tổng S
Tổng S=2.28
Với N = 5
2.28
Đ
Đ
Mô phỏng thuật toán

3. Ví dụ
Tính tổng S (với a là số nguyên nhập vào từ bàn phím và a>2).
?
Hãy xác định giá trị khởi đầu của S, quy luật thay đổi giá trị của S và số lần lặp.
Viết chương trình để giải bài toán trên.
S:=1/a;
- S:= S + 1/(a+i);
- i chạy từ 1 đến 100 => Số lần lặp là 100 lần.
1. Bài toán
Dữ liệu ra (Output) : Tổng S
Dữ liệu vào (Input) : Nhập a
Hãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên?
Cho đến khi
Tính giá trị tổng S, với a là số nguyên và a>2.
thì dừng lại.
II. Lặp với số lần lặp không biết trước
Bước 2:
S:=1/a; N:=1;
{Khởi tạo S và N}
Bước 3:
Nếu 1/(a+N) < 0.0001
=> Bước 5
Bước 4:
S:=S+1/(a+N);
N:=N+1;
=> quay lại bước 3
thuật toán
Bước 1: Nhập a.
Đưa ra S
=> Kết thúc
? Vòng lặp chỉ dừng khi 1/(a+N)<0.0001
S
Đ
Bước 5: In S => Kết thúc.
WHILE <Điều kiện> DO ;
Điều kiện
Đúng
Câu lệnh
Điều kiện: Là biểu thức
quan hệ hoặc lôgic.

Câu lệnh: Là một câu lệnh của Pascal.
Sai
2. Lặp với số lần lặp không biết trước
Trong đó:
Chừng nào điều kiện còn đúng thì câu lệnh còn được thực hiện.
WHILE 1/(a+N) >= 0.0001 DO
Begin
S:=S+1/(a+N);
N:=N+1;
END;
3. Một số ví dụ
a
Bài toán đặt vấn đề:
Nhận xét:
Chừng nào 1/(a+N)>=0.0001 thì còn thực hiện:
+ Tăng giá trị của tổng S thêm 1/(a+N).
+ Tăng N thêm 1 đơn vị.

Tính giá trị tổng S, với a là số nguyên và a>2
thì dừng lại.
Cho đến khi
Chương trình
Program Bai_toan;
Uses Crt;
Var a,N:Integer;
S:Real;
BEGIN
Clrscr;
Write(`Nhap gia tri cua a= `);Readln(a);
S:=1/a;N:=1;
WHILE 1/(a+N)>=0.0001 DO
BEGIN
S:=S+1/(a+N);
N:=N+1;
END;
Writeln(`Gia tri cua tong S = `,S:8:3);
Readln;
END.
b
Lập chương trình nhập vào hai số nguyên dương M,N. Tìm ƯCLN của hai số đó.
B1: Nhập M,N;
B2 : Chừng nào M?N
nếu M>N thì M:=M-N,
ngược lại thì N:=N-M;
B3: Đến khi M=N thì
=> Đưa ra ƯCLN(M,N)=M;
=> Kết thúc.
B1: Nhập M,N
B2 : While M<>N DO
Begin
IF M>N then M:=M-N
else N:=N-M; end;
B3: In ƯCLN(M,N)
Thuật toán
các bước viết chương trình
Tham khảo:

Dạng khác của câu lệnh lặp với số lần lặp không biết trước
REPEAT UNTIL <Điều kiện>;
Điều kiện
Sai

Câu lệnh

Đúng
Bài toán đặt vấn đề:
Program Bai_toan;
Uses Crt;
Var a,N:Integer;
S:Real;
BEGIN
Clrscr;
Write(`Nhap gia tri cua a= `);Readln(a);
S:=1/a;N:=1;
REPEAT {Bat dau lap}
S:=S+1/(a+N);
N:=N+1
UNTIL 1/(a+N)< 0.0001; {Ket thuc lap}
Writeln(`Gia tri cua tong S = `,S:8:3);
Readln;
END.
Hãy nhớ!
Câu lệnh rẽ nhánh.
Câu lệnh lặp
IF <đk> THEN ;
FOR ... TO ... DO ....
IF <đk> THEN
ESLE ;
FOR ... Downto ... DO ...
While <đk> Do ;
Dạng khuyết.
Dạng đầy đủ.
Lặp với số lần lặp biết trước.
Lặp với số lần lặp không biết trước.
* 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ẻ: Dương Bá Thịnh
Dung lượng: | Lượt tài: 2
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)