Tìm lỗi sai trong bt Pascal

N

nhavanbecon

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Đây là bài tập kiểm tra N nhập vào có phải SNT ko,mình làm thế này nhưng ko chạy đc chương trình,các bạn giúp m vs: (Quá trình gán p chỉ để nhanh hơn so với duyệt từ 2~n-1 thôi)
bnku.jpg
 
L

lamdetien36

- Thứ nhất, chỉ cần duyệt tới phần nguyên của căn N.
- Thứ hai, for i := 2 to p/2 là sai. Vì p/2 là kiểu thực, không sử dụng được trong for.
- Thứ ba, thuật toán bị sai. Cuối cùng phải kiểm tra S = 0 thì N nguyên tố và ngược lại, chứ không phải như bạn làm.
Sửa lại:

Mã:
var
    N, i, p, S: integer;
begin
    write('Nhap N: '); readln(N);
    p := trunc(sqrt(N));
    S := 0;
    for i := 2 to p do
    begin
        if N mod i = 0 then S := S + i;
    end;
    if S = 0 then
        write(N, ' La SNT')
    else
        write(N, ' Khong Phai SNT');
    readln
end.
Nếu bạn muốn thì kiểm tra thêm điều kiện >= 2 nữa :D
 
P

pvt3919vn

Thêm một cách kiểm tra số nguyên tố
Mã:
[SIZE="1"][FONT="Courier New"]uses crt;
var f   : boolean;
    n,i : integer;

begin
clrscr;
		f:=true;
	Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
		If n=1 then f:=false 
else	for i:=2 to trunc(sqrt(n)) do
			If n mod i=0 then
				begin
					f:=false;
					break;
				end;
			If f=true then Write('Số vừa nhập là số nguyên tố') 
			            else  Write('Số vừa nhập không phải số nguyên tố');
readln						   	
end.[/FONT][/SIZE]
 
Last edited by a moderator:
L

lamdetien36

Thêm một cách kiểm tra số nguyên tố
Mã:
uses crt;
var f   : boolean;
    n,i : integer;

begin
clrscr;
        f:=true;
    Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
        If n=1 then f:=false 
else    for i:=2 to trunc(sqrt(n)) do
            If n mod i=0 then
                begin
                    f:=false;
                    break;
                end;
            If f=true then Write('Số vừa nhập là số nguyên tố') 
                        else  Write('Số vừa nhập không phải số nguyên tố');
readln                               
end.
Cần quái gì uses crt, clrscr, readln ở cuối.
Mã:
var
        f    : boolean;
        n, i : integer;
begin
        f := true;
        Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
        If n = 1 then 
               f := false
        Else 
               For i:=2 to trunc(sqrt(n)) do If n mod i = 0 then
               Begin
                      f :=false;
                      break;
               End;
         If f then 
               Write('Số vừa nhập là số nguyên tố')
         else  
                Write('Số vừa nhập không phải số nguyên tố');                     
end.
P.s: Lưu ý không dùng size chữ quá lớn, dễ gây mất thiện cảm :)
 
Top Bottom