プログラミング入門I 実習課題 2023.12.25

Back to text page


解答例は後日アップしますので,それまでお待ちください.

  1. abs 関数
  2. abs 関数の動作を確認してみましょう.-10 から 10 の範囲の乱数を 5 個発生させ,その値と絶対値を表示するプログラムを作成しましょう.

     -7 ->  7
    -10 -> 10
      1 ->  1
     -7 ->  7
      7 ->  7
    

    解答例

  3. 進数表現
  4. 3桁の正の整数を乱数により1つ発生させ,それを hex 関数や oct 関数を用いて16進数や8進数での表示を行うプログラムを作成しましょう.

    Decimal: 642
    Hexdecimal: 0x282
    Octal: 0o1202
    

    解答例

  5. 前問に教科書 p.126(旧版では p.124)から説明のある2進数表現を加えて以下のように表示するものに変えましょう.
  6. Decimal: 871
    Hexdecimal: 0x367
    Octal: 0o1547
    Binary:  1101100111
    

    解答例

  7. 0 埋め
  8. 前問をまた少し変えて,0から255までの整数を1つ乱数により発生させ,8桁の2進数で 0 で埋める処理をして表示するプログラムを作成しましょう.

    Decimal: 89
    Binary: 01011001
    

    解答例

  9. ビット演算の準備
  10. 以下のように2進数の各桁の数(0もしくは1)を準備して0から255までの整数を作るプログラムを作成しましょう.8桁の2進数の各桁が0か1かを乱数により作ります.反復処理を利用して作りますが,下の実行例にある最初の行がその発生させた0と1の並びで,2行目が10進数に直したもの,3行目が2進数にしたものですが,反復処理で数を作るために逆順になっています.反復処理で作る定義式は以下の式で,変数 a から h が0か1です.

    1 1 1 1 0 1 0 0 
    Decimal: 47
    Binary: 00101111
    

    解答例

  11. ファイルのパーミッション
  12. Unix ファイルシステムは多くの Web サーバで使用されていますが,そこで閲覧可能かどうかを決める属性(パーミッション)は以下のようなビットで構成されています.

    ディレクトリかどうか所有者の権限グループの権限一般ユーザの権限
    記号dwrxwrxwrx
    例(ファイル)0110100100
    例(ディレクトリ)1111101101
    w: writable, 1は書き込み可能
    r: readable, 1は読み取り可能
    x: executable, 1は実行可能

    ディレクトリの部分を除いた9つのフラグを3つのグループ内でそれぞれ考えることとし,それらを2進数とすると,ファイルの例は8進数に変換すると644となり,ディレクトリの例は755です.

    そこで Unix 系のターミナルではパーミッションを変更するコマンド chmod を使用して,外部に公開するHTMLファイルであれば,

    $ chmod 644 hoge.html

    のように属性を変更し,また,ディレクトリ内にあるファイルを外部に公開するときには,

    $ chmod 755 hege

    などとします.

    では,公開準備中であったパーミッション 640 のファイルのパーミッションを 644 に変更するコマンドが実行されたとすると,そのように動作するプログラムの作成にビット演算を使って挑戦してみましょう.

    Before chmod: 640 -- 110100000
    After chmod:  644 -- 110100100
    

    論理和を使用してビットをセットできます.

    解答例

    当初想定していた2進数の方の3桁ごとにスペースを入れるプログラムはこちらから参照できます.処理が複雑になるので,授業中に変更しました.
  13. 任意のビット操作
  14. 8つのビットそれぞれをランダムに1か0にした乱数(0から255までの10進数)を発生させます.2進数表現で1が何個あるかを数えるプログラムを if 文などの条件分岐を使用しないで作成しましょう.

    101 -- 01100101
    Number of 1: 4
    

    論理積とシフト演算子を使います.

    解答例


Back to text page