Violet
Baigiang

Tìm kiếm theo tiêu đề

Tin tức cộng đồng

5 điều đơn giản cha mẹ nên làm mỗi ngày để con hạnh phúc hơn

Tìm kiếm hạnh phúc là một nhu cầu lớn và xuất hiện xuyên suốt cuộc đời mỗi con người. Tác giả người Mỹ Stephanie Harrison đã dành ra hơn 10 năm để nghiên cứu về cảm nhận hạnh phúc, bà đã hệ thống các kiến thức ấy trong cuốn New Happy. Bà Harrison khẳng định có những thói quen đơn...
Xem tiếp

Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 0919 124 899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

Tìm kiếm Bài giảng

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

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Tham khảo cùng nội dung: Bài giảng, Giáo án, E-learning, Bài mẫu, Sách giáo khoa, ...
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Bùi Văn Vẹn
Ngày gửi: 15h:09' 28-02-2014
Dung lượng: 2.4 MB
Số lượt tải: 252
Số lượt thích: 0 người
Giáo án điện tử tin học lớp 11
TRƯờNG THPT BC LÊ HữU TRáC
Tổ Toán - Tin
Tiết 12 – 13 - 14


Program kiemtra;
var x,y :integer;
Begin
x :=20 ; y := 10 ;
If x > y then x := x – y ;
If x=y then y := y – x ;
Write( x, ‘ ‘, y) ;
Readln;
End.
GiảI đáp
20
x
10
y
>
10
x
20
10
-
10
x
=
10
y
0
y
10
10
-
10
x
Begin
x :=20 ; y := 10 ;
If x > y then x := x – y ;
If x=y then y := y – x ;
Write( x, ‘ ‘, y) ;
Readln;
End.
KIểM TRA BàI Cũ

Hãy cho biết kết quả của đoạn chương trình sau:

Bài 10
Giáo án điện tử tin học lớp 11
Cấu trúc lặp
Giáo án điện tử tin học lớp 11
A. Mục đích và yêu cầu
Bài toán 1: Tính tổng S, với a là số nguyên và a>2
Các bài toán đặt vấn đề
Hãy nêu nhận xét và hướng giải của bài toán này ?
Đây là bài toán tính tổng liên tiếp của 101 phần tử.
Ta có thể đưa ra hướng giải như sau:
PHÂN TÍCH BÀI TOÁN
Nhận xét:
S1 = 1/a
S2 = S1 + 1/(a+1)
S3 = S2 + 1/(a+2)
S4 = S3 + 1/(a+3)


.....
S100 = S99 + 1/(a+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
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bài toán 2: 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 tang 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
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:

- 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
2. Lặp với số lần lặp biết trước
Câu lệnh for DạNG TIếN
a. Cú pháp
For := to do;
b. Thành phần

Từ khoá



Giá trị đầu
Giá trị cuối
Lệnh
Biến điều khiển

For,
do:
to,




Biến điều khiển có kiểu nguyên vô hướng đếm được( integer, byte, char.)
Giá trị đầu, giá trị cuối có cùng kiểu với biến điều khiển
Lệnh đơn hoặc lệnh ghép
Bdk<=c?n cu?i
Câu lệnh
Sơ đồ khối
Bđk :=Giá trị đầu
Bđ:=Bđ+1
Bđk<=cận cuối
For := to do;
F
Biểu thức điều kiện
Câu lệnh bất kỳ
Lệnh tiếp ngoài vòng For-Do
T
downto,
2. Lặp với số lần lặp biết trước
a. Cú pháp
For := downto do;
b. Thành phần

Từ khoá



Giá trị đầu
Giá trị cuối
Lệnh
Biến điều khiển

For,
do:




Biến điều khiển có kiểu nguyên vô hướng đếm được( integer, byte, char.)
Giá trị đầu, giá trị cuối có cùng kiểu với biến điều khiển
Lệnh đơn hoặc lệnh ghép
Lệnh FOR dạng lùi
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. Nhắc lại:
? 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

Ví dụ
Nhập từ bàn phím 2 số nguyên dương M và N (M Program Tong ;
Uses crt;
Var M,N,I:integer; T:Longint;
Begin
Clrscr;
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.

Mở rộng
Cho vòng FOR lồng nhau.

Giải bài toán sau:
Trăm trâu trăm cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
lụ khụ trâu già
Ba con một bó.

Hỏi số trâu mỗi loại?
Hãy nêu cách thức dùng vòng lặp for để giải bài toán này ?
Uses crt;
Var dung,nam,gia : byte;
Begin
clrscr;
for dung:=1 to 20 do
for nam:=1 to 33 do
begin
gia:=100-dung-nam;
if gia mod 3 = 0 then
if dung*5+ nam*3+ (gia div 3) = 100 then
write(`dung:`, dung,`nam:`,nam,`gia:`,gia);
end;
End.
Chương trình giải bài toán.
Mở rộng
NHẬN XÉT:
Nếu câu lệnh sau Do của vòng FOR-DO thứ nhất là một câu lệnh FOR-DO thứ 2 thì ta có 2 vòng FOR lồng nhau. Vòng FOR-DO thứ nhất gọi là vòng FOR ngoài, vòng FOR-DO thứ 2 gọi là vòng FOR trong. Hai vòng FOR lồng nhau không được trùng biến đếm.
Các giá trị đầu , giá trị cuối có thể thay là hai biểu thức. Trong ttường hợp này, giá trị của các biểu thức được tính trước khi vào vòng lặp và làm nhiệm vụ giá trị đầu và giá trị cuối. Do đó, trong vòng lặp nếu có biến nào nằm trong hai biểu thức này bị thay đổi thì giá trị đầu và giá trị cuối vẫn không thay đổi.
Giá trị của biến đếm ra khỏi vòng FOR - DO là số không xác định (chưa chắc là giá trị cuối cộng 1 với dạng tiến và cũng không chắc là giá trị đầu trừ 1 với dạng lùi). Vì vậy không được sử dụng tiếp giá trị này tham gia vào các câu lệnh tiếp theo.
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 d?nh giỏ tr? kh?i d?u c?a S, quy lu?t thay d?i giỏ tr? c?a S v s? l?n l?p.
Vi?t chuong trỡnh d? gi?i bi 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
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

Hãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên?
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 ;
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.
468x90
 
Gửi ý kiến