Chương III. Cấu Trúc Lặp
1. Khái niệm lặp.
xét 2 bài toán như sau với a>2 là số nguyên cho trước.
Bài toán 1. Tính tổng
S=1/a +1/(a+1) + 1/(a+2) + ....+ 1/(a+100)
Bài toán 2.
S=1/a +1/(a+1) + 1/(a+2) + ....+ 1/(a+N)với 1/(a+N)<0.001
Cách giải:
S:=1/a;
Lần lượt N=1,2,3, … ta tính s:=s+1/(a+N);
Với bài toán 1, việc cộng thêm dừng khi N=100 => số lần lặp biết trước
Bài toán 2, việc cộng thêm dừng khi 1/(a+n)<0.001 => số lần lặp chưa biết trước
Như vậy: Trong lập trình, có những thao tác được lặp đi lặp lại khi chưa đủ số lần lặp hoặc khi 1 ĐK nào đó còn đúng, khi đó ta gọi là cấu trúc lặp
Lăp: Lặp với số lần xác định và không xác định.
NNLT nào cũng cung cấp một số câu lệnh để mô tả cấu trúc như trên.
2. Lặp với số lần biết trước và câu lệnh For- do.
a) Thuật toán giải bài toán 1a và 1b
Thuật toán Tong_1a
B1: S <-1/a; N ¬ 0;
B2: N<- N+1;
B3: Nếu N>100 đưa ra S và kết thúc TT;
B4: S <- S+1/(a+N);
B5: Quay lại B2.
Thuật toán Tong_1b
B1: S <- 1/a; N ¬ 101;
B2: N <- N-1;
B3: Nếu N< 1 thì đưa ra S và kết thúcTT;
B4: S<-S+1/(a+N);
B5: Quay lại B2
b) Câu lệnh For – do
- Lặp dạng tiến.
FOR := TO DO ;
- Lặp dạng lùi.
FOR := DOWNTO DO ;
Trong đó:
- Biến đếm thường là kiểu số nguyên
- Giá trị đầu , giá trị cuối là các biểu thức cùng kiểu biến đếm.
- Dạng lặp tiến: giá trị biến đếm tăng dần từ giá trị đầu đến giá trị cuối
Dạng lặp lùi: giá trị biến đếm giảm dần từ giá trị cuối đến giá trị đầu đến
Ví dụ 1. (chương trình tính tổng 1a).
Program Tong_1a;
Var S:Real;
a, N: Integer;
Begin
write(‘ Nhap vao a=’);
Readln(a);
S:=1/a;
For n:=1 to 100 do s:=s+1/(a+n);
Write(‘S=’,S:8:2);
Readln;
End.
Chương trình tổng 1b
Program Tong_1b;
Var S:Real;
a, N: Integer;
Begin
write(‘ Nhap vao a=’);
Readln(a);
S:=1/a;
For n:=100 downto 1 do
s:=s+1/(a+n);
Write(‘S=’,S:8:2);
Readln;
End.
Ví dụ 2. Nhập vào M,N nguyên.Tính và đưa ra màn hình Tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ M è N.
Program vidu2;
Var m,n,i:integer;
T: longint;
Begin
Writeln(‘Nhap vao hai so M,N (M
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+1;
Writeln(‘KQ=’,T);
End.
Ví dụ 3. Tính N!
Program Giaithua;
Var N,i , GT : integer;
Begin
Writeln(‘Nhap vao so N = ‘);
Read(N);
GT:=1;
If N<0 then write(‘ Khong tính duoc’)
Else
Begin
For i:= 1 to N do
GT:=GT*i;
Write(‘N! =’, GT);
End;
End
3.Lặp với số lần chưa biết trước và câu lệnh While - Do
- Thuật toán Tong_2
B1: S <-1/a; N ¬ 0;
B2: Nếu 1/(a+N) < 0.001 thì đưa ra S và kết thúc.
B3: N <- N+1;
B4: S ¬ S + 1/ (a+N); rồi quay lại B2.
- Câu lệnh While – Do
While <điều kiện> Do <Câu lệnh>;
Điều kiện là biểu thức logic
Câu lệnh là một câu lệnh đơn hoặc ghép.
Dtả: Trong khi điều kiện còn đúng thì thực hiện câu lệnh và nó thực hiện cho đến khi Điện sai
Ví dụ 1.
Program tong_2;
Var s:real;
A,n:integer;
Begin
Write(‘hay nhap a’);
Readln(a);
S:=1; N:=0;
While not(1/(a+n)) do
Begin
N:=N+1;
S:=S+1/(a+N);
End;
Writeln(‘Tong S=’,S:4:2);
Readln;
End.
Ví dụ 2;
Program UCLN;
Var m.n:integer;
Begin
Write(‘M,N=’);
Readln(n.m);
While M<>N Do
If M>N then M:=M-N Else N:= N-M;
Write(‘UCLN(M,N)’, M);
Readln;
End.
Trần Chí Thu @ 18:34 02/04/2009
Số lượt xem: 5023


Các Ý Kiến