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

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi sevenup, 18/10/07.

  1. sevenup

    sevenup Dragon Quest

    Tham gia ngày:
    2/12/04
    Bài viết:
    1,292
    Ô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.
     
  2. lonton_16

    lonton_16 Mega Man

    Tham gia ngày:
    20/9/07
    Bài viết:
    3,173
    Nơi ở:
    HP city
    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
     
  3. sevenup

    sevenup Dragon Quest

    Tham gia ngày:
    2/12/04
    Bài viết:
    1,292
    Hic, nói chung cũng hiểu đôi chút rồi, cảm ơn anh nhiều.
     
  4. korangar

    korangar Mega Man

    Tham gia ngày:
    11/6/03
    Bài viết:
    3,122
    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");
    
     
  5. lonton_16

    lonton_16 Mega Man

    Tham gia ngày:
    20/9/07
    Bài viết:
    3,173
    Nơi ở:
    HP city
    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ố"
     
  6. korangar

    korangar Mega Man

    Tham gia ngày:
    11/6/03
    Bài viết:
    3,122
    À, 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.
     
  7. lonton_16

    lonton_16 Mega Man

    Tham gia ngày:
    20/9/07
    Bài viết:
    3,173
    Nơi ở:
    HP city
    -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ố.
     
  8. korangar

    korangar Mega Man

    Tham gia ngày:
    11/6/03
    Bài viết:
    3,122
    Để 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");
     

Chia sẻ trang này