2010年05月05日

【コンピュータ】バグの語源

プログラムを開発していると必ずつきものの【バグ】。
これの語源について、今日調べてみました。

バグ=bug(虫)[英]

訳すと【虫】ですが、語源にも虫は大きくかかわってきます。

コンピュータの部品に真空管が使われていた時代のこと。
「虫(bug)」が原因でコンピュータが停止してしまうことがありました。
そして、真空管から虫を取る作業を「除バグ(de-bug)」したと言ったそうです。

そのことから、
「バグ(bug)=コンピュータの不具合」
「デバッグ(de-bug)=コンピュータの不具合を修正すること」
と呼ばれるようになったらしいです。

普段何気に使っている言葉でも、語源を調べると面白いですね。

もっと詳しいことはこちら→[バグ - Wikipedia]

posted by 桜月 at 20:44| Comment(0) | TrackBack(0) | [知識]DOG EAR | このブログの読者になる | 更新情報をチェックする

2009年12月10日

【C言語】文字列比較関数(memcmp)の実験

 文字列比較関数(memcmp)の実験

 確認ポイント
  比較バイト数0の場合に結果はどうなるのか?
  判定1:正しい記述
  判定2:記述間違いによって、結果が一致かどうかではなく、
      比較文字サイズが0かどうかの判定後に比較を行った場合
  判定3:比較バイト数に0を設定した場合

 【関数の説明】
 memcmp … 文字列を指定バイト数比較する。
 memcmp( a1, a2, n ) ;
 戻り値 : 
 a1 > a2 → 負の値
 a1 = a2 → 0
 a1 < a2 → 正の値 
                 
 ※比較バイト数nが0の場合、NULLが戻ってくる。


(以下処理:ブログに表示するように全角を使用している箇所あり)

#include <stdio.h>
#include <string.h>

void main(){

  printf("処理開始\n\n");

  char   work1[10];    /* 比較1    */
  char   work2[10];    /* 比較2    */

  /* 配列の初期化  */
  memset( work1, 0x00, sizeof( work1 ) ) ;
  memset( work2, 0x00, sizeof( work2 ) ) ;

  /* 配列に値を設定  */
  strcpy( work1 ,  "abc" ) ;
  strcpy( work2 ,  "abc" ) ;
  printf("内容1:%s\n", work1 );
  printf("内容2:%s\n\n", work2 );

  /* 値を比較     */
  printf("判定1の比較バイト数:%d\n", sizeof( work1 ));
  printf("判定2の比較バイト数:%d\n\n", sizeof( work1 ) == 0 );

  printf("memcomp( work1, work2, sizeof( work1 ) ):" );
  printf("%d\n\n", memcmp( work1, work2, sizeof(work1) ));

  printf("判定1:%d", memcmp( work1, work2, sizeof(work1))==0 );
  if( memcmp( work1, work2, sizeof( work1 )  ) == 0  ){
    printf(":同一\n");
  } else { 
    printf(":不一致\n");
  }

  printf("判定2:%d", memcmp( work1, work2, sizeof(work1)==0) );
  if( memcmp( work1, work2, sizeof( work1 ) == 0 ) ){
    printf(":同一\n");
  } else { 
    printf(":不一致\n");
  }

  printf("判定3:%d", memcmp( work1, work2, 0 ) );
  if( memcmp( work1, work2 ,  0 ) ){
    printf(":同一\n");
  } else { 
    printf(":不一致\n");
  }

  printf("\n処理終了\n");

}

実行結果
タグ:C言語
posted by 桜月 at 18:48| Comment(0) | TrackBack(0) | [知識]DOG EAR | このブログの読者になる | 更新情報をチェックする

2009年12月04日

【C言語】数値入力チェック

一昨日昨日の処理を使って下記の処理を作成。
というよりこれをやりたくて前準備をしていました。


入力された値が数値かどうかを判定
数値の場合:小数点第3位まで値を出力
数値以外の場合:エラーメッセージを出力

【関数の説明】
gets … 標準入力(キーボード)から1行入力。
入力は改行コード(Enter)で終了する。


(以下処理:ブログに表示するように全角を使用している箇所あり)


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

void main(){

   printf("処理開始\n\n");

   char  work[10];     /* 配列      */
   char  *chPoint ;    /* charのポインタ */
   int   nChkFlg ;    /* 処理判定フラグ */
   double dNum  ;    /* 結果格納    */

   /* 初期化     */
   memset( work, 0x00, sizeof( work ) ) ;
   nChkFlg = 0 ;
   dNum  = 0 ;

   /* 配列に値を設定 */
   while( strlen( work ) == 0 ) {
     if( nChkFlg > 0 )  printf("値が入力されていません。\n") ;
     printf("入力してください。(9桁):");
     gets( work ) ;
     nChkFlg = 1 ;
   }

   /* 入力文字数チェック        */
   if( strlen ( work ) > sizeof( work ) - 1 ) {
     printf("入力した値が9桁を超えています。\n\n" ) ;
     nChkFlg = -1 ;
   }

   /* 配列の値数分ループを繰り返す   */
   for( chPoint = work ; nChkFlg >= 0 && *chPoint != 0x00 ; *chPoint++ ){
     if ( chPoint[ 0 ] != '.' && chPoint[ 0 ] != '+' && chPoint[ 0 ] != '-' ) {
       if( isdigit( *chPoint ) == 0 ) {
         nChkFlg = -1 ;
         printf("入力された%sは数値ではありません。\n\n", work ) ;
       }
     }
   }

   /* 処理判定を確認  */
   if ( nChkFlg >= 0 ) {
     dNum = atof( work ) ;
     printf("%.3fは処理できます。\n\n", dNum ) ;
   }

   printf("処理終了\n");

}

実行結果
タグ:C言語
posted by 桜月 at 13:17| Comment(0) | TrackBack(0) | [知識]DOG EAR | このブログの読者になる | 更新情報をチェックする

2009年12月03日

【C言語】型変換関数(atof)の実験

型変換関数(atof)の実験。

確認ポイント
@通常 … 小数点以下を含む文字列の型変換
A小数部のみ … 「.」から始まる文字列の型変換
B整数部のみ … 「.」で終わる文字列の型変換
Cピリオドのみ … 「.」の型変換


【関数の説明】
atof … 文字列を浮動小数点型に型変換する。

(以下処理:ブログに表示するように全角を使用している箇所あり)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(){

   printf("処理開始\n\n");

   double  dNum  ;     /* 結果格納     */
   char   work[10];      /* 配列       */

   /* 初期化  */
   dNum  = 0;
   memset( work, 0x00, sizeof( work ) ) ;

   /* 配列に値を設定  */
   strcpy( work ,  "123.5" ) ;
   printf("work=%s\n", work );

   /* 文字列を浮動小数点型に型変換  */
   dNum = atof(work) ;
   printf("結果@:%3.2f\n\n", dNum );

   memset( work, 0x00, sizeof( work ) ) ;
   strcpy( work ,  ".123" ) ;
   printf("work=%s\n", work );

   dNum = atof(work) ;
   printf("結果A:%3.2f\n\n", dNum );

   memset( work, 0x00, sizeof( work ) ) ;
   strcpy( work ,  "123." ) ;
   printf("work=%s\n", work );

   dNum = atof(work) ;
   printf("結果B:%3.2f\n\n", dNum );

   memset( work, 0x00, sizeof( work ) ) ;
   strcpy( work ,  "." ) ;
   printf("work=%s\n", work );

   dNum = atof(work) ;
   printf("結果C:%3.2f\n\n", dNum );


   printf("処理終了\n");

}

実行結果
タグ:C言語
posted by 桜月 at 13:03| Comment(0) | [知識]DOG EAR | このブログの読者になる | 更新情報をチェックする

2009年12月02日

【C言語】配列とポインタを使った処理

配列のアドレスをポインタで移動させながら値をチェックする処理

@char配列に値を設定する。
Acharのポインタに配列のアドレスを渡す。
B配列に設定された値を1文字ずつ数値かどうかをチェックする。
Cもし数値でない場合、エラーを出力する。
DB〜Cの処理を、配列に設定された値分繰り返す。

【関数の説明】
isdigit … 10進数値かどうかを判定
 数値の場合、戻り値は0以外の値(真)
 数値でない場合、戻り値は0

(以下処理:ブログに表示するように全角を使用している箇所あり)

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void main(){

  printf("処理開始\n\n");

  char work[10];    /* 配列     */
  char *chPoint ;    /* charのポインタ */

  /* 配列の初期化  */
  memset( work, 0x00, sizeof( work ) ) ;

  /* 配列に値を設定  */
  strcpy( work ,  "12a3" ) ;
  printf("*work=%x  work=%s\n\n", *work, work );

  /* 配列の値数分ループを繰り返す  */
  for( chPoint = work ; *chPoint != 0x00 ; *chPoint++ ){
    printf("*chPoint=%x  chPoint[0]=%c chPoint=%s\n",
             *chPoint,  chPoint[0], chPoint ) ;

    if( isdigit( *chPoint ) == 0 ) {
       printf("%cは数値ではありません\n", chPoint[0] ) ;
    }
  }

  printf("\n処理終了\n");

}

 実行結果
タグ:C言語
posted by 桜月 at 19:41| Comment(1) | [知識]DOG EAR | このブログの読者になる | 更新情報をチェックする