Lecture 6 データ型

Assingment 6(第6回の宿題)

以下の問それぞれに対応するプログラムを作成し,課題提出の手順に則ってOh-o! Meijiの対応するレポート提出場所に提出しなさい.


    1. QUIZ1,2,3 を参考にして,入力した文字が大文字であれば小文字に変換し, 小文字であれば大文字に変換するプログラム作成しなさい. また入力は半角文字のみとする. キー入力と表示以外は組み込み型の関数は使わずに実現して下さい. プログラム名を学籍番号10桁-06-1.cppとする.
      文字を入力して下さい: M
      m
      文字を入力して下さい: e
      E
      文字を入力して下さい: i
      I
      文字を入力して下さい: j
      J
      文字を入力して下さい: I
      i
      

      コード例 A6-1.cpp



    2. QUIZ4を参考にして,一桁の自然数(数値)を引数にとり,文字(数字)を返す関数 toascii() を作れ. 但し変換にprintfなどを用いてはならない. プログラム名を学籍番号10桁-06-2.cppとする.
      char toascii(int number)
      {
          // write your code down here.
      }
      
      int main(void)
      {
          for(int i=0; i<10; i++){
              char c = toascii(i);
              printf("%c",c);
          }
          printf("¥n");
      }
      

      コード例 A6-2.cpp



    3. unsigned short int型(16bit整数)の変数を引数として受け取り, 2進数を印字する関数
      void print_short2binary(unsigned short);
      を作成せよ.様々な値をテストするテスト用main()も作れ. テスト用を行うときの文字定義(コンパイルスイッチ)は"TEST"とせよ. プログラム名を学籍番号10桁-06-3.cppとする.

      【ヒント:以下のプログラムの足らない部分を埋めなさい】
      //  年組番号 氏名
      //  print_short2binary.cpp
      #include <stdio.h>
      
      void print_short2binary(unsigned short si)
      {
          for(int i=....
              printf("%d", ....);
      
              if(!(i%4))  // 見やすくするために4桁毎にスペースを入れる  
                  printf(" ");
          }
          printf("\n");
      }
      
      #if defined(TEST)
      int main(void)
      {
          print_short2binary(0x1234);
          print_short2binary(0x1248);
          print_short2binary(0x8421);
          print_short2binary(0xAAAA);
          print_short2binary(0x5555);
      }
      #endif
      

      【実行例】
      0001 0010 0011 0100 
      0001 0010 0100 1000 
      1000 0100 0010 0001 
      1010 1010 1010 1010 
      0101 0101 0101 0101 
      

      コード例 A6-3.cpp



    4. unsigned short int型の変数に256以上の値を入力したとき,下位8ビットはどんな数値になるかを 調べるため,次のようなプログラムを作りたい. 下位8ビットの部分を返す関数 unsigned char LSB8(unsigned short) をつくり, 2進数のビットパターン,16進,10進の3通りで表わす. この関数をチェックするテスト用main関数も同時に作れ. プログラム名を学籍番号10桁-06-4.cppとする.

      【ヒント:以下のコードの穴埋めをせよ】
      // 年組番号 氏名
      // lsb8.cpp
      #include "print_short2binary.h"
      unsigned char lsb8(unsigned short us) 
      {
          ....
          return uc; 
      }
      
      #if defined(TEST)
      #include <stdio.h>
      int main(void)
      {
          for(int i=0; i<8; i++){
              unsigned short x = 252 + i;
              printf("%d : %04X : ", x, x); 
              print_char2binary( lsb8(x) );
          }   
      }
      #endif
      
      【プログラムのビルド時のヒント】
      上記のコードは,"print_short2binary.cpp"の中に8bitのビットパターンを 描く関数,print_char2binary(unsigned char)をつくり,ライブラリとして利用しています. これをするには次のようにします.
        1. ヘッダファイル"print_short2binary.h"を作成する.
        2. ライブラリのコンパイルをする
          bcc32 -c print_short2binary.cpp
        3. ビルドする(ライブラリと結合する)
          bcc32 -DTEST lsb8.cpp print_short2binary.obj

      【実行例】
      252 : 00FC : 1111 1100 
      253 : 00FD : 1111 1101 
      254 : 00FE : 1111 1110 
      255 : 00FF : 1111 1111 
      256 : 0100 : 0000 0000 
      257 : 0101 : 0000 0001 
      258 : 0102 : 0000 0010 
      259 : 0103 : 0000 0011 
      

      コード例 A6-4.cpp



    5. 上記のunsigned short型の変数のうち,上位8ビットはどんな数値になるかを調べたい. 上位8ビットの部分を返す関数 unsigned char MSB8(unsigned short) をつくり, 2進数のビットパターン,16進,10進の3通りで表わせ. テスト用main関数は上記と同様で良いが,関数のテストが正しく行える必要はある. プログラム名を学籍番号10桁-06-5.cppとする.

    6. 【ヒント:以下のコードの穴埋めをして正しいプログラムとせよ】
      // 年組番号 氏名
      // msb8.cpp
      #include "print_short2binary.h"
      
      unsigned char msb8(unsigned short us) 
      {
          ....
          return uc; 
      }
      
      #if defined(TEST)
      #include <stdio.h>
      int main(void)
      {
          for(int i=0; i<8; i++){
              unsigned short x = 0x4321 + i*0x1111;
              printf("%5d : %04X : ", x, x); 
              print_char2binary( msb8(x) );
          }   
      }
      #endif
      

      【実行例】
      17185 : 4321 : 0100 0011 
      21554 : 5432 : 0101 0100 
      25923 : 6543 : 0110 0101 
      30292 : 7654 : 0111 0110 
      34661 : 8765 : 1000 0111 
      39030 : 9876 : 1001 1000 
      43399 : A987 : 1010 1001 
      47768 : BA98 : 1011 1010 
      

      コード例 A6-5.cpp