30/09/2018, 22:17
Tách Mảng Nguyên Tố : Tách ra 1 mảng khác có những số nguyên tố trong mảng đầu tiên
#include<stdio.h>
#include<conio.h>
int Songuyento(int a[],int na)
{
int i,dem=0;
for(i=0;i<na;i++)
{
dem=0;
for(int b=1;b<=a[i];b++)
{
if(a[i]%b==0)
dem++;
}
if(dem==2)
return 1;
return 0;
}
}
void TachMangNguyenTo(int a[],int na,int b[],int &nb)
{
nb=0;
for(int i=0;i<na;i++)
{
if(Songuyento(a,na)==1)
{
b[nb]=a[i];
nb++;
}
}
printf("Mang da tach la: %d %d ",nb,b[nb]);
}
int main()
{
int na=5;
int a[na]={2,10,6,7,11};
int nb;
int b[nb];
TachMangNguyenTo(a,na,b,nb);
getch();
}
Lỗi của e là ở cái hàm TachNguyenTo cái đoạn b[nb]=10 luôn chứ nó lại k = giá trị của a[i]={2 7 11} mn giúp e xem e sai chỗ nào :3
Bài liên quan
Mình chưa xem ở trên nhưng thấy chỗ này bạn chưa khởi tạo giá trị cho
nb
mà lại khai báo mảng vớinb
phần tử này.m mới học đến mảng nên kiến thức còn hơi kém, đoạn đấy m nghĩ m khai báo cho hàm main thôi còn khởi tạo giá trị thì m khởi táo giá trị ở trong hàm TachMangNguyenTo vs nb=0 đó b k biết đúng k ?
Sai thêm ở hàm
Songuyento
nữa, sao lạireturn 0;
chỗ đó.m tưởng nó nếu trả về giá trị 1 thì đúng là số nguyên tố còn k thì k phải số nguyên tố @Luu_Thanh_Vuong
Vấn đề là nó luôn chỉ kiểm tra a[0] thôi, gặp return là nó thoát khỏi hàm rồi
Vậy phải để thế nào hả b ? Vậy m để break để nó thoát ra khỏi vòng lặp thôi sau đó mới return đc k ?
Mà nhìn code của bạn một hồi cũng rối thật . Sao không làm như vậy:
int Songuyento(int n)
Nhớ sửa lại cái b[nb]; + ở chỗ a[na]; đối với 1 số compiler thì cho qua, nhưng không khuyến khích để như vậy, nên truyền vào là một con số.
để về m sửa b k phải viết cái hàm kiểm tra 1 số nguyên tố đâu ^^ hì hì
Vậy thôi. Hàm kiểm tra nguyên tố thì bạn nhớ cái này cho tối ưu code chút:
=> n là số nguyên tố