Mọi người cho em hỏi em muốn cấp phát mảng động cho array_b với độ dài là length_b.Length_b được xác định bằng hàm điều kiện check_nguyento.Mọi thứ chạy bình thường nhưng khi length_b quá dài thì nó có lỗi và đọ dài mảng b cố định là 3.Sau đó thfi các bước sau không được thực thi.Trước đấy em có cấp phát một bộ nhớ động cho array_a ngoài main.Em sợ là nó bị dính dữ liệu
#include <iostream>
#include <math.h>
using namespace std;
int length;
int *p;//bien nhan vi tri cua arr
int *array_a = new int[length];//mang dong co n phan tu
int *nhap_array () //ham nhap array arr
{
cout << "Moi nhap so phan tu cua ham length = ";
cin >> length;
for (int i = 0;i < length;i++ )
{
cout << "a[" << i << "] = " ;
cin >> array_a[i];
}
cout << "Mang nhap vao la: ";// hien mang
for (int i = 0;i < length;i++ )
cout << array_a[i] <<",";
cout << "\n";
return array_a;
}
bool check_nguyento (int n)//ham kiem tra so nguyen to flag_nguyen_to
{
int uoc;// bo dem uoc cua n
for (int i = 0;i < length;i++ ) //check so nguyen to
{
if (n<1) return false;
if (n < 2)
{
return true;
}
else
{
for(int t = 2; t <= sqrt(n); t++)
{
if(n % t == 0)
{
uoc++; // tang so uoc neu tim thay
}
}
if(uoc != 0)//thuc thi neu khong la so nguyen to
{
return false;
}
else return true;
}
}
}
int main ()
{
p = nhap_array ();// nhap mang
cout << "Tach so nguyen to \n";
int length_b=0;//do dai mang b
for (int i = 0;i < length;i++ ) // tinh do dai mang b hay so so nguyen to trong a
{
if (check_nguyento(*(p+i)))
length_b++;
}
cout << "\nDo dai mang b la: " << length_b << "\n";// hien do dai mang b
int *array_b = new int [length_b];// cap phat bo nho dong cho array_b dua vao length_b
int ib = 0;//bo dem index cua array b;
for (int i = 0;i < length;i++ )// nhap nguyen to tu array a vao array b
{
if (check_nguyento(*(p+i)))
{
array_b[ib] = *(p+i);//nhap con tro vao phan tu thu ib cua array b
ib++;
}
}
cout <<"Mang b chi gom cac so nguyen to la: ";//hien mang b
for (int ib = 0;ib < length_b;ib++ )
cout << array_b[ib] <<",";
cout << "\n";
}