Lỗi hàm trả về mảng bool

đề bài là
Cho một dãy gồm n số nguyên và một ngưỡng nguyên (threshold). Viết hàm kiểm tra xem các số trong dãy cao hơn hay thấp hơn ngưỡng cho trước.
Hàm bool* isHigher (int* arr, int num, int thres) nhận đầu vào là mảng arrarr có nn số nguyên và một ngưỡng thresthres.
Hàm kiểm tra và trả về một mảng số kiểu bool với phần tử thứ i là true nếu số nguyên thứ i trong mảng arrarr lớn hơn hoặc bằng ngưỡng thres, và bằng false trong trường hợp ngược lại.
em làm như sau ạ:

bool* isHigher (int* arr, int num, int thres)
{
    arr = new int[num];
    cin >> num;
    for (int i = 0; i < num; i++)
        cin >>  arr ;
    cin >> thres;
    bool  *check = new bool[num];
    for (int i = 0; i < num; i++)
    {
        if ( arr[i] >= thres) check[i] = true;
        else check[i] = false;
    }
    return check;
}

nhưng không đúng. a/c chỉ giúp giúp e lỗi sai với ạ, nếu có cách nào khác thì gợi ý cho e với, e cảm ơn ạ!

Để kết luận một bài giải sai
Bạn cần có:

  • input: những gì bạn nhập để test thử
  • output mong đợi với input như trên
  • output thực tế: kết quả của chương trình sau khi chạy
  • bạn cần có full code để người khác có thể giúp bạn debug

không lẽ bạn định bắt mọi người ở đây viết hàm main để nhập, rồi lấy hàm của bạn về, rồi gọi hàm của bạn chạy, rồi phải tự suy nghĩ ra input và chạy thử cho tới khi nào chương trình của bạn sai, rồi mới debug hả

3 Likes

A nhận xét trong code , em tự sửa lại nhé

bool* isHigher(int* arr, int num, int thres)
{
    arr = new int[num];//đúng. Khởi tạo mảng arr với num giá trị.
    cin >> num;//sai => tại sao lúc này cần nhập num nữa ? num là biến truyền vào hàm rồi => xóa đi.
    for (int i = 0; i < num; i++)// đúng. chạy từ [0,num)
        cin >> arr;//sai cú pháp. Mỗi lần chạy sẽ nhập vị trí i của mảng arr => đúng phải là cin >> arr[i]
    cin >> thres;//sai => tại sao lại nhập thres trong khi biến này được truyền vào => xóa đi.
    bool* check = new bool[num];//đúng.
    for (int i = 0; i < num; i++)//đúng
    {
        if (arr[i] >= thres) check[i] = true;//đúng
        else check[i] = false;//đúng
    }
    return check;//đúng
}
1 Like

e sửa theo a r mà test vẫn bị sai ạ.
tất cả đều là 0 hết ạ.

sorry bạn nhiều, đề mk chỉ cần viết hàm đó nên mình viết mỗi hàm :pensive:
input như này ạ :

1 Like

Bạn bảo sửa rồi, nhưng có chắc sửa đúng???
Có khi “chữa lợn què thành lợn què hơn” thì sao?

2 Likes

mk sửa lại như này ạ:

bool* isHigher (int* arr, int num, int thres)
{
    arr = new int[num];
    for (int i = 0; i < num; i++)
        cin >>  arr[i] ;
    bool  *check = new bool[num];
    for (int i = 0; i < num; i++)
    {
        if ( arr[i] >= thres) check[i] = true;
        else check[i] = false;
    }
    return check;
}

Vấn đề ở đây là đề có yêu cầu bạn nhập cin >> ngay trong hàm không? Với các đề kiểu này thì việc nhập đã được thực hiện trước khi gọi hàm, các tham số đã chứa đủ dữ liệu cho bạn xử lý rồi.

3 Likes

Vì đây là ta chỉ nhập hàm thôi ạ chứ không cần cin

bool* isHigher (int* arr, int num, int thres){
    bool *check = new bool[num];
	for(int i=0 ; i<num;i++){
		if(arr[i]>=thres) {check[i]=1;}
		else {check[i]=0;}
	}
	return check;
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?