30/09/2018, 21:12

Anh/chi giúp em sửa lỗi đoạn code sau

đề 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;
}
Người bí ẩn viết 23:25 ngày 30/09/2018

for(i=n;i<=2;i--)

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

				break;
				return 0;```

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

X viết 23:20 ngày 30/09/2018

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

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

Duc Nguyen viết 23:26 ngày 30/09/2018

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 đỡ

Người bí ẩn viết 23:23 ngày 30/09/2018

for (i=n ;i<=n;i++)

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

Duc Nguyen viết 23:22 ngày 30/09/2018

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

Duc Nguyen viết 23:17 ngày 30/09/2018

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

Người bí ẩn viết 23:27 ngày 30/09/2018

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?

cũng đã sửa thành for(i=n ;i<=n;i++)

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 Đặt i = n mà lại set điều kiện là i <= n ?

Duc Nguyen viết 23:12 ngày 30/09/2018

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 đỡ

Duc Nguyen viết 23:21 ngày 30/09/2018

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

Người bí ẩn viết 23:16 ngày 30/09/2018

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 !

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

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

Duc Nguyen viết 23:26 ngày 30/09/2018

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

Người bí ẩn viết 23:26 ngày 30/09/2018

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

Mai Hữu viết 23:13 ngày 30/09/2018

nguyento(i)==1

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

Mai Hữu viết 23:22 ngày 30/09/2018

int nhap(int &n)

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

nhap(n);

con trỏ đâu?

int nguyento(int n)

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

Duc Nguyen viết 23:12 ngày 30/09/2018

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

Mai Hữu viết 23:28 ngày 30/09/2018

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

Mai Hữu viết 23:28 ngày 30/09/2018

int nhap(int &n)

cú pháp ko phải vậy. nó phải là ntn: int nhap(int *n)[quote=“duc_nguyen7, post:17, topic:27133”]
nhap(n)
[/quote]

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

I am Z viết 23:22 ngày 30/09/2018

Đừ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.

Duc Nguyen viết 23:13 ngày 30/09/2018

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

Bài liên quan
0