Trích:
so_0_lanh_lung
 đây là bài của em nó chỉ hiện ra màn hình màu đen thôi
|
Bài làm của em sai 3 chỗ.
Thứ nhất là em chưa gán giá trị cho n, nghĩa là n đang bằng 0, vậy thì vòng For của em ko dùng được.
Thứ hai là khi cho biến i chạy, sau mỗi lần như thế giá trị của tổng s ko còn là 0 nữa, vòng chạy sau sẽ cộng tiếp các ước số vào tổng s trước đó dẫn đến giá trị s em tính được là sai,em phải cho s:=0 vào trong vòng For.
Thứ ba,em phải cho i chạy hết đến n-1 để tìm tất cả các ước số cộng lại thành tổng s cuối cùng, chứ ko phải cộng cho đến khi nào s=n thì thôi, như thế là cộng thiếu ước số của n.
Chị sửa lại như thế này em thử xem sao:
Code:
Program sohoanhao;
uses crt;
Var i,n,s,dem:integer;
begin
writeln('Cac so hoan hao tu 1 den 1000 la: ');
for n:=2 to 1000 do {kiểm tra lần lượt các số từ 2 đến 1000, nếu em muốn tìm các số hoàn hảo trong khoảng khác thì chỉ cần thay ở đây}
begin
s:=0;
For i:=1 to n-1 do
If (n mod i) = 0 then s:=s+i;
If s=n then
begin
writeln(s);
dem:=dem+1;
end;
end;
If dem=0 then write('Ko co so hoan hao')
else write('Co tat ca ',dem,' so hoan hao tu 1 den 1000')
end.
Tuy nhiên bài làm của vietanh279 đã rất nhanh và chính xác rồi.