Trường Đại học Điện lực Tập đoàn Điện lực Việt Nam


Câu lệnh lặp không xác đinh kiểm tra điều kiện trước WHILE



tải về 1.67 Mb.
trang30/48
Chuyển đổi dữ liệu18.07.2016
Kích1.67 Mb.
#1821
1   ...   26   27   28   29   30   31   32   33   ...   48

6.4.3 Câu lệnh lặp không xác đinh kiểm tra điều kiện trước WHILE


Câu lệnh WHILE cũng là câu lệnh lặp với số lần lặp không biết trước giống như câu lệnh REPEAT - UNTIL. Điểm khác của câu lệnh WHILE là thực hiện kiểm tra điều kiện trước, nếu thỏa mãn (điều kiện vẫn sai) thì thực hiện công việc và nếu không thỏa mãn (điều kiện đúng) thì dừng và kết thúc vòng lặp.
6.4.3.1 Cú pháp

While <Điều kiện> do ;
Trong đó:

  • <Điều kiện> là một biểu thức logic, trả về giá trị TRUE hoặc FALSE

  • Có thể là một lệnh hoặc một khối lệnh, nếu là một khối lệnh thì phải được đặt trong Begin ... End;


6.4.3.2 Sự hoạt động

i) Tính giá trị của biểu thức logic Điều_kiện,

ii) Nếu đúng, thực hiện công việc và quay lại bước i),

iii) Nếu sai, kết thúc câu lệnh While.


6.4.3.3 Lưu đồ thể hiện sự hoạt động

Hình 6.6. Lưu đồ hoạt động của

câu lệnh While.
6.4.3.4. Chú ý

  • Trong khi thực hiện phải có một lệnh làm thay đổi giá trị của một biến thuộc biểu thức logic <Điều kiện> để làm cho biểu thức logic tiến đến FALSE nhằm kết thúc vòng lặp.

  • được thực hiện sau khi kiểm tra <Điều kiện> nên có thể không được thực hiện một lần nào vì ngay từ đầu <Điều kiện> đã có giá trị FALSE.

  • Câu lệnh lặp While ... do cũng dùng được trong trường hợp đã biết trước số lần lặp.


Ví dụ 6.12: Tính tổng S=1+1/2+1/3+...+1/n . Biết rằng n là một số nguyên dương được đọc vào từ bàn phím.
Program VIDU_6_12;

Uses Crt;

Var i, n: Integer;

s: Real;


BEGIN

ClrScr;


Write('Nhap n= '); ReadLn(n);

s:=0; i:=1;

While i<=n do

Begin


s:=s+1/i;

i:=i+1;


End;

WriteLn('Tong S= ',s:8:3);

ReadLn;

END.
6.4.3.5. Xây dựng cấu trúc lặp với câu lệnh không xác định WHILE


Dưới đây giới thiệu một số bài toán thường sử dụng lặp và phương pháp giải.

a) Điều khiển vòng lặp bằng giá trị canh chừng

Ta xét ví dụ sau



Ví dụ 6.13: viết chương trình nhập vào số thực a. Với n lớn nhất bằng bao nhiêu để tổng S = 1++ +…+ nhỏ hơn số a cho trước.

Với ví dụ này ta không biết trước số lần lặp vì giá trị a là giá trị bất kỳ được nhập từ bàn phím. Ta lấy giá trị a là giá trị canh chừng để dừng vòng lặp. Thực hiện như sau:

i) Dữ_liệu_vào := giá _trị_đầu_tiên;

ii) while dữ_liệu_vào <= giá_trị_canh_chừng_a do

begin

….

Dữ_liệu_vào:=giá_trị_tiếp_theo;



end;

Chương trình chi tiết:

Program vidu_6_13;

Var a, S: real;

n, i: integer;

Begin

write(‘ Nhap a = ‘);readln(a);



S:=0; i:=1; {khoi gan gia tri ban đau cho S va i}

while S<=a do {chung nao S con nho hon a thi con}

Begin

S:=S+1/i;



i:=i+1;

End;


n:=i-1; {n=i-1 vì khi kết thúc vòng lặp,

giá trị của i làm S>=a}

writeln(‘ Gia tri n lon nhat thoa man la n = ‘, n);

readln;


End.
b) Điều khiển vòng lặp bằng cờ báo:

Xây dựng cấu trúc lặp mà được điều khiển bằng cờ báo thường áp dụng cho các bài toán tìm kiếm sự tồn tại hay phần tử có tính chất nào đó. Với bài toán này thường sử dụng một biến logic, ta thường khởi tạo cho biến cờ báo này một giá trị là FALSE, lặp lại nhiều lần phép kiểm tra cho đến khi điều kiện được thỏa mãn tức tìm thấy, khi đó ta gán cho biến cờ báo giá trị là TRUE và vòng lặp kết thúc. Cụ thể như sau:

(i) Cờ_báo:=false;

(ii) while not cờ_báo do

begin

…..


if tìm_thấy then cờ_báo:=true;

end;


Ta xét ví dụ sau:

Ví dụ 6.14: Viết chương trình tìm số chính phương chẵn nhỏ nhất lớn hơn m với m nhập từ bàn phím, in kết quả lên màn hình.

Program vidu_6_14;

Var i, m: integer;

Found:boolean;

Begin

i:=m;


found:=false;

while found =false do

if (frac(sqrt(i))=0)) and (i mod 2 =0) then

found:=true;

else i:=i+1;

writeln(‘ So chinh phuong chan nho nhat ma lon

hon ‘,m,’ la ‘, i);

readln;


End.

6.4.4. Một số câu lệnh kết thúc sớm vòng lặp hoặc chương trình


6.4.4.1. Lệnh nhảy không điều kiện (Goto) là câu lệnh nhảy không điều kiện, cho phép nhảy từ bất kì nơi nào bên trong chương trình hay chương trình con đến vị trí đã đánh dấu bằng nhãn. Nhãn là một tên, như tên biến hoặc là một số nguyên, sử dụng như sau:

Cú pháp: Goto nhãn;

Cách thực hiện:

1) Khai báo nhãn: phải khai báo nhãn tại phần đầu khai báo (xem cấu trúc chung một chương trình Pascal) theo cú pháp:



label nhãn1, nhãn2, …, nhãnN;

2) Đánh dấu đích: Trong thân chương trình vị trí đích sẽ nhảy đến bằng lệnh Goto cần đánh dấu trước, theo cú pháp sau:



nhãn: các_câu_lệnh_đích;

3) Viết câu lệnh: Goto nhãn;

* Chú ý với lệnh nhảy vô điều kiện Goto:

- Có thể nhảy từ trong vòng lặp ra ngoài,

- Không cho phép nhảy từ ngoài vào trong vòng lặp, từ ngoài vào trong chương trình con.

- Nên hạn chế dùng câu lệnh nhảy vô điều kiện Goto vì nó phá vỡ tính cấu trúc của câu lệnh điều khiển, khó theo dõi.


Ví dụ 6.15: Viết chương trình nhập vào một số nguyên n, In ra màn hình số chính phương lớn nhất mà nhỏ hơn n.
Program vidu_6_15;

Label in_ket_qua;

var k,i:integer;

begin


write('Nhap so can kiem tra :');readln(k);

for i:=k downto 1 do

if frac(sqrt(i)) = 0 then

goto in_ket_qua;

in_ket_qua: writeln(' So chinh phuong do la : ',i);

readln;


end.
6.4.4.2. Lệnh chấm dứt sớm vòng lặp (Break) là câu lệnh có tác dụng chấm dứt giữa chừng một vòng lặp dù chưa kết thúc, theo cúa pháp sau:

Cú pháp: Break;
Ví dụ 6.16: xét lại ví dụ 6.16 trên nhưng sử dụng câu lệnh Break

Program vidu_6_16;

var k,i:integer;

begin


write('Nhap so can kiem tra :');readln(k);

for i:=k downto 1 do

if frac(sqrt(i)) = 0 then

begin


writeln(' So chinh phuong do la : ',i);

break;


end;

readln;


end.

* Chú ý:

- Lệnh Break cho phép thoát khỏi mọi kiểu vòng lặp For, While hay Repeat - Until.

- Nếu có nhiều vòng lặp lồng nhau thì câu lệnh Break cho phép thoát khỏi vòng lặp bên trong nhất chứa nó. Các vòng lặp bên ngoài vẫn hoạt động bình thường.
6.4.4.3. Lệnh thoát khỏi chương trình con (Exit) là lệnh kết thúc và thoát khỏi chương trình con, theo cú pháp sau:

Cú pháp: Exit;

Thực hiện như sau:

- Nếu ở bên trong chương trình con thì lệnh này chấm dứt chương trình con (mặc dù chưa đến câu lệnh cuối) và trở về chương trình bên ngoài đã gọi chương trình con.

- Nếu ở chương trình chính thì lệnh này chấm dứt chương trình chính và dừng lại.

 câu lệnh Exit chỉ nên sử dụng trong các chương trình con


Ví dụ 6.17: Viết chương trình nhập vào số k, kiểm tra số k có phải là số nguyên tố hay không?

Program vidu_6_17;

var k,i:integer;

function lsnt(k:integer):boolean;

var i:integer;

begin


lsnt:=true;

for i:=2 to k-1 do

if k mod i = 0 then

begin


lsnt:=false;

exit;


end;

end;


begin

write('Nhap so can kiem tra :');readln(k);

if lsnt(k) then writeln(k,' la so nguyen to')

else writeln(k,' khong la so nguyen to');

readln;

end.
6.4.4.4. Lệnh dừng chương trình bất thường (Halt) là lệnh dừng chương trình chính. Lệnh này được sử dụng khi xảy ra lỗi, sai sót nghiêm trọng, việc tiếp tục chương trình là không có ý nghĩa.



Cú pháp: Halt;

Ví dụ 6.18:

Program vidu_6_18;

var F,x,y:real;

begin


writeln(' Nhap x = ');readln(x);

writeln(' Nhap y = ');readln(y);

if y <>0 then F:=x/y

Else halt; {Chuong trinh se dung lai ngay khi thay y =0}

writeln(' F = ',F:8:3);

readln;


end.

Каталог: images
images -> Hướng dẫn sử dụng Dropbox Để sử dụng được Dropbox
images -> BÀi thuyết trình cách xáC ĐỊnh và chế ĐỘ pháp lý CỦa các vùng biển theo công ưỚc của liên hiệp quốc về luật biển năM 19821
images -> Céng hßa x· héi chñ nghÜa viÖt nam Độc lập tự do hạnh phúc
images -> Lúa gạo Việt Nam Giới thiệu
images -> Trung Tâm kt tc-đl-cl
images -> Số: 105/2008/QĐ-ttg CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
images -> ChuyêN ĐỀ ĐẠi số TỔ HỢP, XÁc suất kiến thức cơ bản Đại số tổ hợp
images -> BỘ giáo dục và ĐÀo tạo trưỜng đẠi học luật tp. HỒ chí minh dưƠng kim thế nguyên thủ TỤc phá SẢn các tổ chức tín dụng theo pháp luật việt nam
images -> Review of Condor, Sun Grid Engine and pbs

tải về 1.67 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   26   27   28   29   30   31   32   33   ...   48




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương