30/09/2018, 20:10

Mọi người giúp mình thêm đoạn cho chương trình tự dừng và in ra màn hình như đề bài với

Đề:
Viết chương trình đo thời gian
Khi nhấn phím Enter thì bắt đầu tính giờ. Nhấn phím Enter lần thứ 2 thì dừng
tính giờ và hiển thị thời gian theo format: ##.## (số_giây.số_tick). Nếu thời gian
dài quá 10s thì hiện chữ “EE.EEE” (như là 1 báo lỗi khi thời gian quá lâu)
Code:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <time.h>
using namespace std;
class Clock {
public:
	Clock(); 
	~Clock(); 
	void setClockStart(); 
	void setClockStop();   
	void printresult();   
private:
	clock_t mStart, mStop;

};
Clock::~Clock()
{

}
Clock::Clock()
{
	mStart = 0;
	mStop = 0;
}
void Clock::setClockStart()
{
	mStart = clock();
}
void Clock::setClockStop()
{
	mStop = clock();
}
void Clock::printresult()
{
	double duration;
	duration = (mStop - mStart) / (double)CLOCKS_PER_SEC;
	if (duration > 10)
		cout << "	EEEE";
	else
		cout << "
 time is : " << fixed << setprecision(2) << duration << "
";

}
int main()
{
	Clock test;
	cout << "Enter any key to start" << endl;
	_getch();
	test.setClockStart();
	cout << "Enter any key to stop" << endl;
	_getch();
	test.setClockStop();
	test.printresult();
	cout << endl << "Press any key to continue" << endl;
	_getch();
}
Cậu Bé Conan viết 22:21 ngày 30/09/2018

Mình đã thử xóa if…else ở phần void Clock::printresult() và thêm vào while ở dưới hàm main, nhưng tất cả ý tưởng đều bị phá sản. Chương trình vẫn k tự ngừng chạy!
Cao nhân nào giúp mình với!

Ngô Doãn Tuấn viết 22:15 ngày 30/09/2018

Ủa mình test thấy vẫn run bình thường mà nhỉ ???
Chắc mình chưa hiểu ý bạn là gì. Bạn nói rõ vấn đề hơn chút được không ?

Cậu Bé Conan viết 22:21 ngày 30/09/2018

@TheSky
Ý của đề là khi thời gian dài quá 10s thì sẽ tự hiện ra “EE.EEE” chứ k phải mình ấn Enter rồi hắn mới in ra màn hình là “EE.EEE” bạn à! Tại mình đọc nhầm đề nên mình viết thế thôi. Mà lưu ý là mình viết trên Visual Studio 2015 nhé!

Ngô Doãn Tuấn viết 22:21 ngày 30/09/2018

Nếu vậy bạn thử cho kiểm tra thời gian lúc bắt đầu. Như bài của bạn bạn gọi xong 2 phương thức. Start và stop sau đó bạn mới gọi phương thức kiểm tra nên nó không tự động xuất ra Ee.
Dùng IDE khác thì bỏ dòng đầu đi là được mà.

Cậu Bé Conan viết 22:11 ngày 30/09/2018

Bạn có thể chữa lại code của mình giúp mình đc k bạn? Mình mới tập tành nên k biết phải chữa theo ý bạn như thế nào! :((((((((

Cậu Bé Conan viết 22:20 ngày 30/09/2018

Có cao nhân nào giúp mình với! Suy nghĩ mãi mà bí quá rồi! :(((

Ngô Doãn Tuấn viết 22:11 ngày 30/09/2018

Suy nghĩ mãi mà bí quá rồi! :(((

void Clock::setClockStart()
{
	double time,dem =0 ;
mStart = clock();
	while(dem < 10){
	time = clock() ;
	dem = (time-mStart)/(double)CLOCKS_PER_SEC;
     }
     if(dem> 10){
        cout << " EEEEEEEEEEE\n\n\n ";
     }

}

Không biết bạn làm được chưa. Nhưng mình cứ up code lên đây.
Bạn cứ sửa lại theo ý bạn nữa là oke rồi
Mình bổ sung thêm vào hàm void Clock::setClockStart()

Cậu Bé Conan viết 22:13 ngày 30/09/2018

Mình đã chữa bài thành công theo cách của mình rồi! Nhưng mình cũng rất cám ơn ý tưởng và sự giúp đỡ của bạn! Chúc bạn có nhiều thành công trong cuộc sống!

Sáng Béo viết 22:14 ngày 30/09/2018

Mình bổ sung thêm vào hàm void Clock::setClockStart()

mình không hiểu chỗ này làm sao để bắt sự kiện bấm phím để stop. nó luôn hiện ra EEE à? trong khoảng 10s này mình không thể bấm phim đc à?

Ngô Doãn Tuấn viết 22:18 ngày 30/09/2018

Có chứ. Nếu số giây nó lớn hơn 10s thì nó sẽ in ra EE.EE.
Còn không thì nó in số giấy.
Mình cũng chưa hiểu ý tác giả cho lắm.
Chỉ fix lại sao cho khi chưa bấm phím nếu mà thời gian nó lớn hơn 10s thì sẽ in ra EE.EE.

Sáng Béo viết 22:22 ngày 30/09/2018

Có chứ. Nếu số giây nó lớn hơn 10s thì nó sẽ in ra EE.EE.Còn không thì nó in số giấy.

cái này thì chắc là vậy.

nhưng mà làm thế nào để nó vừa tính giây, vừa bắt sự kiện nhập phím nhỉ? khi thời gian lớn hơn 10s thì không cho nhập nữa mà thông báo luôn.

Ngô Doãn Tuấn viết 22:23 ngày 30/09/2018

_getch(); theo code thì mình thấy cái này dùng để bắt phím.
Mình nghĩ là cho một biến check sau đó nếu check = true tức là quá 10s thì sẽ không gọi đến hàm setClockStop(); nữa. còn nếu check = false thì vẫn dùng _getch() để bắt phím và sau đó in ra giây.
Không biết có ổn không

Sáng Béo viết 22:21 ngày 30/09/2018

_getch(); theo code thì mình thấy cái này dùng để bắt phím. Mình nghĩ là cho một biến check sau đó nếu check = true tức là quá 10s thì sẽ không gọi đến hàm setClockStop(); nữa. còn nếu check = false thì vẫn dùng _getch() để bắt phím và sau đó in ra giây.Không biết có ổn không

nghĩ là thế nhưng làm mới khó, làm sao nó vừa check vừa đồng thời sẵn sàng nhận phím.

Ngô Doãn Tuấn viết 22:26 ngày 30/09/2018

Tạo biến check ra public
Cũng chưa nghĩ ra cách nào tối ưu hơn

Sáng Béo viết 22:18 ngày 30/09/2018

Tạo biến check ra public Cũng chưa nghĩ ra cách nào tối ưu hơn

không, ý t là vừa check vừa nhập cơ, chứ nếu dùng getch thì nó sẽ chờ mình nhập xong mới check, nếu check thì nó phải check xong mới nhập được.

Ngô Doãn Tuấn viết 22:11 ngày 30/09/2018

Biến check được tạo cùng với hàm start.
Khi đó kiểm tra xong rồi. Nếu đúng thì không cho getch nữa. Còn không thì getch nó

Sáng Béo viết 22:15 ngày 30/09/2018

Biến check được tạo cùng với hàm start.Khi đó kiểm tra xong rồi. Nếu đúng thì không cho getch nữa. Còn không thì getch nó

thế tức là start phát thì đếm luôn đến 10 và báo ÈÈÈÈÈÈ…

Ngô Doãn Tuấn viết 22:26 ngày 30/09/2018


Hẳn là như vậy rồi.

Bài liên quan
0