01/10/2018, 12:34

Mọi người ơi chỉ mình cách gọi hàm đúng trong bài này với

Đề: cho một số nguyên dương, đếm xem n có bao nhiêu chữ số là số nguyên tố. VD 455 có 2 số nguyên tố
Mình định viết một cái hàm tính số nguyên tố riêng rồi viết một cái hàm xét lấy từng chữ số của số n ra để xét nhưng mình chưa hiểu rõ cách gọi hàm xét số nguyên tố ra trong một hàm khác lắm mọi người giúp mình với

#include<stdio.h>
#include<math.h>
void nhap( int &n);
int xet( int n, int x);
int SNT( int x);
void xuat( );
void main()
{
	int n,dem,x;
	nhap(n);
	SNT(x);
	int d=xet(n,x);
	xuat(dem);
}
void nhap( int &n)
{
	scanf("%d",&n);
}
int SNT( int x)
{
	int dem =0;
	if (x < 2)    
        return 0;

    for (int i = 2; i <= sqrt((float)x); i ++)
    {
        if (x%i==0)
            return 0;
        else  dem= dem +1; return dem;
	}
}
int xet( int n, int x)
{
	while(n!=0)
		{
		x=n%10;
		n=n/10;
	    SNT(int x);
		}
return SNT;
}
sycoi001 viết 14:49 ngày 01/10/2018

SNT(x) thôi bạn ơi.
Cho return trong vòng while luôn.
Để lỡ nó có 2 số hay 3 số nt thì nó xuất hết. Còn bạn làm ở ngoài như vậy nó chỉ xuất số nt x cuối.

Hàm kt snt là trả về 1:0(hàm này viết kiểu đếm ước số) nên bạn phải viết hàm if trong vòng while nhe

if(SNT(x)==1) return x;

Hà Hải Long viết 14:42 ngày 01/10/2018

ban có thể nói rõ hơn cái chỗ gọi hàm ko tại mình ms học C nên không rành lắm

sycoi001 viết 14:43 ngày 01/10/2018

Hàm SNT() trong ngoặc là truyền tham số vào, để nó kiểm tra.
Ở đây là x, thì truyền x vào.
SNT(x), mà x ở đây chính là n%10, nên bạn đặt x vô là ok.
Hàm này xuất nhiều giá trị thì bạn làm hàm void. Rồi in ra luôn, ko cần return nhe.

Trong vòng while
if(SNT(x)==1)
Printf(“%d”,x);

Coi lại hàm kt snt, dòng cuối return 1 thôi được rồi ko cần đếm.
Còn bạn viết kiểu đếm ước số bằng 2 thì phải so sánh dk rõ ràng ra.

Dark.Hades viết 14:45 ngày 01/10/2018

void nhap( int &n)

Bạn dùng C thì bỏ dấu & thay bằng dấu * nhé

Hà Hải Long viết 14:38 ngày 01/10/2018

mình viết theo kiểu chương trình con bạn ơi. Nhưng bạn có thể nói rõ từng chỗ sai trong chương trình của mình không tại mình khá dốt trong môn này. Chương trình của mình đây

#include<stdio.h>
#include<math.h>
void nhap( int &n);
int xet( int n, int x);
int SNT( int x);
void xuat(int d);
void main()
{
	int n,x;
	nhap(n);
	SNT(x);
	int d=xet(n,x);
	xuat(d);
}
void nhap( int &n)
{
	scanf("%d",&n);
}
int SNT( int x)
{
	int dem =0;
	if (x < 2)    
        return 0;
	else
    for (int i = 2; i <= sqrt((float)x); i ++)
    {
        if (x%i==0)
            return 0;
        else  dem= dem +1; 
	}
	return dem;
}
int xet( int n, int x)
{
int t;
	while(n!=0)
		{
		x=n%10;
		n=n/10;
	    t=SNT(x);
		}
return t;
}
void xuat(int d)
{
	printf("%d",d);
}
Hieu Hoang viết 14:35 ngày 01/10/2018

hàm nhập phải đưa int*n vào thay vì int &n
hàm snt nên dùng kiểu dữ liệu bool và bỏ biến dem đi
ở hàm xet thì t là biến đếm, nếu SNT(x) true thì t++

Hà Hải Long viết 14:41 ngày 01/10/2018

bạn ơi giải thích cho mình cái khúc int*n đi tại sao ko p int&n và *n nghĩa là gì

HK boy viết 14:40 ngày 01/10/2018

int &n: reference, C không có khái niệm này.
*n: khái niệm con trỏ.

Bài liên quan
0