30/09/2018, 16:58

Tham số của 1 hàm có thể là hàm khác không?

Cho hỏi tham số của 1 hàm có thể là hàm khác không?
Mình đang code đoạn đo thời gian của thuật toán bằng cách gán biến thời gian t trước khi thực hiện thuật toán và sau khi thực hiện thuật toán xong để tính thời gian thực hiện của thuật toán đó.
Bây giờ mình chạy 10 thuật toán phải code 10 lần đo thời gian như vậy.
Mình viết hàm đo thời gian và truyền tham số vào là các thuật toán có được không?
Ví dụ: mình có các hàm selectionsort(), heapsort(), radixsort()…
viết hàm do thời gian: Dothoigian(kieudulieugi selectionsort())
Xin cảm ơn.

Phạm Hoàng Tuấn viết 19:05 ngày 30/09/2018

Cho hỏi tham số của 1 hàm có thể là hàm khác không?

Được nhé bạn. Có ví dụ tham khảo cho bạn ở đây :


    typedef void (* vFunctionCall)(int args);
    
    void funct(int a, vFunctionCall funct2)
    {
       funct2(a);
    }
    
    void otherFunct(int a)
    {
       printf("%i", a);
    }
    
    int main()
    {
       funct(2, (vFunctionCall)otherFunct);
       return 0;
    }

Nguồn : http://stackoverflow.com/questions/6339970/c-using-function-as-parameter

Trương Thái viết 19:03 ngày 30/09/2018

Trình độ em cùi, đang sinh viên năm nhất, đọc ví dụ không hiểu gì. Có ai giải thích dùm rõ hơn không ạ

Key Blood viết 19:05 ngày 30/09/2018

void otherFunct(int a)
{
printf("%i", a);
}

tại sao là %i vậy? @tuancoi2506 có thể giải thích dùm mình được không?

Phạm Hoàng Tuấn viết 19:14 ngày 30/09/2018

Trong C++ thì %d hay %i đều là định dạng để xuất biến kiển Interger.

Phạm Hoàng Tuấn viết 19:05 ngày 30/09/2018

typedef void (* vFunctionCall)(int args); //Khai báo 1 con trỏ hàm

//Định nghĩa 1 hàm có tham số đầu vào là con trỏ hàm và 1 biến kiểu int. Theo ví dụ của bạn thì đây sẽ là hàm đo thời gian
void funct(int a, vFunctionCall funct2)
{
funct2(a); //
}

void otherFunct(int a) //Hàm thực hiện thuật toán. Ví dụ selectionsort
{
printf("%i", a);
}

int main()
{
funct(2, (vFunctionCall)otherFunct);
return 0;
}

Bạn xem còn khúc mắc chỗ nào không ???

Quang Duong viết 19:06 ngày 30/09/2018

Bạn nên tìm đọc và hiểu thêm về con trỏ hàm trong C/C++, cơ chế delegate trong C#, Java cũng tương tự như vậy.
Nếu là năm nhất thì có lẽ bạn sẽ chưa nắm rõ phần con trỏ, nhưng mà tìm hiểu trước sau này là một lợi thế ^^.

Bài liên quan
0