Cách tính số lần lặp của lệnh while..do
trong pascal.
Giải thích kĩ giúp mình!????????????????
0 bình luận về “Cách tính số lần lặp của lệnh while..do trong pascal. Giải thích kĩ giúp mình!????????????????”
Không có cách tính số vòng lặp của câu lệnh lặp chưa biết trước (while..do).
While..do chỉ lặp đến khi điều kiện sai.
Chúng ta có ví dụ chương trình như sau:
uses crt; var s,i:integer; begin clrscr; s:=0;i:=1 while i<=3 do begin s:=s+i; i:=i+1; end; write(s,’ ‘,i); readln; end.
———–
Chú ý đến đoạn tô đậm ta biết được:
– Biến s=0; i=1.
– Điều kiện là i<=3 (i bé hơn hoặc bằng 3).
– Mỗi vòng lặp sẽ s:=s+i trước sau đó i:=i+1 sau.
Chúng ta giải quyết như sau:
Lần 1 i<=3 (TM): s=s+i=0+1=1; i=i+1=1+1=2
Lần 2 i<=3 (TM): s=s+i=1+2=3; i=i+1=2+1=3
Lần 3 i<=3 (KTM): s=s+i=3+3=6; i=i+1=3+1=4
Vậy từ đây số vòng lặp là 3 và giá trị của s=6; i=4.
Không giống for..do, giá trị của một biến trong while..do sẽ luôn thay đổi, vì nó không biết trước vòng lặp của nó là bao nhiêu.
Giống như việc bạn học bài và không biết khi nào bạn sẽ hiểu bài. Nhưng for..do thì lại khác, nó cho bạn biết trước số lần lặp tương đồng với số lần bạn học là bao nhiêu.
*Lưu ý: cách tính số vòng lặp của while..do $\ne$ for..do.
While…do không có cách tính số lần lặp, ta chỉ có thể tính cho đến khi nào điều kiện sai để có thể biết được số lần lặp.
VD:
i:=1; S:=0;
while S<5 do
begin
S:=S+i;
i:=i+1;
end;
Ban đầu ta nhận được giá trị: i=1; S=0
thực hiện vòng lặp while
S<5 (đúng): VL1: S=S+i=0+1=1; i=i+1=1+1=2;
S<5 (đúng): VL2: S=S+i=1+2=3; i=i+1=2+1=3;
S<5 (đúng): VL3: S=S+i=3+3=6; i=i+1=3+1=4;
S<5 (sai): Kết thúc
Vậy thực hiện 3 vòng lặp
Dù ban đầu S=0, điều kiện là S<5, ta thường sẽ nghĩ có 5 lần nhưng trong vòng lặp while giá trị của S thay đổi không phải tăng 1 hay tăng 2 liên tục mà mỗi lần thay đổi là thay đổi 1 giá trị khác nhau. Nó không giống với công thức tính số vòng lặp của for…do
Không có cách tính số vòng lặp của câu lệnh lặp chưa biết trước (while..do).
While..do chỉ lặp đến khi điều kiện sai.
Chúng ta có ví dụ chương trình như sau:
uses crt;
var s,i:integer;
begin
clrscr;
s:=0;i:=1
while i<=3 do
begin
s:=s+i;
i:=i+1;
end;
write(s,’ ‘,i);
readln;
end.
———–
Chú ý đến đoạn tô đậm ta biết được:
– Biến s=0; i=1.
– Điều kiện là i<=3 (i bé hơn hoặc bằng 3).
– Mỗi vòng lặp sẽ s:=s+i trước sau đó i:=i+1 sau.
Chúng ta giải quyết như sau:
Lần 1 i<=3 (TM): s=s+i=0+1=1; i=i+1=1+1=2
Lần 2 i<=3 (TM): s=s+i=1+2=3; i=i+1=2+1=3
Lần 3 i<=3 (KTM): s=s+i=3+3=6; i=i+1=3+1=4
Vậy từ đây số vòng lặp là 3 và giá trị của s=6; i=4.
Không giống for..do, giá trị của một biến trong while..do sẽ luôn thay đổi, vì nó không biết trước vòng lặp của nó là bao nhiêu.
Giống như việc bạn học bài và không biết khi nào bạn sẽ hiểu bài. Nhưng for..do thì lại khác, nó cho bạn biết trước số lần lặp tương đồng với số lần bạn học là bao nhiêu.
*Lưu ý: cách tính số vòng lặp của while..do $\ne$ for..do.
While…do không có cách tính số lần lặp, ta chỉ có thể tính cho đến khi nào điều kiện sai để có thể biết được số lần lặp.
VD:
i:=1; S:=0;
while S<5 do
begin
S:=S+i;
i:=i+1;
end;
Ban đầu ta nhận được giá trị: i=1; S=0
thực hiện vòng lặp while
S<5 (đúng): VL1: S=S+i=0+1=1; i=i+1=1+1=2;
S<5 (đúng): VL2: S=S+i=1+2=3; i=i+1=2+1=3;
S<5 (đúng): VL3: S=S+i=3+3=6; i=i+1=3+1=4;
S<5 (sai): Kết thúc
Vậy thực hiện 3 vòng lặp
Dù ban đầu S=0, điều kiện là S<5, ta thường sẽ nghĩ có 5 lần nhưng trong vòng lặp while giá trị của S thay đổi không phải tăng 1 hay tăng 2 liên tục mà mỗi lần thay đổi là thay đổi 1 giá trị khác nhau. Nó không giống với công thức tính số vòng lặp của for…do
Số vòng lặp=giá trị cuối-giá trị đầu+1