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

Chia sẻ bởi Ngô Thanh Nhàn | Ngày 10/05/2019 | 58

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:

Xét bài toán: nhập vào nhiệt độ trong một tuần (số thực). Tính nhiệt độ trung bình trong tuần và cho biết có bao nhiêu ngày cao hơn nhiệt độ trung bình trong tuần đó
Để giải bài toán này, với kiến thức đã học ta làm như thế nào?
-Lần lượt nhập vào nhiệt độ từ ngày thứ nhất đến ngày thứ bảy
-Dùng biến S để tính tổng nhiệt độ trong 7 ngày đó
-Nhiệt độ trung bình trong tuần: TB=S/7;
-Dùng biến Dem, để đếm số lượng ngày có nhiệt độ cao hơn nhiệt độ trung bình trong tuần
-Hiển thị giá trị TB và Dem
Program Vdu;
Var t1,t2,t3,t4,t5,t6,t7,S,TB:real; Dem:byte;
Begin
write(‘Nhap nhiet do ngay thu 1:’);readln(t1);
……
write(‘Nhap nhiet do ngay thu 7:’);readln(t7);
S:=t1+t2+t3+t4+t5+t6+t7;
TB:=S/7;
Dem:=0;
If t1>TB then Dem:=Dem+1;
……
If t7>TB then Dem:=Dem+1;
Writeln(‘Nhiet do trung binh la TB= ‘,TB:6:2);
Writeln(‘So ngay cao hon nhiet do trung binh la: ’ , Dem);
Readln
End.
Thao tác nhập dữ liệu được lặp lại nhiều lần, dài dòng
Câu lệnh rẽ nhánh cũng được lặp lại
B�i 10.
CẤU TRÚC LẶP
Giáo án điện tử tin học lớp 11
( 2 ti?t)
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?
Cùng tìm thuật toán
Mỗi lần thực hiện tổng S được tăng thêm 1/(a+i) với i chạy từ 1; 2; 3;…..;N)
Ta nói, thao tác cộng vào tổng S tức là S:=S+1/(a+i) được lặp lại N lầ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 bao nhiêu lần?
Việc tăng giá trị cho tổng S được lặp đi lặp lại bao nhiêu lần?
Tìm sự khác biệt
? Số lần lặp chưa biết trước.
100 lần
Khi gặp điều kiện
Không biết số lần lặp, tuy nhiờn việc cộng vào tổng S chỉ kết thúc
Cấu trúc lặp
I. Lặp với số lần lặp biết trước
II. Lặp với số lần lặp không biết trước
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: N nh?p t? b�n phớm

- 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:
Xuất phát: S = 1
Lần 1: S = S + 1/2
Lần 2: S = S + 1/3
Lần 3: S = S+ 1/4


.....
Lần 99: S = S + 1/100
Việc cộng vào Tổng 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
? , là các biểu thức cùng kiểu với biến đếm
For i:= 100 to 200 do write(i);

? Giá trị đượ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 đó
? 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);

FOR := TO DO < câu lệnh>;
+ Ở dạng lặp tiến, giá trị tự động tăng lên 1 đơn vị sau khi thực hiện sau do
+ Ở dạng lặp lùi, giá trị tự động giảm xuống 1 đơn vị sau khi thực hiện sau do
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:2);
Write(` Nhap 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

Câu 1: Trong NNLT Pascal, về mặt cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp For….do có một lệnh con:
A. For i:=1 to 100 do a:=a-1;
B. For i=1 to 100 do a:=a-1;
C. For i:=1 to 100 do;
a:=a-1;
D. For i=1 to 100 do;
a:=a-1;
Câu 2: Trong NNLT Pascal, đoạn chương trình sau cho kết quả là gì?
For i:=0 to 20 do write(i, ’ ‘);
i i i i i i …… i (21 chữ i trên cùng một dòng, mỗi chữ cách nhau một
dấu cách)
B. i
…..
i (21 chữ i, mỗi chữ trên một dòng)
C. 0 1 2 3 4 …. 20
D. 1
…..
20 (mỗi số trên một dòng)
Câu 3: Trong NNLT Pascal, đoạn chương trình sau cho kết quả là gì?
For i:=1 to 50 do if i mod 3 = 0 then write(i , ’ ‘ );
B. 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48
A. 16
D. Không hiển thị kết quả gì
C. 3 3 3 3 3 3 3 3 3 … 3 (50 số 3)
Câu 4: Trong NNLT Pascal, cho đoạn chương trình sau?
Begin
T:=0;
For i:=1 to 10 do
if i mod 2 = 0 then T:=T+i;
Write(T);
End.
B. 10
A. 55
D. Chương trình báo lỗi cú pháp
C. 30
Sau khi thực hiện chương trình, kết quả chương trình là gì?
Câu 5: Trong NNLT Pascal, về mặt cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp For….do có nhiều lệnh con:
For i:=1 to 100 do
a:=a-1;b:=b+1;
endFor;
B. For i=1 to 100 do;
begin a:=a-1;b:=b+1;
end;
C. For i:=1 to 100 do
a:=a-1;b:=b+1;
end;
D. For i:=1 to 100 do
begin a:=a-1;b:=b+1;
end;
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.

: 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
Các mô phỏng cho thuật toán tìm UCLN(M,N)
Nhập M=8 và N=6
UCLN(8;6)=2
Nhập M=13 và N=5
UCLN(13;5)=1
Nhập M=25 và N=9
UCLN(30;9)=
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 ;
trong pascal
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.
Câu 6: Trong NNLT Pascal, về mặt cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp while….do có một lệnh con:
A. while a>5 do; a:=a-1;
B. while a>5 do a:=a-1
C. while a>5 do a:=a-1;
D. while a>5; do a=a-1;
Câu 7: Trong NNLT Pascal, cho câu lệnh:
For i:=1 to 100 do write(i , ‘ ‘);
Nếu muốn sử dụng vòng lặp While .. do …. Thực hiện công việc như vậy thì ta viết như thế nào:
A. While i<=100 do write(i , ‘ ‘);
B. While i<=100 do write(i , ‘ ‘);i:=i+1;
C. i:=1;
While i<=100 do write(i , ‘ ‘);i:=i+1; end;
D. i:=1;
While i<=100 do begin write(i , ‘ ‘);i:=i+1; end;
* 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ẻ: Ngô Thanh Nhà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)