Cần giúp sửa lỗi đoạn code in ra số nguyên tố nhỏ hơn n

đề nhâp vào n rồi in ra số nguyên tố nhỏ hơn n:
code:

#include <iostream>
using namespace std;
int nhap(int &n)
{
	do{
		cout<<"nhap so nguyen duong:";
		cin>>n;
	}
	while(n<0);
}
int nguyento(int n)
{
	int i,j,check;
	for(i=n;i<=2;i--)
	{
		check=0;
		for(j=2;j<i;j++)
		{
			if(i%j==0)
			{
				check=1;
				break;
				return 0;
			}
		}
		if(check==0)
		{
		   return 1;
		}		
	}	
}
void insonguyento(int n)
{
	
	for(int i=2;i<=n;i++)
	{
		if (nguyento(i)==1)
		{
			cout<<i;
		}
	}
}
int main(int argc, char** argv) {
	int n,a;
	nhap(n);
	insonguyento(n);
	
	return 0;
}

Cái này phải >= chứ nhỉ :smiley:

Cái này 1 khi đã break là thoát rồi thì để return 0 chi nữa ? :smiley:

1 Like

Thế lỗi là gì? Bạn hãy mô tả để người khác dễ sửa hơn

1 Like

Không thông tin lỗi, copy đoạn code vất lên đây rồi bắt người khác tìm lỗi rồi sửa cho mình :rage:

2 Likes

mình sorry vì đã không ghi thông tin kỹ lồi là không in ra được số nguyên tố chỉ in ra được sồ 2 và cũng đã sửa thành for(i=n ;i<=n;i++) nhưng cũng không được xin mọi người giúp đỡ

1 Like

Bạn mới học lập trình à ?

1 Like

mình mới học đươc 1 tháng

1 Like

mình đã sữa theo cách của bạn nhưng không được

1 Like

Thế bạn biết những gì rồi ? Học phần hàm, loop và kiểu bool hay _Bool chưa?

Mình nhìn thế này chắc bạn nên bỏ qua bài này và học lại đi, không ổn rồi :slight_smile: Đặt i = n mà lại set điều kiện là i <= n ?

1 Like

mình cũng đang tự học thôi mình mới học được phần hàm 2 ngày thôi nên còn nhiều chỗ chưa biết mong bạn giúp đỡ

mình cũng chưa học phần loop và kiểu bool nữa

1 Like

Bạn mới học phần hàm có 2 ngày à
=> Bạn nên học tiếp hoặc tìm tiếp trên mạng chứ mình thấy kiến thức bạn không ổn rồi !

Thế thì bạn học đi nhé. Nếu chưa học 2 cái đó thì bạn không làm được bài này đâu, hay tối thiểu là kiểm tra số nguyên tố là khó với bạn rồi chứ huống chi tìm số nguyên tố nhỏ hơn n :slight_smile:

1 Like

bạn có thể gợi ý cho mình những video nào không mình tk nhiều

1 Like

Trước hết là bạn cần học hết cái playlist C này: https://www.youtube.com/playlist?list=PLyiioioEJSxHr5X8RNY3QXUGcjzeZeI7l
hay tối thiểu là được 40 bài trong playlist.

Bạn nên học thêm phần hàm cho chắc và kiểu dữ liệu _Bool trong C hoặc bool trong C++ (thực chất 2 cái này đều có chức năng tương tự nhau)

Và quan trọng là hãy học vòng lặp đi nhé! Vòng lặp rất quan trọng!!
Dưới đây là 1 đoạn code đơn giản để in những số nguyên tố bé hơn số nguyên dương n của mình, có gì tham khảo:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <Windows.h>
bool KiemTraSoNguyenTo(int n)
{
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n%i == 0)
            return false;
    }
    return true;
}
int main()
{
    int n;
    printf("Nhap vao mot so: ");
    scanf("%d",&n);
    printf("\nCac so nguyen to nho hon so %d: ",n);
    for (int i = 2; i < n; i++)
    {
        if (KiemTraSoNguyenTo(i))
            printf("%d ",i);
    }
    getch();
    return 0;
}

P/S: Mình chưa học C++ nên bạn thay đổi code theo ý mình nhé. Ví dụ printf thành coutscanf thành cin

2 Likes

cái này ở đâu ra vậy bạn. mình chưa thấy bạn khai báo cái này

bạn có bít bạn đang viết gì ở đây ko?

con trỏ đâu?

đây nữa
Mà bạn học con trỏ chưa vậy?

1 Like

mình chỉ hoc tới hàm chưa học tới con trỏ int nhap(int &n) su dụng tham chiếu còn nhap(n) để gọi lại hàm trên

1 Like

bạn đừng dùng hàm nữa, hãy viết tất cả vào ct chính đi. khi nào học và hiểu con trỏ bạn hãy dùng. đến cú pháp con trỏ bạn còn làm sai kìa

1 Like

cú pháp ko phải vậy. nó phải là ntn: int nhap(int *n)

còn chỗ này phải ntn : nhap(&n);

1 Like

Đừng lấy tư duy C áp đặt vào C++, ở C++ pass by referencepass by pointer là hai thứ khác nhau nhé.

int nhap(int &n)

Đây là pass by reference hình như tiếng việt gọi là truyền tham chiếu. Hàm này tham số được sử dụng trong hàm sẽ trực tiếp thay đổi giá trị của biến được truyền vào, thay vì tạo ra một local variable và copy giá trị như trong pass by value, truyền tham trị.

int nhap(int *n)

Còn đây gọi là pass by pointer, truyền con trỏ. Mà con trỏ thì lưu giữ địa chỉ của biến được truyền vào, trên thực tế, truyền bằng con trỏ tuơng tự với pass by value (nhưng trong truờng hợp này, value là address). Để thay đổi được giá trị do con trỏ chỉ vào ta phải sử dụng dereferencing operator (dấu ‘*’) để truy cập giá trị của biến được con trỏ trỏ đến. Trong hàm này thì thứ có thể thay đổi được là biến được con trỏ trỏ đến, không thể thay đổi biến con trỏ -> tuơng tự như pass by value.

Code của bạn Duc Nguyen vấn đề nằm ở điều kiện vòng lặp. Lời khuyên là nên viết thuật toán ra giấy, khi nào thuật toán có thể thực hiện được trên lý thuyết thì mới bắt đầu code. Cũng tuơng tự như làm toán, phải tìm được hướng đi đúng, giải bài toán, rồi mới trình bày.

P/S: Hơi đi lạc đề chút.

3 Likes

cám ơn bạn đã góp ý bài toán này mình đã chạy được nếu không sử dụng hàm ,dùng hàm thì mình vẫn còn nhiều chổ chưa hiểu

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?