Giúp em làm bài tập Pascal với.

sevenup

Dragon Quest
Lão Làng GVN
Tham gia ngày
2/12/04
Bài viết
1,292
Reaction score
38
Ông thầy em cho cái đề rồi bắt về nhà làm, cái đề như sau: cho dãy số từ liên tiếp từ M -> N, viết chương trình pascal để tìm xem số nào trong dãy là số nguyên tố (số nguyên tố là số chia hết cho 1 và cho chính nó), cảm ơn các anh nhiều.
 
Tôi ko còn học pascal nhưng cách làm thì vẫn còn nhớ mang máng:
Giả sử kiểm tra M có phải là số nguyên tố hay ko bạn dùng 2 biến , 1 biến cho chạy từ 1 đến M bằng lệnh " for " ( gọi là biến i), 1 biến nhận giá trị ban đầu bằng 0 và sau đó sẽ được cộng thêm 1 nếu M chia hết cho i ( M mod i=0), biến này gọi là s
sau khi kết thúc quá trình chạy của i, nếu s=2 thì là số nguyên tố còn nếu>2 thì ko là số nguyên tố( ko có trường hợp s<2 do M luôn chia hết cho 1 và chính nó)
Bạn là tiếp lệnh này với các số cần kt tiếp, vì ở đây M-N là liên tiếp nên có thể dùng lệnh " for "
Bây giờ việc kết nối các câu lệnh là việc của bạn:D
 
Hic, nói chung cũng hiểu đôi chút rồi, cảm ơn anh nhiều.
 
Mã:
d := 0 /* d được khai báo từ trước */
For i:=2 to (n div 2) do
 If (n mod i = 0) then
  begin
   Write ("n ko phai la so nguyen to");
   break;
  end
 else 
   d:=d+1;
If d>0 then
 Write ("n la so nguyen to");
 
Mã:
For i:=2 to (n div 2) do
 If (n mod i = 0) then
  Write ("n ko phai la so nguyen to");
Write ("n la so nguyen to");
Tôi ko hiểu code của bạn, nếu n ko là số nguyên tố thì máy sẽ báo cả 2 câu lện in ra màn hình của bạn, mà nếu bạn thêm "else" thì sẽ thêm vô chỗ nào ?
Câu lệnh của bạn chỉ phù hợp với đề bài là "chỉ ra số ko phải là số nguyên tố" thôi còn đây là "chỉ ra số nguyên tố"
 
À, xin lỗi, mình nhầm. Phải cho thêm 1 biến đếm để đếm số ước của n. Cho vòng lặp, chỉ cần kiểm tra xem có ước ko, nếu có thì báo ngay là số nguyên tốt và dừng, vòng lặp của mình quên mất câu lệnh break.
Còn nếu chạy hết vòng lặp đó mà ko có ước nào thì sẽ báo là số nguyên tố.
Bài này chỉ áp dụng đối với n>2.

Đã sửa lại code bài trên.
 
Mã:
d := 0 /* d được khai báo từ trước */
For i:=2 to (n div 2) do
 If (n mod i = 0) then
  begin
   Write ("n ko phai la so nguyen to");
   break;
  end
 else 
   d:=d+1;
If d>0 then
 Write ("n la so nguyen to");

-Nếu đoạn:{ If d>0 then
Write ("n la so nguyen to"); }
nằm ngoài câu lệnh for thì:
Giả sử ta có số 9, i sẽ chạy từ 2 đến 4
9 mod 2=1<>0 suy ra d=1
9 mod 3=0 suy ra màn hình in ra "n ko phai la so nguyen to"
kết thúc câu lệnh for, máy tiếp tục kiểm tra biến d, lúc này d=1>0, máy báo tiếp "n la so nguyen to"::(
-Nếu đoạn:{ If d>0 then
Write ("n la so nguyen to"); }
nằm trong câu lệnh for thì cũng với n=9, khi vừa kiểm tra với i = 2 thì d =1 và máy sẽ báo luôn "n la so nguyen to" trong khi 9 ko phải số nguyên tố.
Về câu lệnh Break, tôi ko rõ có tác dụng gì nhưng nếu nó chỉ kết thúc câu lệnh for thì bài bạn là chưa đúng, lí do thì như tôi đã nêu ở trên còn nếu Break làm kết thúc toàn chương trình thì đoạn code của bạn đúng nhưng lại ko kiểm tra được cho nhiều số.
 
Để kiểm tra được cho nhiều số thì đoạn chương trình này phải đưa vào 1 chương trình con. Viết 1 hàm kiểm tra trả về kiểu Boolean.
Câu lệnh break chỉ cso tác dụng thoát khỏi 1 vòng lặp.
Còn đoạn kiểm tra thì phải sửa thế này (dạo này già rồi lẩm cầm quá)
Mã:
d := 0 /* d được khai báo từ trước */
For i:=2 to (n div 2) do
 If (n mod i = 0) then
  begin
   Write ("n ko phai la so nguyen to");
   d:=d+1;
   break;
  end
If d=0 then
 Write ("n la so nguyen to");
 
Back
Top