30/09/2018, 20:35

Xin hướng dẫn để làm bài c++ cơ bản

đây là code của mình:

#include < iostream>
#include < conio.h>
#include < math.h>
bool ktngto(int n);
void inso(int n);
void tong(int n);
using namespace std;

int main()
{
int n;
cout << endl << "nhap vao 1 so: ";
cin >> n;
if(ktngto(n)==false)
{
cout << endl << n << " khong phai so nguyen to";
}
else{ cout << endl << n << " la so nguyen to"; }

_getch();
inso(n);

_getch();
tong(n);
return 1;
}

bool ktngto(int n)
{

	if (n < 2)
	{
		return false;
	}
	else{
		for (int i = 2; i <= sqrt(n); i++)
		{
			if (n%i == 0)
			{
				return false;
			}
		}

	}return true;
}
void inso(int n)
{
int tong=0;
for (int i = 2; i <= n; i++)
{
if (ktngto(n) == true)
{
if (ktngto(i) == true)
{

			cout << endl << i << "
";
			tong += i;


		}
	}
}

Cho mình hỏi mình muốn tính tổng nhưng chưa biết cách
vd nhập vào 1 số nguyên tố là 11 thì sẽ có các số nguyên tố từ 1->11 là: 2,3,5,7,11->tổng của chúng là 56
vậy làm sao để tính tổng của chúng là 56
các bác thông cảm em mới học nên hơi mơ hồ

Ngô Doãn Tuấn viết 22:50 ngày 30/09/2018

1->11 là: 2,3,5,7,11->tổng của chúng là 56vậy làm sao để tính tổng của chúng là 56

Khi bạn nhập là 11 thì bạn kiểm tra xem các số trước 11 có là số nguyên tố không ? Chỗ này có thể dùng vòng for hoặc while
Nếu có thì bạn cộng vào một biến tổng.

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

mình đã làm như bạn nói
-Kiểm tra số vừa nhập có phải số nguyên tố hay không
-dùng vòng lặp for:for(i=2;i<=n;i++)
-gán sum:sum+=i;
-xuất sum ra:cout<<endl<<sum;

nhưng kết quả không như mong muốn
máy xuất ra 5,10,17,28 chứ không xuất ra số 56 nhu mong muốn

code for của mình nhưu này nè:

for(i=2;i<=n;i++)
if(ktngo(i)==true)
{
sum+=i;
cout<<endl<<sum;
}

Chỉ mình với

Nguyễn Trọng Phương viết 22:37 ngày 30/09/2018

Bạn cần phải gán trị cho biến sum trước khi thực hiện dòng for.
Sau khi thực hiện dòng for bạn mới xuất biến sum ra.
Cách của bạn làm cho mỗi lần kiểm tra đúng số ngto nó sẽ xuất ra 1 lần cho đến khi nào hết dòng lặp.

Ngô Doãn Tuấn viết 22:48 ngày 30/09/2018

hàm void tong của bạn đâu rồi ấy nhỉ

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

mình đã gán sum=0 trước khi bắt đầu phép toán
mình cũng hiểu là mỗi 1 lần cộng i nó sẽ xuất ra i
phép toán của mình hiện tại là nó như thế này:
nhập số 11 sẽ ra các số nguyên tố là 2,3,5,7,11
máy sẽ làm như sau:
-lấy 2+3=5 ->xuất 5 ra màn hình
-kiểm tra xem i có nhỏ hơn n không không thì là tiếp
-lấy 5+5=10 -> xuất 10 ra màn hình

cuối cùng máy liệt kê các kết quả 5,10,17,28 ra màn hình
làm sao để nó chỉ xuất 28 cho mình nhỉ

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

mình có biết làm đâu nó xuất ra tùm lum nên mình del nó rồi

Nguyễn Trọng Phương viết 22:46 ngày 30/09/2018

Bạn bõ cái dòng cout trong vòng lặp đi rồi đặt nó ra ngoài.

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

à mình hiểu rồi cảm ơn bạn rất rất nhiều cái tội để tính tổng trong vòng lặp for
code của mình

void tinhtong(int n)

 {
	int tong = 0;
	for (int i = 2; i <= n; i++)
	{
		if (ktngto(n) == true)
		{
			if (ktngto(i) == true)
			{

				cout << endl << i << "\n";
				tong += i;


			}
		}
	}cout << endl << tong;
}
Nguyễn Văn Vương viết 22:46 ngày 30/09/2018

bạn chỉ mình thêm như code của mình nó chỉ cộng tới số đứng trước n(vd nhập 11 thì nó chỉ cộng 2,3,5,7)
nếu mình muốn nó cộng cả 11 thì phải làm sao
tớ sửa điều kiện thành == n thì nó trả về kq =0

Nguyễn Trọng Phương viết 22:43 ngày 30/09/2018

if (ktngto(n) == true)

bõ dòng này đi. nó dư rồi. bạn chạy lại xem.

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

nếu bỏ nó đi thì nhập vào 1 số không phải ng tố nó cũng cộng ùi còn gì
đã thử ùi và vẫn chỉ trả về kết quả 28 mong bạn chỉ giúp

Nguyễn Trọng Phương viết 22:47 ngày 30/09/2018
bool ktngto(int n)
{

	bool kiemtra;
	if (n < 2)
	{
		kiemtra = false;
	}
	else
	{

		for (int i = 2; i <= sqrt(n); i++)
			{
				if (n%i == 0)
				{
					kiemtra = false;
				}
				else {
					kiemtra = true;
				}
				
			}
	}
	return kiemtra;
}

mình vừa chỉnh lại phần code kiểm tra của bạn.
bạn có thể dùng code này để cộng kết quả

	int count = 0;
	for (int i = 2; i <= n; i++)
	{
		if (ktngto(i) == true){
			count+=i;
		}
	}
Bài liên quan
0