Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Có cách nào để lập trình một đồng hồ số trên nền Dos không??

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    50

    Red face Có cách nào để lập trình một đồng hồ số trên nền Dos không??

    Mình đã thử dùng hàm time(0) để lập trình nhưng thất bại, hình như hàm time(0) được tính từ 0h00 ngày 1/1/1970 thì phải, bạn nào làm được post lên cho mình học hỏi

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi chanphat01001 Xem bài viết
    Mình đã thử dùng hàm time(0) để lập trình nhưng thất bại, hình như hàm time(0) được tính từ 0h00 ngày 1/1/1970 thì phải, bạn nào làm được post lên cho mình học hỏi
    Bạn nói rõ hơn được không?
    1.Vẽ hình đồng hồ, rồi cho chạy đúng với system time ?
    2.nếu 1 thì có hai kiểu đồng hồ
    a.đồng hồ số
    b.đồng hồ kim
    Nếu đúng như vậy thì chúng ta có thể bàn luận, hoặc bạn post code lên và bàn luận trên code đó!
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Cái này nếu cậu nhúng thêm asm để lấy xung lock của nó thì hay hơn. Hoặc lấy thời gian bios thì tốt hơn là dùng hàm gettime().

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Có cái code này, về chỉnh sửa chút là có được một đồng hồ đẹp đó.

    Code:
    /*
    * CLOCK By VISHNU
    * Copyright(c) 2006, Vishnu
    * India
    * This code is free to use, if and only if you know the theory behind the code (The Clock Dial).
    * Else, this copyright notice is intented to be here.
    * Mail me: hvishnu999@gmail.com
    * ( Message for Keralites: Ella malayalikalkkum ente shubha dinashamsakal )
    */
    #include <graphics.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    #include<math.h>
    #include<dos.h>
    #include<string.h>
    #include<iostream.h>
    
    //
    #define S_N_L (radius-10)		// Second Needle Length
    #define S_N_C RED           		// Second needle Color
    #define M_N_L (radius-20)   		// Minute Needle Length
    #define M_N_C LIGHTRED      		// Minute Needle Color
    #define H_N_L (radius-(radius/2))   	// Hour Needle Length
    #define H_N_C CYAN      	       	// Hour Needle Color
    //
    
    float cx,cy;
    float radius=100;
    
    void draw_face(float radius);
    void get_time(int &h,int &m,int &s);
    void second_needle(int s);
    void minute_needle(int m,int s);
    void hour_needle(int h,int m,int s);
    
    void main(void)
    {
       /* request auto detection */
       int gdriver = DETECT, gmode, errorcode;
       initgraph(&gdriver,&gmode,"");
       /***********************************/
       cx=getmaxx()/2.0; // cx is center x value.
       cy=getmaxy()/2.0; // cy is center y value.
       /** Now the point (cx,cy) is the center of your screen. **/
    
       float x,y;
       int hour,minute,second;
       draw_face(radius);
       while(!kbhit())
       {
       get_time(hour,minute,second);
       second_needle(second);
       minute_needle(minute,second);
       hour_needle(hour,minute,second);
    	circle(cx,cy,2);
    	delay(100);
       }
    
    
       getch();
       closegraph();
    
    }
    //*************** FUNCTIONS DEFINITIONS *****************//
    
    void draw_face(float radius)
    {
    
    	int theta=0; // theta is the angle variable.
    	float x,y;
    	/** Draw Clock Border. **/
    		circle(cx,cy,radius+24);
    		circle(cx,cy,radius+23);
    	/** Draw GREEN material border. **/
    	setcolor(BROWN);	// I like a wooden frame!
    	/** Paint the border. **/
    	for(int i=0;i<9;i++)
    	circle(cx,cy,radius+13+i);
    	/** Set the color white. **/
    		setcolor(WHITE);
    	/** Draw outer-inner border. **/
    		circle(cx,cy,radius+12);
    		circle(cx,cy,radius+10);
    	/** Draw center dot. **/
    		circle(cx,cy,2);
    i=0;
    /** DRAW NUMERIC POINTS **/
         do{
         /** Getting (x,y) for numeric points **/
         x=cx+radius*cos(theta*M_PI/180);
         y=cy+radius*sin(theta*M_PI/180);
    		/** Draw Numeric Points **/
    		circle(x,y,2);
    		/* Draw Dots around each numeric points **/
    		circle(x+5,y,0);
    		circle(x-5,y,0);
    		circle(x,y+5,0);
    		circle(x,y-5,0);
    		/** Increase angle by 30 degrees, which is the circular distance between each numeric points. **/
    		theta+=30;
    		/** Increase i by 1. **/
    		i++;
    
    	} while(i!=12); //LIMIT NUMERIC POINTS UPTO =12= Numbers.
    i=0;
    /** DRAW DOTS BETWEEN NUMERIC POINTS. **/
    	do{
    	  putpixel(cx+radius*cos(i*M_PI/180),cy+radius*sin(i*M_PI/180),DARKGRAY);
    	  i+=6;
    	}while(i!=360);
    
    /** FACE COMPLETELY DRAWN. **/
    }
    //================
    /** Function to get the current time. **/
    void get_time(int &h,int &m,int &s)
    {
     struct time t;
     gettime(&t);
     h=t.ti_hour;
     m=t.ti_min;
     s=t.ti_sec;
    }
    //=================
    /** Function to draw Second needle. **/
    void second_needle(int s)
    {
    
    	float angle=-90;
    	float sx,sy;
    		setcolor(0);
    	sx=cx+S_N_L*cos((angle+s*6-6)*M_PI/180);
    	sy=cy+S_N_L*sin((angle+s*6-6)*M_PI/180);
    	line(cx,cy,sx,sy);
    		setcolor(S_N_C);
    	sx=cx+S_N_L*cos((angle+s*6)*M_PI/180);
    	sy=cy+S_N_L*sin((angle+s*6)*M_PI/180);
    	line(cx,cy,sx,sy);
    }
    /** Function to draw Minute needle. **/
    void minute_needle(int m,int s)
    {
    	float angle=-90;
    	float sx,sy;
    		setcolor(0);
    	sx=cx+M_N_L*cos((angle+m*6-6)*M_PI/180);
    	sy=cy+M_N_L*sin((angle+m*6-6)*M_PI/180);
    	line(cx,cy,sx,sy);
    		setcolor(M_N_C);
    	sx=cx+M_N_L*cos((angle+m*6/*+(s*6/60)*/)*M_PI/180);
    	sy=cy+M_N_L*sin((angle+m*6/*+(s*6/60)*/)*M_PI/180);
    	line(cx,cy,sx,sy);
    }
    /** Function to draw Hour needle. **/
    void hour_needle(int h,int m,int s)
    {
    	float angle=-90;
    	float sx,sy;
    		setcolor(0);
    	sx=cx+H_N_L*cos((angle+h*30-(m*30/60))*M_PI/180);
    	sy=cy+H_N_L*sin((angle+h*30-(m*30/60))*M_PI/180);
    	line(cx,cy,sx,sy);
    		setcolor(H_N_C);
    	sx=cx+H_N_L*cos((angle+h*30+(m*30/60))*M_PI/180);
    	sy=cy+H_N_L*sin((angle+h*30+(m*30/60))*M_PI/180);
    	line(cx,cy,sx,sy);
    }
    /*
    Hey programmer! Did you see the Da Vinci Code ?
    5468652053656372657420626568696E64206576657279206372656174696F6E206973202E2E2E20536F6D65207468696E67207370656369616C2E2E2E
    */
    Đây là nguyên cái code đó, đừng hỏi thêm nhé!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Lập trình Socket trên C++ có thể giao tiếp chương trình Java trên Server được ko các
    Gửi bởi jacobkruse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:10 PM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn