30/09/2018, 20:47

Lỗi c++ cơ bản chưa hiểu

Đề bài là nhập 1 số kiểm tra số đó có phải số nguyên tố không ,có thì in ra các số nguyên tố đứng trước nó,1 hàng chứa 5 số và các số cách nhau 1 dấu tab.

Thuật toán của mình là tạo ra 1 biến đếm và cho nó =1(int dem=1;)
chạy vòng lặp từ 1 tới n
kiểm tra các số trong vòng lặp có phải SNT hay không,có thì xuất nó ra và tăng biếm đếm lên 1(dem++;)
khi nào biến đếm = 5 thì xuống hàng
dưới đây là code của mình mogn các bạn chỉ cho mình cái sai:

#include < iostream>
#include  < conio.h>
using namespace std; 

bool KiemTraSoNguyenTo(int n);
int NhapSo();
void Inso(int n);


int main()
{
	int n = NhapSo();

	if (KiemTraSoNguyenTo(n) == true)
	{
		cout << endl << "Yes
";
	}
	else
	{
		cout << endl << "No
";
	}
	Inso(n);
	_getch();
	return 1;
}
bool KiemTraSoNguyenTo(int n)
{
	int i;
	if (n < 2)
	{
		return false;
	}
	if (n > 2)
		for (i = 2; i <=sqrt(n); i++)
		{
			if (n%i == 0)
			{
				return false;
			}
		}
	return true;


}
int NhapSo()
{
	int n;
	cout << endl << "Nhap vao 1 so nguyen duong : ";
	cin >> n;
	return n;
}
void Inso(int n)
{
	if (KiemTraSoNguyenTo(n)==true)
	{ 
	int i, dem = 1;
	for (i = 0; i <= n; i++)
	{
		if (KiemTraSoNguyenTo(i) == true)
		
			cout << i << '	';
			dem++;
			if (dem==5)
				cout <<i<< '
';

	}
	}
}
Vô Thin viết 22:54 ngày 30/09/2018

if (dem==5)

nghĩa là bạn chi muốn in duy nhất 1 hàng nếu trước số nguyên tố n có nhiều hơn 5 số nguyên tố? <= mình không nghĩ đề bài yêu cầy này mà là cứ 5 số thành một hàng. Do đó, bạn phải dùng phép chia nguyên để nếu đếm chia hết cho 5 thì xuống hàng chứ nhỉ?

Sói Bạc viết 23:03 ngày 30/09/2018

sửa trong hàm inso

   for (i = 2; i <= n; i++){
            if (KiemTraSoNguyenTo(i) == true){
                if (dem==5){
                    cout << i << '\n';
                }else{
                    cout << i << '\t';
                }
                dem++;

            }
        }
Nguyễn Văn Vương viết 23:03 ngày 30/09/2018

ý là khi nhập 31 thì máy sẽ in ra:
2 3 5 7 11 (xuống hàng)
13 17 19 23 29 (xuống hàng)

ý mình là tạo ra 1 biến đếm để đếm i(khi i đủ 5 số thì sẽ cho xuống hàng)

Nguyễn Văn Vương viết 23:02 ngày 30/09/2018

cảm ơn bạn nhưng không được như ý muốn:

Sói Bạc viết 22:58 ngày 30/09/2018

mình quên mất. bạn gán lại biến dem = 0 khi mà dem == 5

if (KiemTraSoNguyenTo(n)==true){
        int i, dem = 1;
        for (i = 2; i <= n; i++){
            if (KiemTraSoNguyenTo(i) == true){
                if (dem==5){
                    cout << i << '\n';
                    dem = 0 ;
                }else{
                    cout << i << '\t';
                }
                dem++;

            }
        }
    }
Nguyễn Văn Vương viết 23:02 ngày 30/09/2018

cái này có phải là:
Chạy từ 2 tới n,nếu nó là số nguyên tố thì xuất i kèm 1 dấu tab(cộng biến đếm lên 1)
-cộng tới khi nào biến dem==5 thì xuống dòng và reset biến đếm =0 (khi số lớn)

Cảm ơn bạn mình ngộ ra rồi

Bài liên quan
0