Câu hỏi về thời gian thực hiện của mã (Execution time)

Nếu bạn chạy đoạn này nó ra 0 là đúng rồi vì nó có tính thời gian chạy cái gì đâu bạn
Bạn thử cho 1 vòng for tính tổng từ 1 đến 10 vào giữa xem nào

À không, đoạn giữa begin = clock(); với end = clock(); mình ntn cơ:

char ky_tu = 'c';
switch (ky_tu)
{
	case 'a': printf("a\n"); break;
	case 'b': printf("b\n"); break;
	default: printf("Don't have this word!\n"); break;
}
printf("%c is number:%d\n",'a','a');
printf("%c is number:%d\n",'b','b');
printf("%c is number:%d\n", ky_tu, ky_tu);
printf("%d is character:%c\n", 100, 100);

Chưa hiểu dùng sai chỗ nào vẫn 0s thôi!

1 Like

Để mình thử xem kết quả thế nào.

1 Like

Chẳng sai gì cả @@. Mình chạy cũng bằng 0 :))). WHy???

1 Like

Đưa nguyên source bạn dò lại dùm mình thử biết đâu sai đâu đó ở trên mà mình không nhận ra wink:

void main()
{
	clock_t begin, end;
	double time_spend;
	begin = clock();

	char ky_tu = 'c';
	switch (ky_tu)
	{
		case 'a': printf("a\n"); break;
		case 'b': printf("b\n"); break;
		default: printf("Don't have this word!\n"); break;
	}
	printf("%c is number:%d\n",'a','a');
	printf("%c is number:%d\n",'b','b');
	printf("%c is number:%d\n", ky_tu, ky_tu);
	printf("%d is character:%c\n", 100, 100);

	end = clock();
	time_spend = (double)(end - begin);
	printf("execution time:%ld s", time_spend);
	getch();
}

Còn thư viện thì stdio.h conio.h và time.h nha!

Bạn dùng markdown sai rồi nhé. Xem tại đây

Không báo lỗi nhưng kq vẫn vậy :’(

Ẹc, thế chắc cú pháp câu lệnh của bạn làm sao. Xem lại lần nữa =)).

đây, chỉ sửa chỗ này thôi!

time_spend = (double)((end - begin) * 10 * 10 * 10)/(CLOCKS_PER_SEC);
printf("execution time:%ld s", time_spend);

Chỗ này là sai bạn ạ. Mình thay code C bằng code C++ khác mỗi chỗ in ra màn hình thôi. Thì nó in ra được đáp án. @@

#include <time.h>
#include <iostream>

using namespace std;

int main()
{
    clock_t begin, end;
    double time_spend;

    begin = clock();

    char ky_tu = 'c';
	switch (ky_tu)
	{
		case 'a': printf("a\n"); break;
		case 'b': printf("b\n"); break;
		default: printf("Don't have this word!\n"); break;
	}
	printf("%c is number:%d\n",'a','a');
	printf("%c is number:%d\n",'b','b');
	printf("%c is number:%d\n", ky_tu, ky_tu);
	printf("%d is character:%c\n", 100, 100);

    end = clock();


    time_spend = ((double)( end - begin )) / CLOCKS_PER_SEC;

    cout << time_spend << " seconds" << endl;

    return 0;
}

Mình mới biết sơ về C chưa rành C++ :smiley: nhưng mà chạy code của bạn mình không hiểu sao nó tắt màn hình nhanh quá, có cách nào dừng màn hình không? Mình đã thử system(“pause”); vẫn không được :frowning:

Hix. Cuối cùng cũng tìm ra vì sao.
Mình thử chạy trên C++ thay mỗi chỗ in ra màn hình và được đáp án. Như vậy bạn sai chỗ này này

   printf("execution time:%ld s", time_spend);

Bạn sửa %ld thành %lf nhé

   printf("execution time:%0.4lf s", time_spend);
1 Like

À mình thử bỏ return và thay int main = void main thì lại dừng được :smile: nhưng vẫn 0s :frowning:

1 Like

nó vẫn cứ ra 0.0000s :frowning:

Để cho nó chắc hơn bạn sửa lại hẳn thành thế này đi

#include <time.h>
#include <stdio.h>
int main()
{
	clock_t begin, end;
	double time_spend;
	begin = clock();
	
	for(int i;i<10000;i++){
		printf("%d",i);
	}
	end = clock();
	time_spend = ((double)( end - begin )) / CLOCKS_PER_SEC;
	printf("\nexecution time:%0.4lf s", time_spend);
}

Tại chương trình của bạn ngắn quá. Nó sẽ ra đáp số 0.001s. Thỉnh thoảng nó sẽ ra 0.000. ~.~. Mình cũng bị vậy.

À mình hiểu rồi! Thì ra phải cho nó vô vòng lặp thì đồng hồ mới bấm giờ được chứ để không không nó không đo đc là phải. Bạn cho vòng lặp 10000 lần nó ra time thiệt, nhưng chạy nhiều lần quá trong khi mình chỉ cần đo time 1 lần đoạn code đó. Thế là mình thay for(int i=0; i<1; i++) bỏ code vô giữa thế là ra time luôn. Cám ơn bạn rất nhiều nha! :wink:

1 Like

Không, không phải vậy đâu @@. Bạn để nguyên nó cũng ra time. bạn phải compile lại chương trình sau mỗi lần chứ k phải chạy luôn.
Bây giờ bạn bỏ vòng for đi. sửa code y như ban đầu. Nó sẽ ra. Mình tin là như thế =)))

Mình thử rồi, nó lại ra 0.0000 . Mà trong clip thấy anh Đạt ra 0.0047 lận. Nhưng mình viết bằng Visual Studio 2013 còn anh Đạt viết bằng CodeBlock. Có khi nào compile mình nhanh hơn không ta ? :blush:

Mình nghĩ cũng có thể do bạn chạy chương trình đã đc compile rồi nên nó vẫn ra là 0.000. Ca này khó ghê =))). MÌnh dùng devC. Compile lần đầu tiên ra 0.001s. Nhấn tiếp 3 phá nữa mới lại ra 0.001 =)). Thử 10 lần thấy Trung bình 3 lần ra 1 lần :))))))))))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?