Sử dụng phương pháp làm mịn dần để giải bài toán sau: Cho trước số tự nhiên không âm n, viết chương trình kiểm tra xem số n có phải là số nguyên tố hay không? Chương trình cần thông báo "CÓ" nếu n là số nguyên tế, ngược lại thông báo "KHÔNG".
function ktnt(x:int64):boolean;
var i:int64;
begin
if x<2 then exit(false);
if (x=2)or(x=3) then exit(true);
if (x mod 2=0)or(x mod 3=0) then exit(false);
i:=5;
while i<=trunc(sqrt(x)) do
begin
if (x mod i=0)or(x mod (i+2)=0) then exit(false);
inc(i,6);
end;
exit(true);
end;
Em hãy nhận xét về cách viết chương trình trên:
A. Cách viết sai B. Sau “if” cần thêm dấu “:” C. . Ý kiến khác D. Hoàn toàn đồng ý với cách viết trên
Quảng cáo
2 câu trả lời 362
A. Cách viết sai.
Chương trình có một số vấn đề cần được sửa đổi:
1. Chưa cần thiết phải sử dụng kiểu dữ liệu int64 cho tham số đầu vào. Số nguyên không âm có thể được biểu diễn bằng kiểu dữ liệu nguyên dương như uint64 hoặc longint.
2. Dấu ":" cần được thêm sau "if" để hoàn thiện cú pháp.
3. Hàm không cần trả về giá trị boolean mà có thể trả về true hoặc false trực tiếp.
Dưới đây là phiên bản đã chỉnh sửa:
```pascal
function ktnt(x: longint): boolean;
var
i: longint;
begin
if x < 2 then
exit(false);
if (x = 2) or (x = 3) then
exit(true);
if (x mod 2 = 0) or (x mod 3 = 0) then
exit(false);
i := 5;
while i <= trunc(sqrt(x)) do
begin
if (x mod i = 0) or (x mod (i + 2) = 0) then
exit(false);
inc(i, 6);
end;
exit(true);
end;
```
Câu trả lời sẽ là: B. Sau “if” cần thêm dấu “:”
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
86304
