1989年開業 技術士 佐伯英子(情報工学部門) 文部科学省登録番号 第22082号 日本技術士会会員 東大阪商工会議所会員

≫サンプルプログラム一覧 

オープンソース/C言語サンプルプログラム 画面時計(アスキーアート)

※一部再改良しました(2015.11.11)CPU負荷軽減 ※一部改良しました(2015.10.19)

●画面に現在の時刻を、大きな文字(8x8のアスキーアート)で表示
 するプログラムです。
●システムの時刻を取得し、時刻が変わったら文字列に変換し画面に
 表示します。
●1文字ずつ、アスキーアートのパターンを2次元配列に格納します。
●2次元配列にパターンを格納する機能は、それぞれ関数にします。
●時:分:秒の8文字を格納したら、2次元配列を表示します。
 ≫ソースファイルのダウンロード: tokei10.c
【問題】
●このプログラムで、関数 SetC( ) の実引数 k が
 実際に取る値は何と何か。
●同様に、他の関数 Set0( )〜Set9( ) の実引数 k
 が実際に取る値について考察しなさい。
●main関数の変数 i, j, k はそれぞれ何のカウンタ
 か説明しなさい。
/********************************/
/*  画面時計(アスキーアート)  */
/********************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <windows.h>



/****************************/
/*  画面時計(大きい文字)  */
/****************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#include <windows.h>

char  buf[8][64];                              // 画面表示用 8x64文字

void  Disp0(int);                              // 0 を設定
void  Disp1(int);                              // 1 を設定
void  Disp2(int);                              // 2 を設定
void  Disp3(int);                              // 3 を設定
void  Disp4(int);                              // 4 を設定
void  Disp5(int);                              // 5 を設定
void  Disp6(int);                              // 6 を設定
void  Disp7(int);                              // 7 を設定
void  Disp8(int);                              // 8 を設定
void  Disp9(int);                              // 9 を設定
void  DispC(int);                              // : を設定

void  main( )
{
    unsigned long  t,tO=0;
    char  c[128];
    int   i,j,k;

    while( 1 )
      {
        t=time(NULL);                          // 現在の時刻(秒)
        if ( t==tO ) continue;                 // 時刻変化なし
        tO=t;

        strcpy(c,ctime(&t));                   // 現在の時刻(文字列)

        for( j=0,k=0; j<8; j++,k+=8 )
          {
            switch( c[11+j] )                  // 時分秒の文字 XX:XX:XX
              {
                case '0': Disp0(k); break;     // 0 を設定
                case '1': Disp1(k); break;     // 1 を設定
                case '2': Disp2(k); break;     // 2 を設定
                case '3': Disp3(k); break;     // 3 を設定
                case '4': Disp4(k); break;     // 4 を設定
                case '5': Disp5(k); break;     // 5 を設定
                case '6': Disp6(k); break;     // 6 を設定
                case '7': Disp7(k); break;     // 7 を設定
                case '8': Disp8(k); break;     // 8 を設定
                case '9': Disp9(k); break;     // 9 を設定
                case ':': DispC(k); break;     // : を設定
              }
          }

        system("cls");                         // 画面消去
        for( i=0; i<8; i++ )                   // 第0行〜第7行まで
          {
            printf("\n%.64s",&buf[i][0]);      // 横1行64文字表示
          }
        fflush(stdout);                        // 画面出力

        if ( kbhit( )!=0 ) break;              // キーが押された

        Sleep(900);
      }
}


void  Disp0(
/*------------*/
/*  0を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j]," #    # ",8);
    memcpy(&buf[2][j]," #    # ",8);
    memcpy(&buf[3][j]," #    # ",8);
    memcpy(&buf[4][j]," #    # ",8);
    memcpy(&buf[5][j]," #    # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp1(
/*------------*/
/*  1を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j],"      # ",8);
    memcpy(&buf[1][j],"      # ",8);
    memcpy(&buf[2][j],"      # ",8);
    memcpy(&buf[3][j],"      # ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j],"      # ",8);
}


void  Disp2(
/*------------*/
/*  2を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j],"      # ",8);
    memcpy(&buf[2][j],"      # ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j]," #      ",8);
    memcpy(&buf[5][j]," #      ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp3(
/*------------*/
/*  3を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j],"      # ",8);
    memcpy(&buf[2][j],"      # ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp4(
/*------------*/
/*  4を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," #    # ",8);
    memcpy(&buf[1][j]," #    # ",8);
    memcpy(&buf[2][j]," #    # ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j],"      # ",8);
}


void  Disp5(
/*------------*/
/*  5を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j]," #      ",8);
    memcpy(&buf[2][j]," #      ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp6(
/*------------*/
/*  6を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j]," #      ",8);
    memcpy(&buf[2][j]," #      ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j]," #    # ",8);
    memcpy(&buf[5][j]," #    # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp7(
/*------------*/
/*  7を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j],"      # ",8);
    memcpy(&buf[2][j],"      # ",8);
    memcpy(&buf[3][j],"      # ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j],"      # ",8);
}


void  Disp8(
/*------------*/
/*  8を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j]," #    # ",8);
    memcpy(&buf[2][j]," #    # ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j]," #    # ",8);
    memcpy(&buf[5][j]," #    # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  Disp9(
/*------------*/
/*  9を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j]," ###### ",8);
    memcpy(&buf[1][j]," #    # ",8);
    memcpy(&buf[2][j]," #    # ",8);
    memcpy(&buf[3][j]," ###### ",8);
    memcpy(&buf[4][j],"      # ",8);
    memcpy(&buf[5][j],"      # ",8);
    memcpy(&buf[6][j]," ###### ",8);
}


void  DispC(
/*------------*/
/*  :を設定  */
/*------------*/
int   j)
{
    memcpy(&buf[0][j],"         ",8);
    memcpy(&buf[1][j],"         ",8);
    memcpy(&buf[2][j],"    #    ",8);
    memcpy(&buf[3][j],"         ",8);
    memcpy(&buf[4][j],"    #    ",8);
    memcpy(&buf[5][j],"         ",8);
    memcpy(&buf[6][j],"         ",8);
}
   

※SSL暗号化通信対応

佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601  E-mail: info@saeki-pe.com