Hiển thị kết quả từ 1 đến 6 / 6

Chủ đề: Số hoàn hảo

  1. #1
    Tham gia
    12-03-2010
    Bài viết
    9
    Like
    0
    Thanked 1 Time in 1 Post

    Số hoàn hảo

    xác định 1 số có phải là số hoàn hảo hay không (số mà tổng các ước của nó trừ nó ra bằng chính nó)
    Làm như thế này có đc ko? Nếu không được thì sai ở đâu?
    program kiem_tra;
    uses crt;
    var a,b,S,i: integer;
    begin
    clrscr;
    write('Nhap a='); readln(a);
    b:=0;
    i:=0;
    while i<a do
    i:=i+1;
    b:=b+i;
    end;
    S:=0;
    if (a mod b=0) then S:=S+b;
    if (a=S) then writeln('a la so hoan hao')
    else writeln('a khong la so hoan hao');
    readln
    end.

    phần S:=0;
    if (a mod b=0) then S:=S+b;
    if (a=S) then writeln('a la so hoan hao')
    else writeln('a khong la so hoan hao');
    phải cho trong vòng lặp hay cho ở ngoài vòng lặp cũng đc?
    Được sửa bởi SecretStar9x lúc 22:29 ngày 25-02-2012
    Quote Quote

  2. #2
    Tham gia
    12-02-2012
    Bài viết
    20
    Like
    0
    Thanked 0 Times in 0 Posts
    Ban lam` vay kho hieu wa', chi can the' nay` thui
    Write('Nhap a=');Readln(a);
    d:=;
    For i:=1 to a do
    If a mod i=0 then d:=d+1;
    If d=a then Write('La so hoan hao') else write('Khong la so hoan hao');

  3. #3
    Tham gia
    06-10-2010
    Bài viết
    24
    Like
    0
    Thanked 15 Times in 11 Posts
    Quote Được gửi bởi mrjokes View Post
    Ban lam` vay kho hieu wa', chi can the' nay` thui
    Write('Nhap a=');Readln(a);
    d:=;
    For i:=1 to a do
    If a mod i=0 then d:=d+1;
    If d=a then Write('La so hoan hao') else write('Khong la so hoan hao');
    Vòng FOR của bạn ít nhất phải từ 1 đến a-1 thì mới chính xác (trừ chính nó mà), hoặc nếu muốn giảm bớt công việc bài toán thì for chạy đến căn bậc hai của a (sqrt(a)) là tốt nhất

  4. #4
    Tham gia
    14-02-2012
    Bài viết
    63
    Like
    0
    Thanked 16 Times in 16 Posts
    Code của bạn không thực thi được vì có một vài lỗi Logic. Xin muôn năm nhớ một điều: tất cả các ngôn ngữ lập tình bậc cao hiên nay đều không "bắn" các thông báo lỗi Logic lên màn hình. Bởi thế những người mói học lập trình hay mắc lỗi này và hầu như không chữa nổi.Tôi tặng bạn code sau và bạn hãy s/sánh với code của bạn để tự tìm ra lỗi. Khi tự tìm ra lỗi bạn sẽ "thạo" lập trình và tiến bộ. (trong bản code của tôi dùng lặp For, bạn có thể thay bằng lặp While hoặc Do...While). Bạn hãy Test code của tôi với các số 6, 28, 496 (bạn nhớ rằng trong 7000 số đâu tiên chỉ có 3 số hoàn hảo là 6; 28; 496). Bạn cần test với các số 7; 23 ; 105 nữa để xem bản code này có hoàn thiện không và xem nó thông báo gì.

    Uses crt;

    Function Check(n:integer):boolean;
    Var i,j,tong_uoc:longint;
    Begin
    Check:=False; tong_uoc:=0;
    For i:=1 to n Do
    Begin
    If(n MOD i=0) Then tong_uoc:=tong_uoc+i;
    If tong_uoc=n Then Check:=True;
    End;
    End;
    Var n:integer;
    Begin clrscr;
    Write('Nhap so nguyen duong n:'); Readln(n);
    If (Not Check(n)) Then
    Write('So vua nhap khong la so hoan hao.')
    Else Write('So vua nhap la so hoan hao.');
    Readln;
    End.

  5. #5
    Tham gia
    12-02-2012
    Bài viết
    20
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi cunbong24 View Post
    Code của bạn không thực thi được vì có một vài lỗi Logic. Xin muôn năm nhớ một điều: tất cả các ngôn ngữ lập tình bậc cao hiên nay đều không "bắn" các thông báo lỗi Logic lên màn hình. Bởi thế những người mói học lập trình hay mắc lỗi này và hầu như không chữa nổi.Tôi tặng bạn code sau và bạn hãy s/sánh với code của bạn để tự tìm ra lỗi. Khi tự tìm ra lỗi bạn sẽ "thạo" lập trình và tiến bộ. (trong bản code của tôi dùng lặp For, bạn có thể thay bằng lặp While hoặc Do...While). Bạn hãy Test code của tôi với các số 6, 28, 496 (bạn nhớ rằng trong 7000 số đâu tiên chỉ có 3 số hoàn hảo là 6; 28; 496). Bạn cần test với các số 7; 23 ; 105 nữa để xem bản code này có hoàn thiện không và xem nó thông báo gì.

    Uses crt;

    Function Check(n:integer):boolean;
    Var i,j,tong_uoc:longint;
    Begin
    Check:=False; tong_uoc:=0;
    For i:=1 to n Do
    Begin
    If(n MOD i=0) Then tong_uoc:=tong_uoc+i;
    If tong_uoc=n Then Check:=True;
    End;
    End;
    Var n:integer;
    Begin clrscr;
    Write('Nhap so nguyen duong n:'); Readln(n);
    If (Not Check(n)) Then
    Write('So vua nhap khong la so hoan hao.')
    Else Write('So vua nhap la so hoan hao.');
    Readln;
    End.
    thuat toan cua ban van con` kho' hieu, lam` nhu tui de hon, chang qua luc do bi nham thui
    Write(a=);Readln(a);
    For i:=1 to a-1 do
    If a mod i=0 then d:=d+i;
    If d=a then write('La so hoan hao')else write('Khong la so hoan hao');

  6. #6
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Quote Được gửi bởi SecretStar9x View Post
    xác định 1 số có phải là số hoàn hảo hay không (số mà tổng các ước của nó trừ nó ra bằng chính nó)
    Làm như thế này có đc ko? Nếu không được thì sai ở đâu?
    program kiem_tra;
    uses crt;
    var a,b,S,i: integer;
    begin
    clrscr;
    write('Nhap a='); readln(a);
    b:=0;
    i:=0;
    while i<a do
    i:=i+1;
    b:=b+i;
    end;
    S:=0;
    if (a mod b=0) then S:=S+b;
    if (a=S) then writeln('a la so hoan hao')
    else writeln('a khong la so hoan hao');
    readln
    end.

    phần S:=0;
    if (a mod b=0) then S:=S+b;
    if (a=S) then writeln('a la so hoan hao')
    else writeln('a khong la so hoan hao');
    phải cho trong vòng lặp hay cho ở ngoài vòng lặp cũng đc?
    code của bạn khá dài, thực ra chỉ cần làm đơn giản các việc sau:
    - tính tổng các ước của số n
    - kiểm tra tổng các ước đó =n không, nếu có thì n là số hoàn hảo, nếu không thì n không là số hoàn hảo

    -tính tổng cách ước:
    Code:
    tong:=0;
    for i:=1 to n div 2 do
      if n mod i=0 then tong:=tong+i;
    kiểm tra:
    Code:
    if d=n --> số hoàn hảo và ngược lại

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •