Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cho em hỏi về cái bài tập chút nào!!

    Em mới học về C++ và làm bài tập tìm số số nguyên tố nhỏ hơn số a. Code em viết như sau:

    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    { int a;
    int x=1,m=0;
    cout << " Nhap so a :";
    cin >> a;
    if (a<2) cout<<"Ko co so nguyen to nao be hon a";
    else for (int i=2;i<a;i++)
    {for (int j=1;j<=i;j++)
    if (i%j==0 and j==i)
    x=x+1;}
    cout<<"So so nguyen to nho hon a la:"<<x;
    getch();
    }
    Nhưng sao em chạy thì toàn nó cho ra kết quả là a-1 em ko hiểu lỗi ở đâu , em có viết 1 code khác dựa vào tham khảo khai báo hàm phụ thì lại đc, code:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int snt(int b)
    {
    int i,dem=0;
    for (i=2;i<b;i++)
    if (b%i==0) dem++;
    if (dem==2) return 1; else return 0;
    }
    int main()
    { int a;
    int x=1;
    cout<<" Nhap so a:";
    cin >> a;
    if (a>=2) {for (int i=2; i<a; ++i)
    if (snt(i)==1) x=x+1;
    cout<<" So so Nguyen To nho hon a la:"<<x;}
    else cout<<" KO co so nguyen to nao nho hon a";
    getch();
    }
    Các bác coi dùm em xem thử tại sao lại thế hộ cái .À mà em dùng DEV C++ nha các bác.
    Thanks!!!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {	
    	int a;
    	int x=1;
    	cout << " Nhap so a :";
    	cin >> a;
    	if (a<2) cout<<"Ko co so nguyen to nao be hon a";
    	else 
    	{
    		for (int i=2;i<a;i++)
    		{
    			int j=2;
    			while(i % j != 0) j++;
    			if(i == j)	x=x+1;
    		}
    	}
    	cout<<"So so nguyen to nho hon a la:"<<x;
    	getch();
    }
    Thứ nhất là cách viết code quá ẩu.
    Thứ 2 là tư tưởng giải thuật
    for (int j=1;j<=i;j++)
    if (i%j==0 and j==i)
    x=x+1;}
    số nào mà chẵng chia hết cho chính nó. Ở đây muốn xác định số nguyên tố thì phải kiểm tra các ước, nếu tồn tại 1 ước khác chính nó thì dừng việc tăng. Sau đó kiểm tra, nếu không có ước nào lớn hơn 1 và nhỏ hơn nó thì mới tăng đếm lên 1.
    Với lại người mới lập trình thường đặt x y z. Nhưng như vậy không tốt, nếu là biến đếm thì đặt là dem luôn như người ta cho trực quan.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi daotien0887
    Mã:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {	
    	int a;
    	int x=1;
    	cout << " Nhap so a :";
    	cin >> a;
    	if (a<2) cout<<"Ko co so nguyen to nao be hon a";
    	else 
    	{
    		for (int i=2;i<a;i++)
    		{
    			int j=2;
    			while(i % j != 0) j++;
    			if(i == j)	x=x+1;
    		}
    	}
    	cout<<"So so nguyen to nho hon a la:"<<x;
    	getch();
    }
    Thứ nhất là cách viết code quá ẩu.
    Thứ 2 là tư tưởng giải thuật
    for (int j=1;j<=i;j++)
    if (i%j==0 and j==i)
    x=x+1;}
    số nào mà chẵng chia hết cho chính nó. Ở đây muốn xác định số nguyên tố thì phải kiểm tra các ước, nếu tồn tại 1 ước khác chính nó thì dừng việc tăng. Sau đó kiểm tra, nếu không có ước nào lớn hơn 1 và nhỏ hơn nó thì mới tăng đếm lên 1.
    Với lại người mới lập trình thường đặt x y z. Nhưng như vậy không tốt, nếu là biến đếm thì đặt là dem luôn như người ta cho trực quan.
    Àh mình hiểu rồi cảm ơn nhiều.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi daotien0887
    Mã:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {	
    	int a;
    	int x=1;
    	cout << " Nhap so a :";
    	cin >> a;
    	if (a<2) cout<<"Ko co so nguyen to nao be hon a";
    	else 
    	{
    		for (int i=2;i<a;i++)
    		{
    			int j=2;
    			while(i % j != 0) j++;
    			if(i == j)	x=x+1;
    		}
    	}
    	cout<<"So so nguyen to nho hon a la:"<<x;
    	getch();
    }
    Thứ nhất là cách viết code quá ẩu.
    Thứ 2 là tư tưởng giải thuật
    for (int j=1;j<=i;j++)
    if (i%j==0 and j==i)
    x=x+1;}
    số nào mà chẵng chia hết cho chính nó. Ở đây muốn xác định số nguyên tố thì phải kiểm tra các ước, nếu tồn tại 1 ước khác chính nó thì dừng việc tăng. Sau đó kiểm tra, nếu không có ước nào lớn hơn 1 và nhỏ hơn nó thì mới tăng đếm lên 1.
    Với lại người mới lập trình thường đặt x y z. Nhưng như vậy không tốt, nếu là biến đếm thì đặt là dem luôn như người ta cho trực quan.
    cho em hỏi nếu vòng lặp while ở sau thay bằng vòng lặp for + break thì dùng thế nào vậy[IMG]images/smilies/dont_know.gif[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi dula1204
    cho em hỏi nếu vòng lặp while ở sau thay bằng vòng lặp for + break thì dùng thế nào vậy[IMG]images/smilies/dont_know.gif[/IMG]
    int j = 2;
    for( ; i % j != 0; j++);
    if( i = j) ..

    không dùng break vì break hok có tác dụng trong trường hợp này. Với lại đây là lặp không xác định trước số lượng bước lặp thì nên dùng while

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • 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
  •