banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Lập trình C++ tìm lỗi  XML
  [Programming]   Lập trình C++ tìm lỗi 23/04/2008 12:45:52 (+0700) | #1 | 126943
[Avatar]
maivanloi
Member

[Minus]    0    [Plus]
Joined: 06/11/2007 22:37:02
Messages: 174
Offline
[Profile] [PM]
VÌ mục lập trình bị khóa nên em post sang bên này mong mod và adim thông cảm nhé
em có một bài C++ viết ra như thế này viêt đúng chay được chương trình nhưng có vể sai thuật toán mong mọi người chỉnh sửa giúp
đề bài: nhập vào n ,in các số nguyên tố nhỏ hơn n
bài ;làm :
#include <iostream>
#include <math.h>
using namespace std;
bool nguyento(int x)
{
int a;
int r;
a=2;
while (a<sqrt(x))
{
if ((x%a)==0) break;
else a++;
}
if (a < (sqrt(x)-1)) return 1;
else return 0;
}
int main()
{
unsigned long a,b,c,x;
cout << "nhap a: ";
cin >> a;
cout << "Cac so nguyen to nho hon a la: ";
for (x=2;x<=(a-1);x++){
if (nguyento(x)==0) cout << x << ", ";
}
cout << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 23/04/2008 13:10:52 (+0700) | #2 | 126953
[Avatar]
SuperChicken
Elite Member

[Minus]    0    [Plus]
Joined: 11/07/2006 18:31:27
Messages: 635
Location: bottom of hell
Offline
[Profile] [PM]
Mình không nhớ rõ giải thuật check số nguyên tố nhưng nhìn quen quen, chắc là đúng smilie
Còn vòng lặp for bên dưới thì hình như bạn chỉ cần lặp đến a / 2 thôi thì phải.
1 cái nữa là khai báo biến hơi dư: biến b, c không dùng, biến x thì chỉ dùng trong vòng for nên có thể giới hạn lại scope của nó cũng đc.
Vừa định submit thì chợt thấy 1 chỗ hơi trầm trọng, đó là biến a phía dưới thì là long còn hàm kiểm tra số nguyên tố thì lại là int.
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 23/04/2008 13:14:50 (+0700) | #3 | 126955
FaL
Moderator

Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
[Profile] [PM]
Hi maivanloi, bạn để ý các điều kiện cho kỹ:

+ <sqrt() hay là <= sqrt
+ Vì sao x không chia hết cho a (else ) thì mới tăng a (a++)?
+ Return kiểu dữ liệu và so sánh.

...

Cẩn thận 1 tí sẽ được thôi.
Thân mến.

PS: Để code trong TAG CODE để dễ nhìn hơn.
Hãy giữ một trái tim nóng và một cái đầu lạnh
[Up] [Print Copy]
  [Question]   Lập trình C++ tìm lỗi 23/04/2008 19:04:17 (+0700) | #4 | 126973
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

maivanloi wrote:
VÌ mục lập trình bị khóa nên em post sang bên này mong mod và adim thông cảm nhé

 


Mục lập trình nào khóa thế? Hay ý bồ là mục "các bài viết có giá trị của lập trình"?

Có một chữ admin mà viết không đúng nữa, adim cái gì thế?
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 23/04/2008 22:12:01 (+0700) | #5 | 127012
[Avatar]
SuperChicken
Elite Member

[Minus]    0    [Plus]
Joined: 11/07/2006 18:31:27
Messages: 635
Location: bottom of hell
Offline
[Profile] [PM]

FaL wrote:
Hi maivanloi, bạn để ý các điều kiện cho kỹ:

+ <sqrt() hay là <= sqrt
+ Vì sao x không chia hết cho a (else ) thì mới tăng a (a++)?
+ Return kiểu dữ liệu và so sánh.

...

Cẩn thận 1 tí sẽ được thôi.
Thân mến.

PS: Để code trong TAG CODE để dễ nhìn hơn.
 

Cái function check số nguyên tố tui nghĩ là có sẵn, chỗ không chia hết cho a thì mới tăng cũng là hợp lý, vì nếu chia % thì nó out khỏi vòng while lun ròi.
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 23/04/2008 22:57:58 (+0700) | #6 | 127028
FaL
Moderator

Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
[Profile] [PM]
Ừa, không cẩn thận lắm smilie. Đã test lại đàng hoàng, xem kỹ return kiểu dữ liệu trả về, sqrt() so sánh cho đúng là được.
Hãy giữ một trái tim nóng và một cái đầu lạnh
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 26/04/2008 07:06:53 (+0700) | #7 | 127615
[Avatar]
maivanloi
Member

[Minus]    0    [Plus]
Joined: 06/11/2007 22:37:02
Messages: 174
Offline
[Profile] [PM]
ý em là em thấy thuật toán cảu em bị sai rồi!
chứ không phải cẩu thả! bác nào test rùi thì biết
Nó không in ra cá số nguyên mà la in ra tất cả các số nhỏ hơn số ta nhập vào
em chạy trên DEV C++ 4.9.9.2
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 26/04/2008 07:23:24 (+0700) | #8 | 127616
[Avatar]
maivanloi
Member

[Minus]    0    [Plus]
Joined: 06/11/2007 22:37:02
Messages: 174
Offline
[Profile] [PM]
đúng là mục đó bị khóa rồi đấy!bác conmale ạ smilie
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 26/04/2008 10:59:15 (+0700) | #9 | 127655
FaL
Moderator

Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
[Profile] [PM]
Bồ coi cẩn thận mấy chỗ tui nêu, tui cũng lấy của bồ sửa vài chỗ là chạy được thôi.
Hãy giữ một trái tim nóng và một cái đầu lạnh
[Up] [Print Copy]
  [Question]   Re: Lập trình C++ tìm lỗi 26/04/2008 19:15:50 (+0700) | #10 | 127685
[Avatar]
hacnho
HVA Friend

Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
[Profile] [PM]
Bạn tránh để hàm main xử lý nhiều công việc quá như thế. Về thuật toán tìm số ngt thì nhiều cách lắm, cách của bạn cũng là một trong những cách đó . Tui post lại bài C++ ngày xưa mới học smilie

Code:
//Chuong trinh liet ke cac so nguyen to <n (2<n<=100)

#include<iostream.h>;
#include <iomanip.h>;
int ngto(int n);
void nhapn(int &n);
void demvaxuat(int n);

//ham kiem tra so nguyen to dua vao so uoc
int ngto(int n)  
{
    int dem=0;
    for (int i=1;i<=n;++i)
        if (n%i==0)
			dem = dem + 1;
        if ( dem == 2 )
			return 1; // la so nguyen to
        else
			return 0; // ko phai so nguyen to
}

//ham nhap 2<n<=100)

void nhapn(int &n)
{
	do 
	{
		cout<<"Nhap n:";
		cin>>n;
	} while (n<2||n>100);
}

//Dem va xuat so nguyen to
void demvaxuat(int n)
{
	int dem=0;
	for (int i=2;i<n;i++)
	{
		if (ngto(i))
		{
			cout<<i<<setw(4);
			dem++;
		}
	}
}

//Ham main
void main()
{
	int n;
	nhapn(n);
	demvaxuat(n);
}

smilie
Mọi câu hỏi vui lòng gửi lên diễn đàn!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|